Commit 5b37d241 authored by Mark Tyneway's avatar Mark Tyneway

op-chain-ops: clean up `op-upgrade`

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"
      }
    }
  ]
}
```
parent 199ef3b9
...@@ -99,15 +99,10 @@ func entrypoint(ctx *cli.Context) error { ...@@ -99,15 +99,10 @@ func entrypoint(ctx *cli.Context) error {
batch := safe.Batch{} batch := safe.Batch{}
for _, chainConfig := range targets { for _, chainConfig := range targets {
name, err := toDeployConfigName(chainConfig) name, _ := toDeployConfigName(chainConfig)
if err != nil {
log.Warn("Skipping unsupported network", "name", chainConfig.Name)
continue
}
config, err := genesis.NewDeployConfigWithNetwork(name, deployConfig) config, err := genesis.NewDeployConfigWithNetwork(name, deployConfig)
if err != nil { 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) clients, err := clients.NewClients(ctx.String("l1-rpc-url"), chainConfig.PublicRPC)
...@@ -168,7 +163,7 @@ func entrypoint(ctx *cli.Context) error { ...@@ -168,7 +163,7 @@ func entrypoint(ctx *cli.Context) error {
return fmt.Errorf("error checking L1: %w", err) 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 return err
} }
} }
...@@ -207,6 +202,9 @@ func toDeployConfigName(cfg *superchain.ChainConfig) (string, error) { ...@@ -207,6 +202,9 @@ func toDeployConfigName(cfg *superchain.ChainConfig) (string, error) {
if cfg.Name == "OP-Mainnet" { if cfg.Name == "OP-Mainnet" {
return "mainnet", nil return "mainnet", nil
} }
if cfg.Name == "Zora Goerli" {
return "zora-goerli", nil
}
return "", fmt.Errorf("unsupported chain name %s", cfg.Name) return "", fmt.Errorf("unsupported chain name %s", cfg.Name)
} }
......
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"math/big" "math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-bindings/bindings"
...@@ -14,33 +15,33 @@ import ( ...@@ -14,33 +15,33 @@ import (
) )
// L1 will add calls for upgrading each of the L1 contracts. // 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 { 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); err != nil { if err := L1CrossDomainMessenger(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading L1CrossDomainMessenger: %w", err)
} }
if err := L1ERC721Bridge(batch, implementations, list, config, chainConfig); err != nil { if err := L1ERC721Bridge(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading L1ERC721Bridge: %w", err)
} }
if err := L1StandardBridge(batch, implementations, list, config, chainConfig); err != nil { if err := L1StandardBridge(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading L1StandardBridge: %w", err)
} }
if err := L2OutputOracle(batch, implementations, list, config, chainConfig); err != nil { if err := L2OutputOracle(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading L2OutputOracle: %w", err)
} }
if err := OptimismMintableERC20Factory(batch, implementations, list, config, chainConfig); err != nil { if err := OptimismMintableERC20Factory(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading OptimismMintableERC20Factory: %w", err)
} }
if err := OptimismPortal(batch, implementations, list, config, chainConfig); err != nil { if err := OptimismPortal(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading OptimismPortal: %w", err)
} }
if err := SystemConfig(batch, implementations, list, config, chainConfig); err != nil { if err := SystemConfig(batch, implementations, list, config, chainConfig, backend); err != nil {
return err return fmt.Errorf("upgrading SystemConfig: %w", err)
} }
return nil return nil
} }
// L1CrossDomainMessenger will add a call to the batch that upgrades the L1CrossDomainMessenger. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -79,7 +80,7 @@ func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.Implem ...@@ -79,7 +80,7 @@ func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.Implem
} }
// L1ERC721Bridge will add a call to the batch that upgrades the L1ERC721Bridge. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -118,7 +119,7 @@ func L1ERC721Bridge(batch *safe.Batch, implementations superchain.Implementation ...@@ -118,7 +119,7 @@ func L1ERC721Bridge(batch *safe.Batch, implementations superchain.Implementation
} }
// L1StandardBridge will add a call to the batch that upgrades the L1StandardBridge. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -157,7 +158,7 @@ func L1StandardBridge(batch *safe.Batch, implementations superchain.Implementati ...@@ -157,7 +158,7 @@ func L1StandardBridge(batch *safe.Batch, implementations superchain.Implementati
} }
// L2OutputOracle will add a call to the batch that upgrades the L2OutputOracle. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -173,17 +174,47 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation ...@@ -173,17 +174,47 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation
return fmt.Errorf("no initialize method") return fmt.Errorf("no initialize method")
} }
l2OutputOracleStartingBlockNumber := new(big.Int).SetUint64(config.L2OutputOracleStartingBlockNumber) var l2OutputOracleStartingBlockNumber, l2OutputOracleStartingTimestamp *big.Int
var l2OutputOracleProposer, l2OutputOracleChallenger common.Address
if config != nil {
l2OutputOracleStartingBlockNumber = new(big.Int).SetUint64(config.L2OutputOracleStartingBlockNumber)
if config.L2OutputOracleStartingTimestamp < 0 { if config.L2OutputOracleStartingTimestamp < 0 {
return fmt.Errorf("L2OutputOracleStartingBlockNumber must be concrete") 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{ calldata, err := initialize.Inputs.PackValues([]any{
l2OutputOracleStartingBlockNumber, l2OutputOracleStartingBlockNumber,
l2OutputOraclesStartingTimestamp, l2OutputOracleStartingTimestamp,
config.L2OutputOracleProposer, l2OutputOracleProposer,
config.L2OutputOracleChallenger, l2OutputOracleChallenger,
}) })
if err != nil { if err != nil {
return err return err
...@@ -205,7 +236,7 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation ...@@ -205,7 +236,7 @@ func L2OutputOracle(batch *safe.Batch, implementations superchain.Implementation
} }
// OptimismMintableERC20Factory will add a call to the batch that upgrades the OptimismMintableERC20Factory. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -244,7 +275,7 @@ func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain. ...@@ -244,7 +275,7 @@ func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain.
} }
// OptimismPortal will add a call to the batch that upgrades the OptimismPortal. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -260,9 +291,24 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation ...@@ -260,9 +291,24 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation
return fmt.Errorf("no initialize method") 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{ calldata, err := initialize.Inputs.PackValues([]any{
common.HexToAddress(list.L2OutputOracleProxy.String()), common.HexToAddress(list.L2OutputOracleProxy.String()),
config.PortalGuardian, portalGuardian,
common.HexToAddress(chainConfig.SystemConfigAddr.String()), common.HexToAddress(chainConfig.SystemConfigAddr.String()),
false, false,
}) })
...@@ -286,7 +332,7 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation ...@@ -286,7 +332,7 @@ func OptimismPortal(batch *safe.Batch, implementations superchain.Implementation
} }
// SystemConfig will add a call to the batch that upgrades the SystemConfig. // 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() proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi()
if err != nil { if err != nil {
return err return err
...@@ -302,11 +348,60 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi ...@@ -302,11 +348,60 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi
return fmt.Errorf("no initialize method") return fmt.Errorf("no initialize method")
} }
gasPriceOracleOverhead := new(big.Int).SetUint64(config.GasPriceOracleOverhead) var gasPriceOracleOverhead, gasPriceOracleScalar, startBlock *big.Int
gasPriceOracleScalar := new(big.Int).SetUint64(config.GasPriceOracleScalar) var batcherHash common.Hash
batcherHash := common.BytesToHash(config.BatchSenderAddress.Bytes()) var batchInboxAddress, p2pSequencerAddress, finalSystemOwner common.Address
l2GenesisBlockGasLimit := uint64(config.L2GenesisBlockGasLimit) var l2GenesisBlockGasLimit uint64
startBlock := new(big.Int).SetUint64(config.SystemConfigStartBlock)
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{ addresses := bindings.SystemConfigAddresses{
L1CrossDomainMessenger: common.HexToAddress(list.L1CrossDomainMessengerProxy.String()), L1CrossDomainMessenger: common.HexToAddress(list.L1CrossDomainMessengerProxy.String()),
...@@ -317,17 +412,16 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi ...@@ -317,17 +412,16 @@ func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationLi
OptimismMintableERC20Factory: common.HexToAddress(list.OptimismMintableERC20FactoryProxy.String()), OptimismMintableERC20Factory: common.HexToAddress(list.OptimismMintableERC20FactoryProxy.String()),
} }
// This is more complex
calldata, err := initialize.Inputs.PackValues([]any{ calldata, err := initialize.Inputs.PackValues([]any{
config.FinalSystemOwner, finalSystemOwner,
gasPriceOracleOverhead, gasPriceOracleOverhead,
gasPriceOracleScalar, gasPriceOracleScalar,
batcherHash, batcherHash,
l2GenesisBlockGasLimit, l2GenesisBlockGasLimit,
config.P2PSequencerAddress, p2pSequencerAddress,
genesis.DefaultResourceConfig, genesis.DefaultResourceConfig,
startBlock, startBlock,
config.BatchInboxAddress, batchInboxAddress,
addresses, addresses,
}) })
if err != nil { if err != nil {
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"l2GenesisRegolithTimeOffset": "0x0", "l2GenesisRegolithTimeOffset": "0x0",
"portalGuardian": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7", "portalGuardian": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7",
"l2OutputOracleSubmissionInterval": 180, "l2OutputOracleSubmissionInterval": 180,
"l2OutputOracleStartingTimestamp": -1, "l2OutputOracleStartingTimestamp": 0,
"l2OutputOracleProposer": "0xa98B585654fC03E2fEa3FAB56E1C851E4f5c2B54", "l2OutputOracleProposer": "0xa98B585654fC03E2fEa3FAB56E1C851E4f5c2B54",
"l2GenesisBlockGasLimit": "0x1c9c380", "l2GenesisBlockGasLimit": "0x1c9c380",
"fundDevAccounts": false, "fundDevAccounts": false,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment