github.com/status-im/status-go@v1.1.0/contracts/hop/address.go (about)

     1  package hop
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/ethereum/go-ethereum/common"
     7  	walletCommon "github.com/status-im/status-go/services/wallet/common"
     8  )
     9  
    10  var errorNotAvailableOnChainID = errors.New("not available for chainID")
    11  
    12  // List taken from Hop:
    13  // https://github.com/hop-protocol/hop/blob/ef1ca4f8fac002c81fc0dc37ba021125947c6bc2/packages/sdk/src/addresses/mainnet.ts
    14  // https://github.com/hop-protocol/hop/blob/ef1ca4f8fac002c81fc0dc37ba021125947c6bc2/packages/sdk/src/addresses/sepolia.ts
    15  
    16  const (
    17  	L1CanonicalToken       = "l1CanonicalToken"
    18  	L1Bridge               = "l1Bridge"
    19  	L1CanonicalBridge      = "l1CanonicalBridge"
    20  	L1MessengerWrapper     = "l1MessengerWrapper"
    21  	CctpL1Bridge           = "cctpL1Bridge"
    22  	CctpMessageTransmitter = "cctpMessageTransmitter"
    23  
    24  	L2CanonicalToken  = "l2CanonicalToken"
    25  	L2Bridge          = "l2Bridge"
    26  	L2CanonicalBridge = "l2CanonicalBridge"
    27  	L2HopBridgeToken  = "l2HopBridgeToken"
    28  	L2AmmWrapper      = "l2AmmWrapper"
    29  	L2SaddleSwap      = "l2SaddleSwap"
    30  	L2SaddleLpToken   = "l2SaddleLpToken"
    31  	CctpL2Bridge      = "cctpL2Bridge"
    32  )
    33  
    34  var hopBridgeContractAddresses = map[string]map[uint64]map[string]common.Address{
    35  	"USDC": {
    36  		walletCommon.EthereumMainnet: {
    37  			L1CanonicalToken:       common.HexToAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"),
    38  			CctpL1Bridge:           common.HexToAddress("0x7e77461CA2a9d82d26FD5e0Da2243BF72eA45747"),
    39  			CctpMessageTransmitter: common.HexToAddress("0x0a992d191deec32afe36203ad87d7d289a738f81"),
    40  		},
    41  		walletCommon.OptimismMainnet: {
    42  			L2CanonicalToken:       common.HexToAddress("0x0b2c639c533813f4aa9d7837caf62653d097ff85"),
    43  			CctpL2Bridge:           common.HexToAddress("0x469147af8Bde580232BE9DC84Bb4EC84d348De24"),
    44  			CctpMessageTransmitter: common.HexToAddress("0x4d41f22c5a0e5c74090899e5a8fb597a8842b3e8"),
    45  		},
    46  		walletCommon.ArbitrumMainnet: {
    47  			L2CanonicalToken:       common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"),
    48  			CctpL2Bridge:           common.HexToAddress("0x6504BFcaB789c35325cA4329f1f41FaC340bf982"),
    49  			CctpMessageTransmitter: common.HexToAddress("0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca"),
    50  		},
    51  		walletCommon.EthereumSepolia: {
    52  			L1CanonicalToken: common.HexToAddress("0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"),
    53  			CctpL1Bridge:     common.HexToAddress("0x05fda2db623fa6a89a2db33550848ab2006a4427"),
    54  		},
    55  		walletCommon.OptimismSepolia: {
    56  			L2CanonicalToken: common.HexToAddress("0x5fd84259d66Cd46123540766Be93DFE6D43130D7"),
    57  			CctpL2Bridge:     common.HexToAddress("0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5"),
    58  		},
    59  		walletCommon.ArbitrumSepolia: {
    60  			L2CanonicalToken: common.HexToAddress("0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d"),
    61  			CctpL2Bridge:     common.HexToAddress("0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5"),
    62  		},
    63  	},
    64  	"USDC.e": {
    65  		walletCommon.EthereumMainnet: {
    66  			L1CanonicalToken:       common.HexToAddress("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"),
    67  			L1Bridge:               common.HexToAddress("0x3666f603Cc164936C1b87e207F36BEBa4AC5f18a"),
    68  			CctpL1Bridge:           common.HexToAddress("0x7e77461CA2a9d82d26FD5e0Da2243BF72eA45747"),
    69  			CctpMessageTransmitter: common.HexToAddress("0x0a992d191deec32afe36203ad87d7d289a738f81"),
    70  		},
    71  		walletCommon.OptimismMainnet: {
    72  			L1CanonicalBridge:      common.HexToAddress("0x0000000000000000000000000000000000000000"),
    73  			L1MessengerWrapper:     common.HexToAddress("0x6587a6164B091a058aCba2e91f971454Ec172940"),
    74  			L2CanonicalBridge:      common.HexToAddress("0x4200000000000000000000000000000000000010"),
    75  			L2CanonicalToken:       common.HexToAddress("0x7F5c764cBc14f9669B88837ca1490cCa17c31607"),
    76  			L2Bridge:               common.HexToAddress("0xa81D244A1814468C734E5b4101F7b9c0c577a8fC"),
    77  			CctpL2Bridge:           common.HexToAddress("0x469147af8Bde580232BE9DC84Bb4EC84d348De24"),
    78  			CctpMessageTransmitter: common.HexToAddress("0x4d41f22c5a0e5c74090899e5a8fb597a8842b3e8"),
    79  			L2HopBridgeToken:       common.HexToAddress("0x25D8039bB044dC227f741a9e381CA4cEAE2E6aE8"),
    80  			L2AmmWrapper:           common.HexToAddress("0x2ad09850b0CA4c7c1B33f5AcD6cBAbCaB5d6e796"),
    81  			L2SaddleSwap:           common.HexToAddress("0x3c0FFAca566fCcfD9Cc95139FEF6CBA143795963"),
    82  			L2SaddleLpToken:        common.HexToAddress("0x2e17b8193566345a2Dd467183526dEdc42d2d5A8"),
    83  		},
    84  		walletCommon.ArbitrumMainnet: {
    85  			L1CanonicalBridge:      common.HexToAddress("0x0000000000000000000000000000000000000000"),
    86  			L1MessengerWrapper:     common.HexToAddress("0x39Bf4A32E689B6a79360854b7c901e991085D6a3"),
    87  			L2CanonicalBridge:      common.HexToAddress("0x0000000000000000000000000000000000000000"),
    88  			L2CanonicalToken:       common.HexToAddress("0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"),
    89  			L2Bridge:               common.HexToAddress("0x0e0E3d2C5c292161999474247956EF542caBF8dd"),
    90  			CctpL2Bridge:           common.HexToAddress("0x6504BFcaB789c35325cA4329f1f41FaC340bf982"),
    91  			CctpMessageTransmitter: common.HexToAddress("0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca"),
    92  			L2HopBridgeToken:       common.HexToAddress("0x0ce6c85cF43553DE10FC56cecA0aef6Ff0DD444d"),
    93  			L2AmmWrapper:           common.HexToAddress("0xe22D2beDb3Eca35E6397e0C6D62857094aA26F52"),
    94  			L2SaddleSwap:           common.HexToAddress("0x10541b07d8Ad2647Dc6cD67abd4c03575dade261"),
    95  			L2SaddleLpToken:        common.HexToAddress("0xB67c014FA700E69681a673876eb8BAFAA36BFf71"),
    96  		},
    97  		walletCommon.EthereumSepolia: {
    98  			L1CanonicalToken: common.HexToAddress("0x95B01328BA6f4de261C4907fB35eE3c4968e9CEF"),
    99  			CctpL1Bridge:     common.HexToAddress("0x98bc5b835686e1a00e6c2168af162905899e93d6"),
   100  		},
   101  		walletCommon.OptimismSepolia: {
   102  			L2CanonicalToken: common.HexToAddress("0xB15312eA17d95375E64317C363A0e6304330D82e"),
   103  		},
   104  	},
   105  	"USDT": {
   106  		walletCommon.EthereumMainnet: {
   107  			L1CanonicalToken: common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7"),
   108  			L1Bridge:         common.HexToAddress("0x3E4a3a4796d16c0Cd582C382691998f7c06420B6"),
   109  		},
   110  		walletCommon.OptimismMainnet: {
   111  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   112  			L1MessengerWrapper: common.HexToAddress("0x9fc22E269c3752620EB281ce470855886b982501"),
   113  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   114  			L2CanonicalToken:   common.HexToAddress("0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"),
   115  			L2Bridge:           common.HexToAddress("0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61"),
   116  			L2HopBridgeToken:   common.HexToAddress("0x2057C8ECB70Afd7Bee667d76B4CD373A325b1a20"),
   117  			L2AmmWrapper:       common.HexToAddress("0x7D269D3E0d61A05a0bA976b7DBF8805bF844AF3F"),
   118  			L2SaddleSwap:       common.HexToAddress("0xeC4B41Af04cF917b54AEb6Df58c0f8D78895b5Ef"),
   119  			L2SaddleLpToken:    common.HexToAddress("0xF753A50fc755c6622BBCAa0f59F0522f264F006e"),
   120  		},
   121  		walletCommon.ArbitrumMainnet: {
   122  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   123  			L1MessengerWrapper: common.HexToAddress("0x967F8E2B66D624Ad544CB59a230b867Ac3dC60dc"),
   124  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   125  			L2CanonicalToken:   common.HexToAddress("0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"),
   126  			L2Bridge:           common.HexToAddress("0x72209Fe68386b37A40d6bCA04f78356fd342491f"),
   127  			L2HopBridgeToken:   common.HexToAddress("0x12e59C59D282D2C00f3166915BED6DC2F5e2B5C7"),
   128  			L2AmmWrapper:       common.HexToAddress("0xCB0a4177E0A60247C0ad18Be87f8eDfF6DD30283"),
   129  			L2SaddleSwap:       common.HexToAddress("0x18f7402B673Ba6Fb5EA4B95768aABb8aaD7ef18a"),
   130  			L2SaddleLpToken:    common.HexToAddress("0xCe3B19D820CB8B9ae370E423B0a329c4314335fE"),
   131  		},
   132  	},
   133  	"MATIC": {
   134  		walletCommon.EthereumMainnet: {
   135  			L1CanonicalToken: common.HexToAddress("0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0"),
   136  			L1Bridge:         common.HexToAddress("0x22B1Cbb8D98a01a3B71D034BB899775A76Eb1cc2"),
   137  		},
   138  	},
   139  	"DAI": {
   140  		walletCommon.EthereumMainnet: {
   141  			L1CanonicalToken: common.HexToAddress("0x6B175474E89094C44Da98b954EedeAC495271d0F"),
   142  			L1Bridge:         common.HexToAddress("0x3d4Cc8A61c7528Fd86C55cfe061a78dCBA48EDd1"),
   143  		},
   144  		walletCommon.OptimismMainnet: {
   145  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   146  			L1MessengerWrapper: common.HexToAddress("0x115F423b958A2847af0F5bF314DB0f27c644c308"),
   147  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   148  			L2CanonicalToken:   common.HexToAddress("0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"),
   149  			L2Bridge:           common.HexToAddress("0x7191061D5d4C60f598214cC6913502184BAddf18"),
   150  			L2HopBridgeToken:   common.HexToAddress("0x56900d66D74Cb14E3c86895789901C9135c95b16"),
   151  			L2AmmWrapper:       common.HexToAddress("0xb3C68a491608952Cb1257FC9909a537a0173b63B"),
   152  			L2SaddleSwap:       common.HexToAddress("0xF181eD90D6CfaC84B8073FdEA6D34Aa744B41810"),
   153  			L2SaddleLpToken:    common.HexToAddress("0x22D63A26c730d49e5Eab461E4f5De1D8BdF89C92"),
   154  		},
   155  		walletCommon.ArbitrumMainnet: {
   156  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   157  			L1MessengerWrapper: common.HexToAddress("0x2d6fd82C7f531328BCaCA96EF985325C0894dB62"),
   158  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   159  			L2CanonicalToken:   common.HexToAddress("0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"),
   160  			L2Bridge:           common.HexToAddress("0x7aC115536FE3A185100B2c4DE4cb328bf3A58Ba6"),
   161  			L2HopBridgeToken:   common.HexToAddress("0x46ae9BaB8CEA96610807a275EBD36f8e916b5C61"),
   162  			L2AmmWrapper:       common.HexToAddress("0xe7F40BF16AB09f4a6906Ac2CAA4094aD2dA48Cc2"),
   163  			L2SaddleSwap:       common.HexToAddress("0xa5A33aB9063395A90CCbEa2D86a62EcCf27B5742"),
   164  			L2SaddleLpToken:    common.HexToAddress("0x68f5d998F00bB2460511021741D098c05721d8fF"),
   165  		},
   166  	},
   167  	"ETH": {
   168  		walletCommon.EthereumMainnet: {
   169  			L1CanonicalToken: common.HexToAddress("0x0000000000000000000000000000000000000000"),
   170  			L1Bridge:         common.HexToAddress("0xb8901acB165ed027E32754E0FFe830802919727f"),
   171  		},
   172  		walletCommon.OptimismMainnet: {
   173  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   174  			L1MessengerWrapper: common.HexToAddress("0xa45DF1A388049fb8d76E72D350d24E2C3F7aEBd1"),
   175  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   176  			L2CanonicalToken:   common.HexToAddress("0x4200000000000000000000000000000000000006"),
   177  			L2Bridge:           common.HexToAddress("0x83f6244Bd87662118d96D9a6D44f09dffF14b30E"),
   178  			L2HopBridgeToken:   common.HexToAddress("0xE38faf9040c7F09958c638bBDB977083722c5156"),
   179  			L2AmmWrapper:       common.HexToAddress("0x86cA30bEF97fB651b8d866D45503684b90cb3312"),
   180  			L2SaddleSwap:       common.HexToAddress("0xaa30D6bba6285d0585722e2440Ff89E23EF68864"),
   181  			L2SaddleLpToken:    common.HexToAddress("0x5C2048094bAaDe483D0b1DA85c3Da6200A88a849"),
   182  		},
   183  		walletCommon.ArbitrumMainnet: {
   184  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   185  			L1MessengerWrapper: common.HexToAddress("0xDD378a11475D588908001E0E99E4fD89ABda5434"),
   186  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   187  			L2CanonicalToken:   common.HexToAddress("0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"),
   188  			L2Bridge:           common.HexToAddress("0x3749C4f034022c39ecafFaBA182555d4508caCCC"),
   189  			L2HopBridgeToken:   common.HexToAddress("0xDa7c0de432a9346bB6e96aC74e3B61A36d8a77eB"),
   190  			L2AmmWrapper:       common.HexToAddress("0x33ceb27b39d2Bb7D2e61F7564d3Df29344020417"),
   191  			L2SaddleSwap:       common.HexToAddress("0x652d27c0F72771Ce5C76fd400edD61B406Ac6D97"),
   192  			L2SaddleLpToken:    common.HexToAddress("0x59745774Ed5EfF903e615F5A2282Cae03484985a"),
   193  		},
   194  	},
   195  	"HOP": {
   196  		walletCommon.EthereumMainnet: {
   197  			L1CanonicalToken: common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"),
   198  			L1Bridge:         common.HexToAddress("0x914f986a44AcB623A277d6Bd17368171FCbe4273"),
   199  		},
   200  		walletCommon.OptimismMainnet: {
   201  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   202  			L1MessengerWrapper: common.HexToAddress("0x9D3A7fB18CA7F1237F977Dc5572883f8b24F5638"),
   203  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   204  			L2CanonicalToken:   common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"),
   205  			L2Bridge:           common.HexToAddress("0x03D7f750777eC48d39D080b020D83Eb2CB4e3547"),
   206  			L2HopBridgeToken:   common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"),
   207  			L2AmmWrapper:       common.HexToAddress("0x0000000000000000000000000000000000000000"),
   208  			L2SaddleSwap:       common.HexToAddress("0x0000000000000000000000000000000000000000"),
   209  			L2SaddleLpToken:    common.HexToAddress("0x0000000000000000000000000000000000000000"),
   210  		},
   211  		walletCommon.ArbitrumMainnet: {
   212  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   213  			L1MessengerWrapper: common.HexToAddress("0x41BF5Fd5D1C85f00fd1F23C77740F1A7eBa6A35c"),
   214  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   215  			L2CanonicalToken:   common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"),
   216  			L2Bridge:           common.HexToAddress("0x25FB92E505F752F730cAD0Bd4fa17ecE4A384266"),
   217  			L2HopBridgeToken:   common.HexToAddress("0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC"),
   218  			L2AmmWrapper:       common.HexToAddress("0x0000000000000000000000000000000000000000"),
   219  			L2SaddleSwap:       common.HexToAddress("0x0000000000000000000000000000000000000000"),
   220  			L2SaddleLpToken:    common.HexToAddress("0x0000000000000000000000000000000000000000"),
   221  		},
   222  	},
   223  	"SNX": {
   224  		walletCommon.EthereumMainnet: {
   225  			L1CanonicalToken: common.HexToAddress("0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f"),
   226  			L1Bridge:         common.HexToAddress("0x893246FACF345c99e4235E5A7bbEE7404c988b96"),
   227  		},
   228  		walletCommon.OptimismMainnet: {
   229  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   230  			L1MessengerWrapper: common.HexToAddress("0xf0727B1eB1A4c9319A5c34A68bcD5E6530850D47"),
   231  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   232  			L2CanonicalToken:   common.HexToAddress("0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4"),
   233  			L2Bridge:           common.HexToAddress("0x16284c7323c35F4960540583998C98B1CfC581a7"),
   234  			L2HopBridgeToken:   common.HexToAddress("0x13B7F51BD865410c3AcC4d56083C5B56aB38D203"),
   235  			L2AmmWrapper:       common.HexToAddress("0xf11EBB94EC986EA891Aec29cfF151345C83b33Ec"),
   236  			L2SaddleSwap:       common.HexToAddress("0x1990BC6dfe2ef605Bfc08f5A23564dB75642Ad73"),
   237  			L2SaddleLpToken:    common.HexToAddress("0xe63337211DdE2569C348D9B3A0acb5637CFa8aB3"),
   238  		},
   239  	},
   240  	"sUSD": {
   241  		walletCommon.EthereumMainnet: {
   242  			L1CanonicalToken: common.HexToAddress("0x57Ab1ec28D129707052df4dF418D58a2D46d5f51"),
   243  			L1Bridge:         common.HexToAddress("0x36443fC70E073fe9D50425f82a3eE19feF697d62"),
   244  		},
   245  		walletCommon.OptimismMainnet: {
   246  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   247  			L1MessengerWrapper: common.HexToAddress("0x4Ef4C1208F7374d0252767E3992546d61dCf9848"),
   248  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   249  			L2CanonicalToken:   common.HexToAddress("0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9"),
   250  			L2Bridge:           common.HexToAddress("0x33Fe5bB8DA466dA55a8A32D6ADE2BB104E2C5201"),
   251  			L2HopBridgeToken:   common.HexToAddress("0x6F03052743CD99ce1b29265E377e320CD24Eb632"),
   252  			L2AmmWrapper:       common.HexToAddress("0x29Fba7d2A6C95DB162ee09C6250e912D6893DCa6"),
   253  			L2SaddleSwap:       common.HexToAddress("0x8d4063E82A4Db8CdAed46932E1c71e03CA69Bede"),
   254  			L2SaddleLpToken:    common.HexToAddress("0xBD08972Cef7C9a5A046C9Ef13C9c3CE13739B8d6"),
   255  		},
   256  	},
   257  	"rETH": {
   258  		walletCommon.EthereumMainnet: {
   259  			L1CanonicalToken: common.HexToAddress("0xae78736Cd615f374D3085123A210448E74Fc6393"),
   260  			L1Bridge:         common.HexToAddress("0x87269B23e73305117D0404557bAdc459CEd0dbEc"),
   261  		},
   262  		walletCommon.OptimismMainnet: {
   263  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   264  			L1MessengerWrapper: common.HexToAddress("0xae26bbD1FA3083E1dae3AEaA2050b97c55886f5d"),
   265  			L2CanonicalBridge:  common.HexToAddress("0x4200000000000000000000000000000000000010"),
   266  			L2CanonicalToken:   common.HexToAddress("0x9Bcef72be871e61ED4fBbc7630889beE758eb81D"),
   267  			L2Bridge:           common.HexToAddress("0xA0075E8cE43dcB9970cB7709b9526c1232cc39c2"),
   268  			L2HopBridgeToken:   common.HexToAddress("0x755569159598f3702bdD7DFF6233A317C156d3Dd"),
   269  			L2AmmWrapper:       common.HexToAddress("0x19B2162CA4C2C6F08C6942bFB846ce5C396aCB75"),
   270  			L2SaddleSwap:       common.HexToAddress("0x9Dd8685463285aD5a94D2c128bda3c5e8a6173c8"),
   271  			L2SaddleLpToken:    common.HexToAddress("0x0699BC1Ca03761110929b2B56BcCBeb691fa9ca6"),
   272  		},
   273  		walletCommon.ArbitrumMainnet: {
   274  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   275  			L1MessengerWrapper: common.HexToAddress("0x7fEb7af8d5B277e249868aCF7644e7BB4A5937f8"),
   276  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   277  			L2CanonicalToken:   common.HexToAddress("0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8"),
   278  			L2Bridge:           common.HexToAddress("0xc315239cFb05F1E130E7E28E603CEa4C014c57f0"),
   279  			L2HopBridgeToken:   common.HexToAddress("0x588Bae9C85a605a7F14E551d144279984469423B"),
   280  			L2AmmWrapper:       common.HexToAddress("0x16e08C02e4B78B0a5b3A917FF5FeaeDd349a5a95"),
   281  			L2SaddleSwap:       common.HexToAddress("0x0Ded0d521AC7B0d312871D18EA4FDE79f03Ee7CA"),
   282  			L2SaddleLpToken:    common.HexToAddress("0xbBA837dFFB3eCf4638D200F11B8c691eA641AdCb"),
   283  		},
   284  	},
   285  	"MAGIC": {
   286  		walletCommon.EthereumMainnet: {
   287  			L1CanonicalToken: common.HexToAddress("0xB0c7a3Ba49C7a6EaBa6cD4a96C55a1391070Ac9A"),
   288  			L1Bridge:         common.HexToAddress("0xf074540eb83c86211F305E145eB31743E228E57d"),
   289  		},
   290  		walletCommon.ArbitrumMainnet: {
   291  			L1CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   292  			L1MessengerWrapper: common.HexToAddress("0xa0c37738582E63B383E609624423d052BFA4b316"),
   293  			L2CanonicalBridge:  common.HexToAddress("0x0000000000000000000000000000000000000000"),
   294  			L2CanonicalToken:   common.HexToAddress("0x539bdE0d7Dbd336b79148AA742883198BBF60342"),
   295  			L2Bridge:           common.HexToAddress("0xEa5abf2C909169823d939de377Ef2Bf897A6CE98"),
   296  			L2HopBridgeToken:   common.HexToAddress("0xB76e673EBC922b1E8f10303D0d513a9E710f5c4c"),
   297  			L2AmmWrapper:       common.HexToAddress("0x50a3a623d00fd8b8a4F3CbC5aa53D0Bc6FA912DD"),
   298  			L2SaddleSwap:       common.HexToAddress("0xFFe42d3Ba79Ee5Ee74a999CAd0c60EF1153F0b82"),
   299  			L2SaddleLpToken:    common.HexToAddress("0x163A9E12787dBFa2836caa549aE02ed67F73e7C2"),
   300  		},
   301  	},
   302  }
   303  
   304  func isHTokenSend() bool {
   305  	// isHTokenSend is false in Status app for now
   306  	return false
   307  }
   308  
   309  func shouldUseCctpBridge(symbol string) bool {
   310  	if symbol == "USDC" {
   311  		return true
   312  	}
   313  	return symbol == "USDC.e" && isHTokenSend()
   314  }
   315  
   316  func shouldUseAmm(symbol string) bool {
   317  	return symbol != "HOP"
   318  }
   319  
   320  func GetContractAddress(chainID uint64, symbol string) (addr common.Address, contractType string, err error) {
   321  	err = errorNotAvailableOnChainID
   322  
   323  	if chainID == walletCommon.EthereumMainnet ||
   324  		chainID == walletCommon.EthereumSepolia {
   325  		if shouldUseCctpBridge(symbol) {
   326  			if addr, ok := hopBridgeContractAddresses[symbol][chainID][CctpL1Bridge]; ok {
   327  				return addr, CctpL1Bridge, nil
   328  			}
   329  			return
   330  		}
   331  
   332  		if addr, ok := hopBridgeContractAddresses[symbol][chainID][L1Bridge]; ok {
   333  			return addr, L1Bridge, nil
   334  		}
   335  		return
   336  	}
   337  
   338  	if shouldUseCctpBridge(symbol) {
   339  		if addr, ok := hopBridgeContractAddresses[symbol][chainID][CctpL2Bridge]; ok {
   340  			return addr, CctpL2Bridge, nil
   341  		}
   342  		return
   343  	}
   344  
   345  	if isHTokenSend() || !shouldUseAmm(symbol) {
   346  		if addr, ok := hopBridgeContractAddresses[symbol][chainID][L2Bridge]; ok {
   347  			return addr, L2Bridge, nil
   348  		}
   349  		return
   350  	}
   351  
   352  	if addr, ok := hopBridgeContractAddresses[symbol][chainID][L2AmmWrapper]; ok {
   353  		return addr, L2AmmWrapper, nil
   354  	}
   355  	return
   356  }