/ src / ui-config / governanceConfig.ts
governanceConfig.ts
  1  import { ChainId } from '@aave/contract-helpers';
  2  import {
  3    AaveSafetyModule,
  4    AaveV3Ethereum,
  5    GovernanceV3Arbitrum,
  6    GovernanceV3Avalanche,
  7    GovernanceV3Base,
  8    GovernanceV3BNB,
  9    GovernanceV3Celo,
 10    GovernanceV3Ethereum,
 11    GovernanceV3Gnosis,
 12    GovernanceV3Linea,
 13    GovernanceV3Metis,
 14    GovernanceV3Optimism,
 15    GovernanceV3Polygon,
 16    GovernanceV3Scroll,
 17    GovernanceV3Sonic,
 18    GovernanceV3ZkSync,
 19  } from '@bgd-labs/aave-address-book';
 20  
 21  export const ipfsGateway = 'https://cloudflare-ipfs.com/ipfs';
 22  export const fallbackIpfsGateway = 'https://ipfs.io/ipfs';
 23  const subgraphApiKey = process.env.NEXT_PUBLIC_SUBGRAPH_API_KEY;
 24  
 25  export interface VotingMachineConfig {
 26    portalToMachineMap: { [votingPoralAddress: string]: string };
 27    votingPortalDataHelperAddress: string;
 28    votingMachineAddress: string;
 29    subgraphUrl: string;
 30  }
 31  
 32  export interface GovernanceV3Config {
 33    coreChainId: ChainId;
 34    votingChainIds: ChainId[];
 35    governanceCoreSubgraphUrl: string;
 36    votingChainConfig: { [chainId: number]: VotingMachineConfig };
 37    payloadsControllerDataHelpers: { [chainId: number]: string };
 38    addresses: {
 39      GOVERNANCE_CORE: string;
 40      GOVERNANCE_DATA_HELPER: string;
 41      WALLET_BALANCE_PROVIDER: string;
 42      GOVERNANCE_META_HELPER: string;
 43      TOKEN_POWER_HELPER: string;
 44    };
 45    votingAssets: {
 46      aaveTokenAddress: string;
 47      aAaveTokenAddress: string;
 48      stkAaveTokenAddress: string;
 49    };
 50  }
 51  
 52  const sepoliaVotingMachineConfig: VotingMachineConfig = {
 53    portalToMachineMap: {
 54      '0x1079bAa48E56065d43b4344866B187a485cb0A92': '0xA1995F1d5A8A247c064a76F336E1C2ecD24Ef0D9',
 55    },
 56    votingPortalDataHelperAddress: '0x133210F3fe2deEB34e65deB6861ee3dF87393977',
 57    votingMachineAddress: '0xA1995F1d5A8A247c064a76F336E1C2ecD24Ef0D9',
 58    subgraphUrl: '',
 59  };
 60  
 61  const fujiVotingMachineConfig: VotingMachineConfig = {
 62    portalToMachineMap: {
 63      '0x4f47EdF2577995aBd7B875Eed75b3F28a20E696F': '0x767AA57554690D23D1E0594E8746271C97e1A1e4',
 64    },
 65    votingPortalDataHelperAddress: '0x133210F3fe2deEB34e65deB6861ee3dF87393977',
 66    votingMachineAddress: '0x767AA57554690D23D1E0594E8746271C97e1A1e4',
 67    subgraphUrl: '',
 68  };
 69  
 70  type GovernanceChainConfig = {
 71    [chainId: number]: GovernanceV3Config;
 72  };
 73  
 74  export const governanceChainConfig: GovernanceChainConfig = {
 75    [ChainId.sepolia]: {
 76      coreChainId: ChainId.sepolia,
 77      votingChainIds: [ChainId.sepolia, ChainId.fuji],
 78      governanceCoreSubgraphUrl: '',
 79      votingChainConfig: {
 80        [ChainId.sepolia]: sepoliaVotingMachineConfig,
 81        [ChainId.fuji]: fujiVotingMachineConfig,
 82      },
 83      payloadsControllerDataHelpers: {
 84        [ChainId.sepolia]: '0x6B9AF21B95FE20b5a878b43670c23124841ec31A',
 85        [ChainId.fuji]: '0x6B9AF21B95FE20b5a878b43670c23124841ec31A',
 86      },
 87      votingAssets: {
 88        aaveTokenAddress: '0xdaEcee477B931b209e8123401EA37582ACB3811d',
 89        stkAaveTokenAddress: '0x354032B31339853A3D682613749F183328d07275',
 90        aAaveTokenAddress: '0x26aAB2aE39897338c2d91491C46c14a8c2a67919',
 91      },
 92      addresses: {
 93        GOVERNANCE_CORE: '0xc4ABF658C3Dda84225cF8A07d7D5Bb6Aa41d9E59',
 94        GOVERNANCE_DATA_HELPER: '0x863f9De2f82AB502612E8B7d4f4863c8535cb8cA',
 95        WALLET_BALANCE_PROVIDER: '0xCD4e0d6D2b1252E2A709B8aE97DBA31164C5a709',
 96        GOVERNANCE_META_HELPER: '0x8aFD68632A4B4d9fB3F2956Ca921Eb2d69146491',
 97        TOKEN_POWER_HELPER: '0x78b04AD18d76B6E2F41C84af4C4C5C5c61b60a10',
 98      },
 99    },
100    [ChainId.mainnet]: {
101      coreChainId: ChainId.mainnet,
102      votingChainIds: [ChainId.polygon, ChainId.avalanche],
103      governanceCoreSubgraphUrl: `https://gateway-arbitrum.network.thegraph.com/api/${subgraphApiKey}/subgraphs/id/A7QMszgomC9cnnfpAcqZVLr2DffvkGNfimD8iUSMiurK`,
104      votingChainConfig: {
105        [ChainId.mainnet]: {
106          portalToMachineMap: {
107            [GovernanceV3Ethereum.VOTING_PORTAL_ETH_ETH]: GovernanceV3Ethereum.VOTING_MACHINE,
108          },
109          votingPortalDataHelperAddress: GovernanceV3Ethereum.VM_DATA_HELPER,
110          votingMachineAddress: GovernanceV3Ethereum.VOTING_MACHINE,
111          subgraphUrl: `https://gateway-arbitrum.network.thegraph.com/api/${subgraphApiKey}/subgraphs/id/2QPwuCfFtQ8WSCZoN3i9SmdoabMzbq2pmg4kRbrhymBV`,
112        },
113        [ChainId.polygon]: {
114          portalToMachineMap: {
115            [GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL]: GovernanceV3Polygon.VOTING_MACHINE,
116          },
117          votingPortalDataHelperAddress: GovernanceV3Polygon.VM_DATA_HELPER,
118          votingMachineAddress: GovernanceV3Polygon.VOTING_MACHINE,
119          subgraphUrl: `https://gateway-arbitrum.network.thegraph.com/api/${subgraphApiKey}/subgraphs/id/72ysXwyqW9CvfqD8keWo2fEfdKZQRWGYdgC6cnvTSFKy`,
120        },
121        [ChainId.avalanche]: {
122          portalToMachineMap: {
123            [GovernanceV3Ethereum.VOTING_PORTAL_ETH_AVAX]: GovernanceV3Avalanche.VOTING_MACHINE,
124          },
125          votingPortalDataHelperAddress: GovernanceV3Avalanche.VM_DATA_HELPER,
126          votingMachineAddress: GovernanceV3Avalanche.VOTING_MACHINE,
127          subgraphUrl: `https://gateway-arbitrum.network.thegraph.com/api/${subgraphApiKey}/subgraphs/id/FngMWWGJV45McvV7GUBkrta9eoEi3sHZoH7MYnFQfZkr`,
128        },
129      },
130      payloadsControllerDataHelpers: {
131        [ChainId.mainnet]: GovernanceV3Ethereum.PC_DATA_HELPER,
132        [ChainId.polygon]: GovernanceV3Polygon.PC_DATA_HELPER,
133        [ChainId.avalanche]: GovernanceV3Avalanche.PC_DATA_HELPER,
134        [ChainId.optimism]: GovernanceV3Optimism.PC_DATA_HELPER,
135        [ChainId.xdai]: GovernanceV3Gnosis.PC_DATA_HELPER,
136        [ChainId.arbitrum_one]: GovernanceV3Arbitrum.PC_DATA_HELPER,
137        [ChainId.base]: GovernanceV3Base.PC_DATA_HELPER,
138        [ChainId.metis_andromeda]: GovernanceV3Metis.PC_DATA_HELPER,
139        [ChainId.bnb]: GovernanceV3BNB.PC_DATA_HELPER,
140        [ChainId.scroll]: GovernanceV3Scroll.PC_DATA_HELPER,
141        [ChainId.zksync]: GovernanceV3ZkSync.PC_DATA_HELPER,
142        [ChainId.linea]: GovernanceV3Linea.PC_DATA_HELPER,
143        [ChainId.sonic]: GovernanceV3Sonic.PC_DATA_HELPER,
144        [ChainId.celo]: GovernanceV3Celo.PC_DATA_HELPER,
145      },
146      votingAssets: {
147        aaveTokenAddress: AaveV3Ethereum.ASSETS.AAVE.UNDERLYING,
148        aAaveTokenAddress: AaveV3Ethereum.ASSETS.AAVE.A_TOKEN,
149        stkAaveTokenAddress: AaveSafetyModule.STK_AAVE,
150      },
151      addresses: {
152        GOVERNANCE_CORE: GovernanceV3Ethereum.GOVERNANCE,
153        GOVERNANCE_DATA_HELPER: GovernanceV3Ethereum.GOV_DATA_HELPER,
154        WALLET_BALANCE_PROVIDER: AaveV3Ethereum.WALLET_BALANCE_PROVIDER,
155        GOVERNANCE_META_HELPER: GovernanceV3Ethereum.META_DELEGATE_HELPER,
156        TOKEN_POWER_HELPER: '0xBb7baf0534423e3108E1D03c259104cDba2C1cB7',
157      },
158    },
159  };
160  
161  const coreNetwork = ChainId.mainnet;
162  export const governanceV3Config = governanceChainConfig[coreNetwork];