message: fix(contracts): remove no-op address setting from AddressSetter
diff: /* Imports: External */
  import { DeployFunction } from 'hardhat-deploy/dist/types'
  +import { hexStringEquals } from '@eth-optimism/core-utils'
  /* Imports: Internal */
  import {
  @@ -13,8 +14,7 @@ const deployFn: DeployFunction = async (hre) => {
  // ToDo: Clean up the method of mapping names to addresses esp.
  // There's probably a more functional way to generate an object or something.
  - // ToDo: in the case of an upgrade, only add names of contracts that are new deployed.
  - const names = [
  + const allContractNames = [
  'ChainStorageContainer-CTC-batches',
  'ChainStorageContainer-SCC-batches',
  'CanonicalTransactionChain',
  @@ -25,28 +25,48 @@ const deployFn: DeployFunction = async (hre) => {
  'Proxy__OVM_L1StandardBridge',
  ]
  - const addresses = await Promise.all(
  - names.map(async (n) => {
  - return (await getLiveContract(hre, n)).address
  + let namesAndAddresses: {
  + name: string
  + address: string
  + }[] = await Promise.all(
  + allContractNames.map(async (name) => {
  + return {
  + name,
  + address: (await getLiveContract(hre, name)).address,
  + }
  })
  )
  - // Add non-deployed addresses to the Address Setter argument arrays
  + // Add non-deployed addresses to the Address Setter arguments.
  + namesAndAddresses = [
  + ...namesAndAddresses,
  // L2CrossDomainMessenger is the address of the predeploy on L2. We can refactor off-chain
  // services such that we can remove the need to set this address, but for now it's easier
  // to simply keep setting the address.
  - names.push('L2CrossDomainMessenger')
  - addresses.push(predeploys.L2CrossDomainMessenger)
  -
  + {
  + name: 'L2CrossDomainMessenger',
  + address: predeploys.L2CrossDomainMessenger,
  + },
  // OVM_Sequencer is the address allowed to submit "Sequencer" blocks to the
  // CanonicalTransactionChain.
  - names.push('OVM_Sequencer')
  - addresses.push((hre as any).deployConfig.ovmSequencerAddress)
  -
  + {
  + name: 'OVM_Sequencer',
  + address: (hre as any).deployConfig.ovmSequencerAddress,
  + },
  // OVM_Proposer is the address allowed to submit state roots (transaction results) to the
  // StateCommitmentChain.
  - names.push('OVM_Proposer')
  - addresses.push((hre as any).deployConfig.ovmProposerAddress)
  + {
  + name: 'OVM_Proposer',
  + address: (hre as any).deployConfig.ovmProposerAddress,
  + },
  + ]
  +
  + // Filter out all addresses that will not change, so that the log statement is maximally
  + // verifiable and readable.
  + namesAndAddresses = namesAndAddresses.filter(async ({ name, address }) => {
  + const existingAddress = await Lib_AddressManager.getAddress(name)
  + return !hexStringEquals(existingAddress, address)
  + })
  await deployAndPostDeploy({
  hre,
  @@ -55,8 +75,12 @@ const deployFn: DeployFunction = async (hre) => {
  args: [
  Lib_AddressManager.address,
  (hre as any).deployConfig.ovmAddressManagerOwner,
  - names,
  - addresses,
  + namesAndAddresses.map((pair) => {
  + return pair.name
  + }),
  + namesAndAddresses.map((pair) => {
  + return pair.address
  + }),
  ],
  })
  }
  