diff --git a/packages/daimo-contract/src/chain.ts b/packages/daimo-contract/src/chain.ts index 2f3b2af56..522d81704 100644 --- a/packages/daimo-contract/src/chain.ts +++ b/packages/daimo-contract/src/chain.ts @@ -8,28 +8,40 @@ import { DaimoChain } from "./chainConfig"; import { ForeignToken, + arbitrumETH, + arbitrumSepoliaETH, arbitrumSepoliaUSDC, arbitrumSepoliaWETH, arbitrumUSDC, arbitrumWETH, + avalancheAVAX, + avalancheFujiAVAX, avalancheFujiUSDC, avalancheFujiWAVAX, avalancheUSDC, avalancheWAVAX, + baseETH, + baseSepoliaETH, baseSepoliaUSDC, baseSepoliaWETH, baseUSDC, baseWETH, + ethereumETH, + ethereumSepoliaETH, ethereumSepoliaUSDC, ethereumSepoliaWETH, ethereumUSDC, ethereumWETH, + optimismETH, + optimismSepoliaETH, optimismSepoliaUSDC, optimismSepoliaWETH, optimismUSDC, optimismWETH, + polygonAmoyMATIC, polygonAmoyUSDC, polygonAmoyWMATIC, + polygonMATIC, polygonUSDC, polygonWMATIC, } from "./foreignToken"; @@ -41,6 +53,7 @@ export type DAv2Chain = { shortName: string; cctpDomain: number; bridgeCoin: ForeignToken; + nativeToken: ForeignToken; wrappedNativeToken: ForeignToken; isTestnet?: boolean; }; @@ -51,6 +64,7 @@ export const ethereum: DAv2Chain = { shortName: "eth", cctpDomain: 0, bridgeCoin: ethereumUSDC, + nativeToken: ethereumETH, wrappedNativeToken: ethereumWETH, }; @@ -60,6 +74,7 @@ export const ethereumSepolia: DAv2Chain = { shortName: "eth", cctpDomain: 0, bridgeCoin: ethereumSepoliaUSDC, + nativeToken: ethereumSepoliaETH, wrappedNativeToken: ethereumSepoliaWETH, isTestnet: true, }; @@ -70,6 +85,7 @@ export const base: DAv2Chain = { shortName: "base", cctpDomain: 6, bridgeCoin: baseUSDC, + nativeToken: baseETH, wrappedNativeToken: baseWETH, }; @@ -79,6 +95,7 @@ export const baseSepolia: DAv2Chain = { shortName: "base", cctpDomain: 6, bridgeCoin: baseSepoliaUSDC, + nativeToken: baseSepoliaETH, wrappedNativeToken: baseSepoliaWETH, isTestnet: true, }; @@ -89,6 +106,7 @@ export const arbitrum: DAv2Chain = { shortName: "arb", cctpDomain: 3, bridgeCoin: arbitrumUSDC, + nativeToken: arbitrumETH, wrappedNativeToken: arbitrumWETH, }; @@ -98,6 +116,7 @@ export const arbitrumSepolia: DAv2Chain = { shortName: "arb", cctpDomain: 3, bridgeCoin: arbitrumSepoliaUSDC, + nativeToken: arbitrumSepoliaETH, wrappedNativeToken: arbitrumSepoliaWETH, isTestnet: true, }; @@ -108,6 +127,7 @@ export const optimism: DAv2Chain = { shortName: "op", cctpDomain: 2, bridgeCoin: optimismUSDC, + nativeToken: optimismETH, wrappedNativeToken: optimismWETH, }; @@ -117,6 +137,7 @@ export const optimismSepolia: DAv2Chain = { shortName: "op", cctpDomain: 2, bridgeCoin: optimismSepoliaUSDC, + nativeToken: optimismSepoliaETH, wrappedNativeToken: optimismSepoliaWETH, isTestnet: true, }; @@ -127,6 +148,7 @@ export const polygon: DAv2Chain = { shortName: "poly", cctpDomain: 7, bridgeCoin: polygonUSDC, + nativeToken: polygonMATIC, wrappedNativeToken: polygonWMATIC, }; @@ -136,6 +158,7 @@ export const polygonAmoy: DAv2Chain = { shortName: "poly", cctpDomain: 7, bridgeCoin: polygonAmoyUSDC, + nativeToken: polygonAmoyMATIC, wrappedNativeToken: polygonAmoyWMATIC, isTestnet: true, }; @@ -146,6 +169,7 @@ export const avalanche: DAv2Chain = { shortName: "avax", cctpDomain: 1, bridgeCoin: avalancheUSDC, + nativeToken: avalancheAVAX, wrappedNativeToken: avalancheWAVAX, }; @@ -155,6 +179,7 @@ export const avalancheFuji: DAv2Chain = { shortName: "avax", cctpDomain: 1, bridgeCoin: avalancheFujiUSDC, + nativeToken: avalancheFujiAVAX, wrappedNativeToken: avalancheFujiWAVAX, isTestnet: true, }; diff --git a/packages/daimo-contract/src/foreignToken.ts b/packages/daimo-contract/src/foreignToken.ts index b2b4b051b..58a5672ed 100644 --- a/packages/daimo-contract/src/foreignToken.ts +++ b/packages/daimo-contract/src/foreignToken.ts @@ -45,6 +45,7 @@ export const ethereumSepoliaWETH: ForeignToken = { chainId: 11155111, token: getAddress("0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -53,6 +54,7 @@ export const ethereumSepoliaUSDC: ForeignToken = { chainId: 11155111, token: getAddress("0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -73,6 +75,7 @@ export const ethereumWETH: ForeignToken = { chainId: 1, token: getAddress("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -81,6 +84,7 @@ export const ethereumUSDC: ForeignToken = { chainId: 1, token: getAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -106,6 +110,7 @@ export const baseSepoliaWETH: ForeignToken = { chainId: 84532, token: getAddress("0x4200000000000000000000000000000000000006"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -114,6 +119,7 @@ export const baseSepoliaUSDC: ForeignToken = { chainId: 84532, token: getAddress("0x036CbD53842c5426634e7929541eC2318f3dCF7e"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -130,6 +136,7 @@ export const baseWETH: ForeignToken = { chainId: 8453, token: getAddress("0x4200000000000000000000000000000000000006"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -137,6 +144,7 @@ export const baseWETH: ForeignToken = { export const baseUSDC: ForeignToken = { chainId: 8453, token: getAddress("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"), + name: "USD Coin", symbol: "USDC", decimals: 6, logoURI: TokenLogo.USDC, @@ -154,6 +162,7 @@ export const baseEURC: ForeignToken = { export const baseUSDbC: ForeignToken = { chainId: 8453, token: getAddress("0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA"), + name: "Bridged USD Coin", // USDbC has a bad name & logo on CoinGecko symbol: "USDbC", decimals: 6, logoURI: `https://daimo.com/assets/foreign-coin-logos/USDbC.png`, @@ -162,6 +171,7 @@ export const baseUSDbC: ForeignToken = { export const baseDAI: ForeignToken = { chainId: 8453, token: getAddress("0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb"), + name: "Dai Stablecoin", symbol: "DAI", decimals: 18, logoURI: TokenLogo.DAI, @@ -170,6 +180,7 @@ export const baseDAI: ForeignToken = { export const baseUSDT: ForeignToken = { chainId: 8453, token: getAddress("0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2"), + name: "Tether USD", symbol: "USDT", decimals: 6, logoURI: TokenLogo.USDT, @@ -195,6 +206,7 @@ export const arbitrumWETH: ForeignToken = { chainId: 42161, token: getAddress("0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -202,6 +214,7 @@ export const arbitrumWETH: ForeignToken = { export const arbitrumUSDC: ForeignToken = { chainId: 42161, token: getAddress("0xaf88d065e77c8cC2239327C5EDb3A432268e5831"), + name: "USD Coin", symbol: "USDC", decimals: 6, logoURI: TokenLogo.USDC, @@ -219,6 +232,7 @@ export const arbitrumSepoliaWETH: ForeignToken = { chainId: 421614, token: getAddress("0x980B62Da83eFf3D4576C647993b0c1D7faf17c73"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -227,6 +241,7 @@ export const arbitrumSepoliaUSDC: ForeignToken = { chainId: 421614, token: getAddress("0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -247,6 +262,7 @@ export const optimismWETH: ForeignToken = { chainId: 10, token: getAddress("0x4200000000000000000000000000000000000006"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -255,6 +271,7 @@ export const optimismUSDC: ForeignToken = { chainId: 10, token: getAddress("0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -271,6 +288,7 @@ export const optimismSepoliaWETH: ForeignToken = { chainId: 11155420, token: getAddress("0x4200000000000000000000000000000000000006"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -279,6 +297,7 @@ export const optimismSepoliaUSDC: ForeignToken = { chainId: 11155420, token: getAddress("0x5fd84259d66Cd46123540766Be93DFE6D43130D7"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -293,12 +312,13 @@ const optimismSepoliaTokens = [ // Polygon Mainnet // -export const polygonMATIC = nativeToken(137, "MATIC", TokenLogo.MATIC); +export const polygonMATIC = nativeToken(137, "MATIC", "MATIC", TokenLogo.MATIC); export const polygonWMATIC: ForeignToken = { chainId: 137, token: getAddress("0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"), decimals: 18, + name: "Wrapped Matic", symbol: "WMATIC", logoURI: TokenLogo.MATIC, }; @@ -307,6 +327,7 @@ export const polygonWETH: ForeignToken = { chainId: 137, token: getAddress("0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"), decimals: 18, + name: "Wrapped Ether", symbol: "WETH", logoURI: TokenLogo.ETH, }; @@ -315,6 +336,7 @@ export const polygonUSDC: ForeignToken = { chainId: 137, token: getAddress("0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -325,12 +347,13 @@ const polygonTokens = [polygonMATIC, polygonWMATIC, polygonWETH, polygonUSDC]; // Polygon Amoy // -export const polygonAmoyMATIC = nativeToken(80002, "MATIC", TokenLogo.MATIC); +export const polygonAmoyMATIC = nativeToken(80002, "MATIC", "MATIC", TokenLogo.MATIC); export const polygonAmoyWMATIC: ForeignToken = { chainId: 80002, token: getAddress("0x360ad4f9a9A8EFe9A8DCB5f461c4Cc1047E1Dcf9"), decimals: 18, + name: "Wrapped Matic", symbol: "WMATIC", logoURI: TokenLogo.MATIC, }; @@ -339,6 +362,7 @@ export const polygonAmoyUSDC: ForeignToken = { chainId: 80002, token: getAddress("0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582"), decimals: 6, + name: "USD Coin", symbol: "USDC", logoURI: TokenLogo.USDC, }; @@ -353,6 +377,8 @@ const polygonAmoyTokens = [ // Avalanche C-chain Mainnet // +export const avalancheAVAX = nativeToken(43114, "AVAX", "AVAX", TokenLogo.AVAX); + export const avalancheUSDC: ForeignToken = { chainId: 43114, token: getAddress("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"), @@ -380,12 +406,14 @@ export const avalancheWAVAX: ForeignToken = { logoURI: TokenLogo.AVAX, }; -const avalancheTokens = [avalancheUSDC, avalancheWETH, avalancheWAVAX]; +const avalancheTokens = [avalancheAVAX, avalancheUSDC, avalancheWETH, avalancheWAVAX]; // // Avalanche Fuji // +export const avalancheFujiAVAX = nativeToken(43113, "AVAX", "AVAX", TokenLogo.AVAX); + export const avalancheFujiUSDC: ForeignToken = { chainId: 43113, token: getAddress("0x5425890298aed601595a70AB815c96711a31Bc65"), @@ -404,16 +432,17 @@ export const avalancheFujiWAVAX: ForeignToken = { logoURI: TokenLogo.AVAX, }; -const avalancheFujiTokens = [avalancheFujiUSDC, avalancheFujiWAVAX]; +const avalancheFujiTokens = [avalancheFujiAVAX, avalancheFujiUSDC, avalancheFujiWAVAX]; -function nativeETH(chainId: number) { - return nativeToken(chainId, "ETH", TokenLogo.ETH); +function nativeETH(chainId: number): ForeignToken { + return nativeToken(chainId, "Ether", "ETH", TokenLogo.ETH); } -function nativeToken(chainId: number, symbol: string, logoURI: string) { +function nativeToken(chainId: number, name: string, symbol: string, logoURI: string): ForeignToken { return { chainId, token: zeroAddress, + name, decimals: 18, symbol, logoURI, @@ -477,7 +506,7 @@ export function getTokensForChain(chainId: number): ForeignToken[] { /** Get a given token */ export function getTokenByAddress( chainId: number, - addr: Address + addr: Address, ): ForeignToken { const ret = getTokensForChain(chainId).find((t) => t.token === addr); if (ret == null) throw new Error(`Unknown token ${addr} on chain ${chainId}`);