Skip to content
76 changes: 76 additions & 0 deletions packages/contracts-bedrock/deploy-config/baklava.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"l1StartingBlockTag": null,
"l1ChainID": 17000,
"l2ChainID": 62320,
"l2GenesisBlockGasLimit": "0x1c9c380",
"l2GenesisBlockBaseFeePerGas": "0x3b9aca00",
"l2OutputOracleSubmissionInterval": 600,
"l2OutputOracleStartingTimestamp": 1739987136,
"l2OutputOracleStartingBlockNumber": 28308600,
"l2OutputOracleProposer": "0x85c7AC265419359806B147Fba6Ea654229928333",
"l2OutputOracleChallenger": "0xDc94436A193a827786270dD4F6cD4b35c3f0C8f8",
"useFaultProofs": true,
"faultGameAbsolutePrestate": "0x0364010a7b2be12b8583c8bc2c610ef5b77bb52161cac1dd4f8cbe47edc05afd",
"faultGameMaxDepth": 73,
"faultGameClockExtension": 10800,
"faultGameMaxClockDuration": 302400,
"faultGameGenesisBlock": 42,
"faultGameGenesisOutputRoot": "0x2fafa02f4d94e20796afac0bae793bcc5c3cbb1244bc5a8c730153def18b0f3f",
"faultGameSplitDepth": 30,
"faultGameWithdrawalDelay": 604800,
"preimageOracleMinProposalSize": 126000,
"preimageOracleChallengePeriod": 86400,
"proofMaturityDelaySeconds": 604800,
"disputeGameFinalityDelaySeconds": 302400,
"respectedGameType": 1,
"requiredProtocolVersion": "0x0000000000000000000000000000000000000003000000010000000000000000",
"recommendedProtocolVersion": "0x0000000000000000000000000000000000000003000000010000000000000000",
"superchainConfigGuardian": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"l1BlockTime": 12,
"l2BlockTime": 1,
"finalizationPeriodSeconds": 12,
"maxSequencerDrift": 600,
"sequencerWindowSize": 7200,
"channelTimeout": 300,
"batchInboxAddress": "0xff00000000000000000000000000000000062320",
"systemConfigStartBlock": 0,
"p2pSequencerAddress": "0x3Cd8072cbC235246c684ab9BD76Bb6f3813Df2CD",
"batchSenderAddress": "0x242C6e6eA8e910A1835eFA4CaF8641769C27B595",
"proxyAdminOwner": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"finalSystemOwner": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"baseFeeVaultRecipient": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"baseFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
"baseFeeVaultWithdrawalNetwork": 0,
"l1FeeVaultRecipient": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"l1FeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
"l1FeeVaultWithdrawalNetwork": 0,
"sequencerFeeVaultRecipient": "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094",
"sequencerFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
"sequencerFeeVaultWithdrawalNetwork": 0,
"eip1559Denominator": 400,
"eip1559Elasticity": 5,
"eip1559DenominatorCanyon": 400,
"eip1559BaseFeeFloor": 25000000000,
"gasPriceOracleBaseFeeScalar": 0,
"gasPriceOracleBlobBaseFeeScalar": 0,
"gasPriceOracleOverhead": 0,
"gasPriceOracleScalar": 0,
"enableGovernance": false,
"governanceTokenName": "Optimism",
"governanceTokenSymbol": "OP",
"governanceTokenOwner": "0x0000000000000000000000000000000000000000",
"fundDevAccounts": false,
"deployCeloContracts": false,
"useCustomGasToken": true,
"customGasTokenAddress": "0x0000000000000000000000000000000000000000",
"useAltDA": true,
"daCommitmentType": "GenericCommitment",
"daChallengeWindow": 1,
"daResolveWindow": 1,
"l2GenesisRegolithTimeOffset": "0x0",
"l2GenesisCanyonTimeOffset": "0x0",
"l2GenesisDeltaTimeOffset": "0x0",
"l2GenesisEcotoneTimeOffset": "0x0",
"l2GenesisFjordTimeOffset": "0x0",
"l2GenesisGraniteTimeOffset": "0x0"
}
47 changes: 47 additions & 0 deletions packages/contracts-bedrock/deploy-config/cue/baklava.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package deployconfig

network: test: baklava: #Common & {
_params: {
l1CeloSafeAddress: "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094"
feeRecipientAddress: l1CeloSafeAddress
sequencerWindowSizeHours: 24
withdrawFeesOnL2: false
}

l1StartingBlockTag: null
l1ChainID: 17000
l2ChainID: 62320
maxSequencerDrift: 10 * MinuteInSeconds
// this was used incorrectly, or at least it doesn't have
// any effect since we also activate the granite hardfork
// which has a hardcoded value of 50
channelTimeout: 300

p2pSequencerAddress: "0x3Cd8072cbC235246c684ab9BD76Bb6f3813Df2CD"
batchInboxAddress: "0xff00000000000000000000000000000000062320"
batchSenderAddress: "0x242C6e6eA8e910A1835eFA4CaF8641769C27B595"
proxyAdminOwner: _params.l1CeloSafeAddress
superchainConfigGuardian: _params.l1CeloSafeAddress

l2OutputOracleSubmissionInterval: 600
l2OutputOracleStartingBlockNumber: 28308600
l2OutputOracleStartingTimestamp: 1739987136
l2OutputOracleProposer: "0x85c7AC265419359806B147Fba6Ea654229928333"
l2OutputOracleChallenger: "0xDc94436A193a827786270dD4F6cD4b35c3f0C8f8"

finalizationPeriodSeconds: 12

l2GenesisBlockGasLimit: "0x1c9c380"
l2GenesisBlockBaseFeePerGas: "0x3b9aca00"

useFaultProofs: true
faultGameAbsolutePrestate: "0x0364010a7b2be12b8583c8bc2c610ef5b77bb52161cac1dd4f8cbe47edc05afd"
faultGameGenesisOutputRoot: "0x2fafa02f4d94e20796afac0bae793bcc5c3cbb1244bc5a8c730153def18b0f3f"

preimageOracleMinProposalSize: 126000
preimageOracleChallengePeriod: 86400

faultGameGenesisBlock: 42

useAltDA: true
}
116 changes: 116 additions & 0 deletions packages/contracts-bedrock/deploy-config/cue/common.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package deployconfig

#Parameters: {
_params: {
l1CeloSafeAddress: #Address
feeRecipientAddress: #Address
sequencerWindowSizeHours: uint64
withdrawFeesOnL2!: bool
isLocalDevnet!: bool
}
...
}

#Common: #DeployConfig & #Parameters & {
_params: {
// we set this to double the OP-suggested value (of 12h),
// because we had issues with EigenDA before and
// this was the only thing preventing a long reorg.
// Now we have the fallback mechanism, so this is not as
// relevant any longer. We still agreed that we want to be
// on the safe side here.
sequencerWindowSizeHours: uint64 | *24
isLocalDevnet: bool | *false
withdrawFeesOnL2: bool | true
}

deployCeloContracts: false
fundDevAccounts: false
if _params.isLocalDevnet == true {
deployCeloContracts: true
fundDevAccounts: true
}

l2BlockTime: 1
l1BlockTime: 12
// has not effect anyway if not pre-Granite,
// but set it to a default of 50, which is the Granite hardcoded value
channelTimeout: uint64 | *50
sequencerWindowSize: div((_params.sequencerWindowSizeHours * HourInSeconds), l1BlockTime)
systemConfigStartBlock: 0

finalSystemOwner: _params.l1CeloSafeAddress

// superchain-related
requiredProtocolVersion: "0x0000000000000000000000000000000000000003000000010000000000000000"
recommendedProtocolVersion: "0x0000000000000000000000000000000000000003000000010000000000000000"

// those values were chosen to match the gasprice parameters of ethereum,
// while taking into account our shorter blocktime
eip1559Denominator: 400
eip1559Elasticity: 5
eip1559DenominatorCanyon: eip1559Denominator
eip1559Denominator: 400
eip1559Elasticity: 5
eip1559BaseFeeFloor: 25 * gWei

gasPriceOracleOverhead: 0
gasPriceOracleScalar: 0
gasPriceOracleBaseFeeScalar: 0
gasPriceOracleBlobBaseFeeScalar: 0

l2GenesisFjordTimeOffset: #Hex64 | *"0x0"
l2GenesisRegolithTimeOffset: #Hex64 | *"0x0"
l2GenesisEcotoneTimeOffset: #Hex64 | *"0x0"
l2GenesisDeltaTimeOffset: #Hex64 | *"0x0"
l2GenesisCanyonTimeOffset: #Hex64 | *"0x0"
l2GenesisGraniteTimeOffset: #Hex64 | *"0x0"

// those two will be deployed but don't receive funds
baseFeeVaultRecipient: _params.feeRecipientAddress
l1FeeVaultRecipient: _params.feeRecipientAddress
// for now this will be deployed and receive the tips
// in Celo but also fee-currency.
// The Celo is withdrawable to this address by everyone,
// the fee-currencies are owned by this address but the
// contract implementation is not compatible with ERC20 for now.
sequencerFeeVaultRecipient: _params.feeRecipientAddress
baseFeeVaultMinimumWithdrawalAmount: "0x8ac7230489e80000" // 10000000000000000000
l1FeeVaultMinimumWithdrawalAmount: "0x8ac7230489e80000" // 10000000000000000000
sequencerFeeVaultMinimumWithdrawalAmount: "0x8ac7230489e80000" // 10000000000000000000

if _params.withdrawFeesOnL2 == false {
sequencerFeeVaultWithdrawalNetwork: 0
baseFeeVaultWithdrawalNetwork: 0
l1FeeVaultWithdrawalNetwork: 0
}
if _params.withdrawFeesOnL2 == true {
sequencerFeeVaultWithdrawalNetwork: 1
baseFeeVaultWithdrawalNetwork: 1
l1FeeVaultWithdrawalNetwork: 1
}

enableGovernance: false
governanceTokenOwner: ZeroAddress

// AltDA
daCommitmentType: "GenericCommitment"
daChallengeWindow: 1
daResolveWindow: 1

// FaultProofs
faultGameMaxDepth: uint64 | *73
faultGameClockExtension: uint64 | *(3 * HourInSeconds)
faultGameSplitDepth: uint64 | *30
// we are following op and base here
faultGameWithdrawalDelay: uint64 | *(7 * DayInSeconds)

proofMaturityDelaySeconds: uint64 | *(7 * DayInSeconds)
disputeGameFinalityDelaySeconds: uint64 | *(div(7*DayInSeconds, 2))
faultGameMaxClockDuration: uint64 | *(div(7*DayInSeconds, 2))
// different than OP's "0" type
respectedGameType: 1

useCustomGasToken: true
customGasTokenAddress: ZeroAddress
}
105 changes: 105 additions & 0 deletions packages/contracts-bedrock/deploy-config/cue/mainnet.cue
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package deployconfig

// this is the mainnet template for all values
// we know before any L1 deployment, privkey or safe generation
#MainnetTemplate: #Common & {
_params: sequencerWindowSizeHours: 24

// required for mainnet
proxyAdminOwnerIsMultisig!: bool
externalSuperchainConfig!: #Address
finalSystemOwner!: #Address

if proxyAdminOwnerIsMultisig == true {
proxyAdminOwner: !=finalSystemOwner
}

externalSuperchainConfig: "0x95703e0982140D16f8ebA6d158FccEde42f04a4C"
protocolVersionsProxy: "0x1b6dEB2197418075AB314ac4D52Ca1D104a8F663"
// set this to null,
// and also we don't need to overwrite this later anymore
// since we derive the starting-block based on the
// beacon-api deterministically now.
l1StartingBlockTag: null
l1ChainID: 1
l2ChainID: 42220
// this parameter is only relevant when l1 origin is
// less than l2 start time, just after migration.
// afterwards this is hardcoded to the value 2892.
maxSequencerDrift: 2892
batchInboxAddress: "0xff00000000000000000000000000000000042220"

l2GenesisBlockGasLimit: "0x1c9c380" // 30 000 000
l2GenesisBlockBaseFeePerGas: "0x5d21dba00" // 25 000 000 000

// L2OO related, those values are used in
// the (later stage) initialization of the L2OO
finalizationPeriodSeconds: (7 * DayInSeconds)
l2OutputOracleSubmissionInterval: (30 * MinuteInSeconds)

// this has to be overwritten later after l2 genesis,
// but before the fault-game initialization
faultGameGenesisBlock: uint64 | *31056500

preimageOracleMinProposalSize: uint64 | *126000
preimageOracleChallengePeriod: uint64 | *(24 * HourInSeconds)

useAltDA: true
useFaultProofs: true
}

network: production: mainnet: #MainnetTemplate & {
_params: l1CeloSafeAddress: "0x4092A77bAF58fef0309452cEaCb09221e556E112"
// multisig on future l2, so we can't withdraw fees to L1:
_params: feeRecipientAddress: "0x7A1E98FC9a008107DbD1f430a05Ace8cf6f3FE19"
_params: withdrawFeesOnL2: true

//has to be the aliased version of the finalSystemOwner!
proxyAdminOwnerIsMultisig: true
proxyAdminOwner: "0x51a3a77baf58fef0309452ceacb09221e556f223"

p2pSequencerAddress: "0xA6F1c6c24De8b112dd3867dB907d187d490e6ddF"
batchSenderAddress: "0x0cd08c7f7a96aa9635f761b49216b9ea74c5ca60"
// those are important, since they are also used for the faultproofs
l2OutputOracleProposer: "0x1204884e697efd929729b9a717ea14496298a689"
l2OutputOracleChallenger: "0x6b145ebf66602ec524b196426b46631259689583"
superchainConfigGuardian: "0x6E226fa22e5F19363d231D3FA048aaBa73CC1f47"

// When are we able to set the correct values?
faultGameGenesisOutputRoot: "0x3c736a83458982ae1f6b62284e9af2687333e17625c7147b9af4758fa84952e8"
faultGameAbsolutePrestate: "0x0364010a7b2be12b8583c8bc2c610ef5b77bb52161cac1dd4f8cbe47edc05afd"
faultGameGenesisBlock: 31056500
l2OutputOracleStartingBlockNumber: 0
l2OutputOracleStartingTimestamp: 0
}

network: dryrun: mainnet: #MainnetTemplate & {
// not a safe, but we can use the parameter with an EOA
_params: l1CeloSafeAddress: "0x3d98acBC85D3252DFfd6b500D94341F4774256F0"
_params: feeRecipientAddress: "0x22EaF69162ae49605441229EdbEF7D9FC5f4f094"
_params: withdrawFeesOnL2: true

// instead of the aliased address, use an EOA
proxyAdminOwner: "0x4ea9acbc85d3252dffd6b500d94341f477426801"
proxyAdminOwnerIsMultisig: true

l2OutputOracleStartingBlockNumber: 30941000
l2OutputOracleStartingTimestamp: 1742366039

p2pSequencerAddress: "0xc0fD4a912b7aC8D5a3ABDbef23c88c67Cfb528Cb"
batchSenderAddress: "0x4e8b8dd9611845f5fb80f43662dbeefbb47a75f6"
l2OutputOracleProposer: "0xc01061d4cc5b98965d2aa4b1dfcc1d77bb0d29f3"
l2OutputOracleChallenger: "0x9e21944b9dd761e7a89ecb17be005e955e750f2b"
superchainConfigGuardian: "0x1174B5f5Dd8fA3be9549b131E9810703D15f153d"

faultGameGenesisBlock: 30941000
disputeGameFinalityDelaySeconds: (1 * HourInSeconds)
faultGameWithdrawalDelay: (2 * disputeGameFinalityDelaySeconds)
proofMaturityDelaySeconds: (2 * disputeGameFinalityDelaySeconds)
faultGameClockExtension: (30 * MinuteInSeconds)
faultGameMaxClockDuration: disputeGameFinalityDelaySeconds
preimageOracleChallengePeriod: (10 * MinuteInSeconds)

faultGameAbsolutePrestate: "0x0364010a7b2be12b8583c8bc2c610ef5b77bb52161cac1dd4f8cbe47edc05afd"
faultGameGenesisOutputRoot: "0x3c736a83458982ae1f6b62284e9af2687333e17625c7147b9af4758fa84952e8"
}
Loading