Skip to content

Commit

Permalink
validation: simplify contract version checking and update data follow…
Browse files Browse the repository at this point in the history
…ing Granite upgrade (ethereum-optimism#589)

* simplify version checking

* simplify bytecode hash checking

* get list of contracts to check from standard

* improve error message

* update standard immutables

* fix bytecode checking code

* add missing contracts to version list

* typo

* fix bytecodes

* remove debug lines

* update contract addressed

* remove l2_output_oracle from op-contracts/v1.6.0

Technically this is a part of the release but _not_ a part of the standard contract deployments.

* update standard bytecodes

* just codegen

* update contract deployments on op sepolia

* just codegen

* convert functions into methods

* lint

* typo

* remove unecessary checks

* neaten up .AddressFor usage

* improve AddressFor method

This won't require endless maintenance any more!
  • Loading branch information
geoknee authored Sep 16, 2024
1 parent a90e302 commit f53401f
Show file tree
Hide file tree
Showing 13 changed files with 198 additions and 231 deletions.
20 changes: 10 additions & 10 deletions superchain/configs/configs.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,18 @@
"AnchorStateRegistryProxy": "0x18DAc71c228D1C32c99489B7323d441E1175e443",
"BatchSubmitter": "0x6887246668a3b87F54DeB3b94Ba47a6f63F32985",
"Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A",
"DelayedWETHProxy": "0xE497B094d6DbB3D5E4CaAc9a14696D7572588d14",
"DelayedWETHProxy": "0x82511d494B5C942BE57498a70Fdd7184Ee33B975",
"DisputeGameFactoryProxy": "0xe5965Ab5962eDc7477C8520243A95517CD252fA9",
"FaultDisputeGame": "0x4146DF64D83acB0DcB0c1a4884a16f090165e122",
"FaultDisputeGame": "0xA6f3DFdbf4855a43c529bc42EDE96797252879af",
"Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2",
"L1CrossDomainMessengerProxy": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1",
"L1ERC721BridgeProxy": "0x5a7749f83b81B301cAb5f48EB8516B986DAef23D",
"L1StandardBridgeProxy": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"MIPS": "0x0f8EdFbDdD3c0256A80AD8C0F2560B1807873C9c",
"MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4",
"OptimismMintableERC20FactoryProxy": "0x75505a97BD334E7BD3C476893285569C4136Fa0F",
"OptimismPortalProxy": "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
"PermissionedDisputeGame": "0xE9daD167EF4DE8812C1abD013Ac9570C616599A0",
"PreimageOracle": "0xD326E10B8186e90F4E2adc5c13a2d0C137ee8b34",
"PermissionedDisputeGame": "0x050ed6F6273c7D836a111E42153BC00D0380b87d",
"PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277",
"Proposer": "0x473300df21D047806A082244b417f96b32f13A33",
"ProxyAdmin": "0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A",
Expand Down Expand Up @@ -908,18 +908,18 @@
"AnchorStateRegistryProxy": "0x218CD9489199F321E1177b56385d333c5B598629",
"BatchSubmitter": "0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c",
"Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301",
"DelayedWETHProxy": "0xF3D833949133e4E4D3551343494b34079598EA5a",
"DelayedWETHProxy": "0xcdFdC692a53B4aE9F81E0aEBd26107Da4a71dB84",
"DisputeGameFactoryProxy": "0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1",
"FaultDisputeGame": "0xD5Bc8c45692aada756f2d68f0a2002d6Bf130C42",
"FaultDisputeGame": "0xD9d616E4a03a8e7cC962396C9f8D4e3d306097D3",
"Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E",
"L1CrossDomainMessengerProxy": "0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef",
"L1ERC721BridgeProxy": "0xd83e03D576d23C9AEab8cC44Fa98d058D2176D1f",
"L1StandardBridgeProxy": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1",
"MIPS": "0xFF760A87E41144b336E29b6D4582427dEBdB6dee",
"MIPS": "0x47B0E34C1054009e696BaBAAd56165e1e994144d",
"OptimismMintableERC20FactoryProxy": "0x868D59fF9710159C2B330Cc0fBDF57144dD7A13b",
"OptimismPortalProxy": "0x16Fc5058F25648194471939df75CF27A2fdC48BC",
"PermissionedDisputeGame": "0xBEA4384faCBcf51279962fbCFb8f16F9eD2fe0C6",
"PreimageOracle": "0x627F825CBd48c4102d36f287be71f4234426b9e4",
"PermissionedDisputeGame": "0x98E3F752c7224F8322Afa935a4CaEC3832bB25c9",
"PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854",
"Proposer": "0x49277EE36A024120Ee218127354c4a3591dc90A9",
"ProxyAdmin": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc",
"ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2",
Expand Down
10 changes: 5 additions & 5 deletions superchain/configs/mainnet/op.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ data_availability_type = "eth-da"
SystemConfigProxy = "0x229047fed2591dbec1eF1118d64F7aF3dB9EB290"
ProxyAdmin = "0x543bA4AADBAb8f9025686Bd03993043599c6fB04"
AnchorStateRegistryProxy = "0x18DAc71c228D1C32c99489B7323d441E1175e443"
DelayedWETHProxy = "0xE497B094d6DbB3D5E4CaAc9a14696D7572588d14"
DelayedWETHProxy = "0x82511d494B5C942BE57498a70Fdd7184Ee33B975"
DisputeGameFactoryProxy = "0xe5965Ab5962eDc7477C8520243A95517CD252fA9"
FaultDisputeGame = "0x4146DF64D83acB0DcB0c1a4884a16f090165e122"
MIPS = "0x0f8EdFbDdD3c0256A80AD8C0F2560B1807873C9c"
PermissionedDisputeGame = "0xE9daD167EF4DE8812C1abD013Ac9570C616599A0"
PreimageOracle = "0xD326E10B8186e90F4E2adc5c13a2d0C137ee8b34"
FaultDisputeGame = "0xA6f3DFdbf4855a43c529bc42EDE96797252879af"
MIPS = "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4"
PermissionedDisputeGame = "0x050ed6F6273c7D836a111E42153BC00D0380b87d"
PreimageOracle = "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277"
10 changes: 5 additions & 5 deletions superchain/configs/sepolia/op.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ data_availability_type = "eth-da"
SystemConfigProxy = "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538"
ProxyAdmin = "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc"
AnchorStateRegistryProxy = "0x218CD9489199F321E1177b56385d333c5B598629"
DelayedWETHProxy = "0xF3D833949133e4E4D3551343494b34079598EA5a"
DelayedWETHProxy = "0xcdFdC692a53B4aE9F81E0aEBd26107Da4a71dB84"
DisputeGameFactoryProxy = "0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1"
FaultDisputeGame = "0xD5Bc8c45692aada756f2d68f0a2002d6Bf130C42"
MIPS = "0xFF760A87E41144b336E29b6D4582427dEBdB6dee"
PermissionedDisputeGame = "0xBEA4384faCBcf51279962fbCFb8f16F9eD2fe0C6"
PreimageOracle = "0x627F825CBd48c4102d36f287be71f4234426b9e4"
FaultDisputeGame = "0xD9d616E4a03a8e7cC962396C9f8D4e3d306097D3"
MIPS = "0x47B0E34C1054009e696BaBAAd56165e1e994144d"
PermissionedDisputeGame = "0x98E3F752c7224F8322Afa935a4CaEC3832bB25c9"
PreimageOracle = "0x92240135b46fc1142dA181f550aE8f595B858854"
20 changes: 10 additions & 10 deletions superchain/extra/addresses/addresses.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
"AnchorStateRegistryProxy": "0x18DAc71c228D1C32c99489B7323d441E1175e443",
"BatchSubmitter": "0x6887246668a3b87F54DeB3b94Ba47a6f63F32985",
"Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A",
"DelayedWETHProxy": "0xE497B094d6DbB3D5E4CaAc9a14696D7572588d14",
"DelayedWETHProxy": "0x82511d494B5C942BE57498a70Fdd7184Ee33B975",
"DisputeGameFactoryProxy": "0xe5965Ab5962eDc7477C8520243A95517CD252fA9",
"FaultDisputeGame": "0x4146DF64D83acB0DcB0c1a4884a16f090165e122",
"FaultDisputeGame": "0xA6f3DFdbf4855a43c529bc42EDE96797252879af",
"Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2",
"L1CrossDomainMessengerProxy": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1",
"L1ERC721BridgeProxy": "0x5a7749f83b81B301cAb5f48EB8516B986DAef23D",
"L1StandardBridgeProxy": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"MIPS": "0x0f8EdFbDdD3c0256A80AD8C0F2560B1807873C9c",
"MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4",
"OptimismMintableERC20FactoryProxy": "0x75505a97BD334E7BD3C476893285569C4136Fa0F",
"OptimismPortalProxy": "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
"PermissionedDisputeGame": "0xE9daD167EF4DE8812C1abD013Ac9570C616599A0",
"PreimageOracle": "0xD326E10B8186e90F4E2adc5c13a2d0C137ee8b34",
"PermissionedDisputeGame": "0x050ed6F6273c7D836a111E42153BC00D0380b87d",
"PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277",
"Proposer": "0x473300df21D047806A082244b417f96b32f13A33",
"ProxyAdmin": "0x543bA4AADBAb8f9025686Bd03993043599c6fB04",
"ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A",
Expand All @@ -28,18 +28,18 @@
"AnchorStateRegistryProxy": "0x218CD9489199F321E1177b56385d333c5B598629",
"BatchSubmitter": "0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c",
"Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301",
"DelayedWETHProxy": "0xF3D833949133e4E4D3551343494b34079598EA5a",
"DelayedWETHProxy": "0xcdFdC692a53B4aE9F81E0aEBd26107Da4a71dB84",
"DisputeGameFactoryProxy": "0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1",
"FaultDisputeGame": "0xD5Bc8c45692aada756f2d68f0a2002d6Bf130C42",
"FaultDisputeGame": "0xD9d616E4a03a8e7cC962396C9f8D4e3d306097D3",
"Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E",
"L1CrossDomainMessengerProxy": "0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef",
"L1ERC721BridgeProxy": "0xd83e03D576d23C9AEab8cC44Fa98d058D2176D1f",
"L1StandardBridgeProxy": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1",
"MIPS": "0xFF760A87E41144b336E29b6D4582427dEBdB6dee",
"MIPS": "0x47B0E34C1054009e696BaBAAd56165e1e994144d",
"OptimismMintableERC20FactoryProxy": "0x868D59fF9710159C2B330Cc0fBDF57144dD7A13b",
"OptimismPortalProxy": "0x16Fc5058F25648194471939df75CF27A2fdC48BC",
"PermissionedDisputeGame": "0xBEA4384faCBcf51279962fbCFb8f16F9eD2fe0C6",
"PreimageOracle": "0x627F825CBd48c4102d36f287be71f4234426b9e4",
"PermissionedDisputeGame": "0x98E3F752c7224F8322Afa935a4CaEC3832bB25c9",
"PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854",
"Proposer": "0x49277EE36A024120Ee218127354c4a3591dc90A9",
"ProxyAdmin": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc",
"ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2",
Expand Down
99 changes: 47 additions & 52 deletions superchain/superchain.go
Original file line number Diff line number Diff line change
Expand Up @@ -311,62 +311,28 @@ type AddressList struct {
}

// AddressFor returns a nonzero address for the supplied name, if it has been specified
// (and an error otherwise). Useful for slicing into the struct using a string.
// (and an error otherwise).
func (a AddressList) AddressFor(name string) (Address, error) {
var address Address
switch name {
case "AddressManager":
address = a.AddressManager
case "ProxyAdmin":
address = a.ProxyAdmin
case "L1CrossDomainMessengerProxy":
address = a.L1CrossDomainMessengerProxy
case "L1ERC721BridgeProxy":
address = a.L1ERC721BridgeProxy
case "L1StandardBridgeProxy":
address = a.L1StandardBridgeProxy
case "L2OutputOracleProxy":
address = a.L2OutputOracleProxy
case "OptimismMintableERC20FactoryProxy":
address = a.OptimismMintableERC20FactoryProxy
case "OptimismPortalProxy":
address = a.OptimismPortalProxy
case "SystemConfigProxy":
address = a.SystemConfigProxy
case "AnchorStateRegistryProxy":
address = a.AnchorStateRegistryProxy
case "DelayedWETHProxy":
address = a.DelayedWETHProxy
case "DisputeGameFactoryProxy":
address = a.DisputeGameFactoryProxy
case "FaultDisputeGame":
address = a.FaultDisputeGame
case "MIPS":
address = a.MIPS
case "PermissionedDisputeGame":
address = a.PermissionedDisputeGame
case "PreimageOracle":
address = a.PreimageOracle
case "SystemConfigOwner":
address = a.SystemConfigOwner
case "ProxyAdminOwner":
address = a.ProxyAdminOwner
case "Guardian":
address = a.Guardian
case "Challenger":
address = a.Challenger
case "BatchSubmitter":
address = a.BatchSubmitter
case "UnsafeBlockSigner":
address = a.UnsafeBlockSigner
case "Proposer":
address = a.Proposer
default:
return address, fmt.Errorf("no such name %s", name)
// Use reflection to get the struct value and type
v := reflect.ValueOf(a)

// Try to find the field by name
field := v.FieldByName(name)
if !field.IsValid() {
return Address{}, fmt.Errorf("no such name %s", name)
}

// Check if the field is of type Address
if field.Type() != reflect.TypeOf(Address{}) {
return Address{}, fmt.Errorf("field %s is not of type Address", name)
}

// Check if the address is a non-zero value
address := field.Interface().(Address)
if address == (Address{}) {
return address, fmt.Errorf("no address or zero address specified for %s", name)
return Address{}, fmt.Errorf("no address or zero address specified for %s", name)
}

return address, nil
}

Expand Down Expand Up @@ -433,6 +399,35 @@ type ContractVersions struct {
CannonFaultDisputeGame VersionedContract `toml:"cannon_fault_dispute_game,omitempty"`
}

// GetNonEmpty returns a slice of contract names, with an entry for each contract
// in the receiver with a non empty Version property.
func (c ContractVersions) GetNonEmpty() []string {
// Get the value and type of the struct
v := reflect.ValueOf(c)
t := reflect.TypeOf(c)

var fieldNames []string

// Iterate through the struct fields
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
fieldType := t.Field(i)

// Ensure the field is of type VersionedContract
if field.Type() == reflect.TypeOf(VersionedContract{}) {
// Get the Version field from the VersionedContract
versionField := field.FieldByName("Version")

// Check if the Version is non-empty
if versionField.IsValid() && versionField.String() != "" {
fieldNames = append(fieldNames, fieldType.Name)
}
}
}

return fieldNames
}

// VersionFor returns the version for the supplied contract name, if it exits
// (and an error otherwise). Useful for slicing into the struct using a string.
func (c ContractVersions) VersionFor(contractName string) (string, error) {
Expand Down
2 changes: 1 addition & 1 deletion validation/immutable-references.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func (deployed *BytecodeAndImmutableReferences) maskBytecode(contractName string
for _, r := range v {
for i := r.Start; i < r.Start+r.Length; i++ {
if i >= len(deployed.Bytecode) {
return fmt.Errorf("immutable reference [start:%d, length: %d] extends beyond bytecode", r.Start, r.Length)
return fmt.Errorf("immutable reference for contract %s [start:%d, length: %d] extends beyond bytecode", contractName, r.Start, r.Length)
}
deployed.Bytecode[i] = 0
}
Expand Down
4 changes: 0 additions & 4 deletions validation/standard/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"reflect"

"github.com/BurntSushi/toml"
"github.com/ethereum-optimism/superchain-registry/superchain"
)

//go:embed *.toml
Expand All @@ -20,9 +19,6 @@ var standardConfigFile embed.FS
// registry. Ex: ethereum-optimism/optimism/packages/contracts-bedrock/forge-artifacts/MIPS.sol/MIPS.json
var ContractASTsWithImmutableReferences = map[string]string{}

// L1ContractBytecodeHashes represents the hash of the contract bytecode (as a hex string) for each L1 contract
type L1ContractBytecodeHashes superchain.ContractBytecodeHashes

// ContractBytecodeImmutables stores the immutable references as a raw stringified JSON string in a TOML config.
// it is stored this way because it can be plucked out of the contract compilation output as is and pasted into the TOML config file.
type ContractBytecodeImmutables struct {
Expand Down
38 changes: 28 additions & 10 deletions validation/standard/standard-bytecodes.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
["op-contracts/v1.6.0"] # Fault Proof Fixes https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.6.0
address_manager = ""
l1_cross_domain_messenger = "0xc919b535f7bbbaa57f32b602f26000e3997c22c933efbb92a36e053b20b2b4b1" # version 2.3.0
l1_erc721_bridge = "0xa1a3ea3996797cf5035dafff9335386f8b00c58ff22aaa4c34b02c4ae7cf5e8a" # version 2.1.0
l1_standard_bridge = "0x6894839591ba2aa1f6ba43526113e25fd795ec5c5a48202e664c931cd170aaee" # version 2.1.0
optimism_mintable_erc20_factory = "0xb8ec72533005496795f8fc0c71f0312578ff626f7b94699984e1add6dc2f3b88" # version 1.9.0
optimism_portal = "0x2b0610230634fccf9d05f4aaefceffef9e04aa99910798d42823e0068eb07eca" # version 3.10.0
system_config = "0x1245886f18eada47816eba66ec353eb9a5dad795a5e36df78067f66657018e32" # version 2.2.0
preimage_oracle = "0x2109eb20fb34703fe7ab0231bf0e93d972fe78423b72e7fb1f797f168217b87d" # version "1.0.0"
permissioned_dispute_game = "0x666d50416294caefc6a0a9c7c3803d75dbb76e9b85384c4aaee5fc35d7b5cb34" # version "1.2.0"
# for the contracts below which contain immutables, the hash is calculated from the masked bytecode (not the deployed bytecode as-is).
# sections of the bytecode that contain the immutables are masked (set to 0) before computing the hash
anchor_state_registry = "0x0498c48f921116ae0b4e1f8cb2e7aadff89f232a8ee0b636592d4520c1a12608" # version "1.0.0"
delayed_weth = "0x673e70f6894b78f8c9b53937860851d56984d4d19d073a1325fb1634a80f458f" # version "1.0.0"
mips = "0xea26525ec1efbe84dd1596137c22eceefc7c0a79d6fb3d198e74145135448e12" # version "1.0.0"
fault_dispute_game = "0x94ded5b66802fe6287d2105fad9ab6c4c8f25275db55d997e07e2284c830595a" # version "1.2.0"


["op-contracts/v1.4.0"] # Fault Proofs https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.4.0
address_manager = ""
l1_cross_domain_messenger = "0xc919b535f7bbbaa57f32b602f26000e3997c22c933efbb92a36e053b20b2b4b1" # version 2.3.0
l1_erc721_bridge = "0xa1a3ea3996797cf5035dafff9335386f8b00c58ff22aaa4c34b02c4ae7cf5e8a" # version 2.1.0
l1_standard_bridge = "0x6894839591ba2aa1f6ba43526113e25fd795ec5c5a48202e664c931cd170aaee" # version 2.1.0
l1_cross_domain_messenger = "0xc919b535f7bbbaa57f32b602f26000e3997c22c933efbb92a36e053b20b2b4b1" # version 2.3.0
l1_erc721_bridge = "0xa1a3ea3996797cf5035dafff9335386f8b00c58ff22aaa4c34b02c4ae7cf5e8a" # version 2.1.0
l1_standard_bridge = "0x6894839591ba2aa1f6ba43526113e25fd795ec5c5a48202e664c931cd170aaee" # version 2.1.0
optimism_mintable_erc20_factory = "0xb8ec72533005496795f8fc0c71f0312578ff626f7b94699984e1add6dc2f3b88" # version 1.9.0
optimism_portal = "0x2b0610230634fccf9d05f4aaefceffef9e04aa99910798d42823e0068eb07eca" # version 3.10.0
system_config = "0x1245886f18eada47816eba66ec353eb9a5dad795a5e36df78067f66657018e32" # version 2.2.0
preimage_oracle= "0x8b26e228dfe0bb4d7dee801d50756792a7f2d63ea5da42ddb120873dfe47f875" # version "1.0.0"
permissioned_dispute_game = "0xb0a3aed0fb964b33445061d604e5fcfb952fb99dbff4d6f0c59aa1f24fdfd30f" # version "1.2.0"
optimism_portal = "0x2b0610230634fccf9d05f4aaefceffef9e04aa99910798d42823e0068eb07eca" # version 3.10.0
system_config = "0x1245886f18eada47816eba66ec353eb9a5dad795a5e36df78067f66657018e32" # version 2.2.0
preimage_oracle = "0x8b26e228dfe0bb4d7dee801d50756792a7f2d63ea5da42ddb120873dfe47f875" # version "1.0.0"
permissioned_dispute_game = "0xb0a3aed0fb964b33445061d604e5fcfb952fb99dbff4d6f0c59aa1f24fdfd30f" # version "1.2.0"
# for the contracts below which contain immutables, the hash is calculated from the masked bytecode (not the deployed bytecode as-is).
# sections of the bytecode that contain the immutables are masked (set to 0) before computing the hash
anchor_state_registry = "0x07a466697584157d8926768fd99d30499dddc52aec7e2e620f430f3498b26dee" # version "1.0.0"
delayed_weth = "0x430b15595a625dc821f34b42c354676de32c2f112fbd89978b8196cf66d823d5" # version "1.0.0"
mips = "0xce7e7ce9dc98d151ecbbb02a548534ab33a59aa4091ad52be0a703dc6c4f3d39" # version "1.0.0"
fault_dispute_game = "0x875e36fd4039b580b20051d25336a7db1ea982613edcc7b83f9d6406f8c84959" # version "1.2.0"
delayed_weth = "0x430b15595a625dc821f34b42c354676de32c2f112fbd89978b8196cf66d823d5" # version "1.0.0"
mips = "0xce7e7ce9dc98d151ecbbb02a548534ab33a59aa4091ad52be0a703dc6c4f3d39" # version "1.0.0"
fault_dispute_game = "0x875e36fd4039b580b20051d25336a7db1ea982613edcc7b83f9d6406f8c84959" # version "1.2.0"
Loading

0 comments on commit f53401f

Please sign in to comment.