Skip to content

Commit

Permalink
op-chain-ops: clean up op-upgrade
Browse files Browse the repository at this point in the history
Now `op-upgrade` can work when there is not a chain config
present for a specific chain. It will reuse the on chain values
if there is not a deploy config present. The deploy config values
should be kept up to date with what is on chain, meaning that
we should not do one off upgrades that do not read in the deploy
config as input. Chain state should be modified only by reading
in deploy config.

Example tx generated that upgrades op-goerli, base-goerli and
zora-goerli:

```json
{
  "version": "",
  "chainId": null,
  "createdAt": 0,
  "meta": {
    "createdFromSafeAddress": "",
    "createdFromOwnerAddress": "",
    "name": "",
    "description": ""
  },
  "transactions": [
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d0000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be294000000000000000000000000f4d5682da3ad1820ea83e1cee5fd92a3a7babc30000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005b47e1a08ea6d985d6649300584e6722ec4b1383",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000005b47e1a08ea6d985d6649300584e6722ec4b1383",
        "_implementation": "0xf4d5682dA3ad1820ea83E1cEE5Fd92a3A7BabC30",
        "_proxy": "0x5086d1eEF304eb5284A0f6720f79403b4e9bE294"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d0000000000000000000000008dd330dde8d9898d43b4dc840da27a07df91b3c90000000000000000000000008add7fb53a242e827373519d260ee3b8f7612ba1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be294",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be294",
        "_implementation": "0x8ADd7FB53A242e827373519d260EE3B8F7612Ba1",
        "_proxy": "0x8DD330DdE8D9898d43b4dc840Da27A07dF91b3c9"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa80000000000000000000000009c540e769b9453d174edb683a90d9170e6559f16000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be294",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be294",
        "_implementation": "0x9c540e769B9453d174EdB683a90D9170e6559F16",
        "_proxy": "0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d000000000000000000000000e6dfba0953616bacab0c9a8ecb3a9bba77fc15c00000000000000000000000007a811c9862ab54e677eeda7e6f075ac86a1f551e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000003df8280000000000000000000000000000000000000000000000000000000063c05ab400000000000000000000000002b1786a85ec3f71fbbba46507780db7cf9014f6000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x00000000000000000000000000000000000000000000000000000000003df8280000000000000000000000000000000000000000000000000000000063c05ab400000000000000000000000002b1786a85ec3f71fbbba46507780db7cf9014f6000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f",
        "_implementation": "0x7a811C9862ab54E677EEdA7e6F075aC86a1f551e",
        "_proxy": "0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d000000000000000000000000883dcf8b05364083d849d8bd226bc8cb4c42f9c5000000000000000000000000135b9097a0e1e56190251c62f111b676fb4ec49400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa8",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa8",
        "_implementation": "0x135B9097A0e1e56190251c62f111B676Fb4Ec494",
        "_proxy": "0x883dcF8B05364083D849D8bD226bC8Cb4c42F9C5"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d0000000000000000000000005b47e1a08ea6d985d6649300584e6722ec4b13830000000000000000000000008cfa294bd0c6f63cd65d492bdb754eacf684d87100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e6dfba0953616bacab0c9a8ecb3a9bba77fc15c0000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f000000000000000000000000ae851f927ee40de99aabb7461c00f9622ab91d600000000000000000000000000000000000000000000000000000000000000000",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000e6dfba0953616bacab0c9a8ecb3a9bba77fc15c0000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f000000000000000000000000ae851f927ee40de99aabb7461c00f9622ab91d600000000000000000000000000000000000000000000000000000000000000000",
        "_implementation": "0x8Cfa294bD0c6F63cD65d492bdB754eAcf684D871",
        "_proxy": "0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"
      }
    },
    {
      "to": "0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d",
      "value": "0",
      "data": "0x9623609d000000000000000000000000ae851f927ee40de99aabb7461c00f9622ab91d6000000000000000000000000009323d05868393c7eba8190bac173f843b82030a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000280000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000007431310e026b69bfc676c0013e12a1a11411eec90000000000000000000000000000000000000000000000000000000002faf080000000000000000000000000715b7219d986641df9efd9c7ef01218d528e19ec0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000007ea6b6000000000000000000000000ff000000000000000000000000000000000004200000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be2940000000000000000000000008dd330dde8d9898d43b4dc840da27a07df91b3c9000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa8000000000000000000000000e6dfba0953616bacab0c9a8ecb3a9bba77fc15c00000000000000000000000005b47e1a08ea6d985d6649300584e6722ec4b1383000000000000000000000000883dcf8b05364083d849d8bd226bc8cb4c42f9c5",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000bc1233d0c3e6b5d53ab455cf65a6623f6dcd7e4f000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000007431310e026b69bfc676c0013e12a1a11411eec90000000000000000000000000000000000000000000000000000000002faf080000000000000000000000000715b7219d986641df9efd9c7ef01218d528e19ec0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000007ea6b6000000000000000000000000ff000000000000000000000000000000000004200000000000000000000000005086d1eef304eb5284a0f6720f79403b4e9be2940000000000000000000000008dd330dde8d9898d43b4dc840da27a07df91b3c9000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa8000000000000000000000000e6dfba0953616bacab0c9a8ecb3a9bba77fc15c00000000000000000000000005b47e1a08ea6d985d6649300584e6722ec4b1383000000000000000000000000883dcf8b05364083d849d8bd226bc8cb4c42f9c5",
        "_implementation": "0x09323D05868393c7EBa8190BAc173f843b82030a",
        "_proxy": "0xAe851f927Ee40dE99aaBb7461C00f9622ab91d60"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc000000000000000000000000f4d5682da3ad1820ea83e1cee5fd92a3a7babc3000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000db9f51790365e7dc196e7d072728df39be958ace",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000db9f51790365e7dc196e7d072728df39be958ace",
        "_implementation": "0xf4d5682dA3ad1820ea83E1cEE5Fd92a3A7BabC30",
        "_proxy": "0xD87342e16352D33170557A7dA1e5fB966a60FafC"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d00000000000000000000000057c1c6b596ce90c0e010c358dd4aa052404bb70f0000000000000000000000008add7fb53a242e827373519d260ee3b8f7612ba100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc",
        "_implementation": "0x8ADd7FB53A242e827373519d260EE3B8F7612Ba1",
        "_proxy": "0x57C1C6b596ce90C0e010c358DD4Aa052404bB70F"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d0000000000000000000000007cc09ac2452d6555d5e0c213ab9e2d44efbfc9560000000000000000000000009c540e769b9453d174edb683a90d9170e6559f1600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc",
        "_implementation": "0x9c540e769B9453d174EdB683a90D9170e6559F16",
        "_proxy": "0x7CC09AC2452D6555d5e0C213Ab9E2d44eFbFc956"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d000000000000000000000000dd292c9eed00f6a32ff5245d0bcd7f2a15f24e000000000000000000000000007a811c9862ab54e677eeda7e6f075ac86a1f551e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98b585654fc03e2fea3fab56e1c851e4f5c2b54000000000000000000000000fbafdf2c3762b571310e3a726a6cd4443e6ff3da",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98b585654fc03e2fea3fab56e1c851e4f5c2b54000000000000000000000000fbafdf2c3762b571310e3a726a6cd4443e6ff3da",
        "_implementation": "0x7a811C9862ab54E677EEdA7e6F075aC86a1f551e",
        "_proxy": "0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d00000000000000000000000069e16c9e03d7def18a5d88e3c5c2e037946346ef000000000000000000000000135b9097a0e1e56190251c62f111b676fb4ec494000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000007cc09ac2452d6555d5e0c213ab9e2d44efbfc956",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000007cc09ac2452d6555d5e0c213ab9e2d44efbfc956",
        "_implementation": "0x135B9097A0e1e56190251c62f111B676Fb4Ec494",
        "_proxy": "0x69E16C9e03d7Def18A5d88e3c5c2e037946346eF"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d000000000000000000000000db9f51790365e7dc196e7d072728df39be958ace0000000000000000000000008cfa294bd0c6f63cd65d492bdb754eacf684d87100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000dd292c9eed00f6a32ff5245d0bcd7f2a15f24e0000000000000000000000000045effbd799ab49122eeeab75b78d9c56a187f9a7000000000000000000000000f66c9a5e4fe1a8a9bc44a4af80505a4c3620ee640000000000000000000000000000000000000000000000000000000000000000",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000dd292c9eed00f6a32ff5245d0bcd7f2a15f24e0000000000000000000000000045effbd799ab49122eeeab75b78d9c56a187f9a7000000000000000000000000f66c9a5e4fe1a8a9bc44a4af80505a4c3620ee640000000000000000000000000000000000000000000000000000000000000000",
        "_implementation": "0x8Cfa294bD0c6F63cD65d492bdB754eAcf684D871",
        "_proxy": "0xDb9F51790365e7dc196e7D072728df39Be958ACe"
      }
    },
    {
      "to": "0x6Cce41f8C6AABf78E1DA6caF8f78B14946dF6FcF",
      "value": "0",
      "data": "0x9623609d000000000000000000000000f66c9a5e4fe1a8a9bc44a4af80505a4c3620ee6400000000000000000000000009323d05868393c7eba8190bac173f843b82030a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000028000000000000000000000000023ba22dd7923f3a3f2495bb32a6f3c9b9cd1ec6c000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000427c9a666d3b27873111ce3894712bf64c6343a00000000000000000000000000000000000000000000000000000000001c9c380000000000000000000000000c890c7cbf8400aa9a2c908ab3caacd97e0018d850000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf628e24ac574866d3d0a7cfe4e9da7278b7ef13000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc00000000000000000000000057c1c6b596ce90c0e010c358dd4aa052404bb70f0000000000000000000000007cc09ac2452d6555d5e0c213ab9e2d44efbfc956000000000000000000000000dd292c9eed00f6a32ff5245d0bcd7f2a15f24e00000000000000000000000000db9f51790365e7dc196e7d072728df39be958ace00000000000000000000000069e16c9e03d7def18a5d88e3c5c2e037946346ef",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x00000000000000000000000023ba22dd7923f3a3f2495bb32a6f3c9b9cd1ec6c000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000427c9a666d3b27873111ce3894712bf64c6343a00000000000000000000000000000000000000000000000000000000001c9c380000000000000000000000000c890c7cbf8400aa9a2c908ab3caacd97e0018d850000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf628e24ac574866d3d0a7cfe4e9da7278b7ef13000000000000000000000000d87342e16352d33170557a7da1e5fb966a60fafc00000000000000000000000057c1c6b596ce90c0e010c358dd4aa052404bb70f0000000000000000000000007cc09ac2452d6555d5e0c213ab9e2d44efbfc956000000000000000000000000dd292c9eed00f6a32ff5245d0bcd7f2a15f24e00000000000000000000000000db9f51790365e7dc196e7d072728df39be958ace00000000000000000000000069e16c9e03d7def18a5d88e3c5c2e037946346ef",
        "_implementation": "0x09323D05868393c7EBa8190BAc173f843b82030a",
        "_proxy": "0xF66C9A5E4fE1A8a9bc44a4aF80505a4C3620Ee64"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d000000000000000000000000f4d5682da3ad1820ea83e1cee5fd92a3a7babc3000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e93c8cd0d409341205a592f8c4ac1a5fe5585cfa",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000e93c8cd0d409341205a592f8c4ac1a5fe5585cfa",
        "_implementation": "0xf4d5682dA3ad1820ea83E1cEE5Fd92a3A7BabC30",
        "_proxy": "0x8e5693140eA606bcEB98761d9beB1BC87383706D"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d0000000000000000000000005e0c967457347d5175bf82e8cccc6480fcd7e5680000000000000000000000008add7fb53a242e827373519d260ee3b8f7612ba1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d",
        "_implementation": "0x8ADd7FB53A242e827373519d260EE3B8F7612Ba1",
        "_proxy": "0x5E0c967457347D5175bF82E8CCCC6480FCD7e568"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d000000000000000000000000fa6d8ee5be770f84fc001d098c4bd604fe01284a0000000000000000000000009c540e769b9453d174edb683a90d9170e6559f16000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d",
        "_implementation": "0x9c540e769B9453d174EdB683a90D9170e6559F16",
        "_proxy": "0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d0000000000000000000000002a35891ff30313ccfa6ce88dcf3858bb075a22980000000000000000000000007a811c9862ab54e677eeda7e6f075ac86a1f551e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063d96d100000000000000000000000004f28beb40635093b72def43d0ad801cdd8e0e6fe000000000000000000000000f30b40411c4d76228092e7ecdc1593c996b13d22",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063d96d100000000000000000000000004f28beb40635093b72def43d0ad801cdd8e0e6fe000000000000000000000000f30b40411c4d76228092e7ecdc1593c996b13d22",
        "_implementation": "0x7a811C9862ab54E677EEdA7e6F075aC86a1f551e",
        "_proxy": "0x2A35891ff30313CcFa6CE88dcf3858bb075A2298"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d000000000000000000000000a88530e2dd811363ca3ef479dbab3c0bf73d90b1000000000000000000000000135b9097a0e1e56190251c62f111b676fb4ec49400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fa6d8ee5be770f84fc001d098c4bd604fe01284a",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x000000000000000000000000fa6d8ee5be770f84fc001d098c4bd604fe01284a",
        "_implementation": "0x135B9097A0e1e56190251c62f111B676Fb4Ec494",
        "_proxy": "0xa88530E2DD811363cA3Ef479dBab3C0BF73d90b1"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d000000000000000000000000e93c8cd0d409341205a592f8c4ac1a5fe5585cfa0000000000000000000000008cfa294bd0c6f63cd65d492bdb754eacf684d871000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002a35891ff30313ccfa6ce88dcf3858bb075a22980000000000000000000000004c35ca57616e0d5fd808574772f632d8da4eadca000000000000000000000000b15eea247ece011c68a614e4a77ad648ff495bc10000000000000000000000000000000000000000000000000000000000000000",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000002a35891ff30313ccfa6ce88dcf3858bb075a22980000000000000000000000004c35ca57616e0d5fd808574772f632d8da4eadca000000000000000000000000b15eea247ece011c68a614e4a77ad648ff495bc10000000000000000000000000000000000000000000000000000000000000000",
        "_implementation": "0x8Cfa294bD0c6F63cD65d492bdB754eAcf684D871",
        "_proxy": "0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA"
      }
    },
    {
      "to": "0xbc0Fc544736b7d610D9b05F31B182C8154BEf336",
      "value": "0",
      "data": "0x9623609d000000000000000000000000b15eea247ece011c68a614e4a77ad648ff495bc100000000000000000000000009323d05868393c7eba8190bac173f843b82030a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002800000000000000000000000004c35ca57616e0d5fd808574772f632d8da4eadca000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f424000000000000000000000000073b4168cc87f35cc239200a20eb841cded23493b00000000000000000000000000000000000000000000000000000000017d784000000000000000000000000032a4e99a72c11e9dd3dc159909a2d7bd86c1bc510000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084531000000000000000000000000000000000000000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d0000000000000000000000005e0c967457347d5175bf82e8cccc6480fcd7e568000000000000000000000000fa6d8ee5be770f84fc001d098c4bd604fe01284a0000000000000000000000002a35891ff30313ccfa6ce88dcf3858bb075a2298000000000000000000000000e93c8cd0d409341205a592f8c4ac1a5fe5585cfa000000000000000000000000a88530e2dd811363ca3ef479dbab3c0bf73d90b1",
      "contractMethod": {
        "inputs": [
          {
            "internalType": "address",
            "name": "_proxy",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_implementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "_data",
            "type": "bytes"
          }
        ],
        "name": "upgradeAndCall",
        "payable": false
      },
      "contractInputsValues": {
        "_data": "0x0000000000000000000000004c35ca57616e0d5fd808574772f632d8da4eadca000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f424000000000000000000000000073b4168cc87f35cc239200a20eb841cded23493b00000000000000000000000000000000000000000000000000000000017d784000000000000000000000000032a4e99a72c11e9dd3dc159909a2d7bd86c1bc510000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084531000000000000000000000000000000000000000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d0000000000000000000000005e0c967457347d5175bf82e8cccc6480fcd7e568000000000000000000000000fa6d8ee5be770f84fc001d098c4bd604fe01284a0000000000000000000000002a35891ff30313ccfa6ce88dcf3858bb075a2298000000000000000000000000e93c8cd0d409341205a592f8c4ac1a5fe5585cfa000000000000000000000000a88530e2dd811363ca3ef479dbab3c0bf73d90b1",
        "_implementation": "0x09323D05868393c7EBa8190BAc173f843b82030a",
        "_proxy": "0xb15eea247eCE011C68a614e4a77AD648ff495bc1"
      }
    }
  ]
}
```
  • Loading branch information
tynes committed Sep 28, 2023
1 parent 199ef3b commit 5b37d24
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 48 deletions.
14 changes: 6 additions & 8 deletions op-chain-ops/cmd/op-upgrade/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,10 @@ func entrypoint(ctx *cli.Context) error {
batch := safe.Batch{}

for _, chainConfig := range targets {
name, err := toDeployConfigName(chainConfig)
if err != nil {
log.Warn("Skipping unsupported network", "name", chainConfig.Name)
continue
}

name, _ := toDeployConfigName(chainConfig)
config, err := genesis.NewDeployConfigWithNetwork(name, deployConfig)
if err != nil {
return err
log.Warn("Cannot find deploy config for network", "name", chainConfig.Name, "deploy-config-name", name, "path", deployConfig)
}

clients, err := clients.NewClients(ctx.String("l1-rpc-url"), chainConfig.PublicRPC)
Expand Down Expand Up @@ -168,7 +163,7 @@ func entrypoint(ctx *cli.Context) error {
return fmt.Errorf("error checking L1: %w", err)
}

if err := upgrades.L1(&batch, list, *addresses, config, chainConfig); err != nil {
if err := upgrades.L1(&batch, list, *addresses, config, chainConfig, clients.L1Client); err != nil {
return err
}
}
Expand Down Expand Up @@ -207,6 +202,9 @@ func toDeployConfigName(cfg *superchain.ChainConfig) (string, error) {
if cfg.Name == "OP-Mainnet" {
return "mainnet", nil
}
if cfg.Name == "Zora Goerli" {
return "zora-goerli", nil
}
return "", fmt.Errorf("unsupported chain name %s", cfg.Name)
}

Expand Down
172 changes: 133 additions & 39 deletions op-chain-ops/upgrades/l1.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"math/big"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"

"github.com/ethereum-optimism/optimism/op-bindings/bindings"
Expand All @@ -14,33 +15,33 @@ import (
)

// L1 will add calls for upgrading each of the L1 contracts.
func L1(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
if err := L1CrossDomainMessenger(batch, implementations, list, config, chainConfig); err != nil {
return err
func L1(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
if err := L1CrossDomainMessenger(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading L1CrossDomainMessenger: %w", err)
}
if err := L1ERC721Bridge(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := L1ERC721Bridge(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading L1ERC721Bridge: %w", err)
}
if err := L1StandardBridge(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := L1StandardBridge(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading L1StandardBridge: %w", err)
}
if err := L2OutputOracle(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := L2OutputOracle(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading L2OutputOracle: %w", err)
}
if err := OptimismMintableERC20Factory(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := OptimismMintableERC20Factory(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading OptimismMintableERC20Factory: %w", err)
}
if err := OptimismPortal(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := OptimismPortal(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading OptimismPortal: %w", err)
}
if err := SystemConfig(batch, implementations, list, config, chainConfig); err != nil {
return err
if err := SystemConfig(batch, implementations, list, config, chainConfig, backend); err != nil {
return fmt.Errorf("upgrading SystemConfig: %w", err)
}
return nil
}

// L1CrossDomainMessenger will add a call to the batch that upgrades the L1CrossDomainMessenger.
func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand Down Expand Up @@ -79,7 +80,7 @@ func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.Implem
}

// L1ERC721Bridge will add a call to the batch that upgrades the L1ERC721Bridge.
func L1ERC721Bridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func L1ERC721Bridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand Down Expand Up @@ -118,7 +119,7 @@ func L1ERC721Bridge(batch *safe.Batch, implementations superchain.Implementation
}

// L1StandardBridge will add a call to the batch that upgrades the L1StandardBridge.
func L1StandardBridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func L1StandardBridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand Down Expand Up @@ -157,7 +158,7 @@ func L1StandardBridge(batch *safe.Batch, implementations superchain.Implementati
}

// L2OutputOracle will add a call to the batch that upgrades the L2OutputOracle.
func L2OutputOracle(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func L2OutputOracle(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand All @@ -173,17 +174,47 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation
return fmt.Errorf("no initialize method")
}

l2OutputOracleStartingBlockNumber := new(big.Int).SetUint64(config.L2OutputOracleStartingBlockNumber)
if config.L2OutputOracleStartingTimestamp < 0 {
return fmt.Errorf("L2OutputOracleStartingBlockNumber must be concrete")
var l2OutputOracleStartingBlockNumber, l2OutputOracleStartingTimestamp *big.Int
var l2OutputOracleProposer, l2OutputOracleChallenger common.Address
if config != nil {
l2OutputOracleStartingBlockNumber = new(big.Int).SetUint64(config.L2OutputOracleStartingBlockNumber)
if config.L2OutputOracleStartingTimestamp < 0 {
return fmt.Errorf("L2OutputOracleStartingTimestamp must be concrete")
}
l2OutputOracleStartingTimestamp = new(big.Int).SetInt64(int64(config.L2OutputOracleStartingTimestamp))
l2OutputOracleProposer = config.L2OutputOracleProposer
l2OutputOracleChallenger = config.L2OutputOracleChallenger
} else {
l2OutputOracle, err := bindings.NewL2OutputOracleCaller(common.HexToAddress(list.L2OutputOracleProxy.String()), backend)
if err != nil {
return err
}
l2OutputOracleStartingBlockNumber, err = l2OutputOracle.StartingBlockNumber(&bind.CallOpts{})
if err != nil {
return err
}

l2OutputOracleStartingTimestamp, err = l2OutputOracle.StartingTimestamp(&bind.CallOpts{})
if err != nil {
return err
}

l2OutputOracleProposer, err = l2OutputOracle.PROPOSER(&bind.CallOpts{})
if err != nil {
return err
}

l2OutputOracleChallenger, err = l2OutputOracle.CHALLENGER(&bind.CallOpts{})
if err != nil {
return err
}
}
l2OutputOraclesStartingTimestamp := new(big.Int).SetInt64(int64(config.L2OutputOracleStartingTimestamp))

calldata, err := initialize.Inputs.PackValues([]any{
l2OutputOracleStartingBlockNumber,
l2OutputOraclesStartingTimestamp,
config.L2OutputOracleProposer,
config.L2OutputOracleChallenger,
l2OutputOracleStartingTimestamp,
l2OutputOracleProposer,
l2OutputOracleChallenger,
})
if err != nil {
return err
Expand All @@ -205,7 +236,7 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation
}

// OptimismMintableERC20Factory will add a call to the batch that upgrades the OptimismMintableERC20Factory.
func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand Down Expand Up @@ -244,7 +275,7 @@ func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain.
}

// OptimismPortal will add a call to the batch that upgrades the OptimismPortal.
func OptimismPortal(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func OptimismPortal(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand All @@ -260,9 +291,24 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation
return fmt.Errorf("no initialize method")
}

var portalGuardian common.Address
if config != nil {
portalGuardian = config.PortalGuardian
} else {
optimismPortal, err := bindings.NewOptimismPortalCaller(common.HexToAddress(list.OptimismPortalProxy.String()), backend)
if err != nil {
return err
}
guardian, err := optimismPortal.GUARDIAN(&bind.CallOpts{})
if err != nil {
return err
}
portalGuardian = guardian
}

calldata, err := initialize.Inputs.PackValues([]any{
common.HexToAddress(list.L2OutputOracleProxy.String()),
config.PortalGuardian,
portalGuardian,
common.HexToAddress(chainConfig.SystemConfigAddr.String()),
false,
})
Expand All @@ -286,7 +332,7 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation
}

// SystemConfig will add a call to the batch that upgrades the SystemConfig.
func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig) error {
func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) error {
proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil {
return err
Expand All @@ -302,11 +348,60 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi
return fmt.Errorf("no initialize method")
}

gasPriceOracleOverhead := new(big.Int).SetUint64(config.GasPriceOracleOverhead)
gasPriceOracleScalar := new(big.Int).SetUint64(config.GasPriceOracleScalar)
batcherHash := common.BytesToHash(config.BatchSenderAddress.Bytes())
l2GenesisBlockGasLimit := uint64(config.L2GenesisBlockGasLimit)
startBlock := new(big.Int).SetUint64(config.SystemConfigStartBlock)
var gasPriceOracleOverhead, gasPriceOracleScalar, startBlock *big.Int
var batcherHash common.Hash
var batchInboxAddress, p2pSequencerAddress, finalSystemOwner common.Address
var l2GenesisBlockGasLimit uint64

if config != nil {
gasPriceOracleOverhead = new(big.Int).SetUint64(config.GasPriceOracleOverhead)
gasPriceOracleScalar = new(big.Int).SetUint64(config.GasPriceOracleScalar)
batcherHash = common.BytesToHash(config.BatchSenderAddress.Bytes())
l2GenesisBlockGasLimit = uint64(config.L2GenesisBlockGasLimit)
startBlock = new(big.Int).SetUint64(config.SystemConfigStartBlock)
batchInboxAddress = config.BatchInboxAddress
p2pSequencerAddress = config.P2PSequencerAddress
finalSystemOwner = config.FinalSystemOwner
} else {
systemConfig, err := bindings.NewSystemConfigCaller(common.HexToAddress(chainConfig.SystemConfigAddr.String()), backend)
if err != nil {
return err
}
gasPriceOracleOverhead, err = systemConfig.Overhead(&bind.CallOpts{})
if err != nil {
return err
}
gasPriceOracleScalar, err = systemConfig.Scalar(&bind.CallOpts{})
if err != nil {
return err
}
batcherHash, err = systemConfig.BatcherHash(&bind.CallOpts{})
if err != nil {
return err
}
l2GenesisBlockGasLimit, err = systemConfig.GasLimit(&bind.CallOpts{})
if err != nil {
return err
}
// StartBlock is a new property, we want to explicitly set it to 0 if there is an error fetching it
startBlock, err = systemConfig.StartBlock(&bind.CallOpts{})
if err != nil {
startBlock = big.NewInt(0)
}
// BatchInboxAddress is a new property, we want to set it to the offchain value if there is an error fetching it
batchInboxAddress, err = systemConfig.BatchInbox(&bind.CallOpts{})
if err != nil {
batchInboxAddress = common.HexToAddress(chainConfig.BatchInboxAddr.String())
}
p2pSequencerAddress, err = systemConfig.UnsafeBlockSigner(&bind.CallOpts{})
if err != nil {
return err
}
finalSystemOwner, err = systemConfig.Owner(&bind.CallOpts{})
if err != nil {
return err
}
}

addresses := bindings.SystemConfigAddresses{
L1CrossDomainMessenger: common.HexToAddress(list.L1CrossDomainMessengerProxy.String()),
Expand All @@ -317,17 +412,16 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi
OptimismMintableERC20Factory: common.HexToAddress(list.OptimismMintableERC20FactoryProxy.String()),
}

// This is more complex
calldata, err := initialize.Inputs.PackValues([]any{
config.FinalSystemOwner,
finalSystemOwner,
gasPriceOracleOverhead,
gasPriceOracleScalar,
batcherHash,
l2GenesisBlockGasLimit,
config.P2PSequencerAddress,
p2pSequencerAddress,
genesis.DefaultResourceConfig,
startBlock,
config.BatchInboxAddress,
batchInboxAddress,
addresses,
})
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion packages/contracts-bedrock/deploy-config/zora-goerli.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"l2GenesisRegolithTimeOffset": "0x0",
"portalGuardian": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7",
"l2OutputOracleSubmissionInterval": 180,
"l2OutputOracleStartingTimestamp": -1,
"l2OutputOracleStartingTimestamp": 0,
"l2OutputOracleProposer": "0xa98B585654fC03E2fEa3FAB56E1C851E4f5c2B54",
"l2GenesisBlockGasLimit": "0x1c9c380",
"fundDevAccounts": false,
Expand Down

0 comments on commit 5b37d24

Please sign in to comment.