From e0c5cb1cd2b4487fb70c60e06f90a4bfaa089711 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 13:36:43 -0700 Subject: [PATCH 01/30] contracts-bedrock: modularize deposit resource config --- .../contracts/L1/OptimismPortal.sol | 39 ++++++- .../contracts/L1/ResourceMetering.sol | 70 ++++-------- .../contracts/L1/SystemConfig.sol | 64 +++++++++-- .../contracts/deployment/SystemDictator.sol | 15 ++- .../contracts/echidna/FuzzOptimismPortal.sol | 13 ++- .../echidna/FuzzResourceMetering.sol | 38 +++++-- .../contracts/test/BenchmarkTest.t.sol | 22 +--- .../contracts/test/CommonTest.t.sol | 19 +++- .../contracts/test/OptimismPortal.t.sol | 11 +- .../contracts/test/ResourceMetering.t.sol | 101 ++++++++++-------- 10 files changed, 249 insertions(+), 143 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index fe9521e0035f..ec66cdacb7be 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.15; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { SafeCall } from "../libraries/SafeCall.sol"; import { L2OutputOracle } from "./L2OutputOracle.sol"; +import { SystemConfig } from "./SystemConfig.sol"; import { Constants } from "../libraries/Constants.sol"; import { Types } from "../libraries/Types.sol"; import { Hashing } from "../libraries/Hashing.sol"; @@ -48,6 +49,11 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { */ L2OutputOracle public immutable L2_ORACLE; + /** + * + */ + SystemConfig public immutable SYSTEM_CONFIG; + /** * @notice Address that has the ability to pause and unpause withdrawals. */ @@ -135,19 +141,22 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { } /** - * @custom:semver 1.2.0 + * @custom:semver 1.3.0 * * @param _l2Oracle Address of the L2OutputOracle contract. * @param _guardian Address that can pause deposits and withdrawals. * @param _paused Sets the contract's pausability state. + * @param _config Address of the SystemConfig contract. */ constructor( L2OutputOracle _l2Oracle, address _guardian, - bool _paused - ) Semver(1, 2, 0) { + bool _paused, + SystemConfig _config + ) Semver(1, 3, 0) { L2_ORACLE = _l2Oracle; GUARDIAN = _guardian; + SYSTEM_CONFIG = _config; initialize(_paused); } @@ -197,6 +206,30 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { // Intentionally empty. } + // TODO: I don't like having so many return args but I also don't like + // wrapping them into a struct + function resourceConfig() public view override returns (SystemConfig.ResourceConfig memory) { + ( + uint32 maxResourceLimit, + uint8 elasticityMultiplier, + uint8 baseFeeMaxChangeDenominator, + uint32 minimumBaseFee, + uint32 systemTxMaxGas, + uint128 maximumBaseFee + ) = SYSTEM_CONFIG.resourceConfig(); + + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: maxResourceLimit, + elasticityMultiplier: elasticityMultiplier, + baseFeeMaxChangeDenominator: baseFeeMaxChangeDenominator, + minimumBaseFee: minimumBaseFee, + systemTxMaxGas: systemTxMaxGas, + maximumBaseFee: maximumBaseFee + }); + + return config; + } + /** * @notice Proves a withdrawal transaction. * diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index b2322f2ea73b..9740082b8e26 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -5,6 +5,7 @@ import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { Burn } from "../libraries/Burn.sol"; import { Arithmetic } from "../libraries/Arithmetic.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; /** * @custom:upgradeable @@ -27,46 +28,6 @@ abstract contract ResourceMetering is Initializable { uint64 prevBlockNum; } - /** - * @notice Maximum amount of the resource that can be used within this block. - * This value cannot be larger than the L2 block gas limit. - */ - int256 public constant MAX_RESOURCE_LIMIT = 20_000_000; - - /** - * @notice Along with the resource limit, determines the target resource limit. - */ - int256 public constant ELASTICITY_MULTIPLIER = 10; - - /** - * @notice Target amount of the resource that should be used within this block. - */ - int256 public constant TARGET_RESOURCE_LIMIT = MAX_RESOURCE_LIMIT / ELASTICITY_MULTIPLIER; - - /** - * @notice Denominator that determines max change on fee per block. - */ - int256 public constant BASE_FEE_MAX_CHANGE_DENOMINATOR = 8; - - /** - * @notice Minimum base fee value, cannot go lower than this. - */ - int256 public constant MINIMUM_BASE_FEE = 1 gwei; - - /** - * @notice Maximum base fee value, cannot go higher than this. - * It is possible for the MAXIMUM_BASE_FEE to raise to a value - * that is so large it will consume the entire gas limit of - * an L1 block. - */ - int256 public constant MAXIMUM_BASE_FEE = int256(uint256(type(uint128).max)); - - /** - * @notice Initial base fee value. This value must be smaller than the - * MAXIMUM_BASE_FEE. - */ - uint128 public constant INITIAL_BASE_FEE = 1 gwei; - /** * @notice EIP-1559 style gas parameters. */ @@ -102,20 +63,24 @@ abstract contract ResourceMetering is Initializable { function _metered(uint64 _amount, uint256 _initialGas) internal { // Update block number and base fee if necessary. uint256 blockDiff = block.number - params.prevBlockNum; + + SystemConfig.ResourceConfig memory config = resourceConfig(); + int256 targetResourceLimit = int256(uint256(config.maxResourceLimit)) / int256(uint256(config.elasticityMultiplier)); + if (blockDiff > 0) { // Handle updating EIP-1559 style gas parameters. We use EIP-1559 to restrict the rate // at which deposits can be created and therefore limit the potential for deposits to // spam the L2 system. Fee scheme is very similar to EIP-1559 with minor changes. - int256 gasUsedDelta = int256(uint256(params.prevBoughtGas)) - TARGET_RESOURCE_LIMIT; + int256 gasUsedDelta = int256(uint256(params.prevBoughtGas)) - targetResourceLimit; int256 baseFeeDelta = (int256(uint256(params.prevBaseFee)) * gasUsedDelta) / - (TARGET_RESOURCE_LIMIT * BASE_FEE_MAX_CHANGE_DENOMINATOR); + (targetResourceLimit * int256(uint256(config.baseFeeMaxChangeDenominator))); // Update base fee by adding the base fee delta and clamp the resulting value between // min and max. int256 newBaseFee = Arithmetic.clamp({ _value: int256(uint256(params.prevBaseFee)) + baseFeeDelta, - _min: MINIMUM_BASE_FEE, - _max: MAXIMUM_BASE_FEE + _min: int256(uint256(config.minimumBaseFee)), + _max: int256(uint256(config.maximumBaseFee)) }); // If we skipped more than one block, we also need to account for every empty block. @@ -128,11 +93,11 @@ abstract contract ResourceMetering is Initializable { newBaseFee = Arithmetic.clamp({ _value: Arithmetic.cdexp({ _coefficient: newBaseFee, - _denominator: BASE_FEE_MAX_CHANGE_DENOMINATOR, + _denominator: int256(uint256(config.baseFeeMaxChangeDenominator)), _exponent: int256(blockDiff - 1) }), - _min: MINIMUM_BASE_FEE, - _max: MAXIMUM_BASE_FEE + _min: int256(uint256(config.minimumBaseFee)), + _max: int256(uint256(config.maximumBaseFee)) }); } @@ -145,7 +110,7 @@ abstract contract ResourceMetering is Initializable { // Make sure we can actually buy the resource amount requested by the user. params.prevBoughtGas += _amount; require( - int256(uint256(params.prevBoughtGas)) <= MAX_RESOURCE_LIMIT, + int256(uint256(params.prevBoughtGas)) <= int256(uint256(config.maxResourceLimit)), "ResourceMetering: cannot buy more gas than available gas limit" ); @@ -168,14 +133,21 @@ abstract contract ResourceMetering is Initializable { } } + /** + * @notice + */ + function resourceConfig() public virtual returns (SystemConfig.ResourceConfig memory); + /** * @notice Sets initial resource parameter values. This function must either be called by the * initializer function of an upgradeable child contract. */ // solhint-disable-next-line func-name-mixedcase function __ResourceMetering_init() internal onlyInitializing { + SystemConfig.ResourceConfig memory config = resourceConfig(); + params = ResourceParams({ - prevBaseFee: INITIAL_BASE_FEE, + prevBaseFee: config.minimumBaseFee, prevBoughtGas: 0, prevBlockNum: uint64(block.number) }); diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index dd5399105855..503a5b448e06 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -26,7 +26,20 @@ contract SystemConfig is OwnableUpgradeable, Semver { BATCHER, GAS_CONFIG, GAS_LIMIT, - UNSAFE_BLOCK_SIGNER + UNSAFE_BLOCK_SIGNER, + RESOURCE_CONFIG + } + + /** + * @notice + */ + struct ResourceConfig { + uint32 maxResourceLimit; + uint8 elasticityMultiplier; + uint8 baseFeeMaxChangeDenominator; + uint32 minimumBaseFee; + uint32 systemTxMaxGas; + uint128 maximumBaseFee; } /** @@ -69,6 +82,8 @@ contract SystemConfig is OwnableUpgradeable, Semver { */ uint64 public gasLimit; + ResourceConfig public resourceConfig; + /** * @notice Emitted when configuration is updated * @@ -79,7 +94,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data); /** - * @custom:semver 1.0.1 + * @custom:semver 1.1.0 * * @param _owner Initial owner of the contract. * @param _overhead Initial overhead value. @@ -95,12 +110,22 @@ contract SystemConfig is OwnableUpgradeable, Semver { bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner - ) Semver(1, 0, 1) { - initialize(_owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner); + ) Semver(1, 1, 0) { + ResourceConfig memory config = ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + + initialize(_owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, config); } /** - * @notice Initializer. + * @notice Initializer. The resource config must be set before the + * require check. * * @param _owner Initial owner of the contract. * @param _overhead Initial overhead value. @@ -115,9 +140,9 @@ contract SystemConfig is OwnableUpgradeable, Semver { uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, - address _unsafeBlockSigner + address _unsafeBlockSigner, + ResourceConfig memory _resourceConfig ) public initializer { - require(_gasLimit >= MINIMUM_GAS_LIMIT, "SystemConfig: gas limit too low"); __Ownable_init(); transferOwnership(_owner); overhead = _overhead; @@ -125,6 +150,8 @@ contract SystemConfig is OwnableUpgradeable, Semver { batcherHash = _batcherHash; gasLimit = _gasLimit; _setUnsafeBlockSigner(_unsafeBlockSigner); + _setResourceConfig(_resourceConfig); + require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); } /** @@ -188,7 +215,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @param _gasLimit New gas limit. */ function setGasLimit(uint64 _gasLimit) external onlyOwner { - require(_gasLimit >= MINIMUM_GAS_LIMIT, "SystemConfig: gas limit too low"); + require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); gasLimit = _gasLimit; bytes memory data = abi.encode(_gasLimit); @@ -197,7 +224,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice Low level setter for the unsafe block signer address. This function exists to - * deduplicate code around storing the unsafeBlockSigner address in storage. + * deduplicate code arou,nd storing the unsafeBlockSigner address in storage. * * @param _unsafeBlockSigner New unsafeBlockSigner value. */ @@ -207,4 +234,23 @@ contract SystemConfig is OwnableUpgradeable, Semver { sstore(slot, _unsafeBlockSigner) } } + + function setResourceConfig(ResourceConfig memory _config) external onlyOwner { + _setResourceConfig(_config); + + bytes memory data = abi.encode(_config); + emit ConfigUpdate(VERSION, UpdateType.RESOURCE_CONFIG, data); + } + + function _setResourceConfig(ResourceConfig memory _config) internal { + require(_config.minimumBaseFee <= _config.maximumBaseFee); + require(_config.baseFeeMaxChangeDenominator > 0); + require(_config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit); + + resourceConfig = _config; + } + + function minimumGasLimit() public view returns (uint256) { + return resourceConfig.maxResourceLimit + resourceConfig.systemTxMaxGas; + } } diff --git a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol index f73632c88679..c75911f1f5bb 100644 --- a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol +++ b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol @@ -79,6 +79,7 @@ contract SystemDictator is OwnableUpgradeable { bytes32 batcherHash; uint64 gasLimit; address unsafeBlockSigner; + SystemConfig.ResourceConfig resourceConfig; } /** @@ -160,6 +161,15 @@ contract SystemDictator is OwnableUpgradeable { * initialized upon deployment. */ constructor() { + SystemConfig.ResourceConfig memory rcfg = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + // Using this shorter variable as an alias for address(0) just prevents us from having to // to use a new line for every single parameter. address zero = address(0); @@ -177,7 +187,7 @@ contract SystemDictator is OwnableUpgradeable { PortalSender(zero), SystemConfig(zero) ), - SystemConfigConfig(zero, 0, 0, bytes32(0), 0, zero) + SystemConfigConfig(zero, 0, 0, bytes32(0), 0, zero, rcfg) ) ); } @@ -244,7 +254,8 @@ contract SystemDictator is OwnableUpgradeable { config.systemConfigConfig.scalar, config.systemConfigConfig.batcherHash, config.systemConfigConfig.gasLimit, - config.systemConfigConfig.unsafeBlockSigner + config.systemConfigConfig.unsafeBlockSigner, + config.systemConfigConfig.resourceConfig ) ) ); diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol index 8da8615b1250..c15c94823431 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol @@ -3,16 +3,27 @@ pragma solidity 0.8.15; import { OptimismPortal } from "../L1/OptimismPortal.sol"; import { L2OutputOracle } from "../L1/L2OutputOracle.sol"; import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; contract EchidnaFuzzOptimismPortal { OptimismPortal internal portal; bool internal failedToComplete; constructor() { + SystemConfig config = new SystemConfig({ + _owner: address(0), + _overhead: 0, + _scalar: 10000, + _batcherHash: bytes32(0), + _gasLimit: 30_000_000, + _unsafeBlockSigner: address(0) + }); + portal = new OptimismPortal({ _l2Oracle: L2OutputOracle(address(0)), _guardian: address(0), - _paused: false + _paused: false, + _config: config }); } diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index e46e8571f9dc..26205d89b670 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -1,6 +1,7 @@ pragma solidity 0.8.15; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; import { Arithmetic } from "../libraries/Arithmetic.sol"; import { StdUtils } from "forge-std/Test.sol"; @@ -24,6 +25,18 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { __ResourceMetering_init(); } + function resourceConfig() public pure override returns (SystemConfig.ResourceConfig memory) { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + return config; + } + /** * @notice Takes the necessary parameters to allow us to burn arbitrary amounts of gas to test * the underlying resource metering/gas market logic @@ -34,12 +47,15 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { uint256 cachedPrevBoughtGas = uint256(params.prevBoughtGas); uint256 cachedPrevBlockNum = uint256(params.prevBlockNum); + SystemConfig.ResourceConfig memory rcfg = resourceConfig(); + uint256 targetResourceLimit = uint256(rcfg.maxResourceLimit) / uint256(rcfg.elasticityMultiplier); + // check that the last block's base fee hasn't dropped below the minimum - if (cachedPrevBaseFee < uint256(MINIMUM_BASE_FEE)) { + if (cachedPrevBaseFee < uint256(rcfg.minimumBaseFee)) { failedNeverBelowMinBaseFee = true; } // check that the last block didn't consume more than the max amount of gas - if (cachedPrevBoughtGas > uint256(MAX_RESOURCE_LIMIT)) { + if (cachedPrevBoughtGas > uint256(rcfg.maxResourceLimit)) { failedMaxGasPerBlock = true; } @@ -51,11 +67,11 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { if (_raiseBaseFee) { gasToBurn = bound( _gasToBurn, - uint256(TARGET_RESOURCE_LIMIT), - uint256(MAX_RESOURCE_LIMIT) + uint256(targetResourceLimit), + uint256(rcfg.maxResourceLimit) ); } else { - gasToBurn = bound(_gasToBurn, 0, uint256(TARGET_RESOURCE_LIMIT)); + gasToBurn = bound(_gasToBurn, 0, targetResourceLimit); } _burnInternal(uint64(gasToBurn)); @@ -63,13 +79,13 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { // Part 3: we run checks and modify our invariant flags based on the updated params values // Calculate the maximum allowed baseFee change (per block) - uint256 maxBaseFeeChange = cachedPrevBaseFee / uint256(BASE_FEE_MAX_CHANGE_DENOMINATOR); + uint256 maxBaseFeeChange = cachedPrevBaseFee / uint256(rcfg.baseFeeMaxChangeDenominator); // If the last block used more than the target amount of gas (and there were no // empty blocks in between), ensure this block's baseFee increased, but not by // more than the max amount per block if ( - (cachedPrevBoughtGas > uint256(TARGET_RESOURCE_LIMIT)) && + (cachedPrevBoughtGas > uint256(targetResourceLimit)) && (uint256(params.prevBlockNum) - cachedPrevBlockNum == 1) ) { failedRaiseBaseFee = failedRaiseBaseFee || (params.prevBaseFee <= cachedPrevBaseFee); @@ -81,7 +97,7 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { // If the last block used less than the target amount of gas, (or was empty), // ensure that: this block's baseFee was decreased, but not by more than the max amount if ( - (cachedPrevBoughtGas < uint256(TARGET_RESOURCE_LIMIT)) || + (cachedPrevBoughtGas < uint256(targetResourceLimit)) || (uint256(params.prevBlockNum) - cachedPrevBlockNum > 1) ) { // Invariant: baseFee should decrease @@ -104,11 +120,11 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { Arithmetic.clamp( Arithmetic.cdexp( int256(cachedPrevBaseFee), - BASE_FEE_MAX_CHANGE_DENOMINATOR, + int256(uint256(rcfg.baseFeeMaxChangeDenominator)), int256(uint256(params.prevBlockNum) - cachedPrevBlockNum) ), - MINIMUM_BASE_FEE, - MAXIMUM_BASE_FEE + int256(uint256(rcfg.minimumBaseFee)), + int256(uint256(rcfg.maximumBaseFee)) ) ); } diff --git a/packages/contracts-bedrock/contracts/test/BenchmarkTest.t.sol b/packages/contracts-bedrock/contracts/test/BenchmarkTest.t.sol index 02a0a640ed8e..794f61ddc204 100644 --- a/packages/contracts-bedrock/contracts/test/BenchmarkTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/BenchmarkTest.t.sol @@ -32,8 +32,6 @@ contract SetPrevBaseFee_Test is Portal_Initializer { // In order to achieve this we make no assertions, and handle everything else in the setUp() // function. contract GasBenchMark_OptimismPortal is Portal_Initializer { - uint128 internal INITIAL_BASE_FEE; - // Reusable default values for a test withdrawal Types.WithdrawalTransaction _defaultTx; @@ -86,8 +84,6 @@ contract GasBenchMark_OptimismPortal is Portal_Initializer { 1 ); - INITIAL_BASE_FEE = op.INITIAL_BASE_FEE(); - // Fund the portal so that we can withdraw ETH. vm.deal(address(op), 0xFFFFFFFF); } @@ -103,7 +99,7 @@ contract GasBenchMark_OptimismPortal is Portal_Initializer { } function test_depositTransaction_benchmark_1() external { - setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE); + setPrevBaseFee(vm, address(op), 1 gwei); op.depositTransaction{ value: NON_ZERO_VALUE }( NON_ZERO_ADDRESS, ZERO_VALUE, @@ -124,16 +120,9 @@ contract GasBenchMark_OptimismPortal is Portal_Initializer { } contract GasBenchMark_L1CrossDomainMessenger is Messenger_Initializer { - uint128 internal INITIAL_BASE_FEE; - - function setUp() public virtual override { - super.setUp(); - INITIAL_BASE_FEE = op.INITIAL_BASE_FEE(); - } - function test_sendMessage_benchmark_0() external { vm.pauseGasMetering(); - setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE); + setPrevBaseFee(vm, address(op), 1 gwei); // The amount of data typically sent during a bridge deposit. bytes memory data = hex"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; @@ -153,11 +142,8 @@ contract GasBenchMark_L1CrossDomainMessenger is Messenger_Initializer { } contract GasBenchMark_L1StandardBridge_Deposit is Bridge_Initializer { - uint128 internal INITIAL_BASE_FEE; - function setUp() public virtual override { super.setUp(); - INITIAL_BASE_FEE = op.INITIAL_BASE_FEE(); deal(address(L1Token), alice, 100000, true); vm.startPrank(alice, alice); L1Token.approve(address(L1Bridge), type(uint256).max); @@ -165,7 +151,7 @@ contract GasBenchMark_L1StandardBridge_Deposit is Bridge_Initializer { function test_depositETH_benchmark_0() external { vm.pauseGasMetering(); - setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE); + setPrevBaseFee(vm, address(op), 1 gwei); vm.resumeGasMetering(); L1Bridge.depositETH{ value: 500 }(50000, hex""); } @@ -179,7 +165,7 @@ contract GasBenchMark_L1StandardBridge_Deposit is Bridge_Initializer { function test_depositERC20_benchmark_0() external { vm.pauseGasMetering(); - setPrevBaseFee(vm, address(op), INITIAL_BASE_FEE); + setPrevBaseFee(vm, address(op), 1 gwei); vm.resumeGasMetering(); L1Bridge.bridgeERC20({ _localToken: address(L1Token), diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index 9fe1d55fc268..e8d5411f9be0 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -28,6 +28,7 @@ import { L1ChugSplashProxy } from "../legacy/L1ChugSplashProxy.sol"; import { IL1ChugSplashDeployer } from "../legacy/L1ChugSplashProxy.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { LegacyMintableERC20 } from "../legacy/LegacyMintableERC20.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; contract CommonTest is Test { address alice = address(128); @@ -158,6 +159,7 @@ contract Portal_Initializer is L2OutputOracle_Initializer { // Test target OptimismPortal internal opImpl; OptimismPortal internal op; + SystemConfig systemConfig; event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success); event WithdrawalProven( @@ -169,7 +171,22 @@ contract Portal_Initializer is L2OutputOracle_Initializer { function setUp() public virtual override { super.setUp(); - opImpl = new OptimismPortal({ _l2Oracle: oracle, _guardian: guardian, _paused: true }); + systemConfig = new SystemConfig({ + _owner: address(0), + _overhead: 0, + _scalar: 10000, + _batcherHash: bytes32(0), + _gasLimit: 30_000_000, + _unsafeBlockSigner: address(0) + }); + + opImpl = new OptimismPortal({ + _l2Oracle: oracle, + _guardian: guardian, + _paused: true, + _config: systemConfig + }); + Proxy proxy = new Proxy(multisig); vm.prank(multisig); proxy.upgradeToAndCall( diff --git a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol index 9911580ac8de..7a7e4494ce6a 100644 --- a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol @@ -9,6 +9,7 @@ import { OptimismPortal } from "../L1/OptimismPortal.sol"; import { Types } from "../libraries/Types.sol"; import { Hashing } from "../libraries/Hashing.sol"; import { Proxy } from "../universal/Proxy.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; contract OptimismPortal_Test is Portal_Initializer { event Paused(address); @@ -1045,10 +1046,12 @@ contract OptimismPortalUpgradeable_Test is Portal_Initializer { } function test_params_initValuesOnProxy_succeeds() external { - (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = OptimismPortal( - payable(address(proxy)) - ).params(); - assertEq(prevBaseFee, opImpl.INITIAL_BASE_FEE()); + OptimismPortal p = OptimismPortal(payable(address(proxy))); + + (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = p.params(); + + SystemConfig.ResourceConfig memory rcfg = p.resourceConfig(); + assertEq(prevBaseFee, rcfg.minimumBaseFee); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, initialBlockNum); } diff --git a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol index 23e112ad4283..92675e1670fc 100644 --- a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.15; import { Test } from "forge-std/Test.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { SystemConfig } from "../L1/SystemConfig.sol"; import { Proxy } from "../universal/Proxy.sol"; contract MeterUser is ResourceMetering { @@ -14,6 +15,18 @@ contract MeterUser is ResourceMetering { __ResourceMetering_init(); } + function resourceConfig() public override pure returns (SystemConfig.ResourceConfig memory) { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + return config; + } + function use(uint64 _amount) public metered(_amount) {} function set( @@ -29,6 +42,11 @@ contract MeterUser is ResourceMetering { } } +/** + * @title ResourceConfig + * @notice The tests are based on the default config values. It is expected that + * the config values used in these tests are ran in production. + */ contract ResourceMetering_Test is Test { MeterUser internal meter; uint64 initialBlockNum; @@ -38,42 +56,15 @@ contract ResourceMetering_Test is Test { initialBlockNum = uint64(block.number); } - /** - * @notice The INITIAL_BASE_FEE must be less than the MAXIMUM_BASE_FEE - * and greater than the MINIMUM_BASE_FEE. - */ - function test_meter_initialBaseFee_succeeds() external { - uint256 max = uint256(meter.MAXIMUM_BASE_FEE()); - uint256 min = uint256(meter.MINIMUM_BASE_FEE()); - uint256 initial = uint256(meter.INITIAL_BASE_FEE()); - assertTrue(max >= initial); - assertTrue(min <= initial); - } - - /** - * @notice The MINIMUM_BASE_FEE must be less than the MAXIMUM_BASE_FEE. - */ - function test_meter_minBaseFeeLessThanMaxBaseFee_succeeds() external { - uint256 max = uint256(meter.MAXIMUM_BASE_FEE()); - uint256 min = uint256(meter.MINIMUM_BASE_FEE()); - assertTrue(max > min); - } - function test_meter_initialResourceParams_succeeds() external { (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = meter.params(); + SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); - assertEq(prevBaseFee, meter.INITIAL_BASE_FEE()); + assertEq(prevBaseFee, rcfg.minimumBaseFee); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, initialBlockNum); } - function test_meter_maxValue_succeeds() external { - uint256 max = uint256(meter.MAX_RESOURCE_LIMIT()); - uint256 target = uint256(meter.TARGET_RESOURCE_LIMIT()); - uint256 elasticity = uint256(meter.ELASTICITY_MULTIPLIER()); - assertEq(max / elasticity, target); - } - function test_meter_updateParamsNoChange_succeeds() external { meter.use(0); // equivalent to just updating the base fee and block number (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = meter.params(); @@ -116,8 +107,9 @@ contract ResourceMetering_Test is Test { } function test_meter_updateNoGasDelta_succeeds() external { - uint64 target = uint64(uint256(meter.TARGET_RESOURCE_LIMIT())); - meter.use(target); + SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + uint256 target = uint256(rcfg.maxResourceLimit) / uint256(rcfg.elasticityMultiplier); + meter.use(uint64(target)); (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = meter.params(); assertEq(prevBaseFee, 1000000000); @@ -126,12 +118,14 @@ contract ResourceMetering_Test is Test { } function test_meter_useMax_succeeds() external { - uint64 target = uint64(uint256(meter.TARGET_RESOURCE_LIMIT())); - uint64 elasticity = uint64(uint256(meter.ELASTICITY_MULTIPLIER())); - meter.use(target * elasticity); + SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); + uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); + + meter.use(target * elasticityMultiplier); (, uint64 prevBoughtGas, ) = meter.params(); - assertEq(prevBoughtGas, target * elasticity); + assertEq(prevBoughtGas, target * elasticityMultiplier); vm.roll(initialBlockNum + 1); meter.use(0); @@ -140,10 +134,12 @@ contract ResourceMetering_Test is Test { } function test_meter_useMoreThanMax_reverts() external { - uint64 target = uint64(uint256(meter.TARGET_RESOURCE_LIMIT())); - uint64 elasticity = uint64(uint256(meter.ELASTICITY_MULTIPLIER())); + SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); + uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); + vm.expectRevert("ResourceMetering: cannot buy more gas than available gas limit"); - meter.use(target * elasticity + 1); + meter.use(target * elasticityMultiplier + 1); } // Demonstrates that the resource metering arithmetic can tolerate very large gaps between @@ -153,9 +149,11 @@ contract ResourceMetering_Test is Test { // At 12 seconds per block, this number is effectively unreachable. vm.assume(_blockDiff < 433576281058164217753225238677900874458691); - uint64 target = uint64(uint256(meter.TARGET_RESOURCE_LIMIT())); - uint64 elasticity = uint64(uint256(meter.ELASTICITY_MULTIPLIER())); - vm.assume(_amount < target * elasticity); + SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); + uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); + + vm.assume(_amount < target * elasticityMultiplier); vm.roll(initialBlockNum + _blockDiff); meter.use(_amount); } @@ -182,6 +180,18 @@ contract CustomMeterUser is ResourceMetering { }); } + function resourceConfig() public override pure returns (SystemConfig.ResourceConfig memory) { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + return config; + } + function use(uint64 _amount) public returns (uint256) { uint256 initialGas = gasleft(); _metered(_amount, initialGas); @@ -224,10 +234,11 @@ contract ArtifactResourceMetering_Test is Test { vm.roll(1_000_000); MeterUser base = new MeterUser(); - minimumBaseFee = uint128(uint256(base.MINIMUM_BASE_FEE())); - maximumBaseFee = uint128(uint256(base.MAXIMUM_BASE_FEE())); - maxResourceLimit = uint64(uint256(base.MAX_RESOURCE_LIMIT())); - targetResourceLimit = uint64(uint256(base.TARGET_RESOURCE_LIMIT())); + SystemConfig.ResourceConfig memory rcfg = base.resourceConfig(); + minimumBaseFee = uint128(rcfg.minimumBaseFee); + maximumBaseFee = rcfg.maximumBaseFee; + maxResourceLimit = uint64(rcfg.maxResourceLimit); + targetResourceLimit = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); outfile = string.concat(vm.projectRoot(), "/.resource-metering.csv"); try vm.removeFile(outfile) {} catch {} From 304884d7c33f2502ecb6b87280293d1896a0cab5 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 16:32:00 -0700 Subject: [PATCH 02/30] contracts-bedrock: more polish --- .../contracts/L1/OptimismPortal.sol | 25 +++---------------- .../contracts/L1/SystemConfig.sol | 17 +++++++++---- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index ec66cdacb7be..4b2ffdeaa4ab 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -206,28 +206,11 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { // Intentionally empty. } - // TODO: I don't like having so many return args but I also don't like - // wrapping them into a struct + /** + * @notice + */ function resourceConfig() public view override returns (SystemConfig.ResourceConfig memory) { - ( - uint32 maxResourceLimit, - uint8 elasticityMultiplier, - uint8 baseFeeMaxChangeDenominator, - uint32 minimumBaseFee, - uint32 systemTxMaxGas, - uint128 maximumBaseFee - ) = SYSTEM_CONFIG.resourceConfig(); - - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ - maxResourceLimit: maxResourceLimit, - elasticityMultiplier: elasticityMultiplier, - baseFeeMaxChangeDenominator: baseFeeMaxChangeDenominator, - minimumBaseFee: minimumBaseFee, - systemTxMaxGas: systemTxMaxGas, - maximumBaseFee: maximumBaseFee - }); - - return config; + return SYSTEM_CONFIG.resourceConfig(); } /** diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 503a5b448e06..ed77352e68cc 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -82,7 +82,10 @@ contract SystemConfig is OwnableUpgradeable, Semver { */ uint64 public gasLimit; - ResourceConfig public resourceConfig; + /** + * @notice + */ + ResourceConfig internal _resourceConfig; /** * @notice Emitted when configuration is updated @@ -141,7 +144,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, - ResourceConfig memory _resourceConfig + ResourceConfig memory _config ) public initializer { __Ownable_init(); transferOwnership(_owner); @@ -150,7 +153,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { batcherHash = _batcherHash; gasLimit = _gasLimit; _setUnsafeBlockSigner(_unsafeBlockSigner); - _setResourceConfig(_resourceConfig); + _setResourceConfig(_config); require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); } @@ -235,6 +238,10 @@ contract SystemConfig is OwnableUpgradeable, Semver { } } + function resourceConfig() external view returns (ResourceConfig memory) { + return _resourceConfig; + } + function setResourceConfig(ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); @@ -247,10 +254,10 @@ contract SystemConfig is OwnableUpgradeable, Semver { require(_config.baseFeeMaxChangeDenominator > 0); require(_config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit); - resourceConfig = _config; + _resourceConfig = _config; } function minimumGasLimit() public view returns (uint256) { - return resourceConfig.maxResourceLimit + resourceConfig.systemTxMaxGas; + return _resourceConfig.maxResourceLimit + _resourceConfig.systemTxMaxGas; } } From e943ef826141ce12a351f746006db2ffda74cd4a Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 16:59:52 -0700 Subject: [PATCH 03/30] contracts-bedrock: update deployment --- .../deploy/013-OptimismPortalImpl.ts | 8 ++++++++ .../deploy/019-SystemDictatorInit.ts | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts b/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts index 870c6d5538e3..059a24f326a2 100644 --- a/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts +++ b/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts @@ -17,6 +17,8 @@ const deployFn: DeployFunction = async (hre) => { 'L2OutputOracleProxy' ) + const Artifact__SystemConfigProxy = await hre.deployments.get('SystemConfigProxy') + const portalGuardian = hre.deployConfig.portalGuardian const portalGuardianCode = await hre.ethers.provider.getCode(portalGuardian) if (portalGuardianCode === '0x') { @@ -41,6 +43,7 @@ const deployFn: DeployFunction = async (hre) => { L2OutputOracleProxy.address, portalGuardian, true, // paused + Artifact__SystemConfigProxy.address, ], postDeployAction: async (contract) => { await assertContractVariable( @@ -53,6 +56,11 @@ const deployFn: DeployFunction = async (hre) => { 'GUARDIAN', hre.deployConfig.portalGuardian ) + await assertContractVariable( + contract, + 'SYSTEM_CONFIG', + Artifact__SystemConfigProxy.address + ) }, }) } diff --git a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts index 564f3e137147..77a61fbd0354 100644 --- a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts +++ b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts @@ -1,6 +1,6 @@ import assert from 'assert' -import { ethers } from 'ethers' +import { ethers, BigNumber } from 'ethers' import { DeployFunction } from 'hardhat-deploy/dist/types' import { awaitCondition } from '@eth-optimism/core-utils' import '@eth-optimism/hardhat-deploy-config' @@ -100,6 +100,16 @@ const deployFn: DeployFunction = async (hre) => { ), gasLimit: hre.deployConfig.l2GenesisBlockGasLimit, unsafeBlockSigner: hre.deployConfig.p2pSequencerAddress, + resourceConfig: { + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1000000000, + systemTxMaxGas: 1_000_000, + maximumBaseFee: BigNumber.from( + '0xffffffffffffffffffffffffffffffff' + ).toString(), + }, }, } From 699fd8f368b510d6a3163fb30968bd6e0e5edb13 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 18:09:03 -0700 Subject: [PATCH 04/30] contracts-bedrock: more cleanup --- op-bindings/bindings/optimismportal.go | 222 ++---------------- op-bindings/bindings/optimismportal_more.go | 2 +- op-bindings/bindings/systemconfig.go | 121 ++++++++-- op-bindings/bindings/systemconfig_more.go | 4 +- op-chain-ops/genesis/layer_one.go | 69 ++++-- .../testdata/test-deploy-config-full.json | 4 +- .../contracts/L1/OptimismPortal.sol | 6 +- .../contracts/L1/ResourceMetering.sol | 8 +- .../contracts/L1/SystemConfig.sol | 12 + .../echidna/FuzzResourceMetering.sol | 6 +- .../contracts/test/OptimismPortal.t.sol | 2 +- .../contracts/test/ResourceMetering.t.sol | 8 +- 12 files changed, 209 insertions(+), 255 deletions(-) diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go index 3f8292997737..5f9e267ba906 100644 --- a/op-bindings/bindings/optimismportal.go +++ b/op-bindings/bindings/optimismportal.go @@ -48,8 +48,8 @@ type TypesWithdrawalTransaction struct { // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. var OptimismPortalMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620058d4380380620058d483398101604081905262000035916200028e565b6001608052600260a052600060c0526001600160a01b0380841660e05282166101005262000063816200006c565b505050620002e6565b600054610100900460ff16158080156200008d5750600054600160ff909116105b80620000bd5750620000aa30620001c360201b62001cc21760201c565b158015620000bd575060005460ff166001145b620001265760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200014a576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000178620001d2565b8015620001bf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff166200023f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011d565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200028b57600080fd5b50565b600080600060608486031215620002a457600080fd5b8351620002b18162000275565b6020850151909350620002c48162000275565b60408501519092508015158114620002db57600080fd5b809150509250925092565b60805160a05160c05160e051610100516155716200036360003960008181610358015281816107dd01526110e00152600081816101c101528181610a4601528181610c270152818161103c015281816113f60152818161166801526121c801526000610fa701526000610f7e01526000610f5501526155716000f3fe6080604052600436106101835760003560e01c80638456cb59116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f146104ef578063e965084c1461050f578063e9e05c421461059b57600080fd5b8063ca3e99ba14610424578063cd7c978914610439578063cff0ab961461044e57600080fd5b80638c3152e9116100b05780638c3152e9146103a75780639bf62d82146103c7578063a14238e7146103f457600080fd5b80638456cb591461037a578063867ead131461038f5780638b4c40b0146101a857600080fd5b80635c1f2827116101385780636bb0291e116101125780636bb0291e146103115780636dbffb7814610326578063724c184c1461034657600080fd5b80635c1f28271461029d5780635c975abb146102cf57806364b79208146102f957600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105a9565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c5565b34801561026757600080fd5b506101a8610276366004614c3e565b6108e8565b34801561028757600080fd5b50610290610f4e565b6040516102049190614d94565b3480156102a957600080fd5b506102c16fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b3480156102db57600080fd5b506035546102e99060ff1681565b6040519015158152602001610204565b34801561030557600080fd5b506102c16301312d0081565b34801561031d57600080fd5b506102c1600a81565b34801561033257600080fd5b506102e9610341366004614da7565b610ff1565b34801561035257600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038657600080fd5b506101a86110c8565b34801561039b57600080fd5b506102c1633b9aca0081565b3480156103b357600080fd5b506101a86103c2366004614dc0565b6111e8565b3480156103d357600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561040057600080fd5b506102e961040f366004614da7565b60336020526000908152604090205460ff1681565b34801561043057600080fd5b506102c1611ac3565b34801561044557600080fd5b506102c1600881565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b3480156104fb57600080fd5b506101a861050a366004614e05565b611ad5565b34801561051b57600080fd5b5061056d61052a366004614da7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105a9366004614e20565b8260005a905083156106605773ffffffffffffffffffffffffffffffffffffffff87161561066057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f7074696d69736d506f7274616c3a20676173206c696d6974206d757374206360448201527f6f76657220696e737472696e7369632067617320636f737400000000000000006064820152608401610657565b3332811461071d575033731111000000000000000000000000000000001111015b60003488888888604051602001610738959493929190614ea5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a89190614d94565b60405180910390a450506107bc8282611cde565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610657565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff1615610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610657565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610657565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac69190614f2a565b519050610ae0610adb36869003860186614f8f565b611fd7565b8114610b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610657565b6000610b7987612033565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cab5750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca79190614f2a565b5114155b610d37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610657565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610df6888a614ff5565b8a60400135612063565b610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610657565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610f797f0000000000000000000000000000000000000000000000000000000000000000612087565b610fa27f0000000000000000000000000000000000000000000000000000000000000000612087565b610fcb7f0000000000000000000000000000000000000000000000000000000000000000612087565b604051602001610fdd93929190615079565b604051602081830303815290604052905090565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018290526000906110c29073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a79190614f2a565b602001516fffffffffffffffffffffffffffffffff166121c4565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610657565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108de565b60355460ff1615611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610657565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146112fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610657565b600061130982612033565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610657565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa15801561145f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148391906150ef565b81602001516fffffffffffffffffffffffffffffffff16101561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610657565b61156d81602001516fffffffffffffffffffffffffffffffff166121c4565b61161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610657565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614f2a565b82518151919250146117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610657565b6117c181602001516fffffffffffffffffffffffffffffffff166121c4565b611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610657565b60008381526033602052604090205460ff1615611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610657565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516119b493929190612267565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611a1990841515815260200190565b60405180910390a280158015611a2f5750326001145b15611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610657565b5050505050565b611ad2600a6301312d00615166565b81565b600054610100900460ff1615808015611af55750600054600160ff909116105b80611b0f5750303b158015611b0f575060005460ff166001145b611b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610657565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611c5b6122c1565b8015611cbe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611d14907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436151ce565b90508015611e4c576000611d2d600a6301312d00615166565b600154611d589190700100000000000000000000000000000000900467ffffffffffffffff166151e5565b905060006008611d6d600a6301312d00615166565b611d779190615259565b600154611d979084906fffffffffffffffffffffffffffffffff16615259565b611da19190615166565b600154909150600090611de690611dcb9084906fffffffffffffffffffffffffffffffff16615315565b633b9aca006fffffffffffffffffffffffffffffffff6123a4565b90506001841115611e0d57611e0a611dcb826008611e056001896151ce565b6123c3565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611e7f908490700100000000000000000000000000000000900467ffffffffffffffff16615389565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610657565b600154600090611f88906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166153b5565b90506000611f9a48633b9aca00612418565b611fa490836153f2565b905060005a611fb390866151ce565b905080821115611fcf57611fcf611fca82846151ce565b61242f565b505050505050565b60008160000151826020015183604001518460600151604051602001612016949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612016979096959101615406565b60008061206f8661245d565b905061207d8186868661248f565b9695505050505050565b6060816000036120ca57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120f457806120de8161545d565b91506120ed9050600a836153f2565b91506120ce565b60008167ffffffffffffffff81111561210f5761210f614a64565b6040519080825280601f01601f191660200182016040528015612139576020820181803683370190505b5090505b84156121bc5761214e6001836151ce565b915061215b600a86615495565b6121669060306154a9565b60f81b81838151811061217b5761217b6154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506121b5600a866153f2565b945061213d565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225591906150ef565b61225f90836154a9565b421192915050565b600080603f60c88601604002045a10156122aa576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff16612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610657565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60006123b96123b385856124bf565b836124cf565b90505b9392505050565b6000670de0b6b3a76400006124046123db8583615166565b6123ed90670de0b6b3a76400006151e5565b6123ff85670de0b6b3a7640000615259565b6124de565b61240e9086615259565b6123b99190615166565b60008183101561242857816123bc565b5090919050565b6000805a90505b825a61244290836151ce565b1015612458576124518261545d565b9150612436565b505050565b6060818051906020012060405160200161247991815260200190565b6040516020818303038152906040529050919050565b60006124b6846124a087868661250f565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561242857816123bc565b600081831261242857816123bc565b60006123bc670de0b6b3a7640000836124f686612f97565b6125009190615259565b61250a9190615166565b6131db565b6060600084511161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610657565b60006125878461341a565b9050600061259486613509565b90506000846040516020016125ab91815260200190565b60405160208183030381529060405290506000805b8451811015612f0e5760008582815181106125dd576125dd6154c1565b602002602001015190508451831115612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610657565b8260000361273157805180516020918201206040516126c6926126a092910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610657565b612888565b8051516020116127e7578051805160209182012060405161275b926126a092910190815260200190565b61272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610657565b805184516020808701919091208251919092012014612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610657565b612894601060016154a9565b81602001515103612a755784518303612a0d5760006128d082602001516010815181106128c3576128c36154c1565b60200260200101516136a4565b90506000815111612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610657565b6001875161297191906151ce565b83146129ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610657565b96506123bc95505050505050565b6000858481518110612a2157612a216154c1565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a4c57612a4c6154c1565b60200260200101519050612a5f81613804565b9550612a6c6001866154a9565b94505050612efb565b600281602001515103612e73576000612a8d82613829565b9050600081600081518110612aa457612aa46154c1565b016020015160f81c90506000612abb6002836154f0565b612ac6906002615512565b90506000612ad7848360ff1661384d565b90506000612ae58a8961384d565b90506000612af38383613883565b905080835114612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610657565b60ff851660021480612b9a575060ff85166003145b15612d8e5780825114612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610657565b6000612c4b88602001516001815181106128c3576128c36154c1565b90506000815111612cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610657565b60018d51612cec91906151ce565b8914612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610657565b9c506123bc9b505050505050505050505050565b60ff85161580612da1575060ff85166001145b15612de057612dcd8760200151600181518110612dc057612dc06154c1565b6020026020010151613804565b9950612dd9818a6154a9565b9850612e68565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610657565b505050505050612efb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610657565b5080612f068161545d565b9150506125c0565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610657565b6000808213613002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610657565b6000606061300f84613932565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361320c57506000919050565b680755bf798b4a1bf1e5821261327e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610657565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff81111561343a5761343a614a64565b60405190808252806020026020018201604052801561347f57816020015b60408051808201909152606080825260208201528152602001906001900390816134585790505b50905060005b828110156135015760405180604001604052808683815181106134aa576134aa6154c1565b602002602001015181526020016134d98784815181106134cc576134cc6154c1565b6020026020010151613a08565b8152508282815181106134ee576134ee6154c1565b6020908102919091010152600101613485565b509392505050565b8051606090600061351b8260026153b5565b67ffffffffffffffff81111561353357613533614a64565b6040519080825280601f01601f19166020018201604052801561355d576020820181803683370190505b5090506000805b8381101561369a5785818151811061357e5761357e6154c1565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836135da8360026153b5565b815181106135ea576135ea6154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f000000000000000000000000000000000000000000000000000000000000008216836136488360026153b5565b6136539060016154a9565b81518110613663576136636154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613564565b5090949350505050565b606060008060006136b485613a1b565b9194509250905060008160018111156136cf576136cf615535565b1461375c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610657565b61376682846154a9565b8551146137f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610657565b6124b685602001518484614488565b606060208260000151106138205761381b826136a4565b6110c2565b6110c282614529565b60606110c261384883602001516000815181106128c3576128c36154c1565b613509565b60608251821061386c57506040805160208101909152600081526110c2565b6123bc838384865161387e91906151ce565b61453f565b6000806000835185511061389857835161389b565b84515b90505b808210801561392257508382815181106138ba576138ba6154c1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106138f9576138f96154c1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156135015781600101915061389e565b600080821161399d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610657565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60606110c2613a1683614717565b614800565b600080600080846000015111613ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610657565b6020840151805160001a607f8111613afe576000600160009450945094505050614481565b60b78111613d0c576000613b136080836151ce565b905080876000015111613bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610657565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613c4757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613cf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610657565b5060019550935060009250614481915050565b60bf811161405a576000613d2160b7836151ce565b905080876000015111613ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610657565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610657565b600184015160088302610100031c60378111613f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610657565b613f8881846154a9565b89511161403d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610657565b6140488360016154a9565b97509550600094506144819350505050565b60f7811161413b57600061406f60c0836151ce565b90508087600001511161412a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610657565b600195509350849250614481915050565b600061414860f7836151ce565b905080876000015111614203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610657565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036142e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610657565b600184015160088302610100031c603781116143a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610657565b6143af81846154a9565b895111614464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610657565b61446f8360016154a9565b97509550600194506144819350505050565b9193909250565b606060008267ffffffffffffffff8111156144a5576144a5614a64565b6040519080825280601f01601f1916602001820160405280156144cf576020820181803683370190505b509050826000036144e15790506123bc565b60006144ed85876154a9565b90506020820160005b8581101561450e5782810151828201526020016144f6565b8581111561451d576000868301525b50919695505050505050565b60606110c2826020015160008460000151614488565b60608182601f0110156145ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610657565b82828401101561461a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610657565b81830184511015614687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610657565b6060821580156146a6576040519150600082526020820160405261470e565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156146df5780518352602092830192016146c7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116147e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610657565b50604080518082019091528151815260209182019181019190915290565b6060600080600061481085613a1b565b91945092509050600181600181111561482b5761482b615535565b146148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610657565b84516148c483856154a9565b14614951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610657565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161496a5790505090506000845b8751811015614a58576000806149dd6040518060400160405280858d600001516149c191906151ce565b8152602001858d602001516149d691906154a9565b9052613a1b565b5091509150604051806040016040528083836149f991906154a9565b8152602001848c60200151614a0e91906154a9565b815250858581518110614a2357614a236154c1565b6020908102919091010152614a396001856154a9565b9350614a4581836154a9565b614a4f90846154a9565b92505050614997565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ada57614ada614a64565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614b0657600080fd5b919050565b600082601f830112614b1c57600080fd5b813567ffffffffffffffff811115614b3657614b36614a64565b614b6760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614a93565b818152846020838601011115614b7c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614bab57600080fd5b60405160c0810167ffffffffffffffff8282108183111715614bcf57614bcf614a64565b8160405282935084358352614be660208601614ae2565b6020840152614bf760408601614ae2565b6040840152606085013560608401526080850135608084015260a0850135915080821115614c2457600080fd5b50614c3185828601614b0b565b60a0830152505092915050565b600080600080600085870360e0811215614c5757600080fd5b863567ffffffffffffffff80821115614c6f57600080fd5b614c7b8a838b01614b99565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614cb457600080fd5b60408901955060c0890135925080831115614cce57600080fd5b828901925089601f840112614ce257600080fd5b8235915080821115614cf357600080fd5b508860208260051b8401011115614d0957600080fd5b959894975092955050506020019190565b60005b83811015614d35578181015183820152602001614d1d565b83811115614d44576000848401525b50505050565b60008151808452614d62816020860160208601614d1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123bc6020830184614d4a565b600060208284031215614db957600080fd5b5035919050565b600060208284031215614dd257600080fd5b813567ffffffffffffffff811115614de957600080fd5b6121bc84828501614b99565b80358015158114614b0657600080fd5b600060208284031215614e1757600080fd5b6123bc82614df5565b600080600080600060a08688031215614e3857600080fd5b614e4186614ae2565b945060208601359350604086013567ffffffffffffffff8082168214614e6657600080fd5b819450614e7560608901614df5565b93506080880135915080821115614e8b57600080fd5b50614e9888828901614b0b565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614ef9816049850160208701614d1a565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614b0657600080fd5b600060608284031215614f3c57600080fd5b6040516060810181811067ffffffffffffffff82111715614f5f57614f5f614a64565b60405282518152614f7260208401614f0a565b6020820152614f8360408401614f0a565b60408201529392505050565b600060808284031215614fa157600080fd5b6040516080810181811067ffffffffffffffff82111715614fc457614fc4614a64565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561501057615010614a64565b8360051b6020615021818301614a93565b86815291850191818101903684111561503957600080fd5b865b8481101561506d578035868111156150535760008081fd5b61505f36828b01614b0b565b84525091830191830161503b565b50979650505050505050565b6000845161508b818460208901614d1a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516150c7816001850160208a01614d1a565b600192019182015283516150e2816002840160208801614d1a565b0160020195945050505050565b60006020828403121561510157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261517557615175615108565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156151c9576151c9615137565b500590565b6000828210156151e0576151e0615137565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561521f5761521f615137565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561525357615253615137565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561529a5761529a615137565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152d5576152d5615137565b600087129250878205871284841616156152f1576152f1615137565b8785058712818416161561530757615307615137565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561534f5761534f615137565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561538357615383615137565b50500190565b600067ffffffffffffffff8083168185168083038211156153ac576153ac615137565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ed576153ed615137565b500290565b60008261540157615401615108565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261545160c0830184614d4a565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361548e5761548e615137565b5060010190565b6000826154a4576154a4615108565b500690565b600082198211156154bc576154bc615137565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff83168061550357615503615108565b8060ff84160691505092915050565b600060ff821660ff84168082101561552c5761552c615137565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"},{\"internalType\":\"contractSystemConfig\",\"name\":\"_config\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONFIG\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101406040523480156200001257600080fd5b506040516200599b3803806200599b833981016040819052620000359162000296565b6001608052600360a052600060c0526001600160a01b0380851660e052838116610120528116610100526200006a8262000074565b5050505062000302565b600054610100900460ff1615808015620000955750600054600160ff909116105b80620000c55750620000b230620001cb60201b62001b9d1760201c565b158015620000c5575060005460ff166001145b6200012e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000152576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000180620001da565b8015620001c7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620002475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000125565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200029357600080fd5b50565b60008060008060808587031215620002ad57600080fd5b8451620002ba816200027d565b6020860151909450620002cd816200027d565b60408601519093508015158114620002e457600080fd5b6060860151909250620002f7816200027d565b939692955090935050565b60805160a05160c05160e051610100516101205161560a620003916000396000818161024e015281816106ca0152610fcd01526000818161047401526122e701526000818161014f0152818161093301528181610b1401528181610f29015281816112e30152818161155501526120d701526000610e9401526000610e6b01526000610e42015261560a6000f3fe6080604052600436106101115760003560e01c80638b4c40b0116100a5578063cff0ab9611610074578063e965084c11610059578063e965084c146103c3578063e9e05c421461044f578063f04987501461046257600080fd5b8063cff0ab9614610302578063d53a822f146103a357600080fd5b80638b4c40b0146101365780638c3152e9146102855780639bf62d82146102a5578063a14238e7146102d257600080fd5b80635c975abb116100e15780635c975abb146101f25780636dbffb781461021c578063724c184c1461023c5780638456cb591461027057600080fd5b80621c2ff61461013d5780633f4ba83a1461019b5780634870496f146101b057806354fd4d50146101d057600080fd5b36610138576101363334620186a0600060405180602001604052806000815250610496565b005b600080fd5b34801561014957600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a757600080fd5b506101366106b2565b3480156101bc57600080fd5b506101366101cb366004614c13565b6107d5565b3480156101dc57600080fd5b506101e5610e3b565b6040516101929190614d69565b3480156101fe57600080fd5b5060355461020c9060ff1681565b6040519015158152602001610192565b34801561022857600080fd5b5061020c610237366004614d7c565b610ede565b34801561024857600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b34801561027c57600080fd5b50610136610fb5565b34801561029157600080fd5b506101366102a0366004614d95565b6110d5565b3480156102b157600080fd5b506032546101719073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102de57600080fd5b5061020c6102ed366004614d7c565b60336020526000908152604090205460ff1681565b34801561030e57600080fd5b5060015461036a906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610192565b3480156103af57600080fd5b506101366103be366004614dda565b6119b0565b3480156103cf57600080fd5b506104216103de366004614d7c565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610192565b61013661045d366004614df5565b610496565b34801561046e57600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b8260005a9050831561054d5773ffffffffffffffffffffffffffffffffffffffff87161561054d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156105e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f7074696d69736d506f7274616c3a20676173206c696d6974206d757374206360448201527f6f76657220696e737472696e7369632067617320636f737400000000000000006064820152608401610544565b3332811461060a575033731111000000000000000000000000000000001111015b60003488888888604051602001610625959493929190614e7a565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516106959190614d69565b60405180910390a450506106a98282611bb9565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610544565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff1615610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610544565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610544565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190614eff565b5190506109cd6109c836869003860186614f64565b611ee6565b8114610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610544565b6000610a6687611f42565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610b985750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190614eff565b5114155b610c24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610544565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ced9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610ce3888a614fca565b8a60400135611f72565b610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610544565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610e667f0000000000000000000000000000000000000000000000000000000000000000611f96565b610e8f7f0000000000000000000000000000000000000000000000000000000000000000611f96565b610eb87f0000000000000000000000000000000000000000000000000000000000000000611f96565b604051602001610eca9392919061504e565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610faf9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614eff565b602001516fffffffffffffffffffffffffffffffff166120d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610544565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016107cb565b60355460ff1615611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610544565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146111eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610544565b60006111f682611f42565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036112e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610544565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137091906150c4565b81602001516fffffffffffffffffffffffffffffffff16101561143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610544565b61145a81602001516fffffffffffffffffffffffffffffffff166120d3565b61150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610544565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190614eff565b825181519192501461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610544565b6116ae81602001516fffffffffffffffffffffffffffffffff166120d3565b611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610544565b60008381526033602052604090205460ff16156117ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610544565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516118a193929190612176565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061190690841515815260200190565b60405180910390a28015801561191c5750326001145b156119a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610544565b5050505050565b600054610100900460ff16158080156119d05750600054600160ff909116105b806119ea5750303b1580156119ea575060005460ff166001145b611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610544565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ad457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611b366121d0565b8015611b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611bef907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361510c565b90506000611bfb6122b3565b90506000816020015160ff16826000015163ffffffff16611c1c9190615152565b90508215611d5357600154600090611c53908390700100000000000000000000000000000000900467ffffffffffffffff166151ba565b90506000836040015160ff1683611c6a919061522e565b600154611c8a9084906fffffffffffffffffffffffffffffffff1661522e565b611c949190615152565b600154909150600090611ce590611cbe9084906fffffffffffffffffffffffffffffffff166152ea565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612379565b90506001861115611d1457611d11611cbe82876040015160ff1660018a611d0c919061510c565b612398565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611d86908490700100000000000000000000000000000000900467ffffffffffffffff1661535e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611e69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610544565b600154600090611e95906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661538a565b90506000611ea748633b9aca006123ed565b611eb190836153c7565b905060005a611ec0908861510c565b905080821115611edc57611edc611ed7828461510c565b612404565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611f25949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611f259790969591016153db565b600080611f7e86612432565b9050611f8c81868686612464565b9695505050505050565b606081600003611fd957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120035780611fed81615432565b9150611ffc9050600a836153c7565b9150611fdd565b60008167ffffffffffffffff81111561201e5761201e614a39565b6040519080825280601f01601f191660200182016040528015612048576020820181803683370190505b5090505b84156120cb5761205d60018361510c565b915061206a600a8661546a565b61207590603061547e565b60f81b81838151811061208a5761208a615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506120c4600a866153c7565b945061204c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612140573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216491906150c4565b61216e908361547e565b421192915050565b600080603f60c88601604002045a10156121b9576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff16612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610544565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa158015612350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237491906154ea565b905090565b600061238e6123888585612494565b836124a4565b90505b9392505050565b6000670de0b6b3a76400006123d96123b08583615152565b6123c290670de0b6b3a76400006151ba565b6123d485670de0b6b3a764000061522e565b6124b3565b6123e3908661522e565b61238e9190615152565b6000818310156123fd5781612391565b5090919050565b6000805a90505b825a612417908361510c565b101561242d5761242682615432565b915061240b565b505050565b6060818051906020012060405160200161244e91815260200190565b6040516020818303038152906040529050919050565b600061248b846124758786866124e4565b8051602091820120825192909101919091201490565b95945050505050565b6000818312156123fd5781612391565b60008183126123fd5781612391565b6000612391670de0b6b3a7640000836124cb86612f6c565b6124d5919061522e565b6124df9190615152565b6131b0565b60606000845111612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610544565b600061255c846133ef565b90506000612569866134de565b905060008460405160200161258091815260200190565b60405160208183030381529060405290506000805b8451811015612ee35760008582815181106125b2576125b2615496565b60200260200101519050845183111561264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610544565b82600003612706578051805160209182012060405161269b9261267592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610544565b61285d565b8051516020116127bc57805180516020918201206040516127309261267592910190815260200190565b612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610544565b80518451602080870191909120825191909201201461285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610544565b6128696010600161547e565b81602001515103612a4a57845183036129e25760006128a5826020015160108151811061289857612898615496565b6020026020010151613679565b90506000815111612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610544565b60018751612946919061510c565b83146129d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610544565b965061239195505050505050565b60008584815181106129f6576129f6615496565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a2157612a21615496565b60200260200101519050612a34816137d9565b9550612a4160018661547e565b94505050612ed0565b600281602001515103612e48576000612a62826137fe565b9050600081600081518110612a7957612a79615496565b016020015160f81c90506000612a90600283615589565b612a9b9060026155ab565b90506000612aac848360ff16613822565b90506000612aba8a89613822565b90506000612ac88383613858565b905080835114612b5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610544565b60ff851660021480612b6f575060ff85166003145b15612d635780825114612c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610544565b6000612c20886020015160018151811061289857612898615496565b90506000815111612cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610544565b60018d51612cc1919061510c565b8914612d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610544565b9c506123919b505050505050505050505050565b60ff85161580612d76575060ff85166001145b15612db557612da28760200151600181518110612d9557612d95615496565b60200260200101516137d9565b9950612dae818a61547e565b9850612e3d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610544565b505050505050612ed0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610544565b5080612edb81615432565b915050612595565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610544565b6000808213612fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610544565b60006060612fe484613907565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136131e157506000919050565b680755bf798b4a1bf1e58212613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610544565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff81111561340f5761340f614a39565b60405190808252806020026020018201604052801561345457816020015b604080518082019091526060808252602082015281526020019060019003908161342d5790505b50905060005b828110156134d657604051806040016040528086838151811061347f5761347f615496565b602002602001015181526020016134ae8784815181106134a1576134a1615496565b60200260200101516139dd565b8152508282815181106134c3576134c3615496565b602090810291909101015260010161345a565b509392505050565b805160609060006134f082600261538a565b67ffffffffffffffff81111561350857613508614a39565b6040519080825280601f01601f191660200182016040528015613532576020820181803683370190505b5090506000805b8381101561366f5785818151811061355357613553615496565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836135af83600261538a565b815181106135bf576135bf615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f0000000000000000000000000000000000000000000000000000000000000082168361361d83600261538a565b61362890600161547e565b8151811061363857613638615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613539565b5090949350505050565b60606000806000613689856139f0565b9194509250905060008160018111156136a4576136a46155ce565b14613731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610544565b61373b828461547e565b8551146137ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610544565b61248b8560200151848461445d565b606060208260000151106137f5576137f082613679565b610faf565b610faf826144fe565b6060610faf61381d836020015160008151811061289857612898615496565b6134de565b6060825182106138415750604080516020810190915260008152610faf565b6123918383848651613853919061510c565b614514565b6000806000835185511061386d578351613870565b84515b90505b80821080156138f7575083828151811061388f5761388f615496565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106138ce576138ce615496565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156134d657816001019150613873565b6000808211613972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610544565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610faf6139eb836146ec565b6147d5565b600080600080846000015111613aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610544565b6020840151805160001a607f8111613ad3576000600160009450945094505050614456565b60b78111613ce1576000613ae860808361510c565b905080876000015111613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610544565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613c1c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610544565b5060019550935060009250614456915050565b60bf811161402f576000613cf660b78361510c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610544565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610544565b600184015160088302610100031c60378111613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610544565b613f5d818461547e565b895111614012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610544565b61401d83600161547e565b97509550600094506144569350505050565b60f7811161411057600061404460c08361510c565b9050808760000151116140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610544565b600195509350849250614456915050565b600061411d60f78361510c565b9050808760000151116141d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610544565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036142b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610544565b600184015160088302610100031c6037811161437a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610544565b614384818461547e565b895111614439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610544565b61444483600161547e565b97509550600194506144569350505050565b9193909250565b606060008267ffffffffffffffff81111561447a5761447a614a39565b6040519080825280601f01601f1916602001820160405280156144a4576020820181803683370190505b509050826000036144b6579050612391565b60006144c2858761547e565b90506020820160005b858110156144e35782810151828201526020016144cb565b858111156144f2576000868301525b50919695505050505050565b6060610faf82602001516000846000015161445d565b60608182601f011015614583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610544565b8282840110156145ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610544565b8183018451101561465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610544565b60608215801561467b57604051915060008252602082016040526146e3565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156146b457805183526020928301920161469c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116147b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610544565b50604080518082019091528151815260209182019181019190915290565b606060008060006147e5856139f0565b919450925090506001816001811115614800576148006155ce565b1461488d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610544565b8451614899838561547e565b14614926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610544565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161493f5790505090506000845b8751811015614a2d576000806149b26040518060400160405280858d60000151614996919061510c565b8152602001858d602001516149ab919061547e565b90526139f0565b5091509150604051806040016040528083836149ce919061547e565b8152602001848c602001516149e3919061547e565b8152508585815181106149f8576149f8615496565b6020908102919091010152614a0e60018561547e565b9350614a1a818361547e565b614a24908461547e565b9250505061496c565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614aaf57614aaf614a39565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614adb57600080fd5b919050565b600082601f830112614af157600080fd5b813567ffffffffffffffff811115614b0b57614b0b614a39565b614b3c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614a68565b818152846020838601011115614b5157600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614b8057600080fd5b60405160c0810167ffffffffffffffff8282108183111715614ba457614ba4614a39565b8160405282935084358352614bbb60208601614ab7565b6020840152614bcc60408601614ab7565b6040840152606085013560608401526080850135608084015260a0850135915080821115614bf957600080fd5b50614c0685828601614ae0565b60a0830152505092915050565b600080600080600085870360e0811215614c2c57600080fd5b863567ffffffffffffffff80821115614c4457600080fd5b614c508a838b01614b6e565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614c8957600080fd5b60408901955060c0890135925080831115614ca357600080fd5b828901925089601f840112614cb757600080fd5b8235915080821115614cc857600080fd5b508860208260051b8401011115614cde57600080fd5b959894975092955050506020019190565b60005b83811015614d0a578181015183820152602001614cf2565b83811115614d19576000848401525b50505050565b60008151808452614d37816020860160208601614cef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123916020830184614d1f565b600060208284031215614d8e57600080fd5b5035919050565b600060208284031215614da757600080fd5b813567ffffffffffffffff811115614dbe57600080fd5b6120cb84828501614b6e565b80358015158114614adb57600080fd5b600060208284031215614dec57600080fd5b61239182614dca565b600080600080600060a08688031215614e0d57600080fd5b614e1686614ab7565b945060208601359350604086013567ffffffffffffffff8082168214614e3b57600080fd5b819450614e4a60608901614dca565b93506080880135915080821115614e6057600080fd5b50614e6d88828901614ae0565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614ece816049850160208701614cef565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614adb57600080fd5b600060608284031215614f1157600080fd5b6040516060810181811067ffffffffffffffff82111715614f3457614f34614a39565b60405282518152614f4760208401614edf565b6020820152614f5860408401614edf565b60408201529392505050565b600060808284031215614f7657600080fd5b6040516080810181811067ffffffffffffffff82111715614f9957614f99614a39565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614fe557614fe5614a39565b8360051b6020614ff6818301614a68565b86815291850191818101903684111561500e57600080fd5b865b84811015615042578035868111156150285760008081fd5b61503436828b01614ae0565b845250918301918301615010565b50979650505050505050565b60008451615060818460208901614cef565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161509c816001850160208a01614cef565b600192019182015283516150b7816002840160208801614cef565b0160020195945050505050565b6000602082840312156150d657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561511e5761511e6150dd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261516157615161615123565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156151b5576151b56150dd565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156151f4576151f46150dd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615228576152286150dd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561526f5761526f6150dd565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152aa576152aa6150dd565b600087129250878205871284841616156152c6576152c66150dd565b878505871281841616156152dc576152dc6150dd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615324576153246150dd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615358576153586150dd565b50500190565b600067ffffffffffffffff808316818516808303821115615381576153816150dd565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c2576153c26150dd565b500290565b6000826153d6576153d6615123565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261542660c0830184614d1f565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615463576154636150dd565b5060010190565b60008261547957615479615123565b500690565b60008219821115615491576154916150dd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff81168114614adb57600080fd5b805160ff81168114614adb57600080fd5b600060c082840312156154fc57600080fd5b60405160c0810181811067ffffffffffffffff8211171561551f5761551f614a39565b60405261552b836154c5565b8152615539602084016154d9565b602082015261554a604084016154d9565b604082015261555b606084016154c5565b606082015261556c608084016154c5565b608082015261557d60a08401614edf565b60a08201529392505050565b600060ff83168061559c5761559c615123565b8060ff84160691505092915050565b600060ff821660ff8416808210156155c5576155c56150dd565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OptimismPortalABI is the input ABI used to generate the binding from. @@ -61,7 +61,7 @@ var OptimismPortalABI = OptimismPortalMetaData.ABI var OptimismPortalBin = OptimismPortalMetaData.Bin // DeployOptimismPortal deploys a new Ethereum contract, binding an instance of OptimismPortal to it. -func DeployOptimismPortal(auth *bind.TransactOpts, backend bind.ContractBackend, _l2Oracle common.Address, _guardian common.Address, _paused bool) (common.Address, *types.Transaction, *OptimismPortal, error) { +func DeployOptimismPortal(auth *bind.TransactOpts, backend bind.ContractBackend, _l2Oracle common.Address, _guardian common.Address, _paused bool, _config common.Address) (common.Address, *types.Transaction, *OptimismPortal, error) { parsed, err := OptimismPortalMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -70,7 +70,7 @@ func DeployOptimismPortal(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismPortalBin), backend, _l2Oracle, _guardian, _paused) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismPortalBin), backend, _l2Oracle, _guardian, _paused, _config) if err != nil { return common.Address{}, nil, nil, err } @@ -219,68 +219,6 @@ func (_OptimismPortal *OptimismPortalTransactorRaw) Transact(opts *bind.Transact return _OptimismPortal.Contract.contract.Transact(opts, method, params...) } -// BASEFEEMAXCHANGEDENOMINATOR is a free data retrieval call binding the contract method 0xcd7c9789. -// -// Solidity: function BASE_FEE_MAX_CHANGE_DENOMINATOR() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) BASEFEEMAXCHANGEDENOMINATOR(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "BASE_FEE_MAX_CHANGE_DENOMINATOR") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// BASEFEEMAXCHANGEDENOMINATOR is a free data retrieval call binding the contract method 0xcd7c9789. -// -// Solidity: function BASE_FEE_MAX_CHANGE_DENOMINATOR() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) BASEFEEMAXCHANGEDENOMINATOR() (*big.Int, error) { - return _OptimismPortal.Contract.BASEFEEMAXCHANGEDENOMINATOR(&_OptimismPortal.CallOpts) -} - -// BASEFEEMAXCHANGEDENOMINATOR is a free data retrieval call binding the contract method 0xcd7c9789. -// -// Solidity: function BASE_FEE_MAX_CHANGE_DENOMINATOR() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) BASEFEEMAXCHANGEDENOMINATOR() (*big.Int, error) { - return _OptimismPortal.Contract.BASEFEEMAXCHANGEDENOMINATOR(&_OptimismPortal.CallOpts) -} - -// ELASTICITYMULTIPLIER is a free data retrieval call binding the contract method 0x6bb0291e. -// -// Solidity: function ELASTICITY_MULTIPLIER() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) ELASTICITYMULTIPLIER(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "ELASTICITY_MULTIPLIER") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ELASTICITYMULTIPLIER is a free data retrieval call binding the contract method 0x6bb0291e. -// -// Solidity: function ELASTICITY_MULTIPLIER() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) ELASTICITYMULTIPLIER() (*big.Int, error) { - return _OptimismPortal.Contract.ELASTICITYMULTIPLIER(&_OptimismPortal.CallOpts) -} - -// ELASTICITYMULTIPLIER is a free data retrieval call binding the contract method 0x6bb0291e. -// -// Solidity: function ELASTICITY_MULTIPLIER() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) ELASTICITYMULTIPLIER() (*big.Int, error) { - return _OptimismPortal.Contract.ELASTICITYMULTIPLIER(&_OptimismPortal.CallOpts) -} - // GUARDIAN is a free data retrieval call binding the contract method 0x724c184c. // // Solidity: function GUARDIAN() view returns(address) @@ -312,37 +250,6 @@ func (_OptimismPortal *OptimismPortalCallerSession) GUARDIAN() (common.Address, return _OptimismPortal.Contract.GUARDIAN(&_OptimismPortal.CallOpts) } -// INITIALBASEFEE is a free data retrieval call binding the contract method 0x13620abd. -// -// Solidity: function INITIAL_BASE_FEE() view returns(uint128) -func (_OptimismPortal *OptimismPortalCaller) INITIALBASEFEE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "INITIAL_BASE_FEE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// INITIALBASEFEE is a free data retrieval call binding the contract method 0x13620abd. -// -// Solidity: function INITIAL_BASE_FEE() view returns(uint128) -func (_OptimismPortal *OptimismPortalSession) INITIALBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.INITIALBASEFEE(&_OptimismPortal.CallOpts) -} - -// INITIALBASEFEE is a free data retrieval call binding the contract method 0x13620abd. -// -// Solidity: function INITIAL_BASE_FEE() view returns(uint128) -func (_OptimismPortal *OptimismPortalCallerSession) INITIALBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.INITIALBASEFEE(&_OptimismPortal.CallOpts) -} - // L2ORACLE is a free data retrieval call binding the contract method 0x001c2ff6. // // Solidity: function L2_ORACLE() view returns(address) @@ -374,128 +281,35 @@ func (_OptimismPortal *OptimismPortalCallerSession) L2ORACLE() (common.Address, return _OptimismPortal.Contract.L2ORACLE(&_OptimismPortal.CallOpts) } -// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827. -// -// Solidity: function MAXIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) MAXIMUMBASEFEE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "MAXIMUM_BASE_FEE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827. -// -// Solidity: function MAXIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) MAXIMUMBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.MAXIMUMBASEFEE(&_OptimismPortal.CallOpts) -} - -// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827. -// -// Solidity: function MAXIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) MAXIMUMBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.MAXIMUMBASEFEE(&_OptimismPortal.CallOpts) -} - -// MAXRESOURCELIMIT is a free data retrieval call binding the contract method 0x64b79208. -// -// Solidity: function MAX_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) MAXRESOURCELIMIT(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "MAX_RESOURCE_LIMIT") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXRESOURCELIMIT is a free data retrieval call binding the contract method 0x64b79208. -// -// Solidity: function MAX_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) MAXRESOURCELIMIT() (*big.Int, error) { - return _OptimismPortal.Contract.MAXRESOURCELIMIT(&_OptimismPortal.CallOpts) -} - -// MAXRESOURCELIMIT is a free data retrieval call binding the contract method 0x64b79208. -// -// Solidity: function MAX_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) MAXRESOURCELIMIT() (*big.Int, error) { - return _OptimismPortal.Contract.MAXRESOURCELIMIT(&_OptimismPortal.CallOpts) -} - -// MINIMUMBASEFEE is a free data retrieval call binding the contract method 0x867ead13. -// -// Solidity: function MINIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) MINIMUMBASEFEE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "MINIMUM_BASE_FEE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MINIMUMBASEFEE is a free data retrieval call binding the contract method 0x867ead13. +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. // -// Solidity: function MINIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) MINIMUMBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.MINIMUMBASEFEE(&_OptimismPortal.CallOpts) -} - -// MINIMUMBASEFEE is a free data retrieval call binding the contract method 0x867ead13. -// -// Solidity: function MINIMUM_BASE_FEE() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) MINIMUMBASEFEE() (*big.Int, error) { - return _OptimismPortal.Contract.MINIMUMBASEFEE(&_OptimismPortal.CallOpts) -} - -// TARGETRESOURCELIMIT is a free data retrieval call binding the contract method 0xca3e99ba. -// -// Solidity: function TARGET_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalCaller) TARGETRESOURCELIMIT(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) SYSTEMCONFIG(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "TARGET_RESOURCE_LIMIT") + err := _OptimismPortal.contract.Call(opts, &out, "SYSTEM_CONFIG") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// TARGETRESOURCELIMIT is a free data retrieval call binding the contract method 0xca3e99ba. +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. // -// Solidity: function TARGET_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalSession) TARGETRESOURCELIMIT() (*big.Int, error) { - return _OptimismPortal.Contract.TARGETRESOURCELIMIT(&_OptimismPortal.CallOpts) +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalSession) SYSTEMCONFIG() (common.Address, error) { + return _OptimismPortal.Contract.SYSTEMCONFIG(&_OptimismPortal.CallOpts) } -// TARGETRESOURCELIMIT is a free data retrieval call binding the contract method 0xca3e99ba. +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. // -// Solidity: function TARGET_RESOURCE_LIMIT() view returns(int256) -func (_OptimismPortal *OptimismPortalCallerSession) TARGETRESOURCELIMIT() (*big.Int, error) { - return _OptimismPortal.Contract.TARGETRESOURCELIMIT(&_OptimismPortal.CallOpts) +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) SYSTEMCONFIG() (common.Address, error) { + return _OptimismPortal.Contract.SYSTEMCONFIG(&_OptimismPortal.CallOpts) } // FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. diff --git a/op-bindings/bindings/optimismportal_more.go b/op-bindings/bindings/optimismportal_more.go index d1efa5253195..c61f3f173d3c 100644 --- a/op-bindings/bindings/optimismportal_more.go +++ b/op-bindings/bindings/optimismportal_more.go @@ -13,7 +13,7 @@ const OptimismPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac var OptimismPortalStorageLayout = new(solc.StorageLayout) -var OptimismPortalDeployedBin = "0x6080604052600436106101835760003560e01c80638456cb59116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f146104ef578063e965084c1461050f578063e9e05c421461059b57600080fd5b8063ca3e99ba14610424578063cd7c978914610439578063cff0ab961461044e57600080fd5b80638c3152e9116100b05780638c3152e9146103a75780639bf62d82146103c7578063a14238e7146103f457600080fd5b80638456cb591461037a578063867ead131461038f5780638b4c40b0146101a857600080fd5b80635c1f2827116101385780636bb0291e116101125780636bb0291e146103115780636dbffb7814610326578063724c184c1461034657600080fd5b80635c1f28271461029d5780635c975abb146102cf57806364b79208146102f957600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105a9565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c5565b34801561026757600080fd5b506101a8610276366004614c3e565b6108e8565b34801561028757600080fd5b50610290610f4e565b6040516102049190614d94565b3480156102a957600080fd5b506102c16fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b3480156102db57600080fd5b506035546102e99060ff1681565b6040519015158152602001610204565b34801561030557600080fd5b506102c16301312d0081565b34801561031d57600080fd5b506102c1600a81565b34801561033257600080fd5b506102e9610341366004614da7565b610ff1565b34801561035257600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561038657600080fd5b506101a86110c8565b34801561039b57600080fd5b506102c1633b9aca0081565b3480156103b357600080fd5b506101a86103c2366004614dc0565b6111e8565b3480156103d357600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561040057600080fd5b506102e961040f366004614da7565b60336020526000908152604090205460ff1681565b34801561043057600080fd5b506102c1611ac3565b34801561044557600080fd5b506102c1600881565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b3480156104fb57600080fd5b506101a861050a366004614e05565b611ad5565b34801561051b57600080fd5b5061056d61052a366004614da7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105a9366004614e20565b8260005a905083156106605773ffffffffffffffffffffffffffffffffffffffff87161561066057604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f7074696d69736d506f7274616c3a20676173206c696d6974206d757374206360448201527f6f76657220696e737472696e7369632067617320636f737400000000000000006064820152608401610657565b3332811461071d575033731111000000000000000000000000000000001111015b60003488888888604051602001610738959493929190614ea5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a89190614d94565b60405180910390a450506107bc8282611cde565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610657565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff1615610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610657565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610657565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac69190614f2a565b519050610ae0610adb36869003860186614f8f565b611fd7565b8114610b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610657565b6000610b7987612033565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cab5750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca79190614f2a565b5114155b610d37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610657565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610df6888a614ff5565b8a60400135612063565b610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610657565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610f797f0000000000000000000000000000000000000000000000000000000000000000612087565b610fa27f0000000000000000000000000000000000000000000000000000000000000000612087565b610fcb7f0000000000000000000000000000000000000000000000000000000000000000612087565b604051602001610fdd93929190615079565b604051602081830303815290604052905090565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018290526000906110c29073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a79190614f2a565b602001516fffffffffffffffffffffffffffffffff166121c4565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610657565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108de565b60355460ff1615611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610657565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146112fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610657565b600061130982612033565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610657565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa15801561145f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148391906150ef565b81602001516fffffffffffffffffffffffffffffffff16101561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610657565b61156d81602001516fffffffffffffffffffffffffffffffff166121c4565b61161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610657565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614f2a565b82518151919250146117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610657565b6117c181602001516fffffffffffffffffffffffffffffffff166121c4565b611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610657565b60008381526033602052604090205460ff1615611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610657565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516119b493929190612267565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611a1990841515815260200190565b60405180910390a280158015611a2f5750326001145b15611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610657565b5050505050565b611ad2600a6301312d00615166565b81565b600054610100900460ff1615808015611af55750600054600160ff909116105b80611b0f5750303b158015611b0f575060005460ff166001145b611b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610657565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611c5b6122c1565b8015611cbe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611d14907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436151ce565b90508015611e4c576000611d2d600a6301312d00615166565b600154611d589190700100000000000000000000000000000000900467ffffffffffffffff166151e5565b905060006008611d6d600a6301312d00615166565b611d779190615259565b600154611d979084906fffffffffffffffffffffffffffffffff16615259565b611da19190615166565b600154909150600090611de690611dcb9084906fffffffffffffffffffffffffffffffff16615315565b633b9aca006fffffffffffffffffffffffffffffffff6123a4565b90506001841115611e0d57611e0a611dcb826008611e056001896151ce565b6123c3565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611e7f908490700100000000000000000000000000000000900467ffffffffffffffff16615389565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610657565b600154600090611f88906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166153b5565b90506000611f9a48633b9aca00612418565b611fa490836153f2565b905060005a611fb390866151ce565b905080821115611fcf57611fcf611fca82846151ce565b61242f565b505050505050565b60008160000151826020015183604001518460600151604051602001612016949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612016979096959101615406565b60008061206f8661245d565b905061207d8186868661248f565b9695505050505050565b6060816000036120ca57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120f457806120de8161545d565b91506120ed9050600a836153f2565b91506120ce565b60008167ffffffffffffffff81111561210f5761210f614a64565b6040519080825280601f01601f191660200182016040528015612139576020820181803683370190505b5090505b84156121bc5761214e6001836151ce565b915061215b600a86615495565b6121669060306154a9565b60f81b81838151811061217b5761217b6154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506121b5600a866153f2565b945061213d565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225591906150ef565b61225f90836154a9565b421192915050565b600080603f60c88601604002045a10156122aa576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff16612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610657565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60006123b96123b385856124bf565b836124cf565b90505b9392505050565b6000670de0b6b3a76400006124046123db8583615166565b6123ed90670de0b6b3a76400006151e5565b6123ff85670de0b6b3a7640000615259565b6124de565b61240e9086615259565b6123b99190615166565b60008183101561242857816123bc565b5090919050565b6000805a90505b825a61244290836151ce565b1015612458576124518261545d565b9150612436565b505050565b6060818051906020012060405160200161247991815260200190565b6040516020818303038152906040529050919050565b60006124b6846124a087868661250f565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561242857816123bc565b600081831261242857816123bc565b60006123bc670de0b6b3a7640000836124f686612f97565b6125009190615259565b61250a9190615166565b6131db565b6060600084511161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610657565b60006125878461341a565b9050600061259486613509565b90506000846040516020016125ab91815260200190565b60405160208183030381529060405290506000805b8451811015612f0e5760008582815181106125dd576125dd6154c1565b602002602001015190508451831115612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610657565b8260000361273157805180516020918201206040516126c6926126a092910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610657565b612888565b8051516020116127e7578051805160209182012060405161275b926126a092910190815260200190565b61272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610657565b805184516020808701919091208251919092012014612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610657565b612894601060016154a9565b81602001515103612a755784518303612a0d5760006128d082602001516010815181106128c3576128c36154c1565b60200260200101516136a4565b90506000815111612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610657565b6001875161297191906151ce565b83146129ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610657565b96506123bc95505050505050565b6000858481518110612a2157612a216154c1565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a4c57612a4c6154c1565b60200260200101519050612a5f81613804565b9550612a6c6001866154a9565b94505050612efb565b600281602001515103612e73576000612a8d82613829565b9050600081600081518110612aa457612aa46154c1565b016020015160f81c90506000612abb6002836154f0565b612ac6906002615512565b90506000612ad7848360ff1661384d565b90506000612ae58a8961384d565b90506000612af38383613883565b905080835114612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610657565b60ff851660021480612b9a575060ff85166003145b15612d8e5780825114612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610657565b6000612c4b88602001516001815181106128c3576128c36154c1565b90506000815111612cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610657565b60018d51612cec91906151ce565b8914612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610657565b9c506123bc9b505050505050505050505050565b60ff85161580612da1575060ff85166001145b15612de057612dcd8760200151600181518110612dc057612dc06154c1565b6020026020010151613804565b9950612dd9818a6154a9565b9850612e68565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610657565b505050505050612efb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610657565b5080612f068161545d565b9150506125c0565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610657565b6000808213613002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610657565b6000606061300f84613932565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361320c57506000919050565b680755bf798b4a1bf1e5821261327e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610657565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff81111561343a5761343a614a64565b60405190808252806020026020018201604052801561347f57816020015b60408051808201909152606080825260208201528152602001906001900390816134585790505b50905060005b828110156135015760405180604001604052808683815181106134aa576134aa6154c1565b602002602001015181526020016134d98784815181106134cc576134cc6154c1565b6020026020010151613a08565b8152508282815181106134ee576134ee6154c1565b6020908102919091010152600101613485565b509392505050565b8051606090600061351b8260026153b5565b67ffffffffffffffff81111561353357613533614a64565b6040519080825280601f01601f19166020018201604052801561355d576020820181803683370190505b5090506000805b8381101561369a5785818151811061357e5761357e6154c1565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836135da8360026153b5565b815181106135ea576135ea6154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f000000000000000000000000000000000000000000000000000000000000008216836136488360026153b5565b6136539060016154a9565b81518110613663576136636154c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613564565b5090949350505050565b606060008060006136b485613a1b565b9194509250905060008160018111156136cf576136cf615535565b1461375c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610657565b61376682846154a9565b8551146137f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610657565b6124b685602001518484614488565b606060208260000151106138205761381b826136a4565b6110c2565b6110c282614529565b60606110c261384883602001516000815181106128c3576128c36154c1565b613509565b60608251821061386c57506040805160208101909152600081526110c2565b6123bc838384865161387e91906151ce565b61453f565b6000806000835185511061389857835161389b565b84515b90505b808210801561392257508382815181106138ba576138ba6154c1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106138f9576138f96154c1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156135015781600101915061389e565b600080821161399d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610657565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60606110c2613a1683614717565b614800565b600080600080846000015111613ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610657565b6020840151805160001a607f8111613afe576000600160009450945094505050614481565b60b78111613d0c576000613b136080836151ce565b905080876000015111613bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610657565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613c4757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613cf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610657565b5060019550935060009250614481915050565b60bf811161405a576000613d2160b7836151ce565b905080876000015111613ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610657565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610657565b600184015160088302610100031c60378111613f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610657565b613f8881846154a9565b89511161403d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610657565b6140488360016154a9565b97509550600094506144819350505050565b60f7811161413b57600061406f60c0836151ce565b90508087600001511161412a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610657565b600195509350849250614481915050565b600061414860f7836151ce565b905080876000015111614203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610657565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036142e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610657565b600184015160088302610100031c603781116143a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610657565b6143af81846154a9565b895111614464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610657565b61446f8360016154a9565b97509550600194506144819350505050565b9193909250565b606060008267ffffffffffffffff8111156144a5576144a5614a64565b6040519080825280601f01601f1916602001820160405280156144cf576020820181803683370190505b509050826000036144e15790506123bc565b60006144ed85876154a9565b90506020820160005b8581101561450e5782810151828201526020016144f6565b8581111561451d576000868301525b50919695505050505050565b60606110c2826020015160008460000151614488565b60608182601f0110156145ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610657565b82828401101561461a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610657565b81830184511015614687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610657565b6060821580156146a6576040519150600082526020820160405261470e565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156146df5780518352602092830192016146c7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116147e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610657565b50604080518082019091528151815260209182019181019190915290565b6060600080600061481085613a1b565b91945092509050600181600181111561482b5761482b615535565b146148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610657565b84516148c483856154a9565b14614951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610657565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161496a5790505090506000845b8751811015614a58576000806149dd6040518060400160405280858d600001516149c191906151ce565b8152602001858d602001516149d691906154a9565b9052613a1b565b5091509150604051806040016040528083836149f991906154a9565b8152602001848c60200151614a0e91906154a9565b815250858581518110614a2357614a236154c1565b6020908102919091010152614a396001856154a9565b9350614a4581836154a9565b614a4f90846154a9565b92505050614997565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ada57614ada614a64565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614b0657600080fd5b919050565b600082601f830112614b1c57600080fd5b813567ffffffffffffffff811115614b3657614b36614a64565b614b6760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614a93565b818152846020838601011115614b7c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614bab57600080fd5b60405160c0810167ffffffffffffffff8282108183111715614bcf57614bcf614a64565b8160405282935084358352614be660208601614ae2565b6020840152614bf760408601614ae2565b6040840152606085013560608401526080850135608084015260a0850135915080821115614c2457600080fd5b50614c3185828601614b0b565b60a0830152505092915050565b600080600080600085870360e0811215614c5757600080fd5b863567ffffffffffffffff80821115614c6f57600080fd5b614c7b8a838b01614b99565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614cb457600080fd5b60408901955060c0890135925080831115614cce57600080fd5b828901925089601f840112614ce257600080fd5b8235915080821115614cf357600080fd5b508860208260051b8401011115614d0957600080fd5b959894975092955050506020019190565b60005b83811015614d35578181015183820152602001614d1d565b83811115614d44576000848401525b50505050565b60008151808452614d62816020860160208601614d1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123bc6020830184614d4a565b600060208284031215614db957600080fd5b5035919050565b600060208284031215614dd257600080fd5b813567ffffffffffffffff811115614de957600080fd5b6121bc84828501614b99565b80358015158114614b0657600080fd5b600060208284031215614e1757600080fd5b6123bc82614df5565b600080600080600060a08688031215614e3857600080fd5b614e4186614ae2565b945060208601359350604086013567ffffffffffffffff8082168214614e6657600080fd5b819450614e7560608901614df5565b93506080880135915080821115614e8b57600080fd5b50614e9888828901614b0b565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614ef9816049850160208701614d1a565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614b0657600080fd5b600060608284031215614f3c57600080fd5b6040516060810181811067ffffffffffffffff82111715614f5f57614f5f614a64565b60405282518152614f7260208401614f0a565b6020820152614f8360408401614f0a565b60408201529392505050565b600060808284031215614fa157600080fd5b6040516080810181811067ffffffffffffffff82111715614fc457614fc4614a64565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561501057615010614a64565b8360051b6020615021818301614a93565b86815291850191818101903684111561503957600080fd5b865b8481101561506d578035868111156150535760008081fd5b61505f36828b01614b0b565b84525091830191830161503b565b50979650505050505050565b6000845161508b818460208901614d1a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516150c7816001850160208a01614d1a565b600192019182015283516150e2816002840160208801614d1a565b0160020195945050505050565b60006020828403121561510157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261517557615175615108565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156151c9576151c9615137565b500590565b6000828210156151e0576151e0615137565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561521f5761521f615137565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561525357615253615137565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561529a5761529a615137565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152d5576152d5615137565b600087129250878205871284841616156152f1576152f1615137565b8785058712818416161561530757615307615137565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561534f5761534f615137565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561538357615383615137565b50500190565b600067ffffffffffffffff8083168185168083038211156153ac576153ac615137565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ed576153ed615137565b500290565b60008261540157615401615108565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261545160c0830184614d4a565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361548e5761548e615137565b5060010190565b6000826154a4576154a4615108565b500690565b600082198211156154bc576154bc615137565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff83168061550357615503615108565b8060ff84160691505092915050565b600060ff821660ff84168082101561552c5761552c615137565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a" +var OptimismPortalDeployedBin = "0x6080604052600436106101115760003560e01c80638b4c40b0116100a5578063cff0ab9611610074578063e965084c11610059578063e965084c146103c3578063e9e05c421461044f578063f04987501461046257600080fd5b8063cff0ab9614610302578063d53a822f146103a357600080fd5b80638b4c40b0146101365780638c3152e9146102855780639bf62d82146102a5578063a14238e7146102d257600080fd5b80635c975abb116100e15780635c975abb146101f25780636dbffb781461021c578063724c184c1461023c5780638456cb591461027057600080fd5b80621c2ff61461013d5780633f4ba83a1461019b5780634870496f146101b057806354fd4d50146101d057600080fd5b36610138576101363334620186a0600060405180602001604052806000815250610496565b005b600080fd5b34801561014957600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a757600080fd5b506101366106b2565b3480156101bc57600080fd5b506101366101cb366004614c13565b6107d5565b3480156101dc57600080fd5b506101e5610e3b565b6040516101929190614d69565b3480156101fe57600080fd5b5060355461020c9060ff1681565b6040519015158152602001610192565b34801561022857600080fd5b5061020c610237366004614d7c565b610ede565b34801561024857600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b34801561027c57600080fd5b50610136610fb5565b34801561029157600080fd5b506101366102a0366004614d95565b6110d5565b3480156102b157600080fd5b506032546101719073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102de57600080fd5b5061020c6102ed366004614d7c565b60336020526000908152604090205460ff1681565b34801561030e57600080fd5b5060015461036a906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610192565b3480156103af57600080fd5b506101366103be366004614dda565b6119b0565b3480156103cf57600080fd5b506104216103de366004614d7c565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610192565b61013661045d366004614df5565b610496565b34801561046e57600080fd5b506101717f000000000000000000000000000000000000000000000000000000000000000081565b8260005a9050831561054d5773ffffffffffffffffffffffffffffffffffffffff87161561054d57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156105e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f7074696d69736d506f7274616c3a20676173206c696d6974206d757374206360448201527f6f76657220696e737472696e7369632067617320636f737400000000000000006064820152608401610544565b3332811461060a575033731111000000000000000000000000000000001111015b60003488888888604051602001610625959493929190614e7a565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516106959190614d69565b60405180910390a450506106a98282611bb9565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610544565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff1615610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610544565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610544565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190614eff565b5190506109cd6109c836869003860186614f64565b611ee6565b8114610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610544565b6000610a6687611f42565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610b985750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190614eff565b5114155b610c24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610544565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ced9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610ce3888a614fca565b8a60400135611f72565b610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610544565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610e667f0000000000000000000000000000000000000000000000000000000000000000611f96565b610e8f7f0000000000000000000000000000000000000000000000000000000000000000611f96565b610eb87f0000000000000000000000000000000000000000000000000000000000000000611f96565b604051602001610eca9392919061504e565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610faf9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614eff565b602001516fffffffffffffffffffffffffffffffff166120d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610544565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016107cb565b60355460ff1615611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610544565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146111eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610544565b60006111f682611f42565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036112e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610544565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137091906150c4565b81602001516fffffffffffffffffffffffffffffffff16101561143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610544565b61145a81602001516fffffffffffffffffffffffffffffffff166120d3565b61150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610544565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190614eff565b825181519192501461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610544565b6116ae81602001516fffffffffffffffffffffffffffffffff166120d3565b611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610544565b60008381526033602052604090205460ff16156117ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610544565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516118a193929190612176565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061190690841515815260200190565b60405180910390a28015801561191c5750326001145b156119a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610544565b5050505050565b600054610100900460ff16158080156119d05750600054600160ff909116105b806119ea5750303b1580156119ea575060005460ff166001145b611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610544565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ad457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611b366121d0565b8015611b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611bef907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361510c565b90506000611bfb6122b3565b90506000816020015160ff16826000015163ffffffff16611c1c9190615152565b90508215611d5357600154600090611c53908390700100000000000000000000000000000000900467ffffffffffffffff166151ba565b90506000836040015160ff1683611c6a919061522e565b600154611c8a9084906fffffffffffffffffffffffffffffffff1661522e565b611c949190615152565b600154909150600090611ce590611cbe9084906fffffffffffffffffffffffffffffffff166152ea565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612379565b90506001861115611d1457611d11611cbe82876040015160ff1660018a611d0c919061510c565b612398565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611d86908490700100000000000000000000000000000000900467ffffffffffffffff1661535e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611e69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610544565b600154600090611e95906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661538a565b90506000611ea748633b9aca006123ed565b611eb190836153c7565b905060005a611ec0908861510c565b905080821115611edc57611edc611ed7828461510c565b612404565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611f25949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611f259790969591016153db565b600080611f7e86612432565b9050611f8c81868686612464565b9695505050505050565b606081600003611fd957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120035780611fed81615432565b9150611ffc9050600a836153c7565b9150611fdd565b60008167ffffffffffffffff81111561201e5761201e614a39565b6040519080825280601f01601f191660200182016040528015612048576020820181803683370190505b5090505b84156120cb5761205d60018361510c565b915061206a600a8661546a565b61207590603061547e565b60f81b81838151811061208a5761208a615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506120c4600a866153c7565b945061204c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612140573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216491906150c4565b61216e908361547e565b421192915050565b600080603f60c88601604002045a10156121b9576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff16612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610544565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa158015612350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237491906154ea565b905090565b600061238e6123888585612494565b836124a4565b90505b9392505050565b6000670de0b6b3a76400006123d96123b08583615152565b6123c290670de0b6b3a76400006151ba565b6123d485670de0b6b3a764000061522e565b6124b3565b6123e3908661522e565b61238e9190615152565b6000818310156123fd5781612391565b5090919050565b6000805a90505b825a612417908361510c565b101561242d5761242682615432565b915061240b565b505050565b6060818051906020012060405160200161244e91815260200190565b6040516020818303038152906040529050919050565b600061248b846124758786866124e4565b8051602091820120825192909101919091201490565b95945050505050565b6000818312156123fd5781612391565b60008183126123fd5781612391565b6000612391670de0b6b3a7640000836124cb86612f6c565b6124d5919061522e565b6124df9190615152565b6131b0565b60606000845111612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610544565b600061255c846133ef565b90506000612569866134de565b905060008460405160200161258091815260200190565b60405160208183030381529060405290506000805b8451811015612ee35760008582815181106125b2576125b2615496565b60200260200101519050845183111561264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610544565b82600003612706578051805160209182012060405161269b9261267592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610544565b61285d565b8051516020116127bc57805180516020918201206040516127309261267592910190815260200190565b612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610544565b80518451602080870191909120825191909201201461285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610544565b6128696010600161547e565b81602001515103612a4a57845183036129e25760006128a5826020015160108151811061289857612898615496565b6020026020010151613679565b90506000815111612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610544565b60018751612946919061510c565b83146129d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610544565b965061239195505050505050565b60008584815181106129f6576129f6615496565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a2157612a21615496565b60200260200101519050612a34816137d9565b9550612a4160018661547e565b94505050612ed0565b600281602001515103612e48576000612a62826137fe565b9050600081600081518110612a7957612a79615496565b016020015160f81c90506000612a90600283615589565b612a9b9060026155ab565b90506000612aac848360ff16613822565b90506000612aba8a89613822565b90506000612ac88383613858565b905080835114612b5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610544565b60ff851660021480612b6f575060ff85166003145b15612d635780825114612c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610544565b6000612c20886020015160018151811061289857612898615496565b90506000815111612cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610544565b60018d51612cc1919061510c565b8914612d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610544565b9c506123919b505050505050505050505050565b60ff85161580612d76575060ff85166001145b15612db557612da28760200151600181518110612d9557612d95615496565b60200260200101516137d9565b9950612dae818a61547e565b9850612e3d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610544565b505050505050612ed0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610544565b5080612edb81615432565b915050612595565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610544565b6000808213612fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610544565b60006060612fe484613907565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136131e157506000919050565b680755bf798b4a1bf1e58212613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610544565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b805160609060008167ffffffffffffffff81111561340f5761340f614a39565b60405190808252806020026020018201604052801561345457816020015b604080518082019091526060808252602082015281526020019060019003908161342d5790505b50905060005b828110156134d657604051806040016040528086838151811061347f5761347f615496565b602002602001015181526020016134ae8784815181106134a1576134a1615496565b60200260200101516139dd565b8152508282815181106134c3576134c3615496565b602090810291909101015260010161345a565b509392505050565b805160609060006134f082600261538a565b67ffffffffffffffff81111561350857613508614a39565b6040519080825280601f01601f191660200182016040528015613532576020820181803683370190505b5090506000805b8381101561366f5785818151811061355357613553615496565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836135af83600261538a565b815181106135bf576135bf615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f0000000000000000000000000000000000000000000000000000000000000082168361361d83600261538a565b61362890600161547e565b8151811061363857613638615496565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613539565b5090949350505050565b60606000806000613689856139f0565b9194509250905060008160018111156136a4576136a46155ce565b14613731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610544565b61373b828461547e565b8551146137ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610544565b61248b8560200151848461445d565b606060208260000151106137f5576137f082613679565b610faf565b610faf826144fe565b6060610faf61381d836020015160008151811061289857612898615496565b6134de565b6060825182106138415750604080516020810190915260008152610faf565b6123918383848651613853919061510c565b614514565b6000806000835185511061386d578351613870565b84515b90505b80821080156138f7575083828151811061388f5761388f615496565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106138ce576138ce615496565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156134d657816001019150613873565b6000808211613972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610544565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610faf6139eb836146ec565b6147d5565b600080600080846000015111613aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610544565b6020840151805160001a607f8111613ad3576000600160009450945094505050614456565b60b78111613ce1576000613ae860808361510c565b905080876000015111613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610544565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613c1c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610544565b5060019550935060009250614456915050565b60bf811161402f576000613cf660b78361510c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610544565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610544565b600184015160088302610100031c60378111613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610544565b613f5d818461547e565b895111614012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610544565b61401d83600161547e565b97509550600094506144569350505050565b60f7811161411057600061404460c08361510c565b9050808760000151116140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610544565b600195509350849250614456915050565b600061411d60f78361510c565b9050808760000151116141d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610544565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036142b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610544565b600184015160088302610100031c6037811161437a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610544565b614384818461547e565b895111614439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610544565b61444483600161547e565b97509550600194506144569350505050565b9193909250565b606060008267ffffffffffffffff81111561447a5761447a614a39565b6040519080825280601f01601f1916602001820160405280156144a4576020820181803683370190505b509050826000036144b6579050612391565b60006144c2858761547e565b90506020820160005b858110156144e35782810151828201526020016144cb565b858111156144f2576000868301525b50919695505050505050565b6060610faf82602001516000846000015161445d565b60608182601f011015614583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610544565b8282840110156145ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610544565b8183018451101561465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610544565b60608215801561467b57604051915060008252602082016040526146e3565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156146b457805183526020928301920161469c565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116147b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610544565b50604080518082019091528151815260209182019181019190915290565b606060008060006147e5856139f0565b919450925090506001816001811115614800576148006155ce565b1461488d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610544565b8451614899838561547e565b14614926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610544565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161493f5790505090506000845b8751811015614a2d576000806149b26040518060400160405280858d60000151614996919061510c565b8152602001858d602001516149ab919061547e565b90526139f0565b5091509150604051806040016040528083836149ce919061547e565b8152602001848c602001516149e3919061547e565b8152508585815181106149f8576149f8615496565b6020908102919091010152614a0e60018561547e565b9350614a1a818361547e565b614a24908461547e565b9250505061496c565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614aaf57614aaf614a39565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614adb57600080fd5b919050565b600082601f830112614af157600080fd5b813567ffffffffffffffff811115614b0b57614b0b614a39565b614b3c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614a68565b818152846020838601011115614b5157600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614b8057600080fd5b60405160c0810167ffffffffffffffff8282108183111715614ba457614ba4614a39565b8160405282935084358352614bbb60208601614ab7565b6020840152614bcc60408601614ab7565b6040840152606085013560608401526080850135608084015260a0850135915080821115614bf957600080fd5b50614c0685828601614ae0565b60a0830152505092915050565b600080600080600085870360e0811215614c2c57600080fd5b863567ffffffffffffffff80821115614c4457600080fd5b614c508a838b01614b6e565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614c8957600080fd5b60408901955060c0890135925080831115614ca357600080fd5b828901925089601f840112614cb757600080fd5b8235915080821115614cc857600080fd5b508860208260051b8401011115614cde57600080fd5b959894975092955050506020019190565b60005b83811015614d0a578181015183820152602001614cf2565b83811115614d19576000848401525b50505050565b60008151808452614d37816020860160208601614cef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123916020830184614d1f565b600060208284031215614d8e57600080fd5b5035919050565b600060208284031215614da757600080fd5b813567ffffffffffffffff811115614dbe57600080fd5b6120cb84828501614b6e565b80358015158114614adb57600080fd5b600060208284031215614dec57600080fd5b61239182614dca565b600080600080600060a08688031215614e0d57600080fd5b614e1686614ab7565b945060208601359350604086013567ffffffffffffffff8082168214614e3b57600080fd5b819450614e4a60608901614dca565b93506080880135915080821115614e6057600080fd5b50614e6d88828901614ae0565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614ece816049850160208701614cef565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614adb57600080fd5b600060608284031215614f1157600080fd5b6040516060810181811067ffffffffffffffff82111715614f3457614f34614a39565b60405282518152614f4760208401614edf565b6020820152614f5860408401614edf565b60408201529392505050565b600060808284031215614f7657600080fd5b6040516080810181811067ffffffffffffffff82111715614f9957614f99614a39565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614fe557614fe5614a39565b8360051b6020614ff6818301614a68565b86815291850191818101903684111561500e57600080fd5b865b84811015615042578035868111156150285760008081fd5b61503436828b01614ae0565b845250918301918301615010565b50979650505050505050565b60008451615060818460208901614cef565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161509c816001850160208a01614cef565b600192019182015283516150b7816002840160208801614cef565b0160020195945050505050565b6000602082840312156150d657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561511e5761511e6150dd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261516157615161615123565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156151b5576151b56150dd565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156151f4576151f46150dd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615228576152286150dd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561526f5761526f6150dd565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152aa576152aa6150dd565b600087129250878205871284841616156152c6576152c66150dd565b878505871281841616156152dc576152dc6150dd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615324576153246150dd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615358576153586150dd565b50500190565b600067ffffffffffffffff808316818516808303821115615381576153816150dd565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c2576153c26150dd565b500290565b6000826153d6576153d6615123565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261542660c0830184614d1f565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615463576154636150dd565b5060010190565b60008261547957615479615123565b500690565b60008219821115615491576154916150dd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff81168114614adb57600080fd5b805160ff81168114614adb57600080fd5b600060c082840312156154fc57600080fd5b60405160c0810181811067ffffffffffffffff8211171561551f5761551f614a39565b60405261552b836154c5565b8152615539602084016154d9565b602082015261554a604084016154d9565b604082015261555b606084016154c5565b606082015261556c608084016154c5565b608082015261557d60a08401614edf565b60a08201529392505050565b600060ff83168061559c5761559c615123565b8060ff84160691505092915050565b600060ff821660ff8416808210156155c5576155c56150dd565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(OptimismPortalStorageLayoutJSON), OptimismPortalStorageLayout); err != nil { diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index 2122bc7101d6..78b86274f960 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -28,10 +28,20 @@ var ( _ = event.NewSubscription ) +// SystemConfigResourceConfig is an auto generated low-level Go binding around an user-defined struct. +type SystemConfigResourceConfig struct { + MaxResourceLimit uint32 + ElasticityMultiplier uint8 + BaseFeeMaxChangeDenominator uint8 + MinimumBaseFee uint32 + SystemTxMaxGas uint32 + MaximumBaseFee *big.Int +} + // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620015403803806200154083398101604081905262000034916200047b565b60016080819052600060a05260c052620000538686868686866200005f565b505050505050620004f0565b600054610100900460ff1615808015620000805750600054600160ff909116105b80620000b057506200009d306200025360201b620009021760201c565b158015620000b0575060005460ff166001145b620001195760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013d576000805461ff0019166101001790555b627a12006001600160401b03841610156200019b5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000110565b620001a562000262565b620001b087620002ca565b606586905560668590556067849055606880546001600160401b0319166001600160401b03851617905562000203827f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b80156200024a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002be5760405162461bcd60e51b815260206004820152602b60248201526000805160206200152083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000110565b620002c862000349565b565b620002d4620003b0565b6001600160a01b0381166200033b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000110565b62000346816200040c565b50565b600054610100900460ff16620003a55760405162461bcd60e51b815260206004820152602b60248201526000805160206200152083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000110565b620002c8336200040c565b6033546001600160a01b03163314620002c85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000110565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200047657600080fd5b919050565b60008060008060008060c087890312156200049557600080fd5b620004a0876200045e565b6020880151604089015160608a015160808b0151939950919750955093506001600160401b0381168114620004d457600080fd5b9150620004e460a088016200045e565b90509295509295509295565b60805160a05160c0516110006200052060003960006103c80152600061039f0152600061037601526110006000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638f974d7f116100b2578063e81b2c6d11610081578063f45e65d811610066578063f45e65d814610286578063f68016b71461028f578063ffa1ad74146102a357600080fd5b8063e81b2c6d1461026a578063f2fde38b1461027357600080fd5b80638f974d7f1461021e578063935f029e14610231578063b40a817c14610244578063c9b26f611461025757600080fd5b80634f16540b116100ee5780634f16540b146101bc57806354fd4d50146101e3578063715018a6146101f85780638da5cb5b1461020057600080fd5b80630c18c1621461012057806318d139181461013c5780631fd19ee11461015157806329477e8614610199575b600080fd5b61012960655481565b6040519081526020015b60405180910390f35b61014f61014a366004610cb6565b6102ab565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610133565b6101a3627a120081565b60405167ffffffffffffffff9091168152602001610133565b6101297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6101eb61036f565b6040516101339190610d52565b61014f610412565b60335473ffffffffffffffffffffffffffffffffffffffff16610174565b61014f61022c366004610d7d565b610426565b61014f61023f366004610ddc565b6106aa565b61014f610252366004610dfe565b610743565b61014f610265366004610e19565b61081b565b61012960675481565b61014f610281366004610cb6565b61084b565b61012960665481565b6068546101a39067ffffffffffffffff1681565b610129600081565b6102b361091e565b6102db817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516103639190610d52565b60405180910390a35050565b606061039a7f000000000000000000000000000000000000000000000000000000000000000061099f565b6103c37f000000000000000000000000000000000000000000000000000000000000000061099f565b6103ec7f000000000000000000000000000000000000000000000000000000000000000061099f565b6040516020016103fe93929190610e32565b604051602081830303815290604052905090565b61041a61091e565b6104246000610adc565b565b600054610100900460ff16158080156104465750600054600160ff909116105b806104605750303b158015610460575060005460ff166001145b6104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561054f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b627a120067ffffffffffffffff841610156105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016104e8565b6105ce610b53565b6105d78761084b565b606586905560668590556067849055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0882905580156106a157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6106b261091e565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516107369190610d52565b60405180910390a3505050565b61074b61091e565b627a120067ffffffffffffffff821610156107c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016104e8565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610332565b61082361091e565b6067819055604080516020808201849052825180830390910181529082019091526000610332565b61085361091e565b73ffffffffffffffffffffffffffffffffffffffff81166108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104e8565b6108ff81610adc565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e8565b6060816000036109e257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610a0c57806109f681610ed7565b9150610a059050600a83610f3e565b91506109e6565b60008167ffffffffffffffff811115610a2757610a27610f52565b6040519080825280601f01601f191660200182016040528015610a51576020820181803683370190505b5090505b8415610ad457610a66600183610f81565b9150610a73600a86610f98565b610a7e906030610fac565b60f81b818381518110610a9357610a93610fc4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610acd600a86610f3e565b9450610a55565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104e8565b610424600054610100900460ff16610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104e8565b61042433610adc565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cb157600080fd5b919050565b600060208284031215610cc857600080fd5b610cd182610c8d565b9392505050565b60005b83811015610cf3578181015183820152602001610cdb565b83811115610d02576000848401525b50505050565b60008151808452610d20816020860160208601610cd8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610cd16020830184610d08565b803567ffffffffffffffff81168114610cb157600080fd5b60008060008060008060c08789031215610d9657600080fd5b610d9f87610c8d565b9550602087013594506040870135935060608701359250610dc260808801610d65565b9150610dd060a08801610c8d565b90509295509295509295565b60008060408385031215610def57600080fd5b50508035926020909101359150565b600060208284031215610e1057600080fd5b610cd182610d65565b600060208284031215610e2b57600080fd5b5035919050565b60008451610e44818460208901610cd8565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e80816001850160208a01610cd8565b60019201918201528351610e9b816002840160208801610cd8565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f0857610f08610ea8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610f4d57610f4d610f0f565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610f9357610f93610ea8565b500390565b600082610fa757610fa7610f0f565b500690565b60008219821115610fbf57610fbf610ea8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"structSystemConfig.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b5060405162001cf838038062001cf8833981016040819052620000349162000638565b6001608081815260a0918252600060c09081526040805191820181526301312d008252600a6020830152600890820152633b9aca006060820152620f4240918101919091526001600160801b03918101919091526200009987878787878787620000a6565b50505050505050620006e4565b600054610100900460ff1615808015620000c75750600054600160ff909116105b80620000f75750620000e430620002ac60201b62000ba31760201c565b158015620000f7575060005460ff166001145b620001605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000184576000805461ff0019166101001790555b6200018e620002bb565b620001998862000323565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001ec837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001f782620003a2565b62000201620004d3565b846001600160401b031610156200025b5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000157565b8015620002a2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620003175760405162461bcd60e51b815260206004820152602b602482015260008051602062001cd883398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000157565b6200032162000506565b565b6200032d6200056d565b6001600160a01b038116620003945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000157565b6200039f81620005c9565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003c757600080fd5b6000816040015160ff1611620003dc57600080fd5b606854608082015182516001600160401b0390921691620003fe9190620006ad565b63ffffffff1611156200041057600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620004fb9063ffffffff6a0100000000000000000000820481169116620006ad565b63ffffffff16905090565b600054610100900460ff16620005625760405162461bcd60e51b815260206004820152602b602482015260008051602062001cd883398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000157565b6200032133620005c9565b6033546001600160a01b03163314620003215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000157565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200063357600080fd5b919050565b60008060008060008060c087890312156200065257600080fd5b6200065d876200061b565b6020880151604089015160608a015160808b0151939950919750955093506001600160401b03811681146200069157600080fd5b9150620006a160a088016200061b565b90509295509295509295565b600063ffffffff808316818516808303821115620006db57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60805160a05160c0516115c4620007146000396000610599015260006105700152600061054701526115c46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b366004611114565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b61017a61050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610244610540565b60405161018491906111b0565b6101a06105e3565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046111c3565b6105f7565b6101a06102983660046111fd565b610690565b6101a06102ab366004611355565b610771565b6101a06102be366004611371565b61082f565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e366004611114565b61085f565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461138a565b610916565b61017a600081565b610453610bbf565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906111b0565b60405180910390a35050565b6069546000906105359063ffffffff6a010000000000000000000082048116911661142c565b63ffffffff16905090565b606061056b7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105947f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105bd7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6040516020016105cf93929190611454565b604051602081830303815290604052905090565b6105eb610bbf565b6105f56000610d7d565b565b6105ff610bbf565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161068391906111b0565b60405180910390a3505050565b610698610bbf565b6106a061050f565b8167ffffffffffffffff161015610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b610779610bbf565b61078281610df4565b6000816040516020016107f89190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b610837610bbf565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b610867610bbf565b73ffffffffffffffffffffffffffffffffffffffff811661090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161070f565b61091381610d7d565b50565b600054610100900460ff16158080156109365750600054600160ff909116105b806109505750303b158015610950575060005460ff166001145b6109dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161070f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a42610fb1565b610a4b8861085f565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abb82610df4565b610ac361050f565b8467ffffffffffffffff161015610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161070f565b8015610b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161070f565b606081600003610c8357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cad5780610c97816114ca565b9150610ca69050600a83611531565b9150610c87565b60008167ffffffffffffffff811115610cc857610cc8611218565b6040519080825280601f01601f191660200182016040528015610cf2576020820181803683370190505b5090505b8415610d7557610d07600183611545565b9150610d14600a8661155c565b610d1f906030611570565b60f81b818381518110610d3457610d34611588565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d6e600a86611531565b9450610cf6565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e2157600080fd5b6000816040015160ff1611610e3557600080fd5b6068546080820151825167ffffffffffffffff90921691610e56919061142c565b63ffffffff161115610e6757600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f5600054610100900460ff166110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f533610d7d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461110f57600080fd5b919050565b60006020828403121561112657600080fd5b61112f826110eb565b9392505050565b60005b83811015611151578181015183820152602001611139565b83811115611160576000848401525b50505050565b6000815180845261117e816020860160208601611136565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061112f6020830184611166565b600080604083850312156111d657600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461110f57600080fd5b60006020828403121561120f57600080fd5b61112f826111e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461110f57600080fd5b803560ff8116811461110f57600080fd5b80356fffffffffffffffffffffffffffffffff8116811461110f57600080fd5b600060c0828403121561129e57600080fd5b60405160c0810181811067ffffffffffffffff821117156112e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806112f783611247565b81526113056020840161125b565b60208201526113166040840161125b565b604082015261132760608401611247565b606082015261133860808401611247565b608082015261134960a0840161126c565b60a08201525092915050565b600060c0828403121561136757600080fd5b61112f838361128c565b60006020828403121561138357600080fd5b5035919050565b6000806000806000806000610180888a0312156113a657600080fd5b6113af886110eb565b96506020880135955060408801359450606088013593506113d2608089016111e5565b92506113e060a089016110eb565b91506113ef8960c08a0161128c565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff80831681851680830382111561144b5761144b6113fd565b01949350505050565b60008451611466818460208901611136565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516114a2816001850160208a01611136565b600192019182015283516114bd816002840160208801611136565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fb576114fb6113fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261154057611540611502565b500490565b600082821015611557576115576113fd565b500390565b60008261156b5761156b611502565b500690565b60008219821115611583576115836113fd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -356,6 +366,37 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) } +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minimumGasLimit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint256) +func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (*big.Int, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (*big.Int, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + // Overhead is a free data retrieval call binding the contract method 0x0c18c162. // // Solidity: function overhead() view returns(uint256) @@ -418,6 +459,37 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) return _SystemConfig.Contract.Owner(&_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) (SystemConfigResourceConfig, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") + + if err != nil { + return *new(SystemConfigResourceConfig), err + } + + out0 := *abi.ConvertType(out[0], new(SystemConfigResourceConfig)).(*SystemConfigResourceConfig) + + 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() (SystemConfigResourceConfig, 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() (SystemConfigResourceConfig, 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) @@ -511,25 +583,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x8f974d7f. +// Initialize is a paid mutator transaction binding the contract method 0xf975e925. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } -// Initialize is a paid mutator transaction binding the contract method 0x8f974d7f. +// Initialize is a paid mutator transaction binding the contract method 0xf975e925. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } -// Initialize is a paid mutator transaction binding the contract method 0x8f974d7f. +// Initialize is a paid mutator transaction binding the contract method 0xf975e925. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -616,6 +688,27 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactor) SetResourceConfig(opts *bind.TransactOpts, _config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setResourceConfig", _config) +} + +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigSession) SetResourceConfig(_config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) +} + +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetResourceConfig(_config SystemConfigResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) +} + // SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. // // Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() diff --git a/op-bindings/bindings/systemconfig_more.go b/op-bindings/bindings/systemconfig_more.go index 046b3f24b9ed..a55dd8fb6e02 100644 --- a/op-bindings/bindings/systemconfig_more.go +++ b/op-bindings/bindings/systemconfig_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1009_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1012_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct SystemConfig.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var SystemConfigStorageLayout = new(solc.StorageLayout) -var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80638f974d7f116100b2578063e81b2c6d11610081578063f45e65d811610066578063f45e65d814610286578063f68016b71461028f578063ffa1ad74146102a357600080fd5b8063e81b2c6d1461026a578063f2fde38b1461027357600080fd5b80638f974d7f1461021e578063935f029e14610231578063b40a817c14610244578063c9b26f611461025757600080fd5b80634f16540b116100ee5780634f16540b146101bc57806354fd4d50146101e3578063715018a6146101f85780638da5cb5b1461020057600080fd5b80630c18c1621461012057806318d139181461013c5780631fd19ee11461015157806329477e8614610199575b600080fd5b61012960655481565b6040519081526020015b60405180910390f35b61014f61014a366004610cb6565b6102ab565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610133565b6101a3627a120081565b60405167ffffffffffffffff9091168152602001610133565b6101297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6101eb61036f565b6040516101339190610d52565b61014f610412565b60335473ffffffffffffffffffffffffffffffffffffffff16610174565b61014f61022c366004610d7d565b610426565b61014f61023f366004610ddc565b6106aa565b61014f610252366004610dfe565b610743565b61014f610265366004610e19565b61081b565b61012960675481565b61014f610281366004610cb6565b61084b565b61012960665481565b6068546101a39067ffffffffffffffff1681565b610129600081565b6102b361091e565b6102db817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516103639190610d52565b60405180910390a35050565b606061039a7f000000000000000000000000000000000000000000000000000000000000000061099f565b6103c37f000000000000000000000000000000000000000000000000000000000000000061099f565b6103ec7f000000000000000000000000000000000000000000000000000000000000000061099f565b6040516020016103fe93929190610e32565b604051602081830303815290604052905090565b61041a61091e565b6104246000610adc565b565b600054610100900460ff16158080156104465750600054600160ff909116105b806104605750303b158015610460575060005460ff166001145b6104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561054f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b627a120067ffffffffffffffff841610156105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016104e8565b6105ce610b53565b6105d78761084b565b606586905560668590556067849055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0882905580156106a157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6106b261091e565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516107369190610d52565b60405180910390a3505050565b61074b61091e565b627a120067ffffffffffffffff821610156107c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016104e8565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610332565b61082361091e565b6067819055604080516020808201849052825180830390910181529082019091526000610332565b61085361091e565b73ffffffffffffffffffffffffffffffffffffffff81166108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104e8565b6108ff81610adc565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e8565b6060816000036109e257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610a0c57806109f681610ed7565b9150610a059050600a83610f3e565b91506109e6565b60008167ffffffffffffffff811115610a2757610a27610f52565b6040519080825280601f01601f191660200182016040528015610a51576020820181803683370190505b5090505b8415610ad457610a66600183610f81565b9150610a73600a86610f98565b610a7e906030610fac565b60f81b818381518110610a9357610a93610fc4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610acd600a86610f3e565b9450610a55565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104e8565b610424600054610100900460ff16610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104e8565b61042433610adc565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cb157600080fd5b919050565b600060208284031215610cc857600080fd5b610cd182610c8d565b9392505050565b60005b83811015610cf3578181015183820152602001610cdb565b83811115610d02576000848401525b50505050565b60008151808452610d20816020860160208601610cd8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610cd16020830184610d08565b803567ffffffffffffffff81168114610cb157600080fd5b60008060008060008060c08789031215610d9657600080fd5b610d9f87610c8d565b9550602087013594506040870135935060608701359250610dc260808801610d65565b9150610dd060a08801610c8d565b90509295509295509295565b60008060408385031215610def57600080fd5b50508035926020909101359150565b600060208284031215610e1057600080fd5b610cd182610d65565b600060208284031215610e2b57600080fd5b5035919050565b60008451610e44818460208901610cd8565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e80816001850160208a01610cd8565b60019201918201528351610e9b816002840160208801610cd8565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f0857610f08610ea8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610f4d57610f4d610f0f565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610f9357610f93610ea8565b500390565b600082610fa757610fa7610f0f565b500690565b60008219821115610fbf57610fbf610ea8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" +var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b366004611114565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b61017a61050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610244610540565b60405161018491906111b0565b6101a06105e3565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046111c3565b6105f7565b6101a06102983660046111fd565b610690565b6101a06102ab366004611355565b610771565b6101a06102be366004611371565b61082f565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e366004611114565b61085f565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461138a565b610916565b61017a600081565b610453610bbf565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906111b0565b60405180910390a35050565b6069546000906105359063ffffffff6a010000000000000000000082048116911661142c565b63ffffffff16905090565b606061056b7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105947f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105bd7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6040516020016105cf93929190611454565b604051602081830303815290604052905090565b6105eb610bbf565b6105f56000610d7d565b565b6105ff610bbf565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161068391906111b0565b60405180910390a3505050565b610698610bbf565b6106a061050f565b8167ffffffffffffffff161015610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b610779610bbf565b61078281610df4565b6000816040516020016107f89190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b610837610bbf565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b610867610bbf565b73ffffffffffffffffffffffffffffffffffffffff811661090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161070f565b61091381610d7d565b50565b600054610100900460ff16158080156109365750600054600160ff909116105b806109505750303b158015610950575060005460ff166001145b6109dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161070f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a42610fb1565b610a4b8861085f565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abb82610df4565b610ac361050f565b8467ffffffffffffffff161015610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161070f565b8015610b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161070f565b606081600003610c8357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cad5780610c97816114ca565b9150610ca69050600a83611531565b9150610c87565b60008167ffffffffffffffff811115610cc857610cc8611218565b6040519080825280601f01601f191660200182016040528015610cf2576020820181803683370190505b5090505b8415610d7557610d07600183611545565b9150610d14600a8661155c565b610d1f906030611570565b60f81b818381518110610d3457610d34611588565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d6e600a86611531565b9450610cf6565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e2157600080fd5b6000816040015160ff1611610e3557600080fd5b6068546080820151825167ffffffffffffffff90921691610e56919061142c565b63ffffffff161115610e6757600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f5600054610100900460ff166110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f533610d7d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461110f57600080fd5b919050565b60006020828403121561112657600080fd5b61112f826110eb565b9392505050565b60005b83811015611151578181015183820152602001611139565b83811115611160576000848401525b50505050565b6000815180845261117e816020860160208601611136565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061112f6020830184611166565b600080604083850312156111d657600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461110f57600080fd5b60006020828403121561120f57600080fd5b61112f826111e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461110f57600080fd5b803560ff8116811461110f57600080fd5b80356fffffffffffffffffffffffffffffffff8116811461110f57600080fd5b600060c0828403121561129e57600080fd5b60405160c0810181811067ffffffffffffffff821117156112e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806112f783611247565b81526113056020840161125b565b60208201526113166040840161125b565b604082015261132760608401611247565b606082015261133860808401611247565b608082015261134960a0840161126c565b60a08201525092915050565b600060c0828403121561136757600080fd5b61112f838361128c565b60006020828403121561138357600080fd5b5035919050565b6000806000806000806000610180888a0312156113a657600080fd5b6113af886110eb565b96506020880135955060408801359450606088013593506113d2608089016111e5565b92506113e060a089016110eb565b91506113ef8960c08a0161128c565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff80831681851680830382111561144b5761144b6113fd565b01949350505050565b60008451611466818460208901611136565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516114a2816001850160208a01611136565b600192019182015283516114bd816002840160208801611136565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fb576114fb6113fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261154057611540611502565b500490565b600082821015611557576115576113fd565b500390565b60008261156b5761156b611502565b500690565b60008219821115611583576115836113fd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(SystemConfigStorageLayoutJSON), SystemConfigStorageLayout); err != nil { diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index dd30f3556577..d0cfc44ff584 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" @@ -67,6 +68,26 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { if err != nil { return nil, err } + + portalABI, err := bindings.OptimismPortalMetaData.GetAbi() + if err != nil { + return nil, err + } + // Initialize the OptimismPortal without being paused + data, err := portalABI.Pack("initialize", false) + if err != nil { + return nil, fmt.Errorf("cannot abi encode initialize for OptimismPortal: %w", err) + } + if _, err := upgradeProxy( + backend, + opts, + depsByName["OptimismPortalProxy"].Address, + depsByName["OptimismPortal"].Address, + data, + ); err != nil { + return nil, fmt.Errorf("cannot upgrade OptimismPortalProxy: %w", err) + } + sysCfgABI, err := bindings.SystemConfigMetaData.GetAbi() if err != nil { return nil, err @@ -75,7 +96,13 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { if gasLimit == 0 { gasLimit = defaultL2GasLimit } - data, err := sysCfgABI.Pack( + + uint128Max, ok := new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) + if !ok { + return nil, errors.New("bad uint128Max") + } + + data, err = sysCfgABI.Pack( "initialize", config.FinalSystemOwner, uint642Big(config.GasPriceOracleOverhead), @@ -83,6 +110,14 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { config.BatchSenderAddress.Hash(), gasLimit, config.P2PSequencerAddress, + bindings.SystemConfigResourceConfig{ + MaxResourceLimit: 20_000_000, + ElasticityMultiplier: 10, + BaseFeeMaxChangeDenominator: 8, + MinimumBaseFee: params.GWei, + SystemTxMaxGas: 1_000_000, + MaximumBaseFee: uint128Max, + }, ) if err != nil { return nil, fmt.Errorf("cannot abi encode initialize for SystemConfig: %w", err) @@ -94,7 +129,7 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { depsByName["SystemConfig"].Address, data, ); err != nil { - return nil, err + return nil, fmt.Errorf("cannot upgrade SystemConfigProxy: %w", err) } l2ooABI, err := bindings.L2OutputOracleMetaData.GetAbi() @@ -119,24 +154,6 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { return nil, err } - portalABI, err := bindings.OptimismPortalMetaData.GetAbi() - if err != nil { - return nil, err - } - // Initialize the OptimismPortal without being paused - data, err = portalABI.Pack("initialize", false) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for OptimismPortal: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["OptimismPortalProxy"].Address, - depsByName["OptimismPortal"].Address, - data, - ); err != nil { - return nil, err - } l1XDMABI, err := bindings.L1CrossDomainMessengerMetaData.GetAbi() if err != nil { return nil, err @@ -264,6 +281,7 @@ func deployL1Contracts(config *DeployConfig, backend *backends.SimulatedBackend) if gasLimit == 0 { gasLimit = defaultL2GasLimit } + constructors = append(constructors, []deployer.Constructor{ { Name: "SystemConfig", @@ -297,6 +315,7 @@ func deployL1Contracts(config *DeployConfig, backend *backends.SimulatedBackend) predeploys.DevL2OutputOracleAddr, config.PortalGuardian, true, // _paused + predeploys.DevSystemConfigAddr, }, }, { @@ -362,6 +381,7 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep deployment.Args[0].(common.Address), deployment.Args[1].(common.Address), deployment.Args[2].(bool), + deployment.Args[3].(common.Address), ) case "L1CrossDomainMessenger": _, tx, _, err = bindings.DeployL1CrossDomainMessenger( @@ -421,6 +441,15 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep func upgradeProxy(backend *backends.SimulatedBackend, opts *bind.TransactOpts, proxyAddr common.Address, implAddr common.Address, callData []byte) (*types.Transaction, error) { var tx *types.Transaction + + code, err := backend.CodeAt(context.Background(), implAddr, nil) + if err != nil { + return nil, err + } + if len(code) == 0 { + return nil, fmt.Errorf("no code at %s", implAddr) + } + proxy, err := bindings.NewProxy(proxyAddr, backend) if err != nil { return nil, err diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-full.json b/op-chain-ops/genesis/testdata/test-deploy-config-full.json index af04f2e31797..c51147e1942b 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-full.json +++ b/op-chain-ops/genesis/testdata/test-deploy-config-full.json @@ -16,7 +16,7 @@ "l1BlockTime": 15, "l1GenesisBlockNonce": "0x0", "cliqueSignerAddress": "0x0000000000000000000000000000000000000000", - "l1GenesisBlockGasLimit": "0xe4e1c0", + "l1GenesisBlockGasLimit": "0x1c9c380", "l1GenesisBlockDifficulty": "0x1", "finalSystemOwner": "0x0000000000000000000000000000000000000111", "portalGuardian": "0x0000000000000000000000000000000000000112", @@ -29,7 +29,7 @@ "l1GenesisBlockTimestamp": "0x0", "l1GenesisBlockBaseFeePerGas": "0x3b9aca00", "l2GenesisBlockNonce": "0x0", - "l2GenesisBlockGasLimit": "0xe4e1c0", + "l2GenesisBlockGasLimit": "0x1c9c380", "l2GenesisBlockDifficulty": "0x1", "l2GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "l2GenesisBlockNumber": "0x0", diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index 4b2ffdeaa4ab..a00162b5373c 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -45,12 +45,12 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { uint64 internal constant RECEIVE_DEFAULT_GAS_LIMIT = 100_000; /** - * @notice Address of the L2OutputOracle. + * @notice Address of the L2OutputOracle contract. */ L2OutputOracle public immutable L2_ORACLE; /** - * + * @notice Address of the SystemConfig contract. */ SystemConfig public immutable SYSTEM_CONFIG; @@ -209,7 +209,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { /** * @notice */ - function resourceConfig() public view override returns (SystemConfig.ResourceConfig memory) { + function _resourceConfig() internal view override returns (SystemConfig.ResourceConfig memory) { return SYSTEM_CONFIG.resourceConfig(); } diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index 9740082b8e26..14082077e458 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -64,7 +64,7 @@ abstract contract ResourceMetering is Initializable { // Update block number and base fee if necessary. uint256 blockDiff = block.number - params.prevBlockNum; - SystemConfig.ResourceConfig memory config = resourceConfig(); + SystemConfig.ResourceConfig memory config = _resourceConfig(); int256 targetResourceLimit = int256(uint256(config.maxResourceLimit)) / int256(uint256(config.elasticityMultiplier)); if (blockDiff > 0) { @@ -136,7 +136,7 @@ abstract contract ResourceMetering is Initializable { /** * @notice */ - function resourceConfig() public virtual returns (SystemConfig.ResourceConfig memory); + function _resourceConfig() internal virtual returns (SystemConfig.ResourceConfig memory); /** * @notice Sets initial resource parameter values. This function must either be called by the @@ -144,10 +144,8 @@ abstract contract ResourceMetering is Initializable { */ // solhint-disable-next-line func-name-mixedcase function __ResourceMetering_init() internal onlyInitializing { - SystemConfig.ResourceConfig memory config = resourceConfig(); - params = ResourceParams({ - prevBaseFee: config.minimumBaseFee, + prevBaseFee: 1 gwei, prevBoughtGas: 0, prevBlockNum: uint64(block.number) }); diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index ed77352e68cc..9265120140bd 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -238,10 +238,16 @@ contract SystemConfig is OwnableUpgradeable, Semver { } } + /** + * @notice + */ function resourceConfig() external view returns (ResourceConfig memory) { return _resourceConfig; } + /** + * @notice + */ function setResourceConfig(ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); @@ -249,6 +255,9 @@ contract SystemConfig is OwnableUpgradeable, Semver { emit ConfigUpdate(VERSION, UpdateType.RESOURCE_CONFIG, data); } + /** + * @notice + */ function _setResourceConfig(ResourceConfig memory _config) internal { require(_config.minimumBaseFee <= _config.maximumBaseFee); require(_config.baseFeeMaxChangeDenominator > 0); @@ -257,6 +266,9 @@ contract SystemConfig is OwnableUpgradeable, Semver { _resourceConfig = _config; } + /** + * @notice + */ function minimumGasLimit() public view returns (uint256) { return _resourceConfig.maxResourceLimit + _resourceConfig.systemTxMaxGas; } diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index 26205d89b670..fd1fcd59dca7 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -25,7 +25,11 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { __ResourceMetering_init(); } - function resourceConfig() public pure override returns (SystemConfig.ResourceConfig memory) { + function resourceConfig() public pure returns (SystemConfig.ResourceConfig memory) { + return _resourceConfig(); + } + + function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, diff --git a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol index 7a7e4494ce6a..a04dbbb081e5 100644 --- a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol @@ -1050,7 +1050,7 @@ contract OptimismPortalUpgradeable_Test is Portal_Initializer { (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = p.params(); - SystemConfig.ResourceConfig memory rcfg = p.resourceConfig(); + SystemConfig.ResourceConfig memory rcfg = systemConfig.resourceConfig(); assertEq(prevBaseFee, rcfg.minimumBaseFee); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, initialBlockNum); diff --git a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol index 92675e1670fc..bc24f065ae09 100644 --- a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol @@ -15,7 +15,11 @@ contract MeterUser is ResourceMetering { __ResourceMetering_init(); } - function resourceConfig() public override pure returns (SystemConfig.ResourceConfig memory) { + function resourceConfig() public pure returns (SystemConfig.ResourceConfig memory) { + return _resourceConfig(); + } + + function _resourceConfig() internal override pure returns (SystemConfig.ResourceConfig memory) { SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, @@ -180,7 +184,7 @@ contract CustomMeterUser is ResourceMetering { }); } - function resourceConfig() public override pure returns (SystemConfig.ResourceConfig memory) { + function _resourceConfig() internal override pure returns (SystemConfig.ResourceConfig memory) { SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, From 9f802c226d93de7f0f1eeeba12455654280072c0 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 18:14:50 -0700 Subject: [PATCH 05/30] op-e2e: more realistic gas limits --- op-e2e/e2eutils/setup.go | 4 ++-- op-e2e/setup.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index c86b47578cc1..ed6de91ec47c 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -79,7 +79,7 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { L1GenesisBlockNonce: 0, CliqueSignerAddress: common.Address{}, // proof of stake, no clique L1GenesisBlockTimestamp: hexutil.Uint64(time.Now().Unix()), - L1GenesisBlockGasLimit: 15_000_000, + L1GenesisBlockGasLimit: 30_000_000, L1GenesisBlockDifficulty: uint64ToBig(1), L1GenesisBlockMixHash: common.Hash{}, L1GenesisBlockCoinbase: common.Address{}, @@ -90,7 +90,7 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { FinalizationPeriodSeconds: 12, L2GenesisBlockNonce: 0, - L2GenesisBlockGasLimit: 15_000_000, + L2GenesisBlockGasLimit: 30_000_000, L2GenesisBlockDifficulty: uint64ToBig(0), L2GenesisBlockMixHash: common.Hash{}, L2GenesisBlockNumber: 0, diff --git a/op-e2e/setup.go b/op-e2e/setup.go index 98cdca376d0d..afb8fd407ad8 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -75,7 +75,7 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { L1GenesisBlockNonce: 4660, CliqueSignerAddress: addresses.CliqueSigner, L1GenesisBlockTimestamp: hexutil.Uint64(time.Now().Unix()), - L1GenesisBlockGasLimit: 8_000_000, + L1GenesisBlockGasLimit: 30_000_000, L1GenesisBlockDifficulty: uint642big(1), L1GenesisBlockMixHash: common.Hash{}, L1GenesisBlockCoinbase: common.Address{}, @@ -85,7 +85,7 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { L1GenesisBlockBaseFeePerGas: uint642big(7), L2GenesisBlockNonce: 0, - L2GenesisBlockGasLimit: 8_000_000, + L2GenesisBlockGasLimit: 30_000_000, L2GenesisBlockDifficulty: uint642big(1), L2GenesisBlockMixHash: common.Hash{}, L2GenesisBlockNumber: 0, From 75efabf4cc6908038f89f0bc33bbb45f2d658414 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 18:33:54 -0700 Subject: [PATCH 06/30] contracts-bedrock: fix deploy script --- packages/contracts-bedrock/deploy/021-SystemDictatorSteps-2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/deploy/021-SystemDictatorSteps-2.ts b/packages/contracts-bedrock/deploy/021-SystemDictatorSteps-2.ts index 906bd42537e8..f9fe95342c3c 100644 --- a/packages/contracts-bedrock/deploy/021-SystemDictatorSteps-2.ts +++ b/packages/contracts-bedrock/deploy/021-SystemDictatorSteps-2.ts @@ -234,7 +234,7 @@ const deployFn: DeployFunction = async (hre) => { ) const resourceParams = await OptimismPortal.params() assert( - resourceParams.prevBaseFee.eq(await OptimismPortal.INITIAL_BASE_FEE()), + resourceParams.prevBaseFee.eq(ethers.utils.parseUnits('1', 'gwei')), `OptimismPortal was not initialized with the correct initial base fee` ) assert( From 2f2846582660eebd4549665adda4c262ce98154c Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 22 Mar 2023 18:38:33 -0700 Subject: [PATCH 07/30] lint: fix --- packages/contracts-bedrock/contracts/L1/ResourceMetering.sol | 3 ++- .../contracts/echidna/FuzzResourceMetering.sol | 3 ++- .../contracts-bedrock/contracts/test/ResourceMetering.t.sol | 4 ++-- packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index 14082077e458..1b7c2376b6f4 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -65,7 +65,8 @@ abstract contract ResourceMetering is Initializable { uint256 blockDiff = block.number - params.prevBlockNum; SystemConfig.ResourceConfig memory config = _resourceConfig(); - int256 targetResourceLimit = int256(uint256(config.maxResourceLimit)) / int256(uint256(config.elasticityMultiplier)); + int256 targetResourceLimit = int256(uint256(config.maxResourceLimit)) / + int256(uint256(config.elasticityMultiplier)); if (blockDiff > 0) { // Handle updating EIP-1559 style gas parameters. We use EIP-1559 to restrict the rate diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index fd1fcd59dca7..c1a04ae1c165 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -52,7 +52,8 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { uint256 cachedPrevBlockNum = uint256(params.prevBlockNum); SystemConfig.ResourceConfig memory rcfg = resourceConfig(); - uint256 targetResourceLimit = uint256(rcfg.maxResourceLimit) / uint256(rcfg.elasticityMultiplier); + uint256 targetResourceLimit = uint256(rcfg.maxResourceLimit) / + uint256(rcfg.elasticityMultiplier); // check that the last block's base fee hasn't dropped below the minimum if (cachedPrevBaseFee < uint256(rcfg.minimumBaseFee)) { diff --git a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol index bc24f065ae09..5ad5ae1f3664 100644 --- a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol @@ -19,7 +19,7 @@ contract MeterUser is ResourceMetering { return _resourceConfig(); } - function _resourceConfig() internal override pure returns (SystemConfig.ResourceConfig memory) { + function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, @@ -184,7 +184,7 @@ contract CustomMeterUser is ResourceMetering { }); } - function _resourceConfig() internal override pure returns (SystemConfig.ResourceConfig memory) { + function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, diff --git a/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts b/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts index 059a24f326a2..00b94b52c22c 100644 --- a/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts +++ b/packages/contracts-bedrock/deploy/013-OptimismPortalImpl.ts @@ -17,7 +17,9 @@ const deployFn: DeployFunction = async (hre) => { 'L2OutputOracleProxy' ) - const Artifact__SystemConfigProxy = await hre.deployments.get('SystemConfigProxy') + const Artifact__SystemConfigProxy = await hre.deployments.get( + 'SystemConfigProxy' + ) const portalGuardian = hre.deployConfig.portalGuardian const portalGuardianCode = await hre.ethers.provider.getCode(portalGuardian) From 402b6cafdd2dfbb25810fe37735e335402b8c6ef Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 08:17:07 -0700 Subject: [PATCH 08/30] contracts-bedrock: fixup --- packages/contracts-bedrock/.gas-snapshot | 145 +++++++++--------- .../contracts/L1/SystemConfig.sol | 29 ++-- .../contracts/echidna/FuzzOptimismPortal.sol | 2 +- .../contracts/test/CommonTest.t.sol | 2 +- .../contracts/test/SystemConfig.t.sol | 68 +++++++- .../test/invariants/SystemConfig.t.sol | 2 +- 6 files changed, 158 insertions(+), 90 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 89013ebddebf..5f3e89009b1f 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -22,23 +22,23 @@ CrossDomainOwnable3_Test:test_transferOwnershipNoLocal_succeeds() (gas: 48610) CrossDomainOwnable3_Test:test_transferOwnership_noLocalZeroAddress_reverts() (gas: 12015) CrossDomainOwnable3_Test:test_transferOwnership_notOwner_reverts() (gas: 13437) CrossDomainOwnable3_Test:test_transferOwnership_zeroAddress_reverts() (gas: 12081) -CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner_succeeds() (gas: 72502) +CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner_succeeds() (gas: 72497) CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10597) CrossDomainOwnable_Test:test_onlyOwner_succeeds() (gas: 34883) DeployerWhitelist_Test:test_owner_succeeds() (gas: 7582) DeployerWhitelist_Test:test_storageSlots_succeeds() (gas: 33395) FeeVault_Test:test_constructor_succeeds() (gas: 10736) FeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 10713) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 266896) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2100047) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 452675) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 3199812) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353932) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 2634775) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 266854) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2100005) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 452633) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 3199770) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353890) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 2634733) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40409) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75083) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 77807) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75078) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 75687) GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 169237) GasPriceOracle_Test:test_baseFee_succeeds() (gas: 8325) GasPriceOracle_Test:test_decimals_succeeds() (gas: 6167) @@ -81,35 +81,35 @@ L1CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 76665) L1CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 101282) L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 12365) L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 53445) -L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 304766) -L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1496204) +L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 304740) +L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1496124) L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 87194) L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24296) L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 52707) L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 27310) -L1ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 359861) +L1ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 359991) L1ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 60934) L1ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 25666) L1ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 50564) L1ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 25124) -L1ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 357441) +L1ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 357571) L1ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 60830) L1ERC721Bridge_Test:test_constructor_succeeds() (gas: 10200) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notEscrowed_reverts() (gas: 22119) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 19797) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16049) L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17615) -L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 328953) -L1StandardBridge_BridgeETHTo_Test:test_bridgeETHTo_succeeds() (gas: 424690) -L1StandardBridge_BridgeETH_Test:test_bridgeETH_succeeds() (gas: 411911) -L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 629994) -L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 627695) +L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 329083) +L1StandardBridge_BridgeETHTo_Test:test_bridgeETHTo_succeeds() (gas: 424648) +L1StandardBridge_BridgeETH_Test:test_bridgeETH_succeeds() (gas: 411869) +L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 630124) +L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 627825) L1StandardBridge_DepositERC20_TestFail:test_depositERC20_notEoa_reverts() (gas: 22320) -L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 424767) -L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 412005) +L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 424725) +L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 411963) L1StandardBridge_DepositETH_TestFail:test_depositETH_notEoa_reverts() (gas: 40780) L1StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 51674) -L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34207) +L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34204) L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 34310) L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 34279) L1StandardBridge_FinalizeERC20Withdrawal_Test:test_finalizeERC20Withdrawal_succeeds() (gas: 496128) @@ -118,7 +118,7 @@ L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_n L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal_succeeds() (gas: 61722) L1StandardBridge_Getter_Test:test_getters_succeeds() (gas: 32173) L1StandardBridge_Initialize_Test:test_initialize_succeeds() (gas: 22050) -L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 525308) +L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 525438) L2CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 8411) L2CrossDomainMessenger_Test:test_relayMessage_reentrancyDiffMessage_succeeds() (gas: 680395) L2CrossDomainMessenger_Test:test_relayMessage_reentrancySameMessage_reverts() (gas: 626456) @@ -182,7 +182,7 @@ L2StandardBridge_BridgeERC20_Test:test_bridgeLegacyERC20_succeeds() (gas: 393552 L2StandardBridge_BridgeERC20_Test:test_withdrawLegacyERC20_succeeds() (gas: 393878) L2StandardBridge_BridgeERC20_Test:test_withdraw_notEOA_reverts() (gas: 251758) L2StandardBridge_BridgeERC20_Test:test_withdraw_withdrawingERC20_succeeds() (gas: 385508) -L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 23840) +L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 23843) L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 23982) L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23870) L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingERC20_succeeds() (gas: 93824) @@ -259,48 +259,48 @@ OptimismMintableTokenFactory_Test:test_bridge_succeeds() (gas: 7580) OptimismMintableTokenFactory_Test:test_createStandardL2Token_remoteIsZero_succeeds() (gas: 9390) OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds() (gas: 2523203) OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1268564) -OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10971) -OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15895) -OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16078) +OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10994) +OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15918) +OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 21774) OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 180547) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 204067) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 207520) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 204044) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 207497) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 41753) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 199464) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 205818) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 180229) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 243835) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 199441) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 205795) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 180206) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 243812) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 245528) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 53555) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 53576) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 234941) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 8797746687696163864) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 197042) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 197019) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 85690) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 137350) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 52947) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_paused_reverts() (gas: 73696) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRootAndOutputIndex_succeeds() (gas: 346853) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 279593) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_paused_reverts() (gas: 73717) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRootAndOutputIndex_succeeds() (gas: 346739) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 279571) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 192548) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 180486) -OptimismPortal_Test:test_constructor_succeeds() (gas: 19440) -OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14330) -OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76756) -OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77122) -OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76774) -OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77119) -OptimismPortal_Test:test_depositTransaction_smallGasLimit_reverts() (gas: 14276) -OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_succeeds() (gas: 83780) -OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75933) -OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83460) -OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84076) -OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 121711) -OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 22205) -OptimismPortal_Test:test_pause_succeeds() (gas: 42184) -OptimismPortal_Test:test_receive_succeeds() (gas: 127552) -OptimismPortal_Test:test_simple_isOutputFinalized_succeeds() (gas: 32934) -OptimismPortal_Test:test_unpause_onlyGuardian_reverts() (gas: 46151) -OptimismPortal_Test:test_unpause_succeeds() (gas: 31763) +OptimismPortal_Test:test_constructor_succeeds() (gas: 19372) +OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14320) +OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76751) +OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77117) +OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76769) +OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77114) +OptimismPortal_Test:test_depositTransaction_smallGasLimit_reverts() (gas: 14266) +OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_succeeds() (gas: 83775) +OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75931) +OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83455) +OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84071) +OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 121623) +OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 22136) +OptimismPortal_Test:test_pause_succeeds() (gas: 42115) +OptimismPortal_Test:test_receive_succeeds() (gas: 127560) +OptimismPortal_Test:test_simple_isOutputFinalized_succeeds() (gas: 32867) +OptimismPortal_Test:test_unpause_onlyGuardian_reverts() (gas: 46060) +OptimismPortal_Test:test_unpause_succeeds() (gas: 31708) ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 35586) ProxyAdmin_Test:test_chugsplashGetProxyAdmin_succeeds() (gas: 15675) ProxyAdmin_Test:test_chugsplashGetProxyImplementation_succeeds() (gas: 51084) @@ -398,17 +398,14 @@ RLPWriter_writeUint_Test:test_writeUint_smallint_succeeds() (gas: 7280) RLPWriter_writeUint_Test:test_writeUint_zero_succeeds() (gas: 7749) ResolvedDelegateProxy_Test:test_fallback_addressManagerNotSet_reverts() (gas: 605906) ResolvedDelegateProxy_Test:test_fallback_delegateCallBar_reverts() (gas: 24783) -ResourceMetering_Test:test_meter_initialBaseFee_succeeds() (gas: 7003) -ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 9028) -ResourceMetering_Test:test_meter_maxValue_succeeds() (gas: 7015) -ResourceMetering_Test:test_meter_minBaseFeeLessThanMaxBaseFee_succeeds() (gas: 6194) -ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2008204) -ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18441) -ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 14005) -ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 21243) -ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 21199) -ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 20017464) -ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 16120) +ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 10188) +ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2009509) +ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18681) +ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 14791) +ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 21534) +ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 21490) +ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 20018349) +ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 17145) SafeCall_call_Test:test_callWithMinGas_noLeakageHigh_succeeds() (gas: 2075873614) SafeCall_call_Test:test_callWithMinGas_noLeakageLow_succeeds() (gas: 753665282) Semver_Test:test_behindProxy_succeeds() (gas: 506748) @@ -418,13 +415,17 @@ SequencerFeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 5442) SequencerFeeVault_Test:test_receive_succeeds() (gas: 17373) SequencerFeeVault_Test:test_withdraw_notEnough_reverts() (gas: 9331) SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 163228) -SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11559) +SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11515) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 62012) -SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10612) -SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10555) -SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10658) -SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10660) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 147668) +SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10546) +SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10599) +SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10615) +SystemConfig_Setters_TestFail:test_setResourceConfig_badMinMax_reverts() (gas: 12951) +SystemConfig_Setters_TestFail:test_setResourceConfig_lowGasLimit_reverts() (gas: 16030) +SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11578) +SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 12999) +SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10661) TransferOnionTest:test_constructor_succeeds() (gas: 564855) TransferOnionTest:test_unwrap_succeeds() (gas: 724958) \ No newline at end of file diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 9265120140bd..4a7e34f84f5f 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -239,14 +239,14 @@ contract SystemConfig is OwnableUpgradeable, Semver { } /** - * @notice + * @notice A getter for the resource config. */ function resourceConfig() external view returns (ResourceConfig memory) { return _resourceConfig; } /** - * @notice + * @notice An external setter for the resource config. */ function setResourceConfig(ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); @@ -256,20 +256,31 @@ contract SystemConfig is OwnableUpgradeable, Semver { } /** - * @notice + * @notice An internal setter for the resource config. Ensures that the + * config is sane before storing it. */ function _setResourceConfig(ResourceConfig memory _config) internal { - require(_config.minimumBaseFee <= _config.maximumBaseFee); - require(_config.baseFeeMaxChangeDenominator > 0); - require(_config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit); + require( + _config.minimumBaseFee <= _config.maximumBaseFee, + "SystemConfig: min base fee must be less than max base" + ); + require( + _config.baseFeeMaxChangeDenominator > 0, + "SystemConfig: denominator cannot be 0" + ); + require( + _config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit, + "SystemConfig: gas limit too low" + ); _resourceConfig = _config; } /** - * @notice + * @notice Returns the minimum L2 gas limit that can be safely set for the system to + * operate. */ - function minimumGasLimit() public view returns (uint256) { - return _resourceConfig.maxResourceLimit + _resourceConfig.systemTxMaxGas; + function minimumGasLimit() public view returns (uint64) { + return uint64(_resourceConfig.maxResourceLimit) + uint64(_resourceConfig.systemTxMaxGas); } } diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol index c15c94823431..85b3cf707fda 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol @@ -11,7 +11,7 @@ contract EchidnaFuzzOptimismPortal { constructor() { SystemConfig config = new SystemConfig({ - _owner: address(0), + _owner: address(1), _overhead: 0, _scalar: 10000, _batcherHash: bytes32(0), diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index e8d5411f9be0..e92a802c936e 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -172,7 +172,7 @@ contract Portal_Initializer is L2OutputOracle_Initializer { super.setUp(); systemConfig = new SystemConfig({ - _owner: address(0), + _owner: address(1), _overhead: 0, _scalar: 10000, _batcherHash: bytes32(0), diff --git a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol index 839ff686eeab..ad983e6d294b 100644 --- a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol @@ -14,24 +14,23 @@ contract SystemConfig_Init is CommonTest { _overhead: 2100, _scalar: 1000000, _batcherHash: bytes32(hex"abcd"), - _gasLimit: 9_000_000, + _gasLimit: 30_000_000, _unsafeBlockSigner: address(1) }); } } -contract SystemConfig_Initialize_TestFail is CommonTest { +contract SystemConfig_Initialize_TestFail is SystemConfig_Init { function test_initialize_lowGasLimit_reverts() external { - vm.expectRevert("SystemConfig: gas limit too low"); + uint64 minimumGasLimit = sysConf.minimumGasLimit(); - // The minimum gas limit defined in SystemConfig: - uint64 MINIMUM_GAS_LIMIT = 8_000_000; + vm.expectRevert("SystemConfig: gas limit too low"); new SystemConfig({ _owner: alice, _overhead: 0, _scalar: 0, _batcherHash: bytes32(hex""), - _gasLimit: MINIMUM_GAS_LIMIT - 1, + _gasLimit: minimumGasLimit - 1, _unsafeBlockSigner: address(1) }); } @@ -57,6 +56,63 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { vm.expectRevert("Ownable: caller is not the owner"); sysConf.setUnsafeBlockSigner(address(0x20)); } + + function test_setResourceConfig_notOwner_reverts() external { + vm.expectRevert("Ownable: caller is not the owner"); + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + sysConf.setResourceConfig(config); + } + + function test_setResourceConfig_badMinMax_reverts() external { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + systemTxMaxGas: 1_000_000, + minimumBaseFee: 2 gwei, + maximumBaseFee: 1 gwei + }); + vm.prank(sysConf.owner()); + vm.expectRevert("SystemConfig: min base fee must be less than max base"); + sysConf.setResourceConfig(config); + } + + function test_setResourceConfig_zeroDenominator_reverts() external { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 0, + systemTxMaxGas: 1_000_000, + minimumBaseFee: 1 gwei, + maximumBaseFee: 2 gwei + }); + vm.prank(sysConf.owner()); + vm.expectRevert("SystemConfig: denominator cannot be 0"); + sysConf.setResourceConfig(config); + } + + function test_setResourceConfig_lowGasLimit_reverts() external { + uint64 gasLimit = sysConf.gasLimit(); + + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: uint32(gasLimit), + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + systemTxMaxGas: uint32(gasLimit), + minimumBaseFee: 1 gwei, + maximumBaseFee: 2 gwei + }); + vm.prank(sysConf.owner()); + vm.expectRevert("SystemConfig: gas limit too low"); + sysConf.setResourceConfig(config); + } } contract SystemConfig_Setters_Test is SystemConfig_Init { diff --git a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol index d00332b6cf74..f838a1d7d24a 100644 --- a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol @@ -12,7 +12,7 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test { _overhead: 2100, _scalar: 1000000, _batcherHash: bytes32(hex"abcd"), - _gasLimit: 8_000_000, + _gasLimit: 30_000_000, _unsafeBlockSigner: address(1) }); From fd02c71901985990d13a9974b43f76c1367f0742 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 10:21:29 -0700 Subject: [PATCH 09/30] contracts-bedrock: more cleanup --- packages/contracts-bedrock/.gas-snapshot | 2 +- .../contracts/L1/SystemConfig.sol | 48 +++++++++++++++++-- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 5f3e89009b1f..7e1b1ffcf8df 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -418,7 +418,7 @@ SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 163228) SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11515) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 147668) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 147845) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10546) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10599) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10615) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 4a7e34f84f5f..bf1cdbbcfb9c 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -21,6 +21,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @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 RESOURCE_CONFIG Represents an update to the resource config. */ enum UpdateType { BATCHER, @@ -31,7 +32,25 @@ contract SystemConfig is OwnableUpgradeable, Semver { } /** - * @notice + * @notice Represents the configuration for the EIP-1559 based curve for + * the deposit gas market. These values should be set with care + * as it is possible to set them in a way that breaks the deposit + * gas market. The target resource limit is defined as + * maxResourceLimit / elasticityMultiplier. + * This struct was designed to fit within a single word. There is + * additional space for additions in the future. + * + * @custom:field maxResourceLimit Represents the maximum amount of deposit + * gas that can be purchased per block. + * @custom:field elasticityMultiplier Determines the target resource limit + * along with the resource limit. + * @custom:field baseFeeMaxChangeDenominator Determines max change on fee per block. + * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this + * value. + * @custom:field systemTxMaxGas The amount of gas supplied to the system + * transaction. + * @custom:field maximumBaseFee The max deposit base fee, it is clamped to this + * value. */ struct ResourceConfig { uint32 maxResourceLimit; @@ -136,6 +155,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @param _batcherHash Initial batcher hash. * @param _gasLimit Initial gas limit. * @param _unsafeBlockSigner Initial unsafe block signer address. + * @param _config Initial ResourceConfig. */ function initialize( address _owner, @@ -227,7 +247,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice Low level setter for the unsafe block signer address. This function exists to - * deduplicate code arou,nd storing the unsafeBlockSigner address in storage. + * deduplicate code around storing the unsafeBlockSigner address in storage. * * @param _unsafeBlockSigner New unsafeBlockSigner value. */ @@ -247,6 +267,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice An external setter for the resource config. + * @param _config The new resource config values. */ function setResourceConfig(ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); @@ -257,7 +278,14 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice An internal setter for the resource config. Ensures that the - * config is sane before storing it. + * config is sane before storing it. Holds the following invariants: + * - min base fee must be less than or equal to max base fee + * - base fee change denominator must be greater than 0 + * - max resource limit plus system tx gas must be less than or + * equal to the L2 gas limit + * - elasticity multiplier must be greater than 0 + * + * @param _config The new resource config */ function _setResourceConfig(ResourceConfig memory _config) internal { require( @@ -272,13 +300,25 @@ contract SystemConfig is OwnableUpgradeable, Semver { _config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit, "SystemConfig: gas limit too low" ); + require( + _config.elasticityMultiplier > 0, + "SystemConfig: elasticity multiplier cannot be 0" + ); + require( + ((_config.maxResourceLimit / _config.elasticityMultiplier) * + _config.elasticityMultiplier) == _config.maxResourceLimit, + "SystemConfig: precision loss with max and elasticity" + ); _resourceConfig = _config; } /** * @notice Returns the minimum L2 gas limit that can be safely set for the system to - * operate. + * operate. The L2 gas limit must be larger than or equal to the amount of + * gas that is allocated for deposits per block plus the amount of gas that + * is allocated for the system transaction. + * This function is used to determine if changes to parameters are safe. */ function minimumGasLimit() public view returns (uint64) { return uint64(_resourceConfig.maxResourceLimit) + uint64(_resourceConfig.systemTxMaxGas); From f0506fcec6f37b37c94562ee482a61ab523028d3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 10:23:19 -0700 Subject: [PATCH 10/30] contracts-bedrock: lint --- packages/contracts-bedrock/contracts/L1/SystemConfig.sol | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index bf1cdbbcfb9c..9e79b595563a 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -292,10 +292,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { _config.minimumBaseFee <= _config.maximumBaseFee, "SystemConfig: min base fee must be less than max base" ); - require( - _config.baseFeeMaxChangeDenominator > 0, - "SystemConfig: denominator cannot be 0" - ); + require(_config.baseFeeMaxChangeDenominator > 0, "SystemConfig: denominator cannot be 0"); require( _config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit, "SystemConfig: gas limit too low" From 50131bc1e5a66f230e8875987b214b1cfba3895d Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 11:44:34 -0700 Subject: [PATCH 11/30] contracts-bedrock: more cleanup --- op-bindings/bindings/systemconfig.go | 24 ++++---- op-bindings/bindings/systemconfig_more.go | 2 +- op-chain-ops/genesis/layer_one.go | 57 +++++++++++-------- op-chain-ops/genesis/layer_one_test.go | 6 ++ .../contracts/L1/SystemConfig.sol | 30 +++++----- .../contracts/echidna/FuzzOptimismPortal.sol | 16 +++++- .../contracts/test/CommonTest.t.sol | 12 +++- .../contracts/test/SystemConfig.t.sol | 25 +++++++- .../test/invariants/SystemConfig.t.sol | 12 +++- .../deploy/017-SystemConfigImpl.ts | 11 ++++ 10 files changed, 134 insertions(+), 61 deletions(-) diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index 78b86274f960..e5ceeecce926 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -40,8 +40,8 @@ type SystemConfigResourceConfig struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"structSystemConfig.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b5060405162001cf838038062001cf8833981016040819052620000349162000638565b6001608081815260a0918252600060c09081526040805191820181526301312d008252600a6020830152600890820152633b9aca006060820152620f4240918101919091526001600160801b03918101919091526200009987878787878787620000a6565b50505050505050620006e4565b600054610100900460ff1615808015620000c75750600054600160ff909116105b80620000f75750620000e430620002ac60201b62000ba31760201c565b158015620000f7575060005460ff166001145b620001605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000184576000805461ff0019166101001790555b6200018e620002bb565b620001998862000323565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001ec837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001f782620003a2565b62000201620004d3565b846001600160401b031610156200025b5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000157565b8015620002a2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620003175760405162461bcd60e51b815260206004820152602b602482015260008051602062001cd883398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000157565b6200032162000506565b565b6200032d6200056d565b6001600160a01b038116620003945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000157565b6200039f81620005c9565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003c757600080fd5b6000816040015160ff1611620003dc57600080fd5b606854608082015182516001600160401b0390921691620003fe9190620006ad565b63ffffffff1611156200041057600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620004fb9063ffffffff6a0100000000000000000000820481169116620006ad565b63ffffffff16905090565b600054610100900460ff16620005625760405162461bcd60e51b815260206004820152602b602482015260008051602062001cd883398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000157565b6200032133620005c9565b6033546001600160a01b03163314620003215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000157565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200063357600080fd5b919050565b60008060008060008060c087890312156200065257600080fd5b6200065d876200061b565b6020880151604089015160608a015160808b0151939950919750955093506001600160401b03811681146200069157600080fd5b9150620006a160a088016200061b565b90509295509295509295565b600063ffffffff808316818516808303821115620006db57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60805160a05160c0516115c4620007146000396000610599015260006105700152600061054701526115c46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b366004611114565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b61017a61050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610244610540565b60405161018491906111b0565b6101a06105e3565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046111c3565b6105f7565b6101a06102983660046111fd565b610690565b6101a06102ab366004611355565b610771565b6101a06102be366004611371565b61082f565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e366004611114565b61085f565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461138a565b610916565b61017a600081565b610453610bbf565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906111b0565b60405180910390a35050565b6069546000906105359063ffffffff6a010000000000000000000082048116911661142c565b63ffffffff16905090565b606061056b7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105947f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105bd7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6040516020016105cf93929190611454565b604051602081830303815290604052905090565b6105eb610bbf565b6105f56000610d7d565b565b6105ff610bbf565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161068391906111b0565b60405180910390a3505050565b610698610bbf565b6106a061050f565b8167ffffffffffffffff161015610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b610779610bbf565b61078281610df4565b6000816040516020016107f89190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b610837610bbf565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b610867610bbf565b73ffffffffffffffffffffffffffffffffffffffff811661090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161070f565b61091381610d7d565b50565b600054610100900460ff16158080156109365750600054600160ff909116105b806109505750303b158015610950575060005460ff166001145b6109dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161070f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a42610fb1565b610a4b8861085f565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abb82610df4565b610ac361050f565b8467ffffffffffffffff161015610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161070f565b8015610b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161070f565b606081600003610c8357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cad5780610c97816114ca565b9150610ca69050600a83611531565b9150610c87565b60008167ffffffffffffffff811115610cc857610cc8611218565b6040519080825280601f01601f191660200182016040528015610cf2576020820181803683370190505b5090505b8415610d7557610d07600183611545565b9150610d14600a8661155c565b610d1f906030611570565b60f81b818381518110610d3457610d34611588565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d6e600a86611531565b9450610cf6565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e2157600080fd5b6000816040015160ff1611610e3557600080fd5b6068546080820151825167ffffffffffffffff90921691610e56919061142c565b63ffffffff161115610e6757600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f5600054610100900460ff166110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f533610d7d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461110f57600080fd5b919050565b60006020828403121561112657600080fd5b61112f826110eb565b9392505050565b60005b83811015611151578181015183820152602001611139565b83811115611160576000848401525b50505050565b6000815180845261117e816020860160208601611136565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061112f6020830184611166565b600080604083850312156111d657600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461110f57600080fd5b60006020828403121561120f57600080fd5b61112f826111e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461110f57600080fd5b803560ff8116811461110f57600080fd5b80356fffffffffffffffffffffffffffffffff8116811461110f57600080fd5b600060c0828403121561129e57600080fd5b60405160c0810181811067ffffffffffffffff821117156112e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806112f783611247565b81526113056020840161125b565b60208201526113166040840161125b565b604082015261132760608401611247565b606082015261133860808401611247565b608082015261134960a0840161126c565b60a08201525092915050565b600060c0828403121561136757600080fd5b61112f838361128c565b60006020828403121561138357600080fd5b5035919050565b6000806000806000806000610180888a0312156113a657600080fd5b6113af886110eb565b96506020880135955060408801359450606088013593506113d2608089016111e5565b92506113e060a089016110eb565b91506113ef8960c08a0161128c565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff80831681851680830382111561144b5761144b6113fd565b01949350505050565b60008451611466818460208901611136565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516114a2816001850160208a01611136565b600192019182015283516114bd816002840160208801611136565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fb576114fb6113fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261154057611540611502565b500490565b600082821015611557576115576113fd565b500390565b60008261156b5761156b611502565b500690565b60008219821115611583576115836113fd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"structSystemConfig.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b506040516200239a3803806200239a83398101604081905262000034916200084f565b6001608081905260a052600060c052620000548787878787878762000061565b5050505050505062000a4f565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000bb11760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006b1565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b60248201526000805160206200237a83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006de565b565b620002f162000745565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007a1565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6000816040015160ff16116200045c5760405162461bcd60e51b815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f74604482015264020626520360dc1b606482015260840162000112565b606854608082015182516001600160401b03909216916200047e91906200099e565b63ffffffff161115620004d45760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff1611620005455760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000567908290620009c9565b620005739190620009fb565b63ffffffff1614620005ee5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006d99063ffffffff6a010000000000000000000082048116911662000a2a565b905090565b600054610100900460ff166200073a5760405162461bcd60e51b815260206004820152602b60248201526000805160206200237a83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007a1565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200080b57600080fd5b919050565b805163ffffffff811681146200080b57600080fd5b805160ff811681146200080b57600080fd5b80516001600160801b03811681146200080b57600080fd5b60008060008060008060008789036101808112156200086d57600080fd5b6200087889620007f3565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008ad57600080fd5b819550620008be60a08c01620007f3565b945060c060bf1984011215620008d357600080fd5b604051925060c08301915082821081831117156200090157634e487b7160e01b600052604160045260246000fd5b506040526200091360c08a0162000810565b81526200092360e08a0162000825565b6020820152620009376101008a0162000825565b60408201526200094b6101208a0162000810565b60608201526200095f6101408a0162000810565b6080820152620009736101608a0162000837565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009c057620009c062000988565b01949350505050565b600063ffffffff80841680620009ef57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a215762000a2162000988565b02949350505050565b60006001600160401b03828116848216808303821115620009c057620009c062000988565b60805160a05160c0516118fb62000a7f60003960006105930152600061056a0152600061054101526118fb6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b3660046113d9565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b6040516101849190611475565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a0610285366004611488565b6105f1565b6101a06102983660046114c2565b61068a565b6101a06102ab36600461161a565b610775565b6101a06102be366004611636565b610833565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e3660046113d9565b610863565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461164f565b61091a565b61017a600081565b610453610bcd565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516105039190611475565b60405180910390a35050565b6069546000906105359063ffffffff6a01000000000000000000008204811691166116f1565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610c4e565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6040516020016105c99392919061171d565b604051602081830303815290604052905090565b6105e5610bcd565b6105ef6000610d8b565b565b6105f9610bcd565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d9190611475565b60405180910390a3505050565b610692610bcd565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610bcd565b61078681610e02565b6000816040516020016107fc9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b61083b610bcd565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b61086b610bcd565b73ffffffffffffffffffffffffffffffffffffffff811661090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61091781610d8b565b50565b600054610100900460ff161580801561093a5750600054600160ff909116105b806109545750303b158015610954575060005460ff166001145b6109e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a46611276565b610a4f88610863565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abf82610e02565b610ac761050f565b67ffffffffffffffff168467ffffffffffffffff161015610b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610ba757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610c9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cbb5780610ca581611793565b9150610cb49050600a836117fa565b9150610c95565b60008167ffffffffffffffff811115610cd657610cd66114dd565b6040519080825280601f01601f191660200182016040528015610d00576020820181803683370190505b5090505b8415610d8357610d1560018361180e565b9150610d22600a86611825565b610d2d906030611839565b60f81b818381518110610d4257610d42611851565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d7c600a866117fa565b9450610d04565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610f6a9190611880565b63ffffffff161115610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff161161106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff9091169061108f90829061189f565b61109991906118c2565b63ffffffff161461112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610d8b565b803573ffffffffffffffffffffffffffffffffffffffff811681146113d457600080fd5b919050565b6000602082840312156113eb57600080fd5b6113f4826113b0565b9392505050565b60005b838110156114165781810151838201526020016113fe565b83811115611425576000848401525b50505050565b600081518084526114438160208601602086016113fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113f4602083018461142b565b6000806040838503121561149b57600080fd5b50508035926020909101359150565b803567ffffffffffffffff811681146113d457600080fd5b6000602082840312156114d457600080fd5b6113f4826114aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff811681146113d457600080fd5b803560ff811681146113d457600080fd5b80356fffffffffffffffffffffffffffffffff811681146113d457600080fd5b600060c0828403121561156357600080fd5b60405160c0810181811067ffffffffffffffff821117156115ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806115bc8361150c565b81526115ca60208401611520565b60208201526115db60408401611520565b60408201526115ec6060840161150c565b60608201526115fd6080840161150c565b608082015261160e60a08401611531565b60a08201525092915050565b600060c0828403121561162c57600080fd5b6113f48383611551565b60006020828403121561164857600080fd5b5035919050565b6000806000806000806000610180888a03121561166b57600080fd5b611674886113b0565b9650602088013595506040880135945060608801359350611697608089016114aa565b92506116a560a089016113b0565b91506116b48960c08a01611551565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611714576117146116c2565b01949350505050565b6000845161172f8184602089016113fb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161176b816001850160208a016113fb565b600192019182015283516117868160028401602088016113fb565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c4576117c46116c2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611809576118096117cb565b500490565b600082821015611820576118206116c2565b500390565b600082611834576118346117cb565b500690565b6000821982111561184c5761184c6116c2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611714576117146116c2565b600063ffffffff808416806118b6576118b66117cb565b92169190910492915050565b600063ffffffff808316818516818304811182151516156118e5576118e56116c2565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -53,7 +53,7 @@ var SystemConfigABI = SystemConfigMetaData.ABI 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, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address) (common.Address, *types.Transaction, *SystemConfig, error) { +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (common.Address, *types.Transaction, *SystemConfig, error) { parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -62,7 +62,7 @@ func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _ return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) if err != nil { return common.Address{}, nil, nil, err } @@ -368,16 +368,16 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // -// Solidity: function minimumGasLimit() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (*big.Int, error) { +// 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(*big.Int), err + return *new(uint64), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) return out0, err @@ -385,15 +385,15 @@ func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (* // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // -// Solidity: function minimumGasLimit() view returns(uint256) -func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (*big.Int, error) { +// 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(uint256) -func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (*big.Int, error) { +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error) { return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) } diff --git a/op-bindings/bindings/systemconfig_more.go b/op-bindings/bindings/systemconfig_more.go index a55dd8fb6e02..66c52978a262 100644 --- a/op-bindings/bindings/systemconfig_more.go +++ b/op-bindings/bindings/systemconfig_more.go @@ -13,7 +13,7 @@ const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\ var SystemConfigStorageLayout = new(solc.StorageLayout) -var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b366004611114565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b61017a61050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610244610540565b60405161018491906111b0565b6101a06105e3565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046111c3565b6105f7565b6101a06102983660046111fd565b610690565b6101a06102ab366004611355565b610771565b6101a06102be366004611371565b61082f565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e366004611114565b61085f565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461138a565b610916565b61017a600081565b610453610bbf565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906111b0565b60405180910390a35050565b6069546000906105359063ffffffff6a010000000000000000000082048116911661142c565b63ffffffff16905090565b606061056b7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105947f0000000000000000000000000000000000000000000000000000000000000000610c40565b6105bd7f0000000000000000000000000000000000000000000000000000000000000000610c40565b6040516020016105cf93929190611454565b604051602081830303815290604052905090565b6105eb610bbf565b6105f56000610d7d565b565b6105ff610bbf565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161068391906111b0565b60405180910390a3505050565b610698610bbf565b6106a061050f565b8167ffffffffffffffff161015610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b610779610bbf565b61078281610df4565b6000816040516020016107f89190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b610837610bbf565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b610867610bbf565b73ffffffffffffffffffffffffffffffffffffffff811661090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161070f565b61091381610d7d565b50565b600054610100900460ff16158080156109365750600054600160ff909116105b806109505750303b158015610950575060005460ff166001145b6109dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161070f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a42610fb1565b610a4b8861085f565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abb82610df4565b610ac361050f565b8467ffffffffffffffff161015610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161070f565b8015610b9957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161070f565b606081600003610c8357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cad5780610c97816114ca565b9150610ca69050600a83611531565b9150610c87565b60008167ffffffffffffffff811115610cc857610cc8611218565b6040519080825280601f01601f191660200182016040528015610cf2576020820181803683370190505b5090505b8415610d7557610d07600183611545565b9150610d14600a8661155c565b610d1f906030611570565b60f81b818381518110610d3457610d34611588565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d6e600a86611531565b9450610cf6565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e2157600080fd5b6000816040015160ff1611610e3557600080fd5b6068546080820151825167ffffffffffffffff90921691610e56919061142c565b63ffffffff161115610e6757600080fd5b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f5600054610100900460ff166110e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161070f565b6105f533610d7d565b803573ffffffffffffffffffffffffffffffffffffffff8116811461110f57600080fd5b919050565b60006020828403121561112657600080fd5b61112f826110eb565b9392505050565b60005b83811015611151578181015183820152602001611139565b83811115611160576000848401525b50505050565b6000815180845261117e816020860160208601611136565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061112f6020830184611166565b600080604083850312156111d657600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461110f57600080fd5b60006020828403121561120f57600080fd5b61112f826111e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461110f57600080fd5b803560ff8116811461110f57600080fd5b80356fffffffffffffffffffffffffffffffff8116811461110f57600080fd5b600060c0828403121561129e57600080fd5b60405160c0810181811067ffffffffffffffff821117156112e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806112f783611247565b81526113056020840161125b565b60208201526113166040840161125b565b604082015261132760608401611247565b606082015261133860808401611247565b608082015261134960a0840161126c565b60a08201525092915050565b600060c0828403121561136757600080fd5b61112f838361128c565b60006020828403121561138357600080fd5b5035919050565b6000806000806000806000610180888a0312156113a657600080fd5b6113af886110eb565b96506020880135955060408801359450606088013593506113d2608089016111e5565b92506113e060a089016110eb565b91506113ef8960c08a0161128c565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff80831681851680830382111561144b5761144b6113fd565b01949350505050565b60008451611466818460208901611136565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516114a2816001850160208a01611136565b600192019182015283516114bd816002840160208801611136565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114fb576114fb6113fd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261154057611540611502565b500490565b600082821015611557576115576113fd565b500390565b60008261156b5761156b611502565b500690565b60008219821115611583576115836113fd565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" +var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b3660046113d9565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b6040516101849190611475565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a0610285366004611488565b6105f1565b6101a06102983660046114c2565b61068a565b6101a06102ab36600461161a565b610775565b6101a06102be366004611636565b610833565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e3660046113d9565b610863565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461164f565b61091a565b61017a600081565b610453610bcd565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516105039190611475565b60405180910390a35050565b6069546000906105359063ffffffff6a01000000000000000000008204811691166116f1565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610c4e565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6040516020016105c99392919061171d565b604051602081830303815290604052905090565b6105e5610bcd565b6105ef6000610d8b565b565b6105f9610bcd565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d9190611475565b60405180910390a3505050565b610692610bcd565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610bcd565b61078681610e02565b6000816040516020016107fc9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b61083b610bcd565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b61086b610bcd565b73ffffffffffffffffffffffffffffffffffffffff811661090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61091781610d8b565b50565b600054610100900460ff161580801561093a5750600054600160ff909116105b806109545750303b158015610954575060005460ff166001145b6109e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a46611276565b610a4f88610863565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abf82610e02565b610ac761050f565b67ffffffffffffffff168467ffffffffffffffff161015610b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610ba757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610c9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cbb5780610ca581611793565b9150610cb49050600a836117fa565b9150610c95565b60008167ffffffffffffffff811115610cd657610cd66114dd565b6040519080825280601f01601f191660200182016040528015610d00576020820181803683370190505b5090505b8415610d8357610d1560018361180e565b9150610d22600a86611825565b610d2d906030611839565b60f81b818381518110610d4257610d42611851565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d7c600a866117fa565b9450610d04565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610f6a9190611880565b63ffffffff161115610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff161161106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff9091169061108f90829061189f565b61109991906118c2565b63ffffffff161461112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610d8b565b803573ffffffffffffffffffffffffffffffffffffffff811681146113d457600080fd5b919050565b6000602082840312156113eb57600080fd5b6113f4826113b0565b9392505050565b60005b838110156114165781810151838201526020016113fe565b83811115611425576000848401525b50505050565b600081518084526114438160208601602086016113fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113f4602083018461142b565b6000806040838503121561149b57600080fd5b50508035926020909101359150565b803567ffffffffffffffff811681146113d457600080fd5b6000602082840312156114d457600080fd5b6113f4826114aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff811681146113d457600080fd5b803560ff811681146113d457600080fd5b80356fffffffffffffffffffffffffffffffff811681146113d457600080fd5b600060c0828403121561156357600080fd5b60405160c0810181811067ffffffffffffffff821117156115ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806115bc8361150c565b81526115ca60208401611520565b60208201526115db60408401611520565b60408201526115ec6060840161150c565b60608201526115fd6080840161150c565b608082015261160e60a08401611531565b60a08201525092915050565b600060c0828403121561162c57600080fd5b6113f48383611551565b60006020828403121561164857600080fd5b5035919050565b6000806000806000806000610180888a03121561166b57600080fd5b611674886113b0565b9650602088013595506040880135945060608801359350611697608089016114aa565b92506116a560a089016113b0565b91506116b48960c08a01611551565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611714576117146116c2565b01949350505050565b6000845161172f8184602089016113fb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161176b816001850160208a016113fb565b600192019182015283516117868160028401602088016113fb565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c4576117c46116c2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611809576118096117cb565b500490565b600082821015611820576118206116c2565b500390565b600082611834576118346117cb565b500690565b6000821982111561184c5761184c6116c2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611714576117146116c2565b600063ffffffff808416806118b6576118b66117cb565b92169190910492915050565b600063ffffffff808316818516818304811182151516156118e5576118e56116c2565b0294935050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(SystemConfigStorageLayoutJSON), SystemConfigStorageLayout); err != nil { diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index d0cfc44ff584..cd213aa4e0f9 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -23,18 +23,37 @@ import ( "github.com/ethereum-optimism/optimism/op-chain-ops/state" ) -var proxies = []string{ - "SystemConfigProxy", - "L2OutputOracleProxy", - "L1CrossDomainMessengerProxy", - "L1StandardBridgeProxy", - "OptimismPortalProxy", - "OptimismMintableERC20FactoryProxy", -} - -var portalMeteringSlot = common.Hash{31: 0x01} +var ( + proxies = []string{ + "SystemConfigProxy", + "L2OutputOracleProxy", + "L1CrossDomainMessengerProxy", + "L1StandardBridgeProxy", + "OptimismPortalProxy", + "OptimismMintableERC20FactoryProxy", + } + + portalMeteringSlot = common.Hash{31: 0x01} + zeroHash = common.Hash{} + uint128Max = new(big.Int) + + defaultResourceConfig = bindings.SystemConfigResourceConfig{ + MaxResourceLimit: 20_000_000, + ElasticityMultiplier: 10, + BaseFeeMaxChangeDenominator: 8, + MinimumBaseFee: params.GWei, + SystemTxMaxGas: 1_000_000, + } +) -var zeroHash common.Hash +func init() { + var ok bool + uint128Max, ok = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) + if !ok { + panic("bad uint128Max") + } + defaultResourceConfig.MaximumBaseFee = uint128Max +} func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { if config.L2OutputOracleStartingTimestamp != -1 { @@ -97,11 +116,6 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { gasLimit = defaultL2GasLimit } - uint128Max, ok := new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) - if !ok { - return nil, errors.New("bad uint128Max") - } - data, err = sysCfgABI.Pack( "initialize", config.FinalSystemOwner, @@ -110,14 +124,7 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { config.BatchSenderAddress.Hash(), gasLimit, config.P2PSequencerAddress, - bindings.SystemConfigResourceConfig{ - MaxResourceLimit: 20_000_000, - ElasticityMultiplier: 10, - BaseFeeMaxChangeDenominator: 8, - MinimumBaseFee: params.GWei, - SystemTxMaxGas: 1_000_000, - MaximumBaseFee: uint128Max, - }, + defaultResourceConfig, ) if err != nil { return nil, fmt.Errorf("cannot abi encode initialize for SystemConfig: %w", err) @@ -292,6 +299,7 @@ func deployL1Contracts(config *DeployConfig, backend *backends.SimulatedBackend) config.BatchSenderAddress.Hash(), // left-padded 32 bytes value, version is zero anyway gasLimit, config.P2PSequencerAddress, + defaultResourceConfig, }, }, { @@ -361,6 +369,7 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep deployment.Args[3].(common.Hash), deployment.Args[4].(uint64), deployment.Args[5].(common.Address), + deployment.Args[6].(bindings.SystemConfigResourceConfig), ) case "L2OutputOracle": _, tx, _, err = bindings.DeployL2OutputOracle( diff --git a/op-chain-ops/genesis/layer_one_test.go b/op-chain-ops/genesis/layer_one_test.go index edc930965451..d2376afb6c36 100644 --- a/op-chain-ops/genesis/layer_one_test.go +++ b/op-chain-ops/genesis/layer_one_test.go @@ -100,6 +100,12 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { require.NoError(t, err) require.Equal(t, "Wrapped Ether", name) + sysCfg, err := bindings.NewSystemConfig(predeploys.DevSystemConfigAddr, sim) + require.NoError(t, err) + cfg, err := sysCfg.ResourceConfig(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, cfg, defaultResourceConfig) + // test that we can do deposits, etc. priv, err := crypto.HexToECDSA("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80") require.NoError(t, err) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 9e79b595563a..96969bea9630 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -81,12 +81,12 @@ contract SystemConfig is OwnableUpgradeable, Semver { uint64 public constant MINIMUM_GAS_LIMIT = 8_000_000; /** - * @notice Fixed L2 gas overhead. + * @notice Fixed L2 gas overhead. Used as part of the L2 fee calculation. */ uint256 public overhead; /** - * @notice Dynamic L2 gas overhead. + * @notice Dynamic L2 gas overhead. Used as part of the L2 fee calculation. */ uint256 public scalar; @@ -97,12 +97,13 @@ contract SystemConfig is OwnableUpgradeable, Semver { bytes32 public batcherHash; /** - * @notice L2 gas limit. + * @notice L2 block gas limit. */ uint64 public gasLimit; /** - * @notice + * @notice The configuration for the deposit fee market. Used by the OptimismPortal + * to meter the cost of buying L2 gas on L1. */ ResourceConfig internal _resourceConfig; @@ -124,6 +125,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @param _batcherHash Initial batcher hash. * @param _gasLimit Initial gas limit. * @param _unsafeBlockSigner Initial unsafe block signer address. + * @param _config Initial resource config. */ constructor( address _owner, @@ -131,18 +133,10 @@ contract SystemConfig is OwnableUpgradeable, Semver { uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, - address _unsafeBlockSigner + address _unsafeBlockSigner, + ResourceConfig memory _config ) Semver(1, 1, 0) { - ResourceConfig memory config = ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); - - initialize(_owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, config); + initialize(_owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config); } /** @@ -259,7 +253,8 @@ contract SystemConfig is OwnableUpgradeable, Semver { } /** - * @notice A getter for the resource config. + * @notice A getter for the resource config. Ensures that the struct is + * returned instead of a tuple. */ function resourceConfig() external view returns (ResourceConfig memory) { return _resourceConfig; @@ -284,6 +279,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * - max resource limit plus system tx gas must be less than or * equal to the L2 gas limit * - elasticity multiplier must be greater than 0 + * - no precision loss when computing target resource limit * * @param _config The new resource config */ @@ -304,7 +300,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { require( ((_config.maxResourceLimit / _config.elasticityMultiplier) * _config.elasticityMultiplier) == _config.maxResourceLimit, - "SystemConfig: precision loss with max and elasticity" + "SystemConfig: precision loss with target resource limit" ); _resourceConfig = _config; diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol index 85b3cf707fda..2e58aa4a1f91 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol @@ -10,20 +10,30 @@ contract EchidnaFuzzOptimismPortal { bool internal failedToComplete; constructor() { - SystemConfig config = new SystemConfig({ + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + + SystemConfig systemConfig = new SystemConfig({ _owner: address(1), _overhead: 0, _scalar: 10000, _batcherHash: bytes32(0), _gasLimit: 30_000_000, - _unsafeBlockSigner: address(0) + _unsafeBlockSigner: address(0), + _config: config }); portal = new OptimismPortal({ _l2Oracle: L2OutputOracle(address(0)), _guardian: address(0), _paused: false, - _config: config + _config: systemConfig }); } diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index e92a802c936e..9ba3a73c08af 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -171,13 +171,23 @@ contract Portal_Initializer is L2OutputOracle_Initializer { function setUp() public virtual override { super.setUp(); + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + systemConfig = new SystemConfig({ _owner: address(1), _overhead: 0, _scalar: 10000, _batcherHash: bytes32(0), _gasLimit: 30_000_000, - _unsafeBlockSigner: address(0) + _unsafeBlockSigner: address(0), + _config: config }); opImpl = new OptimismPortal({ diff --git a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol index ad983e6d294b..a7f058340316 100644 --- a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol @@ -9,13 +9,24 @@ contract SystemConfig_Init is CommonTest { function setUp() public virtual override { super.setUp(); + + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + sysConf = new SystemConfig({ _owner: alice, _overhead: 2100, _scalar: 1000000, _batcherHash: bytes32(hex"abcd"), _gasLimit: 30_000_000, - _unsafeBlockSigner: address(1) + _unsafeBlockSigner: address(1), + _config: config }); } } @@ -24,6 +35,15 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init { function test_initialize_lowGasLimit_reverts() external { uint64 minimumGasLimit = sysConf.minimumGasLimit(); + SystemConfig.ResourceConfig memory cfg = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + vm.expectRevert("SystemConfig: gas limit too low"); new SystemConfig({ _owner: alice, @@ -31,7 +51,8 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init { _scalar: 0, _batcherHash: bytes32(hex""), _gasLimit: minimumGasLimit - 1, - _unsafeBlockSigner: address(1) + _unsafeBlockSigner: address(1), + _config: cfg }); } } diff --git a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol index f838a1d7d24a..8eccce15a4b1 100644 --- a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol @@ -7,13 +7,23 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test { SystemConfig public config; function setUp() public { + SystemConfig.ResourceConfig memory cfg = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + config = new SystemConfig({ _owner: address(0xbeef), _overhead: 2100, _scalar: 1000000, _batcherHash: bytes32(hex"abcd"), _gasLimit: 30_000_000, - _unsafeBlockSigner: address(1) + _unsafeBlockSigner: address(1), + _config: cfg }); // Set the target contract to the `config` diff --git a/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts b/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts index 7aec01e77b78..3225cfcb2254 100644 --- a/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts +++ b/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts @@ -1,5 +1,6 @@ import { DeployFunction } from 'hardhat-deploy/dist/types' import '@eth-optimism/hardhat-deploy-config' +import { ethers } from 'ethers' import { assertContractVariable, deploy } from '../src/deploy-utils' @@ -18,6 +19,16 @@ const deployFn: DeployFunction = async (hre) => { batcherHash, hre.deployConfig.l2GenesisBlockGasLimit, hre.deployConfig.p2pSequencerAddress, + { + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + systemTxMaxGas: 1_000_000, + minimumBaseFee: ethers.utils.parseUnits('1', 'gwei'), + maximumBaseFee: ethers.BigNumber.from( + '0xffffffffffffffffffffffffffffffff' + ), + }, ], postDeployAction: async (contract) => { await assertContractVariable( From f28d13bb3621044a3ba146d392e6f5fb036a11d1 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 12:13:00 -0700 Subject: [PATCH 12/30] contracts-bedrock: more cleanup --- op-chain-ops/genesis/layer_one_test.go | 19 +++++++++++++++++++ .../contracts/L1/OptimismPortal.sol | 3 ++- .../contracts/L1/ResourceMetering.sol | 3 ++- .../contracts/L1/SystemConfig.sol | 10 +++++++++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/op-chain-ops/genesis/layer_one_test.go b/op-chain-ops/genesis/layer_one_test.go index d2376afb6c36..c20b60f03259 100644 --- a/op-chain-ops/genesis/layer_one_test.go +++ b/op-chain-ops/genesis/layer_one_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum-optimism/optimism/op-bindings/bindings" @@ -105,6 +106,24 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { cfg, err := sysCfg.ResourceConfig(&bind.CallOpts{}) require.NoError(t, err) require.Equal(t, cfg, defaultResourceConfig) + owner, err = sysCfg.Owner(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, owner, config.FinalSystemOwner) + overhead, err := sysCfg.Overhead(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, overhead.Uint64(), config.GasPriceOracleOverhead) + scalar, err := sysCfg.Scalar(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, scalar.Uint64(), config.GasPriceOracleScalar) + batcherHash, err := sysCfg.BatcherHash(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, common.Hash(batcherHash), config.BatchSenderAddress.Hash()) + gasLimit, err := sysCfg.GasLimit(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, gasLimit, uint64(config.L2GenesisBlockGasLimit)) + unsafeBlockSigner, err := sysCfg.UnsafeBlockSigner(&bind.CallOpts{}) + require.NoError(t, err) + require.Equal(t, unsafeBlockSigner, config.P2PSequencerAddress) // test that we can do deposits, etc. priv, err := crypto.HexToECDSA("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80") diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index a00162b5373c..1d076fda3690 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -207,7 +207,8 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { } /** - * @notice + * @notice Getter for the resource config. Used internally by the ResourceMetering + * contract. The SystemConfig is the source of truth for the resource config. */ function _resourceConfig() internal view override returns (SystemConfig.ResourceConfig memory) { return SYSTEM_CONFIG.resourceConfig(); diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index 1b7c2376b6f4..63ab3b1f5ba2 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -135,7 +135,8 @@ abstract contract ResourceMetering is Initializable { } /** - * @notice + * @notice Virtual function that returns the resource config. Contracts that inherit this + * contract must implement this function. */ function _resourceConfig() internal virtual returns (SystemConfig.ResourceConfig memory); diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 96969bea9630..6cb5b7870639 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -136,7 +136,15 @@ contract SystemConfig is OwnableUpgradeable, Semver { address _unsafeBlockSigner, ResourceConfig memory _config ) Semver(1, 1, 0) { - initialize(_owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config); + initialize({ + _owner: _owner, + _overhead: _overhead, + _scalar: _scalar, + _batcherHash: _batcherHash, + _gasLimit: _gasLimit, + _unsafeBlockSigner: _unsafeBlockSigner, + _config: _config + }); } /** From 8c4d4417568cd177286347dbe8a9b13038f698c9 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 12:41:21 -0700 Subject: [PATCH 13/30] contracts-bedrock: more fixes --- packages/contracts-bedrock/.gas-snapshot | 19 ++++++------ .../contracts/test/SystemConfig.t.sol | 14 +++++++++ .../deploy/017-SystemConfigImpl.ts | 16 ++++++++-- .../deploy/019-SystemDictatorInit.ts | 2 +- specs/guaranteed-gas-market.md | 31 +++++++++++++++++++ 5 files changed, 69 insertions(+), 13 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 7e1b1ffcf8df..3388484c88a9 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -267,9 +267,9 @@ OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutp OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 207497) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 41753) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 199441) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 205795) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 205787) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 180206) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 243812) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 243804) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 245528) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 53576) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 234941) @@ -418,14 +418,15 @@ SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 163228) SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11515) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 147845) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 148894) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10546) -SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10599) +SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10622) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10615) -SystemConfig_Setters_TestFail:test_setResourceConfig_badMinMax_reverts() (gas: 12951) -SystemConfig_Setters_TestFail:test_setResourceConfig_lowGasLimit_reverts() (gas: 16030) -SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11578) -SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 12999) -SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10661) +SystemConfig_Setters_TestFail:test_setResourceConfig_badMinMax_reverts() (gas: 13002) +SystemConfig_Setters_TestFail:test_setResourceConfig_badPrecision_reverts() (gas: 15592) +SystemConfig_Setters_TestFail:test_setResourceConfig_lowGasLimit_reverts() (gas: 16082) +SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11610) +SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 13039) +SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10639) TransferOnionTest:test_constructor_succeeds() (gas: 564855) TransferOnionTest:test_unwrap_succeeds() (gas: 724958) \ No newline at end of file diff --git a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol index a7f058340316..dcbee1e68989 100644 --- a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol @@ -134,6 +134,20 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { vm.expectRevert("SystemConfig: gas limit too low"); sysConf.setResourceConfig(config); } + + function test_setResourceConfig_badPrecision_reverts() external { + SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 11, + baseFeeMaxChangeDenominator: 8, + systemTxMaxGas: 1_000_000, + minimumBaseFee: 1 gwei, + maximumBaseFee: 2 gwei + }); + vm.prank(sysConf.owner()); + vm.expectRevert("SystemConfig: precision loss with target resource limit"); + sysConf.setResourceConfig(config); + } } contract SystemConfig_Setters_Test is SystemConfig_Init { diff --git a/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts b/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts index 3225cfcb2254..fdb254ed67ad 100644 --- a/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts +++ b/packages/contracts-bedrock/deploy/017-SystemConfigImpl.ts @@ -1,9 +1,13 @@ +import assert from 'assert' + import { DeployFunction } from 'hardhat-deploy/dist/types' import '@eth-optimism/hardhat-deploy-config' import { ethers } from 'ethers' import { assertContractVariable, deploy } from '../src/deploy-utils' +const uint128Max = ethers.BigNumber.from('0xffffffffffffffffffffffffffffffff') + const deployFn: DeployFunction = async (hre) => { const batcherHash = hre.ethers.utils .hexZeroPad(hre.deployConfig.batchSenderAddress, 32) @@ -25,9 +29,7 @@ const deployFn: DeployFunction = async (hre) => { baseFeeMaxChangeDenominator: 8, systemTxMaxGas: 1_000_000, minimumBaseFee: ethers.utils.parseUnits('1', 'gwei'), - maximumBaseFee: ethers.BigNumber.from( - '0xffffffffffffffffffffffffffffffff' - ), + maximumBaseFee: uint128Max, }, ], postDeployAction: async (contract) => { @@ -52,6 +54,14 @@ const deployFn: DeployFunction = async (hre) => { 'unsafeBlockSigner', hre.deployConfig.p2pSequencerAddress ) + + const config = await contract.resourceConfig() + assert(config.maxResourceLimit === 20_000_000) + assert(config.elasticityMultiplier === 10) + assert(config.baseFeeMaxChangeDenominator === 8) + assert(config.systemTxMaxGas === 1_000_000) + assert(ethers.utils.parseUnits('1', 'gwei').eq(config.minimumBaseFee)) + assert(config.maximumBaseFee.eq(uint128Max)) }, }) } diff --git a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts index 77a61fbd0354..6cc455703c4d 100644 --- a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts +++ b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts @@ -104,7 +104,7 @@ const deployFn: DeployFunction = async (hre) => { maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1000000000, + minimumBaseFee: ethers.utils.parseUnits('1', 'gwei'), systemTxMaxGas: 1_000_000, maximumBaseFee: BigNumber.from( '0xffffffffffffffffffffffffffffffff' diff --git a/specs/guaranteed-gas-market.md b/specs/guaranteed-gas-market.md index d840908ec010..f6a8852dcdc1 100644 --- a/specs/guaranteed-gas-market.md +++ b/specs/guaranteed-gas-market.md @@ -5,8 +5,10 @@ **Table of Contents** - [Gas Stipend](#gas-stipend) +- [Default Values](#default-values) - [Limiting Guaranteed Gas](#limiting-guaranteed-gas) - [Rationale for burning L1 Gas](#rationale-for-burning-l1-gas) +- [On Preventing Griefing Attacks](#on-preventing-griefing-attacks) @@ -36,6 +38,18 @@ the L2 gas, where `gas spent` is the amount of L1 gas spent processing the depos of this credit is greater than the ETH value of the requested guaranteed gas (`requested guaranteed gas * L2 gas price`), no L1 gas is burnt. +## Default Values + +| Variable | Value | +| ------------------------------- | ----------------- | +| Max Resource Limit | 20,000,000 | +| Elasticity Multiplier | 10 | +| Base Fee Max Change Denominator | 8 | +| Minimum Base Fee | 1 gwei | +| Maximum Base Fee | type(uint128).max | +| System Tx Max Gas | 1,000,000 | + + ## Limiting Guaranteed Gas The total amount of guaranteed gas that can be bought in a single L1 block must be limited to @@ -123,3 +137,20 @@ The payable version (Option 2) will likely have discount applied to it (or conve premium applied to it). For the initial release of bedrock, only #1 is supported. + +## On Preventing Griefing Attacks + +The cost of purchasing all of the deposit gas in every block must be expensive +enough to prevent attackers from griefing all deposits to the network. +An attacker would observe a deposit in the mempool and frontrun it with a deposit +that purchases enough gas such that the other deposit reverts. +The smaller the max resource limit is, the easier this attack is to pull off. +This attack is mitigated by having a large resource limit as well as a large +elastcity multiplier. This means that the target resource usage is kept small, +giving a lot of room for the deposit base fee to rise when the max resource limit +is being purchased. + +This attack should be too expensive to pull off in practice, but if an extremely +wealthy adversary does decide to grief network deposits for an extended period +of time, efforts will be placed to ensure that deposits are able to be processed +on the network. From 73f73caedea7ab4ae0ee4bb006f0d67267da921a Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 12:45:22 -0700 Subject: [PATCH 14/30] specs: lint --- specs/guaranteed-gas-market.md | 1 - 1 file changed, 1 deletion(-) diff --git a/specs/guaranteed-gas-market.md b/specs/guaranteed-gas-market.md index f6a8852dcdc1..bcca3479f20f 100644 --- a/specs/guaranteed-gas-market.md +++ b/specs/guaranteed-gas-market.md @@ -49,7 +49,6 @@ of this credit is greater than the ETH value of the requested guaranteed gas | Maximum Base Fee | type(uint128).max | | System Tx Max Gas | 1,000,000 | - ## Limiting Guaranteed Gas The total amount of guaranteed gas that can be bought in a single L1 block must be limited to From ad928de2cc8ca1c2bf5d59161fcace9131426493 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 12:59:04 -0700 Subject: [PATCH 15/30] contracts-bedrock: regenerate storage layout --- packages/contracts-bedrock/.storage-layout | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/contracts-bedrock/.storage-layout b/packages/contracts-bedrock/.storage-layout index 2e8939eb916b..93de71d3586c 100644 --- a/packages/contracts-bedrock/.storage-layout +++ b/packages/contracts-bedrock/.storage-layout @@ -69,17 +69,18 @@ ➡ contracts/L1/SystemConfig.sol:SystemConfig ======================= -| Name | Type | Slot | Offset | Bytes | Contract | -|---------------|-------------|------|--------|-------|--------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | -| _initializing | bool | 0 | 1 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | -| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/SystemConfig.sol:SystemConfig | -| _owner | address | 51 | 0 | 20 | contracts/L1/SystemConfig.sol:SystemConfig | -| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/SystemConfig.sol:SystemConfig | -| overhead | uint256 | 101 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| scalar | uint256 | 102 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| batcherHash | bytes32 | 103 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| gasLimit | uint64 | 104 | 0 | 8 | contracts/L1/SystemConfig.sol:SystemConfig | +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------|------------------------------------|------|--------|-------|--------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | +| _initializing | bool | 0 | 1 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | +| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/SystemConfig.sol:SystemConfig | +| _owner | address | 51 | 0 | 20 | contracts/L1/SystemConfig.sol:SystemConfig | +| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/SystemConfig.sol:SystemConfig | +| overhead | uint256 | 101 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| scalar | uint256 | 102 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| batcherHash | bytes32 | 103 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| gasLimit | uint64 | 104 | 0 | 8 | contracts/L1/SystemConfig.sol:SystemConfig | +| _resourceConfig | struct SystemConfig.ResourceConfig | 105 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | ======================= ➡ contracts/legacy/DeployerWhitelist.sol:DeployerWhitelist From 31ac6d9862bcbce1d0d534b7cc9c9189c399302d Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 13:28:58 -0700 Subject: [PATCH 16/30] contracts-bedrock: generate invariant docs --- .../invariant-docs/OptimismPortal.md | 2 +- .../invariant-docs/ResourceMetering.md | 14 +++++++------- .../invariant-docs/SystemConfig.md | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/contracts-bedrock/invariant-docs/OptimismPortal.md b/packages/contracts-bedrock/invariant-docs/OptimismPortal.md index ec57083b9a31..a5697334a6a4 100644 --- a/packages/contracts-bedrock/invariant-docs/OptimismPortal.md +++ b/packages/contracts-bedrock/invariant-docs/OptimismPortal.md @@ -19,6 +19,6 @@ This invariant asserts that there is no chain of calls that can be made that wil ## Deposits of any value should always succeed unless `_to` = `address(0)` or `_isCreation` = `true`. -**Test:** [`FuzzOptimismPortal.sol#L41`](../contracts/echidna/FuzzOptimismPortal.sol#L41) +**Test:** [`FuzzOptimismPortal.sol#L62`](../contracts/echidna/FuzzOptimismPortal.sol#L62) All deposits, barring creation transactions and transactions sent to `address(0)`, should always succeed. diff --git a/packages/contracts-bedrock/invariant-docs/ResourceMetering.md b/packages/contracts-bedrock/invariant-docs/ResourceMetering.md index b43558cfb089..a148a6a97394 100644 --- a/packages/contracts-bedrock/invariant-docs/ResourceMetering.md +++ b/packages/contracts-bedrock/invariant-docs/ResourceMetering.md @@ -1,42 +1,42 @@ # `ResourceMetering` Invariants ## The base fee should increase if the last block used more than the target amount of gas -**Test:** [`FuzzResourceMetering.sol#L139`](../contracts/echidna/FuzzResourceMetering.sol#L139) +**Test:** [`FuzzResourceMetering.sol#L160`](../contracts/echidna/FuzzResourceMetering.sol#L160) If the last block used more than the target amount of gas (and there were no empty blocks in between), ensure this block's baseFee increased, but not by more than the max amount per block. ## The base fee should decrease if the last block used less than the target amount of gas -**Test:** [`FuzzResourceMetering.sol#L150`](../contracts/echidna/FuzzResourceMetering.sol#L150) +**Test:** [`FuzzResourceMetering.sol#L171`](../contracts/echidna/FuzzResourceMetering.sol#L171) If the previous block used less than the target amount of gas, the base fee should decrease, but not more than the max amount. ## A block's base fee should never be below `MINIMUM_BASE_FEE` -**Test:** [`FuzzResourceMetering.sol#L160`](../contracts/echidna/FuzzResourceMetering.sol#L160) +**Test:** [`FuzzResourceMetering.sol#L181`](../contracts/echidna/FuzzResourceMetering.sol#L181) This test asserts that a block's base fee can never drop below the `MINIMUM_BASE_FEE` threshold. ## A block can never consume more than `MAX_RESOURCE_LIMIT` gas. -**Test:** [`FuzzResourceMetering.sol#L170`](../contracts/echidna/FuzzResourceMetering.sol#L170) +**Test:** [`FuzzResourceMetering.sol#L191`](../contracts/echidna/FuzzResourceMetering.sol#L191) This test asserts that a block can never consume more than the `MAX_RESOURCE_LIMIT` gas threshold. ## The base fee can never be raised more than the max base fee change. -**Test:** [`FuzzResourceMetering.sol#L181`](../contracts/echidna/FuzzResourceMetering.sol#L181) +**Test:** [`FuzzResourceMetering.sol#L202`](../contracts/echidna/FuzzResourceMetering.sol#L202) After a block consumes more gas than the target gas, the base fee cannot be raised more than the maximum amount allowed. The max base fee change (per-block) is derived as follows: `prevBaseFee / BASE_FEE_MAX_CHANGE_DENOMINATOR` ## The base fee can never be lowered more than the max base fee change. -**Test:** [`FuzzResourceMetering.sol#L192`](../contracts/echidna/FuzzResourceMetering.sol#L192) +**Test:** [`FuzzResourceMetering.sol#L213`](../contracts/echidna/FuzzResourceMetering.sol#L213) After a block consumes less than the target gas, the base fee cannot be lowered more than the maximum amount allowed. The max base fee change (per-block) is derived as follows: `prevBaseFee / BASE_FEE_MAX_CHANGE_DENOMINATOR` ## The `maxBaseFeeChange` calculation over multiple blocks can never underflow. -**Test:** [`FuzzResourceMetering.sol#L203`](../contracts/echidna/FuzzResourceMetering.sol#L203) +**Test:** [`FuzzResourceMetering.sol#L224`](../contracts/echidna/FuzzResourceMetering.sol#L224) When calculating the `maxBaseFeeChange` after multiple empty blocks, the calculation should never be allowed to underflow. diff --git a/packages/contracts-bedrock/invariant-docs/SystemConfig.md b/packages/contracts-bedrock/invariant-docs/SystemConfig.md index da9a1999fd6f..591b225b51d3 100644 --- a/packages/contracts-bedrock/invariant-docs/SystemConfig.md +++ b/packages/contracts-bedrock/invariant-docs/SystemConfig.md @@ -1,5 +1,5 @@ # `SystemConfig` Invariants ## The gas limit of the `SystemConfig` contract can never be lower than the hard-coded lower bound. -**Test:** [`SystemConfig.t.sol#L39`](../contracts/test/invariants/SystemConfig.t.sol#L39) +**Test:** [`SystemConfig.t.sol#L49`](../contracts/test/invariants/SystemConfig.t.sol#L49) From 0ed8dca85ae8c068a36014091230805b25aa2b84 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 14:06:32 -0700 Subject: [PATCH 17/30] contracts-bedrock: more cleanup --- packages/contracts-bedrock/.gas-snapshot | 2 +- .../contracts-bedrock/contracts/L1/SystemConfig.sol | 12 +++++------- .../deploy/019-SystemDictatorInit.ts | 2 ++ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 3388484c88a9..7948ab9bbfdc 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -418,7 +418,7 @@ SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 163228) SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11515) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) -SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 148894) +SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 148858) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10546) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10622) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10615) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 6cb5b7870639..2c694c13b5a5 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -21,14 +21,12 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @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 RESOURCE_CONFIG Represents an update to the resource config. */ enum UpdateType { BATCHER, GAS_CONFIG, GAS_LIMIT, - UNSAFE_BLOCK_SIGNER, - RESOURCE_CONFIG + UNSAFE_BLOCK_SIGNER } /** @@ -269,14 +267,14 @@ contract SystemConfig is OwnableUpgradeable, Semver { } /** - * @notice An external setter for the resource config. + * @notice An external setter for the resource config. In the future, this + * method may emit an event that the `op-node` picks up for when the + * resource config is changed. + * * @param _config The new resource config values. */ function setResourceConfig(ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); - - bytes memory data = abi.encode(_config); - emit ConfigUpdate(VERSION, UpdateType.RESOURCE_CONFIG, data); } /** diff --git a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts index 6cc455703c4d..0b4695c59097 100644 --- a/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts +++ b/packages/contracts-bedrock/deploy/019-SystemDictatorInit.ts @@ -100,6 +100,8 @@ const deployFn: DeployFunction = async (hre) => { ), gasLimit: hre.deployConfig.l2GenesisBlockGasLimit, unsafeBlockSigner: hre.deployConfig.p2pSequencerAddress, + // The resource config is not exposed to the end user + // to simplify deploy config. It may be introduced in the future. resourceConfig: { maxResourceLimit: 20_000_000, elasticityMultiplier: 10, From 3daf529b54084dd9db8bc5cf9c037f1cbf017dba Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 14:32:59 -0700 Subject: [PATCH 18/30] contracts-bedrock: more fixes --- op-bindings/bindings/systemconfig.go | 2 +- op-bindings/bindings/systemconfig_more.go | 2 +- .../deploy/020-SystemDictatorSteps-1.ts | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index e5ceeecce926..de714f13387d 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -41,7 +41,7 @@ type SystemConfigResourceConfig struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"structSystemConfig.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200239a3803806200239a83398101604081905262000034916200084f565b6001608081905260a052600060c052620000548787878787878762000061565b5050505050505062000a4f565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000bb11760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006b1565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b60248201526000805160206200237a83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006de565b565b620002f162000745565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007a1565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6000816040015160ff16116200045c5760405162461bcd60e51b815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f74604482015264020626520360dc1b606482015260840162000112565b606854608082015182516001600160401b03909216916200047e91906200099e565b63ffffffff161115620004d45760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff1611620005455760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000567908290620009c9565b620005739190620009fb565b63ffffffff1614620005ee5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006d99063ffffffff6a010000000000000000000082048116911662000a2a565b905090565b600054610100900460ff166200073a5760405162461bcd60e51b815260206004820152602b60248201526000805160206200237a83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007a1565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200080b57600080fd5b919050565b805163ffffffff811681146200080b57600080fd5b805160ff811681146200080b57600080fd5b80516001600160801b03811681146200080b57600080fd5b60008060008060008060008789036101808112156200086d57600080fd5b6200087889620007f3565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008ad57600080fd5b819550620008be60a08c01620007f3565b945060c060bf1984011215620008d357600080fd5b604051925060c08301915082821081831117156200090157634e487b7160e01b600052604160045260246000fd5b506040526200091360c08a0162000810565b81526200092360e08a0162000825565b6020820152620009376101008a0162000825565b60408201526200094b6101208a0162000810565b60608201526200095f6101408a0162000810565b6080820152620009736101608a0162000837565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009c057620009c062000988565b01949350505050565b600063ffffffff80841680620009ef57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a215762000a2162000988565b02949350505050565b60006001600160401b03828116848216808303821115620009c057620009c062000988565b60805160a05160c0516118fb62000a7f60003960006105930152600061056a0152600061054101526118fb6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b3660046113d9565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b6040516101849190611475565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a0610285366004611488565b6105f1565b6101a06102983660046114c2565b61068a565b6101a06102ab36600461161a565b610775565b6101a06102be366004611636565b610833565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e3660046113d9565b610863565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461164f565b61091a565b61017a600081565b610453610bcd565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516105039190611475565b60405180910390a35050565b6069546000906105359063ffffffff6a01000000000000000000008204811691166116f1565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610c4e565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6040516020016105c99392919061171d565b604051602081830303815290604052905090565b6105e5610bcd565b6105ef6000610d8b565b565b6105f9610bcd565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d9190611475565b60405180910390a3505050565b610692610bcd565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610bcd565b61078681610e02565b6000816040516020016107fc9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b61083b610bcd565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b61086b610bcd565b73ffffffffffffffffffffffffffffffffffffffff811661090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61091781610d8b565b50565b600054610100900460ff161580801561093a5750600054600160ff909116105b806109545750303b158015610954575060005460ff166001145b6109e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a46611276565b610a4f88610863565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abf82610e02565b610ac761050f565b67ffffffffffffffff168467ffffffffffffffff161015610b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610ba757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610c9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cbb5780610ca581611793565b9150610cb49050600a836117fa565b9150610c95565b60008167ffffffffffffffff811115610cd657610cd66114dd565b6040519080825280601f01601f191660200182016040528015610d00576020820181803683370190505b5090505b8415610d8357610d1560018361180e565b9150610d22600a86611825565b610d2d906030611839565b60f81b818381518110610d4257610d42611851565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d7c600a866117fa565b9450610d04565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610f6a9190611880565b63ffffffff161115610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff161161106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff9091169061108f90829061189f565b61109991906118c2565b63ffffffff161461112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610d8b565b803573ffffffffffffffffffffffffffffffffffffffff811681146113d457600080fd5b919050565b6000602082840312156113eb57600080fd5b6113f4826113b0565b9392505050565b60005b838110156114165781810151838201526020016113fe565b83811115611425576000848401525b50505050565b600081518084526114438160208601602086016113fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113f4602083018461142b565b6000806040838503121561149b57600080fd5b50508035926020909101359150565b803567ffffffffffffffff811681146113d457600080fd5b6000602082840312156114d457600080fd5b6113f4826114aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff811681146113d457600080fd5b803560ff811681146113d457600080fd5b80356fffffffffffffffffffffffffffffffff811681146113d457600080fd5b600060c0828403121561156357600080fd5b60405160c0810181811067ffffffffffffffff821117156115ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806115bc8361150c565b81526115ca60208401611520565b60208201526115db60408401611520565b60408201526115ec6060840161150c565b60608201526115fd6080840161150c565b608082015261160e60a08401611531565b60a08201525092915050565b600060c0828403121561162c57600080fd5b6113f48383611551565b60006020828403121561164857600080fd5b5035919050565b6000806000806000806000610180888a03121561166b57600080fd5b611674886113b0565b9650602088013595506040880135945060608801359350611697608089016114aa565b92506116a560a089016113b0565b91506116b48960c08a01611551565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611714576117146116c2565b01949350505050565b6000845161172f8184602089016113fb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161176b816001850160208a016113fb565b600192019182015283516117868160028401602088016113fb565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c4576117c46116c2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611809576118096117cb565b500490565b600082821015611820576118206116c2565b500390565b600082611834576118346117cb565b500690565b6000821982111561184c5761184c6116c2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611714576117146116c2565b600063ffffffff808416806118b6576118b66117cb565b92169190910492915050565b600063ffffffff808316818516818304811182151516156118e5576118e56116c2565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x60e06040523480156200001157600080fd5b50604051620022ed380380620022ed83398101604081905262000034916200084f565b6001608081905260a052600060c052620000548787878787878762000061565b5050505050505062000a4f565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000b041760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006b1565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022cd83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006de565b565b620002f162000745565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007a1565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6000816040015160ff16116200045c5760405162461bcd60e51b815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f74604482015264020626520360dc1b606482015260840162000112565b606854608082015182516001600160401b03909216916200047e91906200099e565b63ffffffff161115620004d45760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff1611620005455760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000567908290620009c9565b620005739190620009fb565b63ffffffff1614620005ee5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006d99063ffffffff6a010000000000000000000082048116911662000a2a565b905090565b600054610100900460ff166200073a5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022cd83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007a1565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200080b57600080fd5b919050565b805163ffffffff811681146200080b57600080fd5b805160ff811681146200080b57600080fd5b80516001600160801b03811681146200080b57600080fd5b60008060008060008060008789036101808112156200086d57600080fd5b6200087889620007f3565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008ad57600080fd5b819550620008be60a08c01620007f3565b945060c060bf1984011215620008d357600080fd5b604051925060c08301915082821081831117156200090157634e487b7160e01b600052604160045260246000fd5b506040526200091360c08a0162000810565b81526200092360e08a0162000825565b6020820152620009376101008a0162000825565b60408201526200094b6101208a0162000810565b60608201526200095f6101408a0162000810565b6080820152620009736101608a0162000837565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009c057620009c062000988565b01949350505050565b600063ffffffff80841680620009ef57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a215762000a2162000988565b02949350505050565b60006001600160401b03828116848216808303821115620009c057620009c062000988565b60805160a05160c05161184e62000a7f60003960006105930152600061056a01526000610541015261184e6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b36600461132c565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b60405161018491906113c8565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046113db565b6105f1565b6101a0610298366004611415565b61068a565b6101a06102ab36600461156d565b610775565b6101a06102be366004611589565b610789565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e36600461132c565b6107b9565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e3660046115a2565b61086d565b61017a600081565b610453610b20565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906113c8565b60405180910390a35050565b6069546000906105359063ffffffff6a0100000000000000000000820481169116611644565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610ba1565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6040516020016105c993929190611670565b604051602081830303815290604052905090565b6105e5610b20565b6105ef6000610cde565b565b6105f9610b20565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d91906113c8565b60405180910390a3505050565b610692610b20565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610b20565b61078681610d55565b50565b610791610b20565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b6107c1610b20565b73ffffffffffffffffffffffffffffffffffffffff8116610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61078681610cde565b600054610100900460ff161580801561088d5750600054600160ff909116105b806108a75750303b1580156108a7575060005460ff166001145b610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561099157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109996111c9565b6109a2886107b9565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610a1282610d55565b610a1a61050f565b67ffffffffffffffff168467ffffffffffffffff161015610a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610afa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610be457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610c0e5780610bf8816116e6565b9150610c079050600a8361174d565b9150610be8565b60008167ffffffffffffffff811115610c2957610c29611430565b6040519080825280601f01601f191660200182016040528015610c53576020820181803683370190505b5090505b8415610cd657610c68600183611761565b9150610c75600a86611778565b610c8090603061178c565b60f81b818381518110610c9557610c956117a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ccf600a8661174d565b9450610c57565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610ebd91906117d3565b63ffffffff161115610f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff1611610fc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff90911690610fe29082906117f2565b610fec9190611815565b63ffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610cde565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132757600080fd5b919050565b60006020828403121561133e57600080fd5b61134782611303565b9392505050565b60005b83811015611369578181015183820152602001611351565b83811115611378576000848401525b50505050565b6000815180845261139681602086016020860161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611347602083018461137e565b600080604083850312156113ee57600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461132757600080fd5b60006020828403121561142757600080fd5b611347826113fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461132757600080fd5b803560ff8116811461132757600080fd5b80356fffffffffffffffffffffffffffffffff8116811461132757600080fd5b600060c082840312156114b657600080fd5b60405160c0810181811067ffffffffffffffff82111715611500577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061150f8361145f565b815261151d60208401611473565b602082015261152e60408401611473565b604082015261153f6060840161145f565b60608201526115506080840161145f565b608082015261156160a08401611484565b60a08201525092915050565b600060c0828403121561157f57600080fd5b61134783836114a4565b60006020828403121561159b57600080fd5b5035919050565b6000806000806000806000610180888a0312156115be57600080fd5b6115c788611303565b96506020880135955060408801359450606088013593506115ea608089016113fd565b92506115f860a08901611303565b91506116078960c08a016114a4565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561166757611667611615565b01949350505050565b6000845161168281846020890161134e565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116be816001850160208a0161134e565b600192019182015283516116d981600284016020880161134e565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361171757611717611615565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261175c5761175c61171e565b500490565b60008282101561177357611773611615565b500390565b6000826117875761178761171e565b500690565b6000821982111561179f5761179f611615565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff80831681851680830382111561166757611667611615565b600063ffffffff808416806118095761180961171e565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561183857611838611615565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/systemconfig_more.go b/op-bindings/bindings/systemconfig_more.go index 66c52978a262..a0d5bfc8ff08 100644 --- a/op-bindings/bindings/systemconfig_more.go +++ b/op-bindings/bindings/systemconfig_more.go @@ -13,7 +13,7 @@ const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\ var SystemConfigStorageLayout = new(solc.StorageLayout) -var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b3660046113d9565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b6040516101849190611475565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a0610285366004611488565b6105f1565b6101a06102983660046114c2565b61068a565b6101a06102ab36600461161a565b610775565b6101a06102be366004611636565b610833565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e3660046113d9565b610863565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e36600461164f565b61091a565b61017a600081565b610453610bcd565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516105039190611475565b60405180910390a35050565b6069546000906105359063ffffffff6a01000000000000000000008204811691166116f1565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610c4e565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610c4e565b6040516020016105c99392919061171d565b604051602081830303815290604052905090565b6105e5610bcd565b6105ef6000610d8b565b565b6105f9610bcd565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d9190611475565b60405180910390a3505050565b610692610bcd565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610bcd565b61078681610e02565b6000816040516020016107fc9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060046104d2565b61083b610bcd565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b61086b610bcd565b73ffffffffffffffffffffffffffffffffffffffff811661090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61091781610d8b565b50565b600054610100900460ff161580801561093a5750600054600160ff909116105b806109545750303b158015610954575060005460ff166001145b6109e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a46611276565b610a4f88610863565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610abf82610e02565b610ac761050f565b67ffffffffffffffff168467ffffffffffffffff161015610b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610ba757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610c9157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610cbb5780610ca581611793565b9150610cb49050600a836117fa565b9150610c95565b60008167ffffffffffffffff811115610cd657610cd66114dd565b6040519080825280601f01601f191660200182016040528015610d00576020820181803683370190505b5090505b8415610d8357610d1560018361180e565b9150610d22600a86611825565b610d2d906030611839565b60f81b818381518110610d4257610d42611851565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610d7c600a866117fa565b9450610d04565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610f6a9190611880565b63ffffffff161115610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff161161106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff9091169061108f90829061189f565b61109991906118c2565b63ffffffff161461112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff1661130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610d8b565b803573ffffffffffffffffffffffffffffffffffffffff811681146113d457600080fd5b919050565b6000602082840312156113eb57600080fd5b6113f4826113b0565b9392505050565b60005b838110156114165781810151838201526020016113fe565b83811115611425576000848401525b50505050565b600081518084526114438160208601602086016113fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113f4602083018461142b565b6000806040838503121561149b57600080fd5b50508035926020909101359150565b803567ffffffffffffffff811681146113d457600080fd5b6000602082840312156114d457600080fd5b6113f4826114aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff811681146113d457600080fd5b803560ff811681146113d457600080fd5b80356fffffffffffffffffffffffffffffffff811681146113d457600080fd5b600060c0828403121561156357600080fd5b60405160c0810181811067ffffffffffffffff821117156115ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806115bc8361150c565b81526115ca60208401611520565b60208201526115db60408401611520565b60408201526115ec6060840161150c565b60608201526115fd6080840161150c565b608082015261160e60a08401611531565b60a08201525092915050565b600060c0828403121561162c57600080fd5b6113f48383611551565b60006020828403121561164857600080fd5b5035919050565b6000806000806000806000610180888a03121561166b57600080fd5b611674886113b0565b9650602088013595506040880135945060608801359350611697608089016114aa565b92506116a560a089016113b0565b91506116b48960c08a01611551565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516808303821115611714576117146116c2565b01949350505050565b6000845161172f8184602089016113fb565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161176b816001850160208a016113fb565b600192019182015283516117868160028401602088016113fb565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c4576117c46116c2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611809576118096117cb565b500490565b600082821015611820576118206116c2565b500390565b600082611834576118346117cb565b500690565b6000821982111561184c5761184c6116c2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff808316818516808303821115611714576117146116c2565b600063ffffffff808416806118b6576118b66117cb565b92169190910492915050565b600063ffffffff808316818516818304811182151516156118e5576118e56116c2565b0294935050505056fea164736f6c634300080f000a" +var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b36600461132c565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b60405161018491906113c8565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046113db565b6105f1565b6101a0610298366004611415565b61068a565b6101a06102ab36600461156d565b610775565b6101a06102be366004611589565b610789565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e36600461132c565b6107b9565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e3660046115a2565b61086d565b61017a600081565b610453610b20565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906113c8565b60405180910390a35050565b6069546000906105359063ffffffff6a0100000000000000000000820481169116611644565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610ba1565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6040516020016105c993929190611670565b604051602081830303815290604052905090565b6105e5610b20565b6105ef6000610cde565b565b6105f9610b20565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d91906113c8565b60405180910390a3505050565b610692610b20565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610b20565b61078681610d55565b50565b610791610b20565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b6107c1610b20565b73ffffffffffffffffffffffffffffffffffffffff8116610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61078681610cde565b600054610100900460ff161580801561088d5750600054600160ff909116105b806108a75750303b1580156108a7575060005460ff166001145b610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561099157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109996111c9565b6109a2886107b9565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610a1282610d55565b610a1a61050f565b67ffffffffffffffff168467ffffffffffffffff161015610a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610afa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610be457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610c0e5780610bf8816116e6565b9150610c079050600a8361174d565b9150610be8565b60008167ffffffffffffffff811115610c2957610c29611430565b6040519080825280601f01601f191660200182016040528015610c53576020820181803683370190505b5090505b8415610cd657610c68600183611761565b9150610c75600a86611778565b610c8090603061178c565b60f81b818381518110610c9557610c956117a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ccf600a8661174d565b9450610c57565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610ebd91906117d3565b63ffffffff161115610f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff1611610fc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff90911690610fe29082906117f2565b610fec9190611815565b63ffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610cde565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132757600080fd5b919050565b60006020828403121561133e57600080fd5b61134782611303565b9392505050565b60005b83811015611369578181015183820152602001611351565b83811115611378576000848401525b50505050565b6000815180845261139681602086016020860161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611347602083018461137e565b600080604083850312156113ee57600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461132757600080fd5b60006020828403121561142757600080fd5b611347826113fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461132757600080fd5b803560ff8116811461132757600080fd5b80356fffffffffffffffffffffffffffffffff8116811461132757600080fd5b600060c082840312156114b657600080fd5b60405160c0810181811067ffffffffffffffff82111715611500577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061150f8361145f565b815261151d60208401611473565b602082015261152e60408401611473565b604082015261153f6060840161145f565b60608201526115506080840161145f565b608082015261156160a08401611484565b60a08201525092915050565b600060c0828403121561157f57600080fd5b61134783836114a4565b60006020828403121561159b57600080fd5b5035919050565b6000806000806000806000610180888a0312156115be57600080fd5b6115c788611303565b96506020880135955060408801359450606088013593506115ea608089016113fd565b92506115f860a08901611303565b91506116078960c08a016114a4565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561166757611667611615565b01949350505050565b6000845161168281846020890161134e565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116be816001850160208a0161134e565b600192019182015283516116d981600284016020880161134e565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361171757611717611615565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261175c5761175c61171e565b500490565b60008282101561177357611773611615565b500390565b6000826117875761178761171e565b500690565b6000821982111561179f5761179f611615565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff80831681851680830382111561166757611667611615565b600063ffffffff808416806118095761180961171e565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561183857611838611615565b0294935050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(SystemConfigStorageLayoutJSON), SystemConfigStorageLayout); err != nil { diff --git a/packages/contracts-bedrock/deploy/020-SystemDictatorSteps-1.ts b/packages/contracts-bedrock/deploy/020-SystemDictatorSteps-1.ts index 80a55d34f973..460d600accdd 100644 --- a/packages/contracts-bedrock/deploy/020-SystemDictatorSteps-1.ts +++ b/packages/contracts-bedrock/deploy/020-SystemDictatorSteps-1.ts @@ -17,6 +17,8 @@ import { getCastCommand, } from '../src/deploy-utils' +const uint128Max = ethers.BigNumber.from('0xffffffffffffffffffffffffffffffff') + const deployFn: DeployFunction = async (hre) => { const { deployer } = await hre.getNamedAccounts() @@ -254,6 +256,14 @@ const deployFn: DeployFunction = async (hre) => { 'gasLimit', hre.deployConfig.l2GenesisBlockGasLimit ) + + const config = await SystemConfigProxy.resourceConfig() + assert(config.maxResourceLimit === 20_000_000) + assert(config.elasticityMultiplier === 10) + assert(config.baseFeeMaxChangeDenominator === 8) + assert(config.systemTxMaxGas === 1_000_000) + assert(ethers.utils.parseUnits('1', 'gwei').eq(config.minimumBaseFee)) + assert(config.maximumBaseFee.eq(uint128Max)) }, }) From 1f7dc086ede4f34c12a08135ac486a161e197c5f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:11:55 -0700 Subject: [PATCH 19/30] contracts-bedrock: various cleanup --- .../contracts/L1/SystemConfig.sol | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 2c694c13b5a5..54b21ee47c62 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -46,7 +46,9 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this * value. * @custom:field systemTxMaxGas The amount of gas supplied to the system - * transaction. + * transaction. This should be set to the same number + * that the op-node sets as the gas limit for the + * system transaction. * @custom:field maximumBaseFee The max deposit base fee, it is clamped to this * value. */ @@ -101,7 +103,8 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice The configuration for the deposit fee market. Used by the OptimismPortal - * to meter the cost of buying L2 gas on L1. + * to meter the cost of buying L2 gas on L1. Set as internal and wrapped with a getter + * so that the struct is returned instead of a tuple. */ ResourceConfig internal _resourceConfig; @@ -176,6 +179,18 @@ contract SystemConfig is OwnableUpgradeable, Semver { _setResourceConfig(_config); require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); } + /** + * @notice Returns the minimum L2 gas limit that can be safely set for the system to + * operate. The L2 gas limit must be larger than or equal to the amount of + * gas that is allocated for deposits per block plus the amount of gas that + * is allocated for the system transaction. + * This function is used to determine if changes to parameters are safe. + * + * @return uint64 + */ + function minimumGasLimit() public view returns (uint64) { + return uint64(_resourceConfig.maxResourceLimit) + uint64(_resourceConfig.systemTxMaxGas); + } /** * @notice High level getter for the unsafe block signer address. Unsafe blocks can be @@ -261,6 +276,8 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice A getter for the resource config. Ensures that the struct is * returned instead of a tuple. + * + * @return ResourceConfig */ function resourceConfig() external view returns (ResourceConfig memory) { return _resourceConfig; @@ -279,30 +296,30 @@ contract SystemConfig is OwnableUpgradeable, Semver { /** * @notice An internal setter for the resource config. Ensures that the - * config is sane before storing it. Holds the following invariants: - * - min base fee must be less than or equal to max base fee - * - base fee change denominator must be greater than 0 - * - max resource limit plus system tx gas must be less than or - * equal to the L2 gas limit - * - elasticity multiplier must be greater than 0 - * - no precision loss when computing target resource limit + * config is sane before storing it by checking for invariants. * * @param _config The new resource config */ function _setResourceConfig(ResourceConfig memory _config) internal { + // min base fee must be less than or equal to max base fee require( _config.minimumBaseFee <= _config.maximumBaseFee, "SystemConfig: min base fee must be less than max base" ); + // base fee change denominator must be greater than 0 require(_config.baseFeeMaxChangeDenominator > 0, "SystemConfig: denominator cannot be 0"); + // max resource limit plus system tx gas must be less than or + // equal to the L2 gas limit require( _config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit, "SystemConfig: gas limit too low" ); + // elasticity multiplier must be greater than 0 require( _config.elasticityMultiplier > 0, "SystemConfig: elasticity multiplier cannot be 0" ); + // no precision loss when computing target resource limit require( ((_config.maxResourceLimit / _config.elasticityMultiplier) * _config.elasticityMultiplier) == _config.maxResourceLimit, @@ -311,15 +328,4 @@ contract SystemConfig is OwnableUpgradeable, Semver { _resourceConfig = _config; } - - /** - * @notice Returns the minimum L2 gas limit that can be safely set for the system to - * operate. The L2 gas limit must be larger than or equal to the amount of - * gas that is allocated for deposits per block plus the amount of gas that - * is allocated for the system transaction. - * This function is used to determine if changes to parameters are safe. - */ - function minimumGasLimit() public view returns (uint64) { - return uint64(_resourceConfig.maxResourceLimit) + uint64(_resourceConfig.systemTxMaxGas); - } } From f3654da7e60771e53d77cceb05707776a21aa3d2 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:41:27 -0700 Subject: [PATCH 20/30] contracts-bedrock: code review fixes --- op-bindings/bindings/systemconfig.go | 30 ++++++------- op-bindings/bindings/systemconfig_more.go | 2 +- op-chain-ops/genesis/layer_one.go | 19 +++++--- .../contracts/L1/OptimismPortal.sol | 2 +- .../contracts/L1/ResourceMetering.sol | 35 +++++++++++++-- .../contracts/L1/SystemConfig.sol | 45 +++---------------- .../contracts/deployment/SystemDictator.sol | 5 ++- .../contracts/echidna/FuzzOptimismPortal.sol | 3 +- .../echidna/FuzzResourceMetering.sol | 9 ++-- .../contracts/libraries/Constants.sol | 18 ++++++++ .../contracts/test/CommonTest.t.sol | 3 +- .../contracts/test/OptimismPortal.t.sol | 4 +- .../contracts/test/ResourceMetering.t.sol | 40 +++++------------ .../contracts/test/SystemConfig.t.sol | 15 ++++--- .../test/invariants/SystemConfig.t.sol | 11 ++--- 15 files changed, 123 insertions(+), 118 deletions(-) diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index de714f13387d..210f3df3d911 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -28,8 +28,8 @@ var ( _ = event.NewSubscription ) -// SystemConfigResourceConfig is an auto generated low-level Go binding around an user-defined struct. -type SystemConfigResourceConfig struct { +// ResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. +type ResourceMeteringResourceConfig struct { MaxResourceLimit uint32 ElasticityMultiplier uint8 BaseFeeMaxChangeDenominator uint8 @@ -40,7 +40,7 @@ type SystemConfigResourceConfig struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"structSystemConfig.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structSystemConfig.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\"},{\"inputs\":[],\"name\":\"MINIMUM_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"structResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", Bin: "0x60e06040523480156200001157600080fd5b50604051620022ed380380620022ed83398101604081905262000034916200084f565b6001608081905260a052600060c052620000548787878787878762000061565b5050505050505062000a4f565b600054610100900460ff1615808015620000825750600054600160ff909116105b80620000b257506200009f306200027060201b62000b041760201c565b158015620000b2575060005460ff166001145b6200011b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200013f576000805461ff0019166101001790555b620001496200027f565b6200015488620002e7565b606587905560668690556067859055606880546001600160401b0319166001600160401b038616179055620001a7837f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b28262000366565b620001bc620006b1565b6001600160401b0316846001600160401b031610156200021f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b801562000266576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002db5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022cd83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e5620006de565b565b620002f162000745565b6001600160a01b038116620003585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000112565b6200036381620007a1565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003f55760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000112565b6000816040015160ff16116200045c5760405162461bcd60e51b815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f74604482015264020626520360dc1b606482015260840162000112565b606854608082015182516001600160401b03909216916200047e91906200099e565b63ffffffff161115620004d45760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000112565b6000816020015160ff1611620005455760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000112565b8051602082015163ffffffff82169160ff9091169062000567908290620009c9565b620005739190620009fb565b63ffffffff1614620005ee5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000112565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006d99063ffffffff6a010000000000000000000082048116911662000a2a565b905090565b600054610100900460ff166200073a5760405162461bcd60e51b815260206004820152602b6024820152600080516020620022cd83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000112565b620002e533620007a1565b6033546001600160a01b03163314620002e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000112565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200080b57600080fd5b919050565b805163ffffffff811681146200080b57600080fd5b805160ff811681146200080b57600080fd5b80516001600160801b03811681146200080b57600080fd5b60008060008060008060008789036101808112156200086d57600080fd5b6200087889620007f3565b60208a015160408b015160608c015160808d0151939b50919950975095506001600160401b038082168214620008ad57600080fd5b819550620008be60a08c01620007f3565b945060c060bf1984011215620008d357600080fd5b604051925060c08301915082821081831117156200090157634e487b7160e01b600052604160045260246000fd5b506040526200091360c08a0162000810565b81526200092360e08a0162000825565b6020820152620009376101008a0162000825565b60408201526200094b6101208a0162000810565b60608201526200095f6101408a0162000810565b6080820152620009736101608a0162000837565b60a08201528091505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009c057620009c062000988565b01949350505050565b600063ffffffff80841680620009ef57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a215762000a2162000988565b02949350505050565b60006001600160401b03828116848216808303821115620009c057620009c062000988565b60805160a05160c05161184e62000a7f60003960006105930152600061056a01526000610541015261184e6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b40a817c116100cd578063f2fde38b11610081578063f68016b711610066578063f68016b71461041c578063f975e92514610430578063ffa1ad741461044357600080fd5b8063f2fde38b14610400578063f45e65d81461041357600080fd5b8063c9b26f61116100b2578063c9b26f61146102b0578063cc731b02146102c3578063e81b2c6d146103f757600080fd5b8063b40a817c1461028a578063c71973f61461029d57600080fd5b80634f16540b11610124578063715018a611610109578063715018a6146102515780638da5cb5b14610259578063935f029e1461027757600080fd5b80634f16540b1461021557806354fd4d501461023c57600080fd5b80631fd19ee1116101555780631fd19ee1146101a257806329477e86146101ea5780634add321d1461020d57600080fd5b80630c18c1621461017157806318d139181461018d575b600080fd5b61017a60655481565b6040519081526020015b60405180910390f35b6101a061019b36600461132c565b61044b565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101f4627a120081565b60405167ffffffffffffffff9091168152602001610184565b6101f461050f565b61017a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61024461053a565b60405161018491906113c8565b6101a06105dd565b60335473ffffffffffffffffffffffffffffffffffffffff166101c5565b6101a06102853660046113db565b6105f1565b6101a0610298366004611415565b61068a565b6101a06102ab36600461156d565b610775565b6101a06102be366004611589565b610789565b6103876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516101849190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61017a60675481565b6101a061040e36600461132c565b6107b9565b61017a60665481565b6068546101f49067ffffffffffffffff1681565b6101a061043e3660046115a2565b61086d565b61017a600081565b610453610b20565b61047b817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161050391906113c8565b60405180910390a35050565b6069546000906105359063ffffffff6a0100000000000000000000820481169116611644565b905090565b60606105657f0000000000000000000000000000000000000000000000000000000000000000610ba1565b61058e7f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6105b77f0000000000000000000000000000000000000000000000000000000000000000610ba1565b6040516020016105c993929190611670565b604051602081830303815290604052905090565b6105e5610b20565b6105ef6000610cde565b565b6105f9610b20565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161067d91906113c8565b60405180910390a3505050565b610692610b20565b61069a61050f565b67ffffffffffffffff168167ffffffffffffffff16101561071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104d2565b61077d610b20565b61078681610d55565b50565b610791610b20565b60678190556040805160208082018490528251808303909101815290820190915260006104d2565b6107c1610b20565b73ffffffffffffffffffffffffffffffffffffffff8116610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610713565b61078681610cde565b600054610100900460ff161580801561088d5750600054600160ff909116105b806108a75750303b1580156108a7575060005460ff166001145b610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610713565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561099157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109996111c9565b6109a2886107b9565b606587905560668690556067859055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08839055610a1282610d55565b610a1a61050f565b67ffffffffffffffff168467ffffffffffffffff161015610a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b8015610afa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610713565b606081600003610be457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610c0e5780610bf8816116e6565b9150610c079050600a8361174d565b9150610be8565b60008167ffffffffffffffff811115610c2957610c29611430565b6040519080825280601f01601f191660200182016040528015610c53576020820181803683370190505b5090505b8415610cd657610c68600183611761565b9150610c75600a86611778565b610c8090603061178c565b60f81b818381518110610c9557610c956117a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610ccf600a8661174d565b9450610c57565b949350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610713565b6000816040015160ff1611610e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f722063616e6e6f7460448201527f20626520300000000000000000000000000000000000000000000000000000006064820152608401610713565b6068546080820151825167ffffffffffffffff90921691610ebd91906117d3565b63ffffffff161115610f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610713565b6000816020015160ff1611610fc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610713565b8051602082015163ffffffff82169160ff90911690610fe29082906117f2565b610fec9190611815565b63ffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610713565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff16611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef600054610100900460ff166112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610713565b6105ef33610cde565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132757600080fd5b919050565b60006020828403121561133e57600080fd5b61134782611303565b9392505050565b60005b83811015611369578181015183820152602001611351565b83811115611378576000848401525b50505050565b6000815180845261139681602086016020860161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611347602083018461137e565b600080604083850312156113ee57600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461132757600080fd5b60006020828403121561142757600080fd5b611347826113fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461132757600080fd5b803560ff8116811461132757600080fd5b80356fffffffffffffffffffffffffffffffff8116811461132757600080fd5b600060c082840312156114b657600080fd5b60405160c0810181811067ffffffffffffffff82111715611500577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061150f8361145f565b815261151d60208401611473565b602082015261152e60408401611473565b604082015261153f6060840161145f565b60608201526115506080840161145f565b608082015261156160a08401611484565b60a08201525092915050565b600060c0828403121561157f57600080fd5b61134783836114a4565b60006020828403121561159b57600080fd5b5035919050565b6000806000806000806000610180888a0312156115be57600080fd5b6115c788611303565b96506020880135955060408801359450606088013593506115ea608089016113fd565b92506115f860a08901611303565b91506116078960c08a016114a4565b905092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561166757611667611615565b01949350505050565b6000845161168281846020890161134e565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116be816001850160208a0161134e565b600192019182015283516116d981600284016020880161134e565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361171757611717611615565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261175c5761175c61171e565b500490565b60008282101561177357611773611615565b500390565b6000826117875761178761171e565b500690565b6000821982111561179f5761179f611615565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600063ffffffff80831681851680830382111561166757611667611615565b600063ffffffff808416806118095761180961171e565b92169190910492915050565b600063ffffffff8083168185168183048111821515161561183857611838611615565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } @@ -53,7 +53,7 @@ var SystemConfigABI = SystemConfigMetaData.ABI 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, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (common.Address, *types.Transaction, *SystemConfig, error) { +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig) (common.Address, *types.Transaction, *SystemConfig, error) { parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -462,15 +462,15 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) // 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) (SystemConfigResourceConfig, error) { +func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (ResourceMeteringResourceConfig, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") if err != nil { - return *new(SystemConfigResourceConfig), err + return *new(ResourceMeteringResourceConfig), err } - out0 := *abi.ConvertType(out[0], new(SystemConfigResourceConfig)).(*SystemConfigResourceConfig) + out0 := *abi.ConvertType(out[0], new(ResourceMeteringResourceConfig)).(*ResourceMeteringResourceConfig) return out0, err @@ -479,14 +479,14 @@ func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (Sy // 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() (SystemConfigResourceConfig, error) { +func (_SystemConfig *SystemConfigSession) ResourceConfig() (ResourceMeteringResourceConfig, 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() (SystemConfigResourceConfig, error) { +func (_SystemConfig *SystemConfigCallerSession) ResourceConfig() (ResourceMeteringResourceConfig, error) { return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) } @@ -586,21 +586,21 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { // Initialize is a paid mutator transaction binding the contract method 0xf975e925. // // Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } // Initialize is a paid mutator transaction binding the contract method 0xf975e925. // // Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } // Initialize is a paid mutator transaction binding the contract method 0xf975e925. // // Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config) } @@ -691,21 +691,21 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 // SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. // // Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactor) SetResourceConfig(opts *bind.TransactOpts, _config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigTransactor) SetResourceConfig(opts *bind.TransactOpts, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.contract.Transact(opts, "setResourceConfig", _config) } // SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. // // Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigSession) SetResourceConfig(_config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) } // SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. // // Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetResourceConfig(_config SystemConfigResourceConfig) (*types.Transaction, error) { +func (_SystemConfig *SystemConfigTransactorSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) } diff --git a/op-bindings/bindings/systemconfig_more.go b/op-bindings/bindings/systemconfig_more.go index a0d5bfc8ff08..8f621f73551f 100644 --- a/op-bindings/bindings/systemconfig_more.go +++ b/op-bindings/bindings/systemconfig_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1012_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct SystemConfig.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1012_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var SystemConfigStorageLayout = new(solc.StorageLayout) diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index cd213aa4e0f9..385adc605d56 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -24,6 +24,7 @@ import ( ) var ( + // proxies represents the set of proxies in front of contracts. proxies = []string{ "SystemConfigProxy", "L2OutputOracleProxy", @@ -32,12 +33,15 @@ var ( "OptimismPortalProxy", "OptimismMintableERC20FactoryProxy", } - + // portalMeteringSlot is the storage slot containing the metering params. portalMeteringSlot = common.Hash{31: 0x01} - zeroHash = common.Hash{} - uint128Max = new(big.Int) - - defaultResourceConfig = bindings.SystemConfigResourceConfig{ + // zeroHash represents the zero value for a hash. + zeroHash = common.Hash{} + // uint128Max is type(uint128).max and is set in the init function. + uint128Max = new(big.Int) + // The default values for the ResourceConfig, used as part of + // an EIP-1559 curve for deposit gas. + defaultResourceConfig = bindings.ResourceMeteringResourceConfig{ MaxResourceLimit: 20_000_000, ElasticityMultiplier: 10, BaseFeeMaxChangeDenominator: 8, @@ -52,9 +56,12 @@ func init() { if !ok { panic("bad uint128Max") } + // Set the maximum base fee on the default config. defaultResourceConfig.MaximumBaseFee = uint128Max } +// BuildL1DeveloperGenesis will create a L1 genesis block after creating +// all of the state required for an Optimism network to function. func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { if config.L2OutputOracleStartingTimestamp != -1 { return nil, errors.New("l2oo starting timestamp must be -1") @@ -369,7 +376,7 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep deployment.Args[3].(common.Hash), deployment.Args[4].(uint64), deployment.Args[5].(common.Address), - deployment.Args[6].(bindings.SystemConfigResourceConfig), + deployment.Args[6].(bindings.ResourceMeteringResourceConfig), ) case "L2OutputOracle": _, tx, _, err = bindings.DeployL2OutputOracle( diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index 1d076fda3690..2531e19fa674 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -210,7 +210,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { * @notice Getter for the resource config. Used internally by the ResourceMetering * contract. The SystemConfig is the source of truth for the resource config. */ - function _resourceConfig() internal view override returns (SystemConfig.ResourceConfig memory) { + function _resourceConfig() internal view override returns (ResourceMetering.ResourceConfig memory) { return SYSTEM_CONFIG.resourceConfig(); } diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index 63ab3b1f5ba2..4cfc4662a9fd 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -5,7 +5,6 @@ import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { Burn } from "../libraries/Burn.sol"; import { Arithmetic } from "../libraries/Arithmetic.sol"; -import { SystemConfig } from "../L1/SystemConfig.sol"; /** * @custom:upgradeable @@ -28,6 +27,36 @@ abstract contract ResourceMetering is Initializable { uint64 prevBlockNum; } + /** + * @notice Represents the configuration for the EIP-1559 based curve for the deposit gas + * market. These values should be set with care as it is possible to set them in + * a way that breaks the deposit gas market. The target resource limit is defined as + * maxResourceLimit / elasticityMultiplier. This struct was designed to fit within a + * single word. There is additional space for additions in the future. + * + * @custom:field maxResourceLimit Represents the maximum amount of deposit gas that + * can be purchased per block. + * @custom:field elasticityMultiplier Determines the target resource limit along with + * the resource limit. + * @custom:field baseFeeMaxChangeDenominator Determines max change on fee per block. + * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this value. + * @custom:field systemTxMaxGas The amount of gas supplied to the system + * transaction. This should be set to the same number + * that the op-node sets as the gas limit for the + * system transaction. + * @custom:field maximumBaseFee The max deposit base fee, it is clamped to this + * value. + */ + struct ResourceConfig { + uint32 maxResourceLimit; + uint8 elasticityMultiplier; + uint8 baseFeeMaxChangeDenominator; + uint32 minimumBaseFee; + uint32 systemTxMaxGas; + uint128 maximumBaseFee; + } + + /** * @notice EIP-1559 style gas parameters. */ @@ -64,7 +93,7 @@ abstract contract ResourceMetering is Initializable { // Update block number and base fee if necessary. uint256 blockDiff = block.number - params.prevBlockNum; - SystemConfig.ResourceConfig memory config = _resourceConfig(); + ResourceConfig memory config = _resourceConfig(); int256 targetResourceLimit = int256(uint256(config.maxResourceLimit)) / int256(uint256(config.elasticityMultiplier)); @@ -138,7 +167,7 @@ abstract contract ResourceMetering is Initializable { * @notice Virtual function that returns the resource config. Contracts that inherit this * contract must implement this function. */ - function _resourceConfig() internal virtual returns (SystemConfig.ResourceConfig memory); + function _resourceConfig() internal virtual returns (ResourceConfig memory); /** * @notice Sets initial resource parameter values. This function must either be called by the diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index 54b21ee47c62..a6446eeab46a 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -5,6 +5,7 @@ import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { Semver } from "../universal/Semver.sol"; +import { ResourceMetering } from "./ResourceMetering.sol"; /** * @title SystemConfig @@ -29,38 +30,6 @@ contract SystemConfig is OwnableUpgradeable, Semver { UNSAFE_BLOCK_SIGNER } - /** - * @notice Represents the configuration for the EIP-1559 based curve for - * the deposit gas market. These values should be set with care - * as it is possible to set them in a way that breaks the deposit - * gas market. The target resource limit is defined as - * maxResourceLimit / elasticityMultiplier. - * This struct was designed to fit within a single word. There is - * additional space for additions in the future. - * - * @custom:field maxResourceLimit Represents the maximum amount of deposit - * gas that can be purchased per block. - * @custom:field elasticityMultiplier Determines the target resource limit - * along with the resource limit. - * @custom:field baseFeeMaxChangeDenominator Determines max change on fee per block. - * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this - * value. - * @custom:field systemTxMaxGas The amount of gas supplied to the system - * transaction. This should be set to the same number - * that the op-node sets as the gas limit for the - * system transaction. - * @custom:field maximumBaseFee The max deposit base fee, it is clamped to this - * value. - */ - struct ResourceConfig { - uint32 maxResourceLimit; - uint8 elasticityMultiplier; - uint8 baseFeeMaxChangeDenominator; - uint32 minimumBaseFee; - uint32 systemTxMaxGas; - uint128 maximumBaseFee; - } - /** * @notice Version identifier, used for upgrades. */ @@ -106,7 +75,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * to meter the cost of buying L2 gas on L1. Set as internal and wrapped with a getter * so that the struct is returned instead of a tuple. */ - ResourceConfig internal _resourceConfig; + ResourceMetering.ResourceConfig internal _resourceConfig; /** * @notice Emitted when configuration is updated @@ -135,7 +104,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, - ResourceConfig memory _config + ResourceMetering.ResourceConfig memory _config ) Semver(1, 1, 0) { initialize({ _owner: _owner, @@ -167,7 +136,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, - ResourceConfig memory _config + ResourceMetering.ResourceConfig memory _config ) public initializer { __Ownable_init(); transferOwnership(_owner); @@ -279,7 +248,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * * @return ResourceConfig */ - function resourceConfig() external view returns (ResourceConfig memory) { + function resourceConfig() external view returns (ResourceMetering.ResourceConfig memory) { return _resourceConfig; } @@ -290,7 +259,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * * @param _config The new resource config values. */ - function setResourceConfig(ResourceConfig memory _config) external onlyOwner { + function setResourceConfig(ResourceMetering.ResourceConfig memory _config) external onlyOwner { _setResourceConfig(_config); } @@ -300,7 +269,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * * @param _config The new resource config */ - function _setResourceConfig(ResourceConfig memory _config) internal { + function _setResourceConfig(ResourceMetering.ResourceConfig memory _config) internal { // min base fee must be less than or equal to max base fee require( _config.minimumBaseFee <= _config.maximumBaseFee, diff --git a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol index c75911f1f5bb..d07c7140af42 100644 --- a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol +++ b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol @@ -16,6 +16,7 @@ import { ProxyAdmin } from "../universal/ProxyAdmin.sol"; import { OptimismMintableERC20Factory } from "../universal/OptimismMintableERC20Factory.sol"; import { PortalSender } from "./PortalSender.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; /** * @title SystemDictator @@ -79,7 +80,7 @@ contract SystemDictator is OwnableUpgradeable { bytes32 batcherHash; uint64 gasLimit; address unsafeBlockSigner; - SystemConfig.ResourceConfig resourceConfig; + ResourceMetering.ResourceConfig resourceConfig; } /** @@ -161,7 +162,7 @@ contract SystemDictator is OwnableUpgradeable { * initialized upon deployment. */ constructor() { - SystemConfig.ResourceConfig memory rcfg = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory rcfg = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol index 2e58aa4a1f91..b327be089b6b 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol @@ -4,13 +4,14 @@ import { OptimismPortal } from "../L1/OptimismPortal.sol"; import { L2OutputOracle } from "../L1/L2OutputOracle.sol"; import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; contract EchidnaFuzzOptimismPortal { OptimismPortal internal portal; bool internal failedToComplete; constructor() { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index c1a04ae1c165..f9031a2e6725 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -1,7 +1,6 @@ pragma solidity 0.8.15; import { ResourceMetering } from "../L1/ResourceMetering.sol"; -import { SystemConfig } from "../L1/SystemConfig.sol"; import { Arithmetic } from "../libraries/Arithmetic.sol"; import { StdUtils } from "forge-std/Test.sol"; @@ -25,12 +24,12 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { __ResourceMetering_init(); } - function resourceConfig() public pure returns (SystemConfig.ResourceConfig memory) { + function resourceConfig() public pure returns (ResourceMetering.ResourceConfig memory) { return _resourceConfig(); } - function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -51,7 +50,7 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { uint256 cachedPrevBoughtGas = uint256(params.prevBoughtGas); uint256 cachedPrevBlockNum = uint256(params.prevBlockNum); - SystemConfig.ResourceConfig memory rcfg = resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = resourceConfig(); uint256 targetResourceLimit = uint256(rcfg.maxResourceLimit) / uint256(rcfg.elasticityMultiplier); diff --git a/packages/contracts-bedrock/contracts/libraries/Constants.sol b/packages/contracts-bedrock/contracts/libraries/Constants.sol index ebf62c044ce9..2c6bfe0bfc60 100644 --- a/packages/contracts-bedrock/contracts/libraries/Constants.sol +++ b/packages/contracts-bedrock/contracts/libraries/Constants.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; + /** * @title Constants * @notice Constants is a library for storing constants. Simple! Don't put everything in here, just @@ -24,4 +26,20 @@ library Constants { * non-zero to reduce the gas cost of message passing transactions. */ address internal constant DEFAULT_L2_SENDER = 0x000000000000000000000000000000000000dEaD; + + /** + * @notice Returns the default values for the ResourceConfig. These are the recommended values + * for a production network. + */ + function DEFAULT_RESOURCE_CONFIG() internal pure returns (ResourceMetering.ResourceConfig memory) { + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ + maxResourceLimit: 20_000_000, + elasticityMultiplier: 10, + baseFeeMaxChangeDenominator: 8, + minimumBaseFee: 1 gwei, + systemTxMaxGas: 1_000_000, + maximumBaseFee: type(uint128).max + }); + return config; + } } diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index 9ba3a73c08af..186ff3e6d2b7 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -29,6 +29,7 @@ import { IL1ChugSplashDeployer } from "../legacy/L1ChugSplashProxy.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { LegacyMintableERC20 } from "../legacy/LegacyMintableERC20.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; contract CommonTest is Test { address alice = address(128); @@ -171,7 +172,7 @@ contract Portal_Initializer is L2OutputOracle_Initializer { function setUp() public virtual override { super.setUp(); - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, diff --git a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol index a04dbbb081e5..8a2e17614e25 100644 --- a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol @@ -9,7 +9,7 @@ import { OptimismPortal } from "../L1/OptimismPortal.sol"; import { Types } from "../libraries/Types.sol"; import { Hashing } from "../libraries/Hashing.sol"; import { Proxy } from "../universal/Proxy.sol"; -import { SystemConfig } from "../L1/SystemConfig.sol"; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; contract OptimismPortal_Test is Portal_Initializer { event Paused(address); @@ -1050,7 +1050,7 @@ contract OptimismPortalUpgradeable_Test is Portal_Initializer { (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = p.params(); - SystemConfig.ResourceConfig memory rcfg = systemConfig.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = systemConfig.resourceConfig(); assertEq(prevBaseFee, rcfg.minimumBaseFee); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, initialBlockNum); diff --git a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol index 5ad5ae1f3664..0301b80380af 100644 --- a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.15; import { Test } from "forge-std/Test.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; -import { SystemConfig } from "../L1/SystemConfig.sol"; import { Proxy } from "../universal/Proxy.sol"; +import { Constants } from "../libraries/Constants.sol"; contract MeterUser is ResourceMetering { constructor() { @@ -15,20 +15,12 @@ contract MeterUser is ResourceMetering { __ResourceMetering_init(); } - function resourceConfig() public pure returns (SystemConfig.ResourceConfig memory) { + function resourceConfig() public pure returns (ResourceMetering.ResourceConfig memory) { return _resourceConfig(); } - function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); - return config; + function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + return Constants.DEFAULT_RESOURCE_CONFIG(); } function use(uint64 _amount) public metered(_amount) {} @@ -62,7 +54,7 @@ contract ResourceMetering_Test is Test { function test_meter_initialResourceParams_succeeds() external { (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = meter.params(); - SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); assertEq(prevBaseFee, rcfg.minimumBaseFee); assertEq(prevBoughtGas, 0); @@ -111,7 +103,7 @@ contract ResourceMetering_Test is Test { } function test_meter_updateNoGasDelta_succeeds() external { - SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); uint256 target = uint256(rcfg.maxResourceLimit) / uint256(rcfg.elasticityMultiplier); meter.use(uint64(target)); (uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) = meter.params(); @@ -122,7 +114,7 @@ contract ResourceMetering_Test is Test { } function test_meter_useMax_succeeds() external { - SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); @@ -138,7 +130,7 @@ contract ResourceMetering_Test is Test { } function test_meter_useMoreThanMax_reverts() external { - SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); @@ -153,7 +145,7 @@ contract ResourceMetering_Test is Test { // At 12 seconds per block, this number is effectively unreachable. vm.assume(_blockDiff < 433576281058164217753225238677900874458691); - SystemConfig.ResourceConfig memory rcfg = meter.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); @@ -184,16 +176,8 @@ contract CustomMeterUser is ResourceMetering { }); } - function _resourceConfig() internal pure override returns (SystemConfig.ResourceConfig memory) { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); - return config; + function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + return Constants.DEFAULT_RESOURCE_CONFIG(); } function use(uint64 _amount) public returns (uint256) { @@ -238,7 +222,7 @@ contract ArtifactResourceMetering_Test is Test { vm.roll(1_000_000); MeterUser base = new MeterUser(); - SystemConfig.ResourceConfig memory rcfg = base.resourceConfig(); + ResourceMetering.ResourceConfig memory rcfg = base.resourceConfig(); minimumBaseFee = uint128(rcfg.minimumBaseFee); maximumBaseFee = rcfg.maximumBaseFee; maxResourceLimit = uint64(rcfg.maxResourceLimit); diff --git a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol index dcbee1e68989..72d53873453b 100644 --- a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.15; import { CommonTest } from "./CommonTest.t.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; +import { ResourceMetering } from "../L1/ResourceMetering.sol"; contract SystemConfig_Init is CommonTest { SystemConfig sysConf; @@ -10,7 +11,7 @@ contract SystemConfig_Init is CommonTest { function setUp() public virtual override { super.setUp(); - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -35,7 +36,7 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init { function test_initialize_lowGasLimit_reverts() external { uint64 minimumGasLimit = sysConf.minimumGasLimit(); - SystemConfig.ResourceConfig memory cfg = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory cfg = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -80,7 +81,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { function test_setResourceConfig_notOwner_reverts() external { vm.expectRevert("Ownable: caller is not the owner"); - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -92,7 +93,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { } function test_setResourceConfig_badMinMax_reverts() external { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -106,7 +107,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { } function test_setResourceConfig_zeroDenominator_reverts() external { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 0, @@ -122,7 +123,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { function test_setResourceConfig_lowGasLimit_reverts() external { uint64 gasLimit = sysConf.gasLimit(); - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: uint32(gasLimit), elasticityMultiplier: 10, baseFeeMaxChangeDenominator: 8, @@ -136,7 +137,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { } function test_setResourceConfig_badPrecision_reverts() external { - SystemConfig.ResourceConfig memory config = SystemConfig.ResourceConfig({ + ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 11, baseFeeMaxChangeDenominator: 8, diff --git a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol index 8eccce15a4b1..ccb77a7aba87 100644 --- a/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol @@ -2,19 +2,14 @@ pragma solidity 0.8.15; import { Test } from "forge-std/Test.sol"; import { SystemConfig } from "../../L1/SystemConfig.sol"; +import { ResourceMetering } from "../../L1/ResourceMetering.sol"; +import { Constants } from "../../libraries/Constants.sol"; contract SystemConfig_GasLimitLowerBound_Invariant is Test { SystemConfig public config; function setUp() public { - SystemConfig.ResourceConfig memory cfg = SystemConfig.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); + ResourceMetering.ResourceConfig memory cfg = Constants.DEFAULT_RESOURCE_CONFIG(); config = new SystemConfig({ _owner: address(0xbeef), From 8e477377d92726658b169e10a361bec8709ac7c0 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:42:46 -0700 Subject: [PATCH 21/30] contracts-bedrock: docstring --- packages/contracts-bedrock/contracts/L1/OptimismPortal.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index 2531e19fa674..1540572b8c1f 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -209,6 +209,8 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { /** * @notice Getter for the resource config. Used internally by the ResourceMetering * contract. The SystemConfig is the source of truth for the resource config. + * + * @return ResourceMetering.ResourceConfig */ function _resourceConfig() internal view override returns (ResourceMetering.ResourceConfig memory) { return SYSTEM_CONFIG.resourceConfig(); From bf4039b1b1053e675848a65d03aa257f55e3ecb1 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:43:56 -0700 Subject: [PATCH 22/30] contracts-bedrock: devdoc --- packages/contracts-bedrock/contracts/L1/ResourceMetering.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index 4cfc4662a9fd..e15a080e0ee0 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -166,6 +166,8 @@ abstract contract ResourceMetering is Initializable { /** * @notice Virtual function that returns the resource config. Contracts that inherit this * contract must implement this function. + * + * @return ResourceConfig */ function _resourceConfig() internal virtual returns (ResourceConfig memory); From 501068fdd311d635022a29aa86c202b665b5f397 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:44:50 -0700 Subject: [PATCH 23/30] Update packages/contracts-bedrock/contracts/L1/SystemConfig.sol Co-authored-by: smartcontracts --- packages/contracts-bedrock/contracts/L1/SystemConfig.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index a6446eeab46a..f74d4e8dfd3a 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -267,7 +267,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @notice An internal setter for the resource config. Ensures that the * config is sane before storing it by checking for invariants. * - * @param _config The new resource config + * @param _config The new resource config. */ function _setResourceConfig(ResourceMetering.ResourceConfig memory _config) internal { // min base fee must be less than or equal to max base fee From 3233c1cb4f7ee90166aab5583abc859db3558296 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:49:48 -0700 Subject: [PATCH 24/30] contracts-bedrock: utilize constants --- .../contracts/deployment/SystemDictator.sol | 10 ++-------- .../contracts/echidna/FuzzOptimismPortal.sol | 12 +++--------- .../contracts/echidna/FuzzResourceMetering.sol | 12 +++--------- .../contracts/test/CommonTest.t.sol | 10 ++-------- 4 files changed, 10 insertions(+), 34 deletions(-) diff --git a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol index d07c7140af42..0c6f4cbe4ee2 100644 --- a/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol +++ b/packages/contracts-bedrock/contracts/deployment/SystemDictator.sol @@ -17,6 +17,7 @@ import { OptimismMintableERC20Factory } from "../universal/OptimismMintableERC20 import { PortalSender } from "./PortalSender.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { Constants } from "../libraries/Constants.sol"; /** * @title SystemDictator @@ -162,14 +163,7 @@ contract SystemDictator is OwnableUpgradeable { * initialized upon deployment. */ constructor() { - ResourceMetering.ResourceConfig memory rcfg = ResourceMetering.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); + ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG(); // Using this shorter variable as an alias for address(0) just prevents us from having to // to use a new line for every single parameter. diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol index b327be089b6b..a62f31d481e4 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol @@ -5,20 +5,14 @@ import { L2OutputOracle } from "../L1/L2OutputOracle.sol"; import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { Constants } from "../libraries/Constants.sol"; contract EchidnaFuzzOptimismPortal { OptimismPortal internal portal; bool internal failedToComplete; constructor() { - ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); + ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG(); SystemConfig systemConfig = new SystemConfig({ _owner: address(1), @@ -27,7 +21,7 @@ contract EchidnaFuzzOptimismPortal { _batcherHash: bytes32(0), _gasLimit: 30_000_000, _unsafeBlockSigner: address(0), - _config: config + _config: rcfg }); portal = new OptimismPortal({ diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index f9031a2e6725..0d3162121698 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.15; import { ResourceMetering } from "../L1/ResourceMetering.sol"; import { Arithmetic } from "../libraries/Arithmetic.sol"; import { StdUtils } from "forge-std/Test.sol"; +import { Constants } from "../libraries/Constants.sol"; contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { bool internal failedMaxGasPerBlock; @@ -29,15 +30,8 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { } function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { - ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); - return config; + ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG(); + return rcfg; } /** diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index 186ff3e6d2b7..fadb09398231 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -30,6 +30,7 @@ import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { LegacyMintableERC20 } from "../legacy/LegacyMintableERC20.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { Constants } from "../libraries/Constants.sol"; contract CommonTest is Test { address alice = address(128); @@ -172,14 +173,7 @@ contract Portal_Initializer is L2OutputOracle_Initializer { function setUp() public virtual override { super.setUp(); - ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); + ResourceMetering.ResourceConfig memory config = Constants.DEFAULT_RESOURCE_CONFIG(); systemConfig = new SystemConfig({ _owner: address(1), From 35bf18f07be8570e9fb82c59cb19b181b3bee4bd Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:51:11 -0700 Subject: [PATCH 25/30] contracts-bedrock: better usage of constants --- .../contracts/test/SystemConfig.t.sol | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol index 72d53873453b..e936d62bbf64 100644 --- a/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol +++ b/packages/contracts-bedrock/contracts/test/SystemConfig.t.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.15; import { CommonTest } from "./CommonTest.t.sol"; import { SystemConfig } from "../L1/SystemConfig.sol"; import { ResourceMetering } from "../L1/ResourceMetering.sol"; +import { Constants } from "../libraries/Constants.sol"; contract SystemConfig_Init is CommonTest { SystemConfig sysConf; @@ -80,15 +81,8 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { } function test_setResourceConfig_notOwner_reverts() external { + ResourceMetering.ResourceConfig memory config = Constants.DEFAULT_RESOURCE_CONFIG(); vm.expectRevert("Ownable: caller is not the owner"); - ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ - maxResourceLimit: 20_000_000, - elasticityMultiplier: 10, - baseFeeMaxChangeDenominator: 8, - minimumBaseFee: 1 gwei, - systemTxMaxGas: 1_000_000, - maximumBaseFee: type(uint128).max - }); sysConf.setResourceConfig(config); } From ce50852ae6a75d1ab53f3ef94e3bff3b18d7f3b3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 19:53:34 -0700 Subject: [PATCH 26/30] contracts-bedrock: system config comments --- .../contracts-bedrock/contracts/L1/SystemConfig.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index f74d4e8dfd3a..d4525f72afc1 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -270,25 +270,25 @@ contract SystemConfig is OwnableUpgradeable, Semver { * @param _config The new resource config. */ function _setResourceConfig(ResourceMetering.ResourceConfig memory _config) internal { - // min base fee must be less than or equal to max base fee + // Min base fee must be less than or equal to max base fee. require( _config.minimumBaseFee <= _config.maximumBaseFee, "SystemConfig: min base fee must be less than max base" ); - // base fee change denominator must be greater than 0 + // Base fee change denominator must be greater than 0. require(_config.baseFeeMaxChangeDenominator > 0, "SystemConfig: denominator cannot be 0"); - // max resource limit plus system tx gas must be less than or - // equal to the L2 gas limit + // Max resource limit plus system tx gas must be less than or equal to the L2 gas limit. + // The gas limit must be increased before these values can be increased. require( _config.maxResourceLimit + _config.systemTxMaxGas <= gasLimit, "SystemConfig: gas limit too low" ); - // elasticity multiplier must be greater than 0 + // Elasticity multiplier must be greater than 0. require( _config.elasticityMultiplier > 0, "SystemConfig: elasticity multiplier cannot be 0" ); - // no precision loss when computing target resource limit + // No precision loss when computing target resource limit. require( ((_config.maxResourceLimit / _config.elasticityMultiplier) * _config.elasticityMultiplier) == _config.maxResourceLimit, From d39a7a612d9609d0b2433e3ddfccd80e8ab6ce54 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 23 Mar 2023 20:08:44 -0700 Subject: [PATCH 27/30] contracts-bedrock: lint --- .../contracts/L1/OptimismPortal.sol | 7 ++++++- .../contracts/L1/ResourceMetering.sol | 4 ++-- .../contracts/L1/SystemConfig.sol | 1 + .../contracts/echidna/FuzzResourceMetering.sol | 7 ++++++- .../contracts/libraries/Constants.sol | 6 +++++- .../contracts/test/ResourceMetering.t.sol | 14 ++++++++++++-- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol index 1540572b8c1f..72181f526208 100644 --- a/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol @@ -212,7 +212,12 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { * * @return ResourceMetering.ResourceConfig */ - function _resourceConfig() internal view override returns (ResourceMetering.ResourceConfig memory) { + function _resourceConfig() + internal + view + override + returns (ResourceMetering.ResourceConfig memory) + { return SYSTEM_CONFIG.resourceConfig(); } diff --git a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol index e15a080e0ee0..8a50079a662c 100644 --- a/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/L1/ResourceMetering.sol @@ -39,7 +39,8 @@ abstract contract ResourceMetering is Initializable { * @custom:field elasticityMultiplier Determines the target resource limit along with * the resource limit. * @custom:field baseFeeMaxChangeDenominator Determines max change on fee per block. - * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this value. + * @custom:field minimumBaseFee The min deposit base fee, it is clamped to this + * value. * @custom:field systemTxMaxGas The amount of gas supplied to the system * transaction. This should be set to the same number * that the op-node sets as the gas limit for the @@ -56,7 +57,6 @@ abstract contract ResourceMetering is Initializable { uint128 maximumBaseFee; } - /** * @notice EIP-1559 style gas parameters. */ diff --git a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol index d4525f72afc1..ef3730bc22b6 100644 --- a/packages/contracts-bedrock/contracts/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/contracts/L1/SystemConfig.sol @@ -148,6 +148,7 @@ contract SystemConfig is OwnableUpgradeable, Semver { _setResourceConfig(_config); require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); } + /** * @notice Returns the minimum L2 gas limit that can be safely set for the system to * operate. The L2 gas limit must be larger than or equal to the amount of diff --git a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol index 0d3162121698..2d230308c645 100644 --- a/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol +++ b/packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol @@ -29,7 +29,12 @@ contract EchidnaFuzzResourceMetering is ResourceMetering, StdUtils { return _resourceConfig(); } - function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + function _resourceConfig() + internal + pure + override + returns (ResourceMetering.ResourceConfig memory) + { ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG(); return rcfg; } diff --git a/packages/contracts-bedrock/contracts/libraries/Constants.sol b/packages/contracts-bedrock/contracts/libraries/Constants.sol index 2c6bfe0bfc60..db117196806e 100644 --- a/packages/contracts-bedrock/contracts/libraries/Constants.sol +++ b/packages/contracts-bedrock/contracts/libraries/Constants.sol @@ -31,7 +31,11 @@ library Constants { * @notice Returns the default values for the ResourceConfig. These are the recommended values * for a production network. */ - function DEFAULT_RESOURCE_CONFIG() internal pure returns (ResourceMetering.ResourceConfig memory) { + function DEFAULT_RESOURCE_CONFIG() + internal + pure + returns (ResourceMetering.ResourceConfig memory) + { ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({ maxResourceLimit: 20_000_000, elasticityMultiplier: 10, diff --git a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol index 0301b80380af..052853a3914a 100644 --- a/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/contracts/test/ResourceMetering.t.sol @@ -19,7 +19,12 @@ contract MeterUser is ResourceMetering { return _resourceConfig(); } - function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + function _resourceConfig() + internal + pure + override + returns (ResourceMetering.ResourceConfig memory) + { return Constants.DEFAULT_RESOURCE_CONFIG(); } @@ -176,7 +181,12 @@ contract CustomMeterUser is ResourceMetering { }); } - function _resourceConfig() internal pure override returns (ResourceMetering.ResourceConfig memory) { + function _resourceConfig() + internal + pure + override + returns (ResourceMetering.ResourceConfig memory) + { return Constants.DEFAULT_RESOURCE_CONFIG(); } From 7e5e1f03b36b1aa52fb0e32bc7a543136a1daf7e Mon Sep 17 00:00:00 2001 From: Maurelian Date: Fri, 24 Mar 2023 10:35:59 -0400 Subject: [PATCH 28/30] chore(ctb): Regenerate gas snapshot with current version of foundry --- packages/contracts-bedrock/.gas-snapshot | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 7948ab9bbfdc..9f67b8d0a240 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -398,14 +398,14 @@ RLPWriter_writeUint_Test:test_writeUint_smallint_succeeds() (gas: 7280) RLPWriter_writeUint_Test:test_writeUint_zero_succeeds() (gas: 7749) ResolvedDelegateProxy_Test:test_fallback_addressManagerNotSet_reverts() (gas: 605906) ResolvedDelegateProxy_Test:test_fallback_delegateCallBar_reverts() (gas: 24783) -ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 10188) -ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2009509) -ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18681) -ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 14791) -ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 21534) -ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 21490) -ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 20018349) -ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 17145) +ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 10368) +ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2009696) +ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18860) +ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 15149) +ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 21713) +ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 21669) +ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 20018715) +ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 17505) SafeCall_call_Test:test_callWithMinGas_noLeakageHigh_succeeds() (gas: 2075873614) SafeCall_call_Test:test_callWithMinGas_noLeakageLow_succeeds() (gas: 753665282) Semver_Test:test_behindProxy_succeeds() (gas: 506748) @@ -423,9 +423,9 @@ SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10546 SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10622) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 10615) SystemConfig_Setters_TestFail:test_setResourceConfig_badMinMax_reverts() (gas: 13002) -SystemConfig_Setters_TestFail:test_setResourceConfig_badPrecision_reverts() (gas: 15592) +SystemConfig_Setters_TestFail:test_setResourceConfig_badPrecision_reverts() (gas: 15603) SystemConfig_Setters_TestFail:test_setResourceConfig_lowGasLimit_reverts() (gas: 16082) -SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11610) +SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11790) SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 13039) SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10639) TransferOnionTest:test_constructor_succeeds() (gas: 564855) From 8f14abf86a5bde5fbdefaf484c5840dd19ee53ee Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 24 Mar 2023 07:54:42 -0700 Subject: [PATCH 29/30] contracts-bedrock: regen storage snapshot --- packages/contracts-bedrock/.storage-layout | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/contracts-bedrock/.storage-layout b/packages/contracts-bedrock/.storage-layout index 93de71d3586c..e92ed75a0638 100644 --- a/packages/contracts-bedrock/.storage-layout +++ b/packages/contracts-bedrock/.storage-layout @@ -69,18 +69,18 @@ ➡ contracts/L1/SystemConfig.sol:SystemConfig ======================= -| Name | Type | Slot | Offset | Bytes | Contract | -|-----------------|------------------------------------|------|--------|-------|--------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | -| _initializing | bool | 0 | 1 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | -| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/SystemConfig.sol:SystemConfig | -| _owner | address | 51 | 0 | 20 | contracts/L1/SystemConfig.sol:SystemConfig | -| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/SystemConfig.sol:SystemConfig | -| overhead | uint256 | 101 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| scalar | uint256 | 102 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| batcherHash | bytes32 | 103 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | -| gasLimit | uint64 | 104 | 0 | 8 | contracts/L1/SystemConfig.sol:SystemConfig | -| _resourceConfig | struct SystemConfig.ResourceConfig | 105 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------|----------------------------------------|------|--------|-------|--------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | +| _initializing | bool | 0 | 1 | 1 | contracts/L1/SystemConfig.sol:SystemConfig | +| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/SystemConfig.sol:SystemConfig | +| _owner | address | 51 | 0 | 20 | contracts/L1/SystemConfig.sol:SystemConfig | +| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/SystemConfig.sol:SystemConfig | +| overhead | uint256 | 101 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| scalar | uint256 | 102 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| batcherHash | bytes32 | 103 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | +| gasLimit | uint64 | 104 | 0 | 8 | contracts/L1/SystemConfig.sol:SystemConfig | +| _resourceConfig | struct ResourceMetering.ResourceConfig | 105 | 0 | 32 | contracts/L1/SystemConfig.sol:SystemConfig | ======================= ➡ contracts/legacy/DeployerWhitelist.sol:DeployerWhitelist From 0daba1ef6c458f0a7419e1e4f322e9589ddb207f Mon Sep 17 00:00:00 2001 From: Maurelian Date: Fri, 24 Mar 2023 11:08:10 -0400 Subject: [PATCH 30/30] chore(ctb): Regenerate invariant docs --- .../invariant-docs/OptimismPortal.md | 2 +- .../invariant-docs/ResourceMetering.md | 14 +++++++------- .../invariant-docs/SystemConfig.md | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/contracts-bedrock/invariant-docs/OptimismPortal.md b/packages/contracts-bedrock/invariant-docs/OptimismPortal.md index a5697334a6a4..06e8f6e52392 100644 --- a/packages/contracts-bedrock/invariant-docs/OptimismPortal.md +++ b/packages/contracts-bedrock/invariant-docs/OptimismPortal.md @@ -19,6 +19,6 @@ This invariant asserts that there is no chain of calls that can be made that wil ## Deposits of any value should always succeed unless `_to` = `address(0)` or `_isCreation` = `true`. -**Test:** [`FuzzOptimismPortal.sol#L62`](../contracts/echidna/FuzzOptimismPortal.sol#L62) +**Test:** [`FuzzOptimismPortal.sol#L57`](../contracts/echidna/FuzzOptimismPortal.sol#L57) All deposits, barring creation transactions and transactions sent to `address(0)`, should always succeed. diff --git a/packages/contracts-bedrock/invariant-docs/ResourceMetering.md b/packages/contracts-bedrock/invariant-docs/ResourceMetering.md index a148a6a97394..1f8239ed299d 100644 --- a/packages/contracts-bedrock/invariant-docs/ResourceMetering.md +++ b/packages/contracts-bedrock/invariant-docs/ResourceMetering.md @@ -1,42 +1,42 @@ # `ResourceMetering` Invariants ## The base fee should increase if the last block used more than the target amount of gas -**Test:** [`FuzzResourceMetering.sol#L160`](../contracts/echidna/FuzzResourceMetering.sol#L160) +**Test:** [`FuzzResourceMetering.sol#L158`](../contracts/echidna/FuzzResourceMetering.sol#L158) If the last block used more than the target amount of gas (and there were no empty blocks in between), ensure this block's baseFee increased, but not by more than the max amount per block. ## The base fee should decrease if the last block used less than the target amount of gas -**Test:** [`FuzzResourceMetering.sol#L171`](../contracts/echidna/FuzzResourceMetering.sol#L171) +**Test:** [`FuzzResourceMetering.sol#L169`](../contracts/echidna/FuzzResourceMetering.sol#L169) If the previous block used less than the target amount of gas, the base fee should decrease, but not more than the max amount. ## A block's base fee should never be below `MINIMUM_BASE_FEE` -**Test:** [`FuzzResourceMetering.sol#L181`](../contracts/echidna/FuzzResourceMetering.sol#L181) +**Test:** [`FuzzResourceMetering.sol#L179`](../contracts/echidna/FuzzResourceMetering.sol#L179) This test asserts that a block's base fee can never drop below the `MINIMUM_BASE_FEE` threshold. ## A block can never consume more than `MAX_RESOURCE_LIMIT` gas. -**Test:** [`FuzzResourceMetering.sol#L191`](../contracts/echidna/FuzzResourceMetering.sol#L191) +**Test:** [`FuzzResourceMetering.sol#L189`](../contracts/echidna/FuzzResourceMetering.sol#L189) This test asserts that a block can never consume more than the `MAX_RESOURCE_LIMIT` gas threshold. ## The base fee can never be raised more than the max base fee change. -**Test:** [`FuzzResourceMetering.sol#L202`](../contracts/echidna/FuzzResourceMetering.sol#L202) +**Test:** [`FuzzResourceMetering.sol#L200`](../contracts/echidna/FuzzResourceMetering.sol#L200) After a block consumes more gas than the target gas, the base fee cannot be raised more than the maximum amount allowed. The max base fee change (per-block) is derived as follows: `prevBaseFee / BASE_FEE_MAX_CHANGE_DENOMINATOR` ## The base fee can never be lowered more than the max base fee change. -**Test:** [`FuzzResourceMetering.sol#L213`](../contracts/echidna/FuzzResourceMetering.sol#L213) +**Test:** [`FuzzResourceMetering.sol#L211`](../contracts/echidna/FuzzResourceMetering.sol#L211) After a block consumes less than the target gas, the base fee cannot be lowered more than the maximum amount allowed. The max base fee change (per-block) is derived as follows: `prevBaseFee / BASE_FEE_MAX_CHANGE_DENOMINATOR` ## The `maxBaseFeeChange` calculation over multiple blocks can never underflow. -**Test:** [`FuzzResourceMetering.sol#L224`](../contracts/echidna/FuzzResourceMetering.sol#L224) +**Test:** [`FuzzResourceMetering.sol#L222`](../contracts/echidna/FuzzResourceMetering.sol#L222) When calculating the `maxBaseFeeChange` after multiple empty blocks, the calculation should never be allowed to underflow. diff --git a/packages/contracts-bedrock/invariant-docs/SystemConfig.md b/packages/contracts-bedrock/invariant-docs/SystemConfig.md index 591b225b51d3..645226fec368 100644 --- a/packages/contracts-bedrock/invariant-docs/SystemConfig.md +++ b/packages/contracts-bedrock/invariant-docs/SystemConfig.md @@ -1,5 +1,5 @@ # `SystemConfig` Invariants ## The gas limit of the `SystemConfig` contract can never be lower than the hard-coded lower bound. -**Test:** [`SystemConfig.t.sol#L49`](../contracts/test/invariants/SystemConfig.t.sol#L49) +**Test:** [`SystemConfig.t.sol#L44`](../contracts/test/invariants/SystemConfig.t.sol#L44)