Commit fed16f5a authored by Maurelian's avatar Maurelian

fix(ctb): Correctly set values in constructors.

parent ec1dafcb
...@@ -17,6 +17,7 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; ...@@ -17,6 +17,7 @@ import { Predeploys } from "src/libraries/Predeploys.sol";
import { Types } from "scripts/Types.sol"; import { Types } from "scripts/Types.sol";
import { Vm } from "forge-std/Vm.sol"; import { Vm } from "forge-std/Vm.sol";
import { ISystemConfigV0 } from "scripts/interfaces/ISystemConfigV0.sol"; import { ISystemConfigV0 } from "scripts/interfaces/ISystemConfigV0.sol";
import { console2 as console } from "forge-std/console2.sol";
library ChainAssertions { library ChainAssertions {
/// @notice Asserts the correctness of an L1 deployment /// @notice Asserts the correctness of an L1 deployment
...@@ -125,9 +126,18 @@ library ChainAssertions { ...@@ -125,9 +126,18 @@ library ChainAssertions {
/// @notice Asserts the OptimismPortal is setup correctly /// @notice Asserts the OptimismPortal is setup correctly
function checkOptimismPortal(Types.ContractSet memory proxies, DeployConfig cfg) internal view { function checkOptimismPortal(Types.ContractSet memory proxies, DeployConfig cfg) internal view {
OptimismPortal portal = OptimismPortal(payable(proxies.OptimismPortal)); OptimismPortal portal = OptimismPortal(payable(proxies.OptimismPortal));
address guardian = cfg.portalGuardian();
if (guardian.code.length == 0) {
console.log("Portal guardian has no code: %s", guardian);
}
require(address(portal.L2_ORACLE()) == proxies.L2OutputOracle); require(address(portal.L2_ORACLE()) == proxies.L2OutputOracle);
require(address(portal.l2Oracle()) == proxies.L2OutputOracle);
require(portal.GUARDIAN() == cfg.portalGuardian()); require(portal.GUARDIAN() == cfg.portalGuardian());
require(portal.guardian() == cfg.portalGuardian());
require(address(portal.SYSTEM_CONFIG()) == proxies.SystemConfig); require(address(portal.SYSTEM_CONFIG()) == proxies.SystemConfig);
require(address(portal.systemConfig()) == proxies.SystemConfig);
require(portal.paused() == false); require(portal.paused() == false);
} }
......
...@@ -389,24 +389,27 @@ contract Deploy is Deployer { ...@@ -389,24 +389,27 @@ contract Deploy is Deployer {
/// @notice Deploy the OptimismPortal /// @notice Deploy the OptimismPortal
function deployOptimismPortal() public broadcast returns (address addr_) { function deployOptimismPortal() public broadcast returns (address addr_) {
address l2OutputOracleProxy = mustGetAddress("L2OutputOracleProxy");
address systemConfigProxy = mustGetAddress("SystemConfigProxy");
address guardian = cfg.portalGuardian(); address guardian = cfg.portalGuardian();
if (guardian.code.length == 0) { if (guardian.code.length == 0) {
console.log("Portal guardian has no code: %s", guardian); console.log("Portal guardian has no code: %s", guardian);
} }
L2OutputOracle l2OutputOracle = L2OutputOracle(mustGetAddress("L2OutputOracleProxy"));
SystemConfig systemConfig = SystemConfig(mustGetAddress("SystemConfigProxy"));
OptimismPortal portal = new OptimismPortal{ salt: implSalt() }({ OptimismPortal portal = new OptimismPortal{ salt: implSalt() }({
_l2Oracle: L2OutputOracle(l2OutputOracleProxy), _l2Oracle: l2OutputOracle,
_guardian: guardian, _guardian: guardian,
_paused: true, _paused: true,
_config: SystemConfig(systemConfigProxy) _config: systemConfig
}); });
require(address(portal.L2_ORACLE()) == l2OutputOracleProxy); require(address(portal.L2_ORACLE()) == address(l2OutputOracle));
require(address(portal.l2Oracle()) == address(l2OutputOracle));
require(portal.GUARDIAN() == guardian); require(portal.GUARDIAN() == guardian);
require(address(portal.SYSTEM_CONFIG()) == systemConfigProxy); require(portal.guardian() == guardian);
require(address(portal.SYSTEM_CONFIG()) == address(systemConfig));
require(address(portal.systemConfig()) == address(systemConfig));
require(portal.paused() == true); require(portal.paused() == true);
save("OptimismPortal", address(portal)); save("OptimismPortal", address(portal));
...@@ -420,20 +423,25 @@ contract Deploy is Deployer { ...@@ -420,20 +423,25 @@ contract Deploy is Deployer {
L2OutputOracle oracle = new L2OutputOracle{ salt: implSalt() }({ L2OutputOracle oracle = new L2OutputOracle{ salt: implSalt() }({
_submissionInterval: cfg.l2OutputOracleSubmissionInterval(), _submissionInterval: cfg.l2OutputOracleSubmissionInterval(),
_l2BlockTime: cfg.l2BlockTime(), _l2BlockTime: cfg.l2BlockTime(),
_startingBlockNumber: cfg.l2OutputOracleStartingBlockNumber(), _startingBlockNumber: 0,
_startingTimestamp: cfg.l2OutputOracleStartingTimestamp(), _startingTimestamp: 0,
_proposer: cfg.l2OutputOracleProposer(), _proposer: cfg.l2OutputOracleProposer(),
_challenger: cfg.l2OutputOracleChallenger(), _challenger: cfg.l2OutputOracleChallenger(),
_finalizationPeriodSeconds: cfg.finalizationPeriodSeconds() _finalizationPeriodSeconds: cfg.finalizationPeriodSeconds()
}); });
require(oracle.SUBMISSION_INTERVAL() == cfg.l2OutputOracleSubmissionInterval()); require(oracle.SUBMISSION_INTERVAL() == cfg.l2OutputOracleSubmissionInterval());
require(oracle.submissionInterval() == cfg.l2OutputOracleSubmissionInterval());
require(oracle.L2_BLOCK_TIME() == cfg.l2BlockTime()); require(oracle.L2_BLOCK_TIME() == cfg.l2BlockTime());
require(oracle.l2BlockTime() == cfg.l2BlockTime());
require(oracle.PROPOSER() == cfg.l2OutputOracleProposer()); require(oracle.PROPOSER() == cfg.l2OutputOracleProposer());
require(oracle.proposer() == cfg.l2OutputOracleProposer());
require(oracle.CHALLENGER() == cfg.l2OutputOracleChallenger()); require(oracle.CHALLENGER() == cfg.l2OutputOracleChallenger());
require(oracle.challenger() == cfg.l2OutputOracleChallenger());
require(oracle.FINALIZATION_PERIOD_SECONDS() == cfg.finalizationPeriodSeconds()); require(oracle.FINALIZATION_PERIOD_SECONDS() == cfg.finalizationPeriodSeconds());
require(oracle.startingBlockNumber() == cfg.l2OutputOracleStartingBlockNumber()); require(oracle.finalizationPeriodSeconds() == cfg.finalizationPeriodSeconds());
require(oracle.startingTimestamp() == cfg.l2OutputOracleStartingTimestamp()); require(oracle.startingBlockNumber() == 0);
require(oracle.startingTimestamp() == 0);
save("L2OutputOracle", address(oracle)); save("L2OutputOracle", address(oracle));
console.log("L2OutputOracle deployed at %s", address(oracle)); console.log("L2OutputOracle deployed at %s", address(oracle));
...@@ -503,32 +511,32 @@ contract Deploy is Deployer { ...@@ -503,32 +511,32 @@ contract Deploy is Deployer {
/// @notice Deploy the SystemConfig /// @notice Deploy the SystemConfig
function deploySystemConfig() public broadcast returns (address addr_) { function deploySystemConfig() public broadcast returns (address addr_) {
bytes32 batcherHash = bytes32(uint256(uint160(cfg.batchSenderAddress()))); ResourceMetering.ResourceConfig memory defaultConfig = Constants.DEFAULT_RESOURCE_CONFIG();
uint64 minimumGasLimit = uint64(defaultConfig.maxResourceLimit) + uint64(defaultConfig.systemTxMaxGas);
SystemConfig config = new SystemConfig({ SystemConfig config = new SystemConfig({
_owner: cfg.finalSystemOwner(), _owner: address(0xdEaD),
_overhead: cfg.gasPriceOracleOverhead(), _overhead: 0,
_scalar: cfg.gasPriceOracleScalar(), _scalar: 0,
_batcherHash: batcherHash, _batcherHash: bytes32(0),
_gasLimit: uint64(cfg.l2GenesisBlockGasLimit()), _gasLimit: minimumGasLimit,
_unsafeBlockSigner: cfg.p2pSequencerAddress(), _unsafeBlockSigner: address(0),
_config: Constants.DEFAULT_RESOURCE_CONFIG() _config: defaultConfig
}); });
require(config.owner() == cfg.finalSystemOwner()); require(config.owner() == address(0xdEaD));
require(config.overhead() == cfg.gasPriceOracleOverhead()); require(config.overhead() == 0);
require(config.scalar() == cfg.gasPriceOracleScalar()); require(config.scalar() == 0);
require(config.unsafeBlockSigner() == cfg.p2pSequencerAddress()); require(config.unsafeBlockSigner() == address(0));
require(config.batcherHash() == batcherHash); require(config.batcherHash() == bytes32(0));
require(config.gasLimit() == minimumGasLimit);
ResourceMetering.ResourceConfig memory rconfig = Constants.DEFAULT_RESOURCE_CONFIG();
ResourceMetering.ResourceConfig memory resourceConfig = config.resourceConfig(); ResourceMetering.ResourceConfig memory resourceConfig = config.resourceConfig();
require(resourceConfig.maxResourceLimit == rconfig.maxResourceLimit); require(resourceConfig.maxResourceLimit == defaultConfig.maxResourceLimit);
require(resourceConfig.elasticityMultiplier == rconfig.elasticityMultiplier); require(resourceConfig.elasticityMultiplier == defaultConfig.elasticityMultiplier);
require(resourceConfig.baseFeeMaxChangeDenominator == rconfig.baseFeeMaxChangeDenominator); require(resourceConfig.baseFeeMaxChangeDenominator == defaultConfig.baseFeeMaxChangeDenominator);
require(resourceConfig.systemTxMaxGas == rconfig.systemTxMaxGas); require(resourceConfig.systemTxMaxGas == defaultConfig.systemTxMaxGas);
require(resourceConfig.minimumBaseFee == rconfig.minimumBaseFee); require(resourceConfig.minimumBaseFee == defaultConfig.minimumBaseFee);
require(resourceConfig.maximumBaseFee == rconfig.maximumBaseFee); require(resourceConfig.maximumBaseFee == defaultConfig.maximumBaseFee);
save("SystemConfig", address(config)); save("SystemConfig", address(config));
console.log("SystemConfig deployed at %s", address(config)); console.log("SystemConfig deployed at %s", address(config));
...@@ -796,11 +804,6 @@ contract Deploy is Deployer { ...@@ -796,11 +804,6 @@ contract Deploy is Deployer {
address l2OutputOracleProxy = mustGetAddress("L2OutputOracleProxy"); address l2OutputOracleProxy = mustGetAddress("L2OutputOracleProxy");
address systemConfigProxy = mustGetAddress("SystemConfigProxy"); address systemConfigProxy = mustGetAddress("SystemConfigProxy");
address guardian = cfg.portalGuardian();
if (guardian.code.length == 0) {
console.log("Portal guardian has no code: %s", guardian);
}
_upgradeAndCallViaSafe({ _upgradeAndCallViaSafe({
_proxy: payable(optimismPortalProxy), _proxy: payable(optimismPortalProxy),
_implementation: optimismPortal, _implementation: optimismPortal,
......
...@@ -460,31 +460,19 @@ contract L2OutputOracleUpgradeable_Test is CommonTest { ...@@ -460,31 +460,19 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
function test_initValuesOnImpl_succeeds() external { function test_initValuesOnImpl_succeeds() external {
L2OutputOracle oracleImpl = L2OutputOracle(mustGetAddress("L2OutputOracle")); L2OutputOracle oracleImpl = L2OutputOracle(mustGetAddress("L2OutputOracle"));
address proposer = cfg.l2OutputOracleProposer(); assertEq(oracleImpl.SUBMISSION_INTERVAL(), cfg.l2OutputOracleSubmissionInterval());
address challenger = cfg.l2OutputOracleChallenger(); assertEq(oracleImpl.submissionInterval(), cfg.l2OutputOracleSubmissionInterval());
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval(); assertEq(oracleImpl.L2_BLOCK_TIME(), cfg.l2BlockTime());
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber(); assertEq(oracleImpl.l2BlockTime(), cfg.l2BlockTime());
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp(); assertEq(oracleImpl.FINALIZATION_PERIOD_SECONDS(), cfg.finalizationPeriodSeconds());
assertEq(submissionInterval, oracleImpl.SUBMISSION_INTERVAL()); assertEq(oracleImpl.finalizationPeriodSeconds(), cfg.finalizationPeriodSeconds());
uint256 l2BlockTime = cfg.l2BlockTime(); assertEq(oracleImpl.PROPOSER(), cfg.l2OutputOracleProposer());
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds(); assertEq(oracleImpl.proposer(), cfg.l2OutputOracleProposer());
assertEq(l2BlockTime, oracleImpl.L2_BLOCK_TIME()); assertEq(oracleImpl.CHALLENGER(), cfg.l2OutputOracleChallenger());
assertEq(oracleImpl.challenger(), cfg.l2OutputOracleChallenger());
// The values that are set in the initialize function should be all
// zero values in the implementation contract.
assertEq(oracleImpl.startingBlockNumber(), startingBlockNumber);
assertEq(oracleImpl.startingTimestamp(), startingTimestamp);
assertEq(oracleImpl.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(oracleImpl.L2_BLOCK_TIME(), l2BlockTime);
assertEq(oracleImpl.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
assertEq(oracleImpl.PROPOSER(), proposer);
assertEq(oracleImpl.CHALLENGER(), challenger);
assertEq(oracleImpl.startingBlockNumber(), 0); assertEq(oracleImpl.startingBlockNumber(), 0);
assertEq(oracleImpl.startingTimestamp(), 0); assertEq(oracleImpl.startingTimestamp(), 0);
assertEq(oracleImpl.PROPOSER(), address(0));
assertEq(oracleImpl.proposer(), address(0));
assertEq(oracleImpl.CHALLENGER(), address(0));
assertEq(oracleImpl.challenger(), address(0));
} }
/// @dev Tests that the proxy cannot be initialized twice. /// @dev Tests that the proxy cannot be initialized twice.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment