Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
fed16f5a
Unverified
Commit
fed16f5a
authored
Nov 08, 2023
by
Maurelian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(ctb): Correctly set values in constructors.
parent
ec1dafcb
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
60 deletions
+61
-60
ChainAssertions.sol
packages/contracts-bedrock/scripts/ChainAssertions.sol
+10
-0
Deploy.s.sol
packages/contracts-bedrock/scripts/Deploy.s.sol
+40
-37
L2OutputOracle.t.sol
packages/contracts-bedrock/test/L2OutputOracle.t.sol
+11
-23
No files found.
packages/contracts-bedrock/scripts/ChainAssertions.sol
View file @
fed16f5a
...
@@ -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);
}
}
...
...
packages/contracts-bedrock/scripts/Deploy.s.sol
View file @
fed16f5a
...
@@ -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: b
atcherHash
,
_batcherHash: b
ytes32(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 ==
rc
onfig.maxResourceLimit);
require(resourceConfig.maxResourceLimit ==
defaultC
onfig.maxResourceLimit);
require(resourceConfig.elasticityMultiplier ==
rc
onfig.elasticityMultiplier);
require(resourceConfig.elasticityMultiplier ==
defaultC
onfig.elasticityMultiplier);
require(resourceConfig.baseFeeMaxChangeDenominator ==
rc
onfig.baseFeeMaxChangeDenominator);
require(resourceConfig.baseFeeMaxChangeDenominator ==
defaultC
onfig.baseFeeMaxChangeDenominator);
require(resourceConfig.systemTxMaxGas ==
rc
onfig.systemTxMaxGas);
require(resourceConfig.systemTxMaxGas ==
defaultC
onfig.systemTxMaxGas);
require(resourceConfig.minimumBaseFee ==
rc
onfig.minimumBaseFee);
require(resourceConfig.minimumBaseFee ==
defaultC
onfig.minimumBaseFee);
require(resourceConfig.maximumBaseFee ==
rc
onfig.maximumBaseFee);
require(resourceConfig.maximumBaseFee ==
defaultC
onfig.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,
...
...
packages/contracts-bedrock/test/L2OutputOracle.t.sol
View file @
fed16f5a
...
@@ -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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment