package hop import ( "errors" "github.com/ethereum/go-ethereum/common" walletCommon "github.com/status-im/status-go/services/wallet/common" ) var errorNotAvailableOnChainID = errors.New("not available for chainID") // List taken from Hop: // https://github.com/hop-protocol/hop/blob/ef1ca4f8fac002c81fc0dc37ba021125947c6bc2/packages/sdk/src/addresses/mainnet.ts // https://github.com/hop-protocol/hop/blob/ef1ca4f8fac002c81fc0dc37ba021125947c6bc2/packages/sdk/src/addresses/sepolia.ts const ( L1CanonicalToken = "l1CanonicalToken" L1Bridge = "l1Bridge" L1CanonicalBridge = "l1CanonicalBridge" L1MessengerWrapper = "l1MessengerWrapper" CctpL1Bridge = "cctpL1Bridge" CctpMessageTransmitter = "cctpMessageTransmitter" L2CanonicalToken = "l2CanonicalToken" L2Bridge = "l2Bridge" L2CanonicalBridge = "l2CanonicalBridge" L2HopBridgeToken = "l2HopBridgeToken" L2AmmWrapper = "l2AmmWrapper" L2SaddleSwap = "l2SaddleSwap" L2SaddleLpToken = "l2SaddleLpToken" CctpL2Bridge = "cctpL2Bridge" ) var hopBridgeContractAddresses = map[string]map[uint64]map[string]common.Address{ "USDC": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"), CctpL1Bridge: common.HexToAddress("0x7e77461CA2a9d82d26FD5e0Da2243BF72eA45747"), CctpMessageTransmitter: common.HexToAddress("0x0a992d191deec32afe36203ad87d7d289a738f81"), }, walletCommon.OptimismMainnet: { L2CanonicalToken: common.HexToAddress("0x0b2c639c533813f4aa9d7837caf62653d097ff85"), CctpL2Bridge: common.HexToAddress("0x469147af8Bde580232BE9DC84Bb4EC84d348De24"), CctpMessageTransmitter: common.HexToAddress("0x4d41f22c5a0e5c74090899e5a8fb597a8842b3e8"), }, walletCommon.ArbitrumMainnet: { L2CanonicalToken: common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"), CctpL2Bridge: common.HexToAddress("0x6504BFcaB789c35325cA4329f1f41FaC340bf982"), CctpMessageTransmitter: common.HexToAddress("0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca"), }, walletCommon.EthereumSepolia: { L1CanonicalToken: common.HexToAddress("0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"), CctpL1Bridge: common.HexToAddress("0x05fda2db623fa6a89a2db33550848ab2006a4427"), }, walletCommon.OptimismSepolia: { L2CanonicalToken: common.HexToAddress("0x5fd84259d66Cd46123540766Be93DFE6D43130D7"), CctpL2Bridge: common.HexToAddress("0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5"), }, walletCommon.ArbitrumSepolia: { L2CanonicalToken: common.HexToAddress("0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d"), CctpL2Bridge: common.HexToAddress("0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5"), }, }, "USDC.e": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"), L1Bridge: common.HexToAddress("0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a"), CctpL1Bridge: common.HexToAddress("0x7e77461CA2a9d82d26FD5e0Da2243BF72eA45747"), CctpMessageTransmitter: common.HexToAddress("0x0a992d191deec32afe36203ad87d7d289a738f81"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x6587a6164B091a058aCba2e91f971454Ec172940"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x7F5c764cBc14f9669B88837ca1490cCa17c31607"), L2Bridge: common.HexToAddress("0xa81D244A1814468C734E5b4101F7b9c0c577a8fC"), CctpL2Bridge: common.HexToAddress("0x469147af8Bde580232BE9DC84Bb4EC84d348De24"), CctpMessageTransmitter: common.HexToAddress("0x4d41f22c5a0e5c74090899e5a8fb597a8842b3e8"), L2HopBridgeToken: common.HexToAddress("0x25D8039bB044dC227f741a9e381CA4cEAE2E6aE8"), L2AmmWrapper: common.HexToAddress("0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796"), L2SaddleSwap: common.HexToAddress("0x3c0FFAca566fCcfD9Cc95139FEF6CBA143795963"), L2SaddleLpToken: common.HexToAddress("0x2e17b8193566345a2Dd467183526dEdc42d2d5A8"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x39Bf4A32E689B6a79360854b7c901e991085D6a3"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"), L2Bridge: common.HexToAddress("0x0e0E3d2C5c292161999474247956EF542caBF8dd"), CctpL2Bridge: common.HexToAddress("0x6504BFcaB789c35325cA4329f1f41FaC340bf982"), CctpMessageTransmitter: common.HexToAddress("0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca"), L2HopBridgeToken: common.HexToAddress("0x0ce6c85cF43553DE10FC56cecA0aef6Ff0DD444d"), L2AmmWrapper: common.HexToAddress("0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52"), L2SaddleSwap: common.HexToAddress("0x10541b07d8Ad2647Dc6cD67abd4c03575dade261"), L2SaddleLpToken: common.HexToAddress("0xB67c014FA700E69681a673876eb8BAFAA36BFf71"), }, walletCommon.EthereumSepolia: { L1CanonicalToken: common.HexToAddress("0x95B01328BA6f4de261C4907fB35eE3c4968e9CEF"), CctpL1Bridge: common.HexToAddress("0x98bc5b835686e1a00e6c2168af162905899e93d6"), }, walletCommon.OptimismSepolia: { L2CanonicalToken: common.HexToAddress("0xB15312eA17d95375E64317C363A0e6304330D82e"), }, }, "USDT": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7"), L1Bridge: common.HexToAddress("0x3E4a3a4796d16c0Cd582C382691998f7c06420B6"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x9fc22E269c3752620EB281ce470855886b982501"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"), L2Bridge: common.HexToAddress("0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61"), L2HopBridgeToken: common.HexToAddress("0x2057C8ECB70Afd7Bee667d76B4CD373A325b1a20"), L2AmmWrapper: common.HexToAddress("0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F"), L2SaddleSwap: common.HexToAddress("0xeC4B41Af04cF917b54AEb6Df58c0f8D78895b5Ef"), L2SaddleLpToken: common.HexToAddress("0xF753A50fc755c6622BBCAa0f59F0522f264F006e"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x967F8E2B66D624Ad544CB59a230b867Ac3dC60dc"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"), L2Bridge: common.HexToAddress("0x72209Fe68386b37A40d6bCA04f78356fd342491f"), L2HopBridgeToken: common.HexToAddress("0x12e59C59D282D2C00f3166915BED6DC2F5e2B5C7"), L2AmmWrapper: common.HexToAddress("0xCB0a4177E0A60247C0ad18Be87f8eDfF6DD30283"), L2SaddleSwap: common.HexToAddress("0x18f7402B673Ba6Fb5EA4B95768aABb8aaD7ef18a"), L2SaddleLpToken: common.HexToAddress("0xCe3B19D820CB8B9ae370E423B0a329c4314335fE"), }, }, "MATIC": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0"), L1Bridge: common.HexToAddress("0x22B1Cbb8D98a01a3B71D034BB899775A76Eb1cc2"), }, }, "DAI": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0x6B175474E89094C44Da98b954EedeAC495271d0F"), L1Bridge: common.HexToAddress("0x3d4Cc8A61c7528Fd86C55cfe061a78dCBA48EDd1"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x115F423b958A2847af0F5bF314DB0f27c644c308"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"), L2Bridge: common.HexToAddress("0x7191061D5d4C60f598214cC6913502184BAddf18"), L2HopBridgeToken: common.HexToAddress("0x56900d66D74Cb14E3c86895789901C9135c95b16"), L2AmmWrapper: common.HexToAddress("0xb3C68a491608952Cb1257FC9909a537a0173b63B"), L2SaddleSwap: common.HexToAddress("0xF181eD90D6CfaC84B8073FdEA6D34Aa744B41810"), L2SaddleLpToken: common.HexToAddress("0x22D63A26c730d49e5Eab461E4f5De1D8BdF89C92"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x2d6fd82C7f531328BCaCA96EF985325C0894dB62"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"), L2Bridge: common.HexToAddress("0x7aC115536FE3A185100B2c4DE4cb328bf3A58Ba6"), L2HopBridgeToken: common.HexToAddress("0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61"), L2AmmWrapper: common.HexToAddress("0xe7F40BF16AB09f4a6906Ac2CAA4094aD2dA48Cc2"), L2SaddleSwap: common.HexToAddress("0xa5A33aB9063395A90CCbEa2D86a62EcCf27B5742"), L2SaddleLpToken: common.HexToAddress("0x68f5d998F00bB2460511021741D098c05721d8fF"), }, }, "ETH": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1Bridge: common.HexToAddress("0xb8901acB165ed027E32754E0FFe830802919727f"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0xa45DF1A388049fb8d76E72D350d24E2C3F7aEBd1"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x4200000000000000000000000000000000000006"), L2Bridge: common.HexToAddress("0x83f6244Bd87662118d96D9a6D44f09dffF14b30E"), L2HopBridgeToken: common.HexToAddress("0xE38faf9040c7F09958c638bBDB977083722c5156"), L2AmmWrapper: common.HexToAddress("0x86cA30bEF97fB651b8d866D45503684b90cb3312"), L2SaddleSwap: common.HexToAddress("0xaa30D6bba6285d0585722e2440Ff89E23EF68864"), L2SaddleLpToken: common.HexToAddress("0x5C2048094bAaDe483D0b1DA85c3Da6200A88a849"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0xDD378a11475D588908001E0E99E4fD89ABda5434"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"), L2Bridge: common.HexToAddress("0x3749C4f034022c39ecafFaBA182555d4508caCCC"), L2HopBridgeToken: common.HexToAddress("0xDa7c0de432a9346bB6e96aC74e3B61A36d8a77eB"), L2AmmWrapper: common.HexToAddress("0x33ceb27b39d2Bb7D2e61F7564d3Df29344020417"), L2SaddleSwap: common.HexToAddress("0x652d27c0F72771Ce5C76fd400edD61B406Ac6D97"), L2SaddleLpToken: common.HexToAddress("0x59745774Ed5EfF903e615F5A2282Cae03484985a"), }, }, "HOP": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"), L1Bridge: common.HexToAddress("0x914f986a44AcB623A277d6Bd17368171FCbe4273"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x9D3A7fB18CA7F1237F977Dc5572883f8b24F5638"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"), L2Bridge: common.HexToAddress("0x03D7f750777eC48d39D080b020D83Eb2CB4e3547"), L2HopBridgeToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"), L2AmmWrapper: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2SaddleSwap: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2SaddleLpToken: common.HexToAddress("0x0000000000000000000000000000000000000000"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x41BF5Fd5D1C85f00fd1F23C77740F1A7eBa6A35c"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"), L2Bridge: common.HexToAddress("0x25FB92E505F752F730cAD0Bd4fa17ecE4A384266"), L2HopBridgeToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"), L2AmmWrapper: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2SaddleSwap: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2SaddleLpToken: common.HexToAddress("0x0000000000000000000000000000000000000000"), }, }, "SNX": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f"), L1Bridge: common.HexToAddress("0x893246FACF345c99e4235E5A7bbEE7404c988b96"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0xf0727B1eB1A4c9319A5c34A68bcD5E6530850D47"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4"), L2Bridge: common.HexToAddress("0x16284c7323c35F4960540583998C98B1CfC581a7"), L2HopBridgeToken: common.HexToAddress("0x13B7F51BD865410c3AcC4d56083C5B56aB38D203"), L2AmmWrapper: common.HexToAddress("0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec"), L2SaddleSwap: common.HexToAddress("0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73"), L2SaddleLpToken: common.HexToAddress("0xe63337211DdE2569C348D9B3A0acb5637CFa8aB3"), }, }, "sUSD": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0x57Ab1ec28D129707052df4dF418D58a2D46d5f51"), L1Bridge: common.HexToAddress("0x36443fC70E073fe9D50425f82a3eE19feF697d62"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x4Ef4C1208F7374d0252767E3992546d61dCf9848"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"), L2Bridge: common.HexToAddress("0x33Fe5bB8DA466dA55a8A32D6ADE2BB104E2C5201"), L2HopBridgeToken: common.HexToAddress("0x6F03052743CD99ce1b29265E377e320CD24Eb632"), L2AmmWrapper: common.HexToAddress("0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6"), L2SaddleSwap: common.HexToAddress("0x8d4063E82A4Db8CdAed46932E1c71e03CA69Bede"), L2SaddleLpToken: common.HexToAddress("0xBD08972Cef7C9a5A046C9Ef13C9c3CE13739B8d6"), }, }, "rETH": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xae78736Cd615f374D3085123A210448E74Fc6393"), L1Bridge: common.HexToAddress("0x87269B23e73305117D0404557bAdc459CEd0dbEc"), }, walletCommon.OptimismMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0xae26bbD1FA3083E1dae3AEaA2050b97c55886f5d"), L2CanonicalBridge: common.HexToAddress("0x4200000000000000000000000000000000000010"), L2CanonicalToken: common.HexToAddress("0x9Bcef72be871e61ED4fBbc7630889beE758eb81D"), L2Bridge: common.HexToAddress("0xA0075E8cE43dcB9970cB7709b9526c1232cc39c2"), L2HopBridgeToken: common.HexToAddress("0x755569159598f3702bdD7DFF6233A317C156d3Dd"), L2AmmWrapper: common.HexToAddress("0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75"), L2SaddleSwap: common.HexToAddress("0x9Dd8685463285aD5a94D2c128bda3c5e8a6173c8"), L2SaddleLpToken: common.HexToAddress("0x0699BC1Ca03761110929b2B56BcCBeb691fa9ca6"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0x7fEb7af8d5B277e249868aCF7644e7BB4A5937f8"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8"), L2Bridge: common.HexToAddress("0xc315239cFb05F1E130E7E28E603CEa4C014c57f0"), L2HopBridgeToken: common.HexToAddress("0x588Bae9C85a605a7F14E551d144279984469423B"), L2AmmWrapper: common.HexToAddress("0x16e08C02e4B78B0a5b3A917FF5FeaeDd349a5a95"), L2SaddleSwap: common.HexToAddress("0x0Ded0d521AC7B0d312871D18EA4FDE79f03Ee7CA"), L2SaddleLpToken: common.HexToAddress("0xbBA837dFFB3eCf4638D200F11B8c691eA641AdCb"), }, }, "MAGIC": { walletCommon.EthereumMainnet: { L1CanonicalToken: common.HexToAddress("0xB0c7a3Ba49C7a6EaBa6cD4a96C55a1391070Ac9A"), L1Bridge: common.HexToAddress("0xf074540eb83c86211F305E145eB31743E228E57d"), }, walletCommon.ArbitrumMainnet: { L1CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L1MessengerWrapper: common.HexToAddress("0xa0c37738582E63B383E609624423d052BFA4b316"), L2CanonicalBridge: common.HexToAddress("0x0000000000000000000000000000000000000000"), L2CanonicalToken: common.HexToAddress("0x539bdE0d7Dbd336b79148AA742883198BBF60342"), L2Bridge: common.HexToAddress("0xEa5abf2C909169823d939de377Ef2Bf897A6CE98"), L2HopBridgeToken: common.HexToAddress("0xB76e673EBC922b1E8f10303D0d513a9E710f5c4c"), L2AmmWrapper: common.HexToAddress("0x50a3a623d00fd8b8a4F3CbC5aa53D0Bc6FA912DD"), L2SaddleSwap: common.HexToAddress("0xFFe42d3Ba79Ee5Ee74a999CAd0c60EF1153F0b82"), L2SaddleLpToken: common.HexToAddress("0x163A9E12787dBFa2836caa549aE02ed67F73e7C2"), }, }, } func isHTokenSend() bool { // isHTokenSend is false in Status app for now return false } func shouldUseCctpBridge(symbol string) bool { if symbol == "USDC" { return true } return symbol == "USDC.e" && isHTokenSend() } func shouldUseAmm(symbol string) bool { return symbol != "HOP" } func GetContractAddress(chainID uint64, symbol string) (addr common.Address, contractType string, err error) { err = errorNotAvailableOnChainID if chainID == walletCommon.EthereumMainnet || chainID == walletCommon.EthereumSepolia { if shouldUseCctpBridge(symbol) { if addr, ok := hopBridgeContractAddresses[symbol][chainID][CctpL1Bridge]; ok { return addr, CctpL1Bridge, nil } return } if addr, ok := hopBridgeContractAddresses[symbol][chainID][L1Bridge]; ok { return addr, L1Bridge, nil } return } if shouldUseCctpBridge(symbol) { if addr, ok := hopBridgeContractAddresses[symbol][chainID][CctpL2Bridge]; ok { return addr, CctpL2Bridge, nil } return } if isHTokenSend() || !shouldUseAmm(symbol) { if addr, ok := hopBridgeContractAddresses[symbol][chainID][L2Bridge]; ok { return addr, L2Bridge, nil } return } if addr, ok := hopBridgeContractAddresses[symbol][chainID][L2AmmWrapper]; ok { return addr, L2AmmWrapper, nil } return }