Skip to content

Commit

Permalink
Get mode, metal and zora genesis.allocs validation working (#496)
Browse files Browse the repository at this point in the history
* introduce node_version

need to reexamine writeDeploymentsLegacy

* fix bug in writeDeploymentsLegacy

* fix declaration of legacy deployments and add note

* improve diff

* use hardhat Deployment type to pad data and avoid unmarshaling errors

e.g. on mode

* fix writeDeploymentsLegacy, mode now validates!

* remove note

* introduce  GenesisCreationCommand mapping

allows metadata file to choose from a list and have chainId automatically injected into command

* introduce BuilldCommand mapping

* op sepolia validates

* remove UseLegacyDeploymentsFormat

* remove op mainnet metadata for now

* remove op sepolia (it doesn't validate yet)

* echo nvm version

* just codegen

* load nvm

* fix

* try installing nvm in a step

* require node_version to be set

* just lint-all

* attempt to patch genesis creation source code

 to make validation work at a wider range of commits

* adds metal metadata -- validates!

* add zora metadata -- validates!
  • Loading branch information
geoknee committed Aug 22, 2024
1 parent 11982b8 commit bae89c0
Show file tree
Hide file tree
Showing 20 changed files with 515 additions and 105 deletions.
11 changes: 5 additions & 6 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,6 @@ commands:
apt-get update
apt-get -yq install curl git mercurial make binutils bison gcc build-essential bsdmainutils
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
install-nvm:
description: "Installs nvm"
steps:
- run:
command: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
validate-genesis:
description: "Runs genesis validation checks"
steps:
Expand Down Expand Up @@ -132,7 +127,11 @@ jobs:
- checkout
- install-foundry
- install-gvm
- install-nvm
- run:
name: Install NVM
command: |
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
nvm --version
- validate-genesis # TODO this should also be filtered on modified chains
golang-validate-modified:
shell: /bin/bash -eo pipefail
Expand Down
24 changes: 24 additions & 0 deletions bindings/rust-bindings/etc/chainList.toml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,18 @@
type = "L2"
chain = "mainnet"

[[chains]]
name = "World Chain"
identifier = "mainnet/wc"
chain_id = 480
rpc = ["https://worldchain-mainnet-sequencer.g.alchemy.com"]
explorers = ["https://worldchain-mainnet-explorer.alchemy.com/"]
superchain_level = 0
data_availability_type = "eth-da"
[chains.parent]
type = "L2"
chain = "mainnet"

[[chains]]
name = "Zora"
identifier = "mainnet/zora"
Expand Down Expand Up @@ -167,6 +179,18 @@
type = "L2"
chain = "sepolia"

[[chains]]
name = "World Chain Sepolia Testnet"
identifier = "sepolia/wc"
chain_id = 4801
rpc = [""]
explorers = ["https://worldchain-sepolia-explorer.alchemy.com/"]
superchain_level = 0
data_availability_type = "eth-da"
[chains.parent]
type = "L2"
chain = "sepolia"

[[chains]]
name = "Zora Sepolia Testnet"
identifier = "sepolia/zora"
Expand Down
112 changes: 112 additions & 0 deletions bindings/rust-bindings/etc/configs.toml
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,62 @@
PreimageOracle = "0x0000000000000000000000000000000000000000"
DAChallengeAddress = "0x0000000000000000000000000000000000000000"

[[superchains.chains]]
name = "World Chain"
chain_id = 480
public_rpc = "https://worldchain-mainnet-sequencer.g.alchemy.com"
sequencer_rpc = "https://worldchain-mainnet-sequencer.g.alchemy.com"
explorer = "https://worldchain-mainnet-explorer.alchemy.com/"
superchain_level = 0
standard_chain_candidate = true
batch_inbox_addr = "0xff00000000000000000000000000000000000480"
canyon_time = 0
delta_time = 0
ecotone_time = 0
block_time = 2
seq_window_size = 3600
max_sequencer_drift = 1800
data_availability_type = "eth-da"
[superchains.chains.genesis]
l2_time = 1719335639
[superchains.chains.genesis.l1]
hash = "0x793daed4743301e00143be5533cd1dce0a741519e9e9c96588a9ad7dbb4d8db4"
number = 20170118
[superchains.chains.genesis.l2]
hash = "0x70d316d2e0973b62332ba2e9768dd7854298d7ffe77f0409ffdb8d859f2d3fa3"
number = 0
[superchains.chains.genesis.system_config]
batcherAddress = "0xdBBE3D8c2d2b22A2611c5A94A9a12C2fCD49Eb29"
overhead = "0x00000000000000000000000000000000000000000000000000000000000000bc"
scalar = "0x00000000000000000000000000000000000000000000000000000000000a6fe0"
gasLimit = 100000000
[superchains.chains.addresses]
SystemConfigOwner = "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d"
ProxyAdminOwner = "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d"
Guardian = "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d"
Challenger = "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d"
Proposer = "0x2307278fC8aB0005974A6DeD2FA6d1187333a223"
UnsafeBlockSigner = "0x2270d6eC8E760daA317DD978cFB98C8f144B1f3A"
BatchSubmitter = "0xdBBE3D8c2d2b22A2611c5A94A9a12C2fCD49Eb29"
AddressManager = "0x5891090d5085679714cb0e62f74950a3c19146a8"
L1CrossDomainMessengerProxy = "0xf931a81D18B1766d15695ffc7c1920a62b7e710a"
L1ERC721BridgeProxy = "0x1Df436AfDb2fBB40F1fE8bEd4Fc89A0D0990a8E9"
L1StandardBridgeProxy = "0x470458C91978D2d929704489Ad730DC3E3001113"
L2OutputOracleProxy = "0x19A6d1E9034596196295CF148509796978343c5D"
OptimismMintableERC20FactoryProxy = "0x82Cb528466cF22412d89bdBE9bCF04856790dD0e"
OptimismPortalProxy = "0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C"
SystemConfigProxy = "0x6ab0777fD0e609CE58F939a7F70Fe41F5Aa6300A"
ProxyAdmin = "0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D"
SuperchainConfig = "0xa231f8be37e583f276f93dF516D88a043bfe47E3"
AnchorStateRegistryProxy = "0x1325C4966d17038C5592fb38416AeE85EE73c0cb"
DelayedWETHProxy = "0xF9adF7c9502C5C60352C20a4d22683422DbD061F"
DisputeGameFactoryProxy = "0x0E90dCAFBC242D2C861A20Bb20EC8E7182965a52"
FaultDisputeGame = "0x0000000000000000000000000000000000000000"
MIPS = "0x267b2FFfA613c246Ef995390Ea0a2BaAA16a80Ba"
PermissionedDisputeGame = "0x0000000000000000000000000000000000000000"
PreimageOracle = "0x3941778243E3E80a6a46D149F083825dEdc534BB"
DAChallengeAddress = "0x0000000000000000000000000000000000000000"

[[superchains.chains]]
name = "Binary Mainnet"
chain_id = 624
Expand Down Expand Up @@ -660,6 +716,62 @@
PreimageOracle = "0x0000000000000000000000000000000000000000"
DAChallengeAddress = "0x0000000000000000000000000000000000000000"

[[superchains.chains]]
name = "World Chain Sepolia Testnet"
chain_id = 4801
public_rpc = ""
sequencer_rpc = "https://worldchain-sepolia-sequencer.g.alchemy.com"
explorer = "https://worldchain-sepolia-explorer.alchemy.com/"
superchain_level = 0
standard_chain_candidate = true
batch_inbox_addr = "0xFf00000000000000000000000000000000484752"
canyon_time = 0
delta_time = 0
ecotone_time = 0
block_time = 2
seq_window_size = 3600
max_sequencer_drift = 1800
data_availability_type = "eth-da"
[superchains.chains.genesis]
l2_time = 1720547424
[superchains.chains.genesis.l1]
hash = "0xd220bbdf24df6d1611f4ece1d08c64feae914ce6299ab2806c864e30a5289201"
number = 6278018
[superchains.chains.genesis.l2]
hash = "0xf1deb67ee953f94d8545d2647918687fa8ba1f30fa6103771f11b7c483984070"
number = 0
[superchains.chains.genesis.system_config]
batcherAddress = "0x0f3ff4731D7a10B89ED79AD1Fd97844d7F66B96d"
overhead = "0x00000000000000000000000000000000000000000000000000000000000000bc"
scalar = "0x00000000000000000000000000000000000000000000000000000000000a6fe0"
gasLimit = 100000000
[superchains.chains.addresses]
SystemConfigOwner = "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0"
ProxyAdminOwner = "0x945185C01fb641bA3E63a9bdF66575e35a407837"
Guardian = "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0"
Challenger = "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0"
Proposer = "0x77a95104e4025fC8B88A6a0F5FB7Fae20851E414"
UnsafeBlockSigner = "0x3241A7D28eA74E807A5087BA637fB58D8dDcd078"
BatchSubmitter = "0x0f3ff4731D7a10B89ED79AD1Fd97844d7F66B96d"
AddressManager = "0xc50Ba0767A1c0Ef69Cf1D9cd44De52b08589F691"
L1CrossDomainMessengerProxy = "0x7768c821200554d8F359A8902905Ba9eDe5659a9"
L1ERC721BridgeProxy = "0x3580505c56f8560E3777E92Fb27f70fD20c5B493"
L1StandardBridgeProxy = "0xd7DF54b3989855eb66497301a4aAEc33Dbb3F8DE"
L2OutputOracleProxy = "0xc8886f8BAb6Eaeb215aDB5f1c686BF699248300e"
OptimismMintableERC20FactoryProxy = "0x2D272eF54Ee8EF5c2Ff3523559186580b158cd57"
OptimismPortalProxy = "0xFf6EBa109271fe6d4237EeeD4bAb1dD9A77dD1A4"
SystemConfigProxy = "0x166F9406e79A656f12F05247fb8F5DfA6155bCBF"
ProxyAdmin = "0x3a987FE1cb587B0A1808cf9bB7Cbe0E341838319"
SuperchainConfig = "0x4642C5eD3B1568e0F05d73B10d02e6Fb2595aF9a"
AnchorStateRegistryProxy = "0x1517FDD5A31B35f790eA8a3c6cC2F595B1BD4742"
DelayedWETHProxy = "0x4F4B8Adf1af4b61bb62F68b7aF1c37f8A6311663"
DisputeGameFactoryProxy = "0x8cF97Ee616C986a070F5020d973b456D0120C253"
FaultDisputeGame = "0x0000000000000000000000000000000000000000"
MIPS = "0xCEd5c6ca2f32dE7bf43DB981E1cac398D7A978F2"
PermissionedDisputeGame = "0x0000000000000000000000000000000000000000"
PreimageOracle = "0x954C0Fb8083047f37c8Fe954c114f8138614131C"
DAChallengeAddress = "0x0000000000000000000000000000000000000000"

[[superchains.chains]]
name = "RACE Testnet"
chain_id = 6806
Expand Down
34 changes: 34 additions & 0 deletions chainList.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,23 @@
},
"gasPayingToken": "0x04E9D7e336f79Cdab911b06133D3Ca2Cd0721ce3"
},
{
"name": "World Chain",
"identifier": "mainnet/wc",
"chainId": 480,
"rpc": [
"https://worldchain-mainnet-sequencer.g.alchemy.com"
],
"explorers": [
"https://worldchain-mainnet-explorer.alchemy.com/"
],
"superchainLevel": 0,
"dataAvailabilityType": "eth-da",
"parent": {
"type": "L2",
"chain": "mainnet"
}
},
{
"name": "Zora",
"identifier": "mainnet/zora",
Expand Down Expand Up @@ -238,6 +255,23 @@
"chain": "sepolia"
}
},
{
"name": "World Chain Sepolia Testnet",
"identifier": "sepolia/wc",
"chainId": 4801,
"rpc": [
""
],
"explorers": [
"https://worldchain-sepolia-explorer.alchemy.com/"
],
"superchainLevel": 0,
"dataAvailabilityType": "eth-da",
"parent": {
"type": "L2",
"chain": "sepolia"
}
},
{
"name": "Zora Sepolia Testnet",
"identifier": "sepolia/zora",
Expand Down
24 changes: 24 additions & 0 deletions chainList.toml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,18 @@
type = "L2"
chain = "mainnet"

[[chains]]
name = "World Chain"
identifier = "mainnet/wc"
chain_id = 480
rpc = ["https://worldchain-mainnet-sequencer.g.alchemy.com"]
explorers = ["https://worldchain-mainnet-explorer.alchemy.com/"]
superchain_level = 0
data_availability_type = "eth-da"
[chains.parent]
type = "L2"
chain = "mainnet"

[[chains]]
name = "Zora"
identifier = "mainnet/zora"
Expand Down Expand Up @@ -167,6 +179,18 @@
type = "L2"
chain = "sepolia"

[[chains]]
name = "World Chain Sepolia Testnet"
identifier = "sepolia/wc"
chain_id = 4801
rpc = [""]
explorers = ["https://worldchain-sepolia-explorer.alchemy.com/"]
superchain_level = 0
data_availability_type = "eth-da"
[chains.parent]
type = "L2"
chain = "sepolia"

[[chains]]
name = "Zora Sepolia Testnet"
identifier = "sepolia/zora"
Expand Down
48 changes: 48 additions & 0 deletions superchain/extra/addresses/addresses.json
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,54 @@
"SystemConfigProxy": "0x5e6432F18Bc5d497B1Ab2288a025Fbf9D69E2221",
"UnsafeBlockSigner": "0xa7fA9CA4ac88686A542C0f830d7378eAB4A0278F"
},
"480": {
"AddressManager": "0x5891090d5085679714cb0e62f74950a3c19146a8",
"AnchorStateRegistryProxy": "0x1325C4966d17038C5592fb38416AeE85EE73c0cb",
"BatchSubmitter": "0xdBBE3D8c2d2b22A2611c5A94A9a12C2fCD49Eb29",
"Challenger": "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d",
"DelayedWETHProxy": "0xF9adF7c9502C5C60352C20a4d22683422DbD061F",
"DisputeGameFactoryProxy": "0x0E90dCAFBC242D2C861A20Bb20EC8E7182965a52",
"Guardian": "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d",
"L1CrossDomainMessengerProxy": "0xf931a81D18B1766d15695ffc7c1920a62b7e710a",
"L1ERC721BridgeProxy": "0x1Df436AfDb2fBB40F1fE8bEd4Fc89A0D0990a8E9",
"L1StandardBridgeProxy": "0x470458C91978D2d929704489Ad730DC3E3001113",
"L2OutputOracleProxy": "0x19A6d1E9034596196295CF148509796978343c5D",
"MIPS": "0x267b2FFfA613c246Ef995390Ea0a2BaAA16a80Ba",
"OptimismMintableERC20FactoryProxy": "0x82Cb528466cF22412d89bdBE9bCF04856790dD0e",
"OptimismPortalProxy": "0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C",
"PreimageOracle": "0x3941778243E3E80a6a46D149F083825dEdc534BB",
"Proposer": "0x2307278fC8aB0005974A6DeD2FA6d1187333a223",
"ProxyAdmin": "0xd7405BE7f3e63b094Af6C7C23D5eE33Fd82F872D",
"ProxyAdminOwner": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d",
"SuperchainConfig": "0xa231f8be37e583f276f93dF516D88a043bfe47E3",
"SystemConfigOwner": "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d",
"SystemConfigProxy": "0x6ab0777fD0e609CE58F939a7F70Fe41F5Aa6300A",
"UnsafeBlockSigner": "0x2270d6eC8E760daA317DD978cFB98C8f144B1f3A"
},
"4801": {
"AddressManager": "0xc50Ba0767A1c0Ef69Cf1D9cd44De52b08589F691",
"AnchorStateRegistryProxy": "0x1517FDD5A31B35f790eA8a3c6cC2F595B1BD4742",
"BatchSubmitter": "0x0f3ff4731D7a10B89ED79AD1Fd97844d7F66B96d",
"Challenger": "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0",
"DelayedWETHProxy": "0x4F4B8Adf1af4b61bb62F68b7aF1c37f8A6311663",
"DisputeGameFactoryProxy": "0x8cF97Ee616C986a070F5020d973b456D0120C253",
"Guardian": "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0",
"L1CrossDomainMessengerProxy": "0x7768c821200554d8F359A8902905Ba9eDe5659a9",
"L1ERC721BridgeProxy": "0x3580505c56f8560E3777E92Fb27f70fD20c5B493",
"L1StandardBridgeProxy": "0xd7DF54b3989855eb66497301a4aAEc33Dbb3F8DE",
"L2OutputOracleProxy": "0xc8886f8BAb6Eaeb215aDB5f1c686BF699248300e",
"MIPS": "0xCEd5c6ca2f32dE7bf43DB981E1cac398D7A978F2",
"OptimismMintableERC20FactoryProxy": "0x2D272eF54Ee8EF5c2Ff3523559186580b158cd57",
"OptimismPortalProxy": "0xFf6EBa109271fe6d4237EeeD4bAb1dD9A77dD1A4",
"PreimageOracle": "0x954C0Fb8083047f37c8Fe954c114f8138614131C",
"Proposer": "0x77a95104e4025fC8B88A6a0F5FB7Fae20851E414",
"ProxyAdmin": "0x3a987FE1cb587B0A1808cf9bB7Cbe0E341838319",
"ProxyAdminOwner": "0x945185C01fb641bA3E63a9bdF66575e35a407837",
"SuperchainConfig": "0x4642C5eD3B1568e0F05d73B10d02e6Fb2595aF9a",
"SystemConfigOwner": "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0",
"SystemConfigProxy": "0x166F9406e79A656f12F05247fb8F5DfA6155bCBF",
"UnsafeBlockSigner": "0x3241A7D28eA74E807A5087BA637fB58D8dDcd078"
},
"624": {
"AddressManager": "0x8173904703995c6BbA59a42B8bBf8405F978758a",
"AnchorStateRegistryProxy": "0x275Abd1eB1FBaAB40Dcef5f3A588e2dF65801edc",
Expand Down
42 changes: 42 additions & 0 deletions validation/genesis/commands.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package genesis

import (
"fmt"
"strings"
)

type GeneratorFn func(uint64, string) string

var GenesisCreationCommand = map[string]GeneratorFn{
"opnode1": opnode1,
"opnode2": opnode2,
}

func opnode1(chainId uint64, l1rpcURL string) string {
return strings.Join([]string{
"go run op-node/cmd/main.go genesis l2",
fmt.Sprintf(" --deploy-config=./packages/contracts-bedrock/deploy-config/%d.json", chainId),
" --outfile.l2=expected-genesis.json",
" --outfile.rollup=rollup.json",
fmt.Sprintf("--l1-deployments=./packages/contracts-bedrock/deployments/%d/.deploy", chainId),
fmt.Sprintf("--l1-rpc=%s", l1rpcURL),
},
" ")
}

func opnode2(chainId uint64, l1rpcURL string) string {
return strings.Join([]string{
"go run op-node/cmd/main.go genesis l2",
fmt.Sprintf("--deploy-config=./packages/contracts-bedrock/deploy-config/%d.json", chainId),
"--outfile.l2=expected-genesis.json",
"--outfile.rollup=rollup.json",
fmt.Sprintf("--deployment-dir=./packages/contracts-bedrock/deployments/%d", chainId),
fmt.Sprintf("--l1-rpc=%s", l1rpcURL),
},
" ")
}

var BuildCommand = map[string]string{
"pnpm": "pnpm install --no-frozen-lockfile",
"yarn": "yarn install --no-frozen-lockfile",
}
13 changes: 13 additions & 0 deletions validation/genesis/config.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go
index 4c813acd4..42aa795ed 100644
--- a/op-chain-ops/genesis/config.go
+++ b/op-chain-ops/genesis/config.go
@@ -588,7 +588,7 @@ func NewDeployConfig(path string) (*DeployConfig, error) {
}

dec := json.NewDecoder(bytes.NewReader(file))
- dec.DisallowUnknownFields()
+ // dec.DisallowUnknownFields()

var config DeployConfig
if err := dec.Decode(&config); err != nil {
Loading

0 comments on commit bae89c0

Please sign in to comment.