@uniswap/token-list-bridge-utils 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -870,8 +870,10 @@ var ChainId;
870
870
  ChainId[ChainId["POLYGON"] = 137] = "POLYGON";
871
871
  ChainId[ChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI";
872
872
  ChainId[ChainId["CELO"] = 42220] = "CELO";
873
+ ChainId[ChainId["CELO_ALFAJORES"] = 44787] = "CELO_ALFAJORES";
873
874
  ChainId[ChainId["BNB"] = 56] = "BNB";
874
875
  ChainId[ChainId["AVALANCHE"] = 43114] = "AVALANCHE";
876
+ ChainId[ChainId["BASE"] = 8453] = "BASE";
875
877
  ChainId[ChainId["BASE_GOERLI"] = 84531] = "BASE_GOERLI";
876
878
  })(ChainId || (ChainId = {}));
877
879
 
@@ -1099,6 +1101,15 @@ function getRpcUrl(chainId) {
1099
1101
  case ChainId.AVALANCHE:
1100
1102
  return 'https://api.avax.network/ext/bc/C/rpc';
1101
1103
 
1104
+ case ChainId.CELO:
1105
+ return 'https://forno.celo.org/';
1106
+
1107
+ case ChainId.CELO_ALFAJORES:
1108
+ return 'https://alfajores-forno.celo-testnet.org/';
1109
+
1110
+ case ChainId.BASE:
1111
+ return 'https://mainnet.base.org';
1112
+
1102
1113
  case ChainId.BASE_GOERLI:
1103
1114
  return 'https://goerli.base.org';
1104
1115
  }
@@ -1138,7 +1149,13 @@ var _process$env, _process$env$MAINNET_;
1138
1149
  config();
1139
1150
  (_process$env$MAINNET_ = (_process$env = process.env).MAINNET_RPC) != null ? _process$env$MAINNET_ : _process$env.MAINNET_RPC = /*#__PURE__*/getRpcUrl(ChainId.MAINNET);
1140
1151
 
1141
- var networkID = 42161; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
1152
+ var networkID = 42161;
1153
+
1154
+ var l2Rpc = function l2Rpc(chainId) {
1155
+ if (chainId === 42161) return 'https://arb1.arbitrum.io/rpc';else if (chainId === 421611) return 'https://rinkeby.arbitrum.io/rpc';else if (chainId === 42170) return 'https://nova.arbitrum.io/rpc';else if (chainId === 421613) return 'https://goerli-rollup.arbitrum.io/rpc';
1156
+ throw new Error('No L2 RPC detected');
1157
+ }; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
1158
+
1142
1159
 
1143
1160
  var getNetworkConfig = /*#__PURE__*/function () {
1144
1161
  var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
@@ -1166,8 +1183,8 @@ var getNetworkConfig = /*#__PURE__*/function () {
1166
1183
 
1167
1184
  case 11:
1168
1185
  l1Network = _context.sent;
1169
- arbProvider = new providers.JsonRpcProvider(l2Network.rpcURL);
1170
- ethProvider = new providers.JsonRpcProvider(l1Network.rpcURL);
1186
+ arbProvider = new providers.JsonRpcProvider(l2Rpc(l2Network.chainID));
1187
+ ethProvider = new providers.JsonRpcProvider(process.env.MAINNET_RPC);
1171
1188
  _context.next = 16;
1172
1189
  return MultiCaller.fromProvider(ethProvider);
1173
1190
 
@@ -1302,7 +1319,7 @@ var ArbitrumMappingProvider = /*#__PURE__*/function () {
1302
1319
  return ArbitrumMappingProvider;
1303
1320
  }();
1304
1321
 
1305
- var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/2138386277e4156d159615d1840882cecc398437/optimism.tokenlist.json';
1322
+ var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
1306
1323
  /**
1307
1324
  * The Optimism L2 mapping (linked above) is manually maintained by the Optimism team.
1308
1325
  *
@@ -1316,8 +1333,7 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
1316
1333
 
1317
1334
  _proto.provide = /*#__PURE__*/function () {
1318
1335
  var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1319
- var tokens, optimismTokens, _iterator, _step, token, _token$extensions;
1320
-
1336
+ var tokens, allTokens, opTokenId_baseAddressMap;
1321
1337
  return _regeneratorRuntime.wrap(function _callee$(_context) {
1322
1338
  while (1) {
1323
1339
  switch (_context.prev = _context.next) {
@@ -1327,19 +1343,27 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
1327
1343
  return getTokenList(optimismTokenListURL);
1328
1344
 
1329
1345
  case 3:
1330
- optimismTokens = _context.sent;
1331
-
1332
- for (_iterator = _createForOfIteratorHelperLoose(optimismTokens.tokens); !(_step = _iterator()).done;) {
1333
- token = _step.value;
1346
+ allTokens = _context.sent;
1347
+ opTokenId_baseAddressMap = {};
1348
+ allTokens.tokens.forEach(function (token) {
1349
+ if (token.chainId === ChainId.OPTIMISM) {
1350
+ var _token$extensions;
1334
1351
 
1335
- if (token.chainId === ChainId.MAINNET) {
1336
- tokens[token.address.toLowerCase()] = token == null ? void 0 : (_token$extensions = token.extensions) == null ? void 0 : _token$extensions.bridgeInfo[ChainId.OPTIMISM].tokenAddress;
1352
+ if (typeof ((_token$extensions = token.extensions) == null ? void 0 : _token$extensions.opTokenId) === 'string') {
1353
+ opTokenId_baseAddressMap[token.extensions.opTokenId] = token.address;
1354
+ }
1337
1355
  }
1338
- }
1356
+ });
1357
+ allTokens.tokens.forEach(function (token) {
1358
+ var _token$extensions2;
1339
1359
 
1360
+ if (token.chainId === ChainId.MAINNET && typeof ((_token$extensions2 = token.extensions) == null ? void 0 : _token$extensions2.opTokenId) === 'string' && token.extensions.opTokenId in opTokenId_baseAddressMap) {
1361
+ tokens[token.address.toLowerCase()] = opTokenId_baseAddressMap[token.extensions.opTokenId];
1362
+ }
1363
+ });
1340
1364
  return _context.abrupt("return", tokens);
1341
1365
 
1342
- case 6:
1366
+ case 8:
1343
1367
  case "end":
1344
1368
  return _context.stop();
1345
1369
  }
@@ -1357,7 +1381,7 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
1357
1381
  return OptimismMappingProvider;
1358
1382
  }();
1359
1383
 
1360
- var url = 'https://open-api.polygon.technology/api/v1/info/all-mappings';
1384
+ var url = 'https://api-polygon-tokens.polygon.technology/api/v1/info/all-mappings';
1361
1385
  var access_token = '504afd90-3228-4df9-9d88-9b4d70646101';
1362
1386
  /**
1363
1387
  * The Polygon team manually maintains the mapping via user submissions at
@@ -5667,7 +5691,7 @@ var AvalancheMappingProvider = /*#__PURE__*/function () {
5667
5691
  return AvalancheMappingProvider;
5668
5692
  }();
5669
5693
 
5670
- var baseGoerliTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5694
+ var baseGoerliTokenListURL$1 = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5671
5695
  /**
5672
5696
  * The Base Goerli mapping (linked above) is manually maintained by the Coinbase team
5673
5697
  * in this repository: https://github.com/ethereum-optimism/ethereum-optimism.github.io.
@@ -5687,7 +5711,7 @@ var BaseGoerliMappingProvider = /*#__PURE__*/function () {
5687
5711
  case 0:
5688
5712
  tokens = {};
5689
5713
  _context.next = 3;
5690
- return getTokenList(baseGoerliTokenListURL);
5714
+ return getTokenList(baseGoerliTokenListURL$1);
5691
5715
 
5692
5716
  case 3:
5693
5717
  allTokens = _context.sent;
@@ -5728,9 +5752,120 @@ var BaseGoerliMappingProvider = /*#__PURE__*/function () {
5728
5752
  return BaseGoerliMappingProvider;
5729
5753
  }();
5730
5754
 
5755
+ var baseGoerliTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5756
+ /**
5757
+ * The Base mapping (linked above) is manually maintained by the Coinbase team
5758
+ * in this repository: https://github.com/ethereum-optimism/ethereum-optimism.github.io.
5759
+ */
5760
+
5761
+ var BaseMappingProvider = /*#__PURE__*/function () {
5762
+ function BaseMappingProvider() {}
5763
+
5764
+ var _proto = BaseMappingProvider.prototype;
5765
+
5766
+ _proto.provide = /*#__PURE__*/function () {
5767
+ var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
5768
+ var tokens, allTokens, opTokenId_baseAddressMap;
5769
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
5770
+ while (1) {
5771
+ switch (_context.prev = _context.next) {
5772
+ case 0:
5773
+ tokens = {};
5774
+ _context.next = 3;
5775
+ return getTokenList(baseGoerliTokenListURL);
5776
+
5777
+ case 3:
5778
+ allTokens = _context.sent;
5779
+ opTokenId_baseAddressMap = {};
5780
+ allTokens.tokens.forEach(function (token) {
5781
+ if (token.chainId === ChainId.BASE) {
5782
+ var _token$extensions;
5783
+
5784
+ if (typeof ((_token$extensions = token.extensions) == null ? void 0 : _token$extensions.opTokenId) === 'string') {
5785
+ opTokenId_baseAddressMap[token.extensions.opTokenId] = token.address;
5786
+ }
5787
+ }
5788
+ });
5789
+ allTokens.tokens.forEach(function (token) {
5790
+ var _token$extensions2;
5791
+
5792
+ if (token.chainId === ChainId.MAINNET && typeof ((_token$extensions2 = token.extensions) == null ? void 0 : _token$extensions2.opTokenId) === 'string' && token.extensions.opTokenId in opTokenId_baseAddressMap) {
5793
+ tokens[token.address.toLowerCase()] = opTokenId_baseAddressMap[token.extensions.opTokenId];
5794
+ }
5795
+ });
5796
+ return _context.abrupt("return", tokens);
5797
+
5798
+ case 8:
5799
+ case "end":
5800
+ return _context.stop();
5801
+ }
5802
+ }
5803
+ }, _callee);
5804
+ }));
5805
+
5806
+ function provide() {
5807
+ return _provide.apply(this, arguments);
5808
+ }
5809
+
5810
+ return provide;
5811
+ }();
5812
+
5813
+ return BaseMappingProvider;
5814
+ }();
5815
+
5816
+ var celoMappings = {
5817
+ "0xdac17f958d2ee523a2206206994597c13d831ec7": {
5818
+ childToken: "0x617f3112bf5397D0467D315cC709EF968D9ba546",
5819
+ decimals: 18
5820
+ },
5821
+ "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
5822
+ childToken: "0xd71Ffd0940c920786eC4DbB5A12306669b5b81EF",
5823
+ decimals: 18
5824
+ },
5825
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
5826
+ childToken: "0xb829b68f57CC546dA7E5806A929e53bE32a4625D",
5827
+ decimals: 18
5828
+ },
5829
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
5830
+ childToken: "0x37f750B7cC259A2f741AF45294f6a16572CF5cAd",
5831
+ decimals: 6
5832
+ }
5833
+ };
5834
+
5835
+ var CeloMappingProvider = /*#__PURE__*/function () {
5836
+ function CeloMappingProvider() {}
5837
+
5838
+ var _proto = CeloMappingProvider.prototype;
5839
+
5840
+ _proto.provide = /*#__PURE__*/function () {
5841
+ var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
5842
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
5843
+ while (1) {
5844
+ switch (_context.prev = _context.next) {
5845
+ case 0:
5846
+ return _context.abrupt("return", celoMappings);
5847
+
5848
+ case 1:
5849
+ case "end":
5850
+ return _context.stop();
5851
+ }
5852
+ }
5853
+ }, _callee);
5854
+ }));
5855
+
5856
+ function provide() {
5857
+ return _provide.apply(this, arguments);
5858
+ }
5859
+
5860
+ return provide;
5861
+ }();
5862
+
5863
+ return CeloMappingProvider;
5864
+ }();
5865
+
5731
5866
  var web3 = /*#__PURE__*/new Web3(); // chains we support fetching mappings for (can be different than the l2ChainIds arg for buildList)
5732
5867
 
5733
- var CHAINS_WITH_MAPPING_PROVIDERS = [ChainId.ARBITRUM_ONE, ChainId.POLYGON, ChainId.OPTIMISM, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE_GOERLI];
5868
+ var CHAINS_WITH_MAPPING_PROVIDERS = [ChainId.ARBITRUM_ONE, ChainId.POLYGON, ChainId.OPTIMISM, ChainId.BNB, ChainId.AVALANCHE, ChainId.CELO, ChainId.BASE, ChainId.BASE_GOERLI];
5734
5869
  function buildList(_x, _x2) {
5735
5870
  return _buildList.apply(this, arguments);
5736
5871
  } // using a symbol lookup contract call to check whether the token exists on the L2
@@ -5922,6 +6057,12 @@ function getMappingProvider(chainId, l1TokenList) {
5922
6057
  case ChainId.AVALANCHE:
5923
6058
  return new AvalancheMappingProvider();
5924
6059
 
6060
+ case ChainId.CELO:
6061
+ return new CeloMappingProvider();
6062
+
6063
+ case ChainId.BASE:
6064
+ return new BaseMappingProvider();
6065
+
5925
6066
  case ChainId.BASE_GOERLI:
5926
6067
  return new BaseGoerliMappingProvider();
5927
6068
 
@@ -5988,18 +6129,27 @@ function getChildTokenDetails(_x7, _x8, _x9) {
5988
6129
 
5989
6130
  function _getChildTokenDetails() {
5990
6131
  _getChildTokenDetails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(l1Token, chainId, chainIdToMappingsMap) {
5991
- var _l1Token$extensions, _l1Token$extensions$b, _l1Token$extensions$b2;
6132
+ var _l1Token$extensions;
5992
6133
 
5993
- var existingMapping, childToken, childTokenAddress, childTokenValid, decimals;
6134
+ var bridgeInfo, existingMapping, bridgeInfoForChain, childToken, childTokenAddress, childTokenValid, decimals;
5994
6135
  return _regeneratorRuntime.wrap(function _callee5$(_context6) {
5995
6136
  while (1) {
5996
6137
  switch (_context6.prev = _context6.next) {
5997
6138
  case 0:
5998
- existingMapping = l1Token == null ? void 0 : (_l1Token$extensions = l1Token.extensions) == null ? void 0 : (_l1Token$extensions$b = _l1Token$extensions.bridgeInfo) == null ? void 0 : (_l1Token$extensions$b2 = _l1Token$extensions$b[chainId]) == null ? void 0 : _l1Token$extensions$b2.tokenAddress; // use the externally fetched mappings if manual entry doesn't exist for the token/chain mapping
6139
+ bridgeInfo = l1Token == null ? void 0 : (_l1Token$extensions = l1Token.extensions) == null ? void 0 : _l1Token$extensions.bridgeInfo;
6140
+
6141
+ if (bridgeInfo && typeof bridgeInfo === 'object') {
6142
+ bridgeInfoForChain = bridgeInfo[chainId];
6143
+
6144
+ if (bridgeInfoForChain && typeof bridgeInfoForChain === 'object') {
6145
+ existingMapping = bridgeInfoForChain.tokenAddress;
6146
+ }
6147
+ } // use the externally fetched mappings if manual entry doesn't exist for the token/chain mapping
5999
6148
  // and the given chain is supported for fetching mappings
6000
6149
 
6150
+
6001
6151
  if (!(CHAINS_WITH_MAPPING_PROVIDERS.includes(chainId) && existingMapping === undefined)) {
6002
- _context6.next = 14;
6152
+ _context6.next = 15;
6003
6153
  break;
6004
6154
  }
6005
6155
 
@@ -6009,33 +6159,33 @@ function _getChildTokenDetails() {
6009
6159
  _context6.t1 = childTokenAddress;
6010
6160
 
6011
6161
  if (!_context6.t1) {
6012
- _context6.next = 10;
6162
+ _context6.next = 11;
6013
6163
  break;
6014
6164
  }
6015
6165
 
6016
- _context6.next = 9;
6166
+ _context6.next = 10;
6017
6167
  return hasExistingTokenContract(childTokenAddress, chainId);
6018
6168
 
6019
- case 9:
6169
+ case 10:
6020
6170
  _context6.t1 = _context6.sent;
6021
6171
 
6022
- case 10:
6172
+ case 11:
6023
6173
  _context6.t2 = _context6.t1;
6024
6174
  childTokenValid = (0, _context6.t0)(_context6.t2);
6025
- decimals = childToken && (chainId === ChainId.BNB || chainId === ChainId.AVALANCHE) ? childToken.decimals : undefined;
6175
+ decimals = childToken && (chainId === ChainId.BNB || chainId === ChainId.AVALANCHE || chainId === ChainId.CELO) ? childToken.decimals : undefined;
6026
6176
  return _context6.abrupt("return", {
6027
6177
  childTokenValid: childTokenValid,
6028
6178
  childTokenAddress: childTokenAddress,
6029
6179
  decimals: decimals
6030
6180
  });
6031
6181
 
6032
- case 14:
6182
+ case 15:
6033
6183
  return _context6.abrupt("return", {
6034
6184
  childTokenValid: !!existingMapping,
6035
6185
  childTokenAddress: existingMapping
6036
6186
  });
6037
6187
 
6038
- case 15:
6188
+ case 16:
6039
6189
  case "end":
6040
6190
  return _context6.stop();
6041
6191
  }
@@ -6125,7 +6275,7 @@ function chainify(_x) {
6125
6275
 
6126
6276
  function _chainify() {
6127
6277
  _chainify = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenListOrPathOrUrl) {
6128
- var l1TokenList, l2Chains, chainified, merged, tokenMap;
6278
+ var l1TokenList, l2Chains, chainified, merged;
6129
6279
  return _regeneratorRuntime.wrap(function _callee$(_context) {
6130
6280
  while (1) {
6131
6281
  switch (_context.prev = _context.next) {
@@ -6135,7 +6285,7 @@ function _chainify() {
6135
6285
 
6136
6286
  case 2:
6137
6287
  l1TokenList = _context.sent;
6138
- l2Chains = [ChainId.POLYGON, ChainId.ARBITRUM_ONE, ChainId.OPTIMISM, ChainId.CELO, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE_GOERLI];
6288
+ l2Chains = [ChainId.POLYGON, ChainId.ARBITRUM_ONE, ChainId.OPTIMISM, ChainId.CELO, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE, ChainId.BASE_GOERLI];
6139
6289
  _context.next = 6;
6140
6290
  return chainifyTokenList(l2Chains, l1TokenListOrPathOrUrl);
6141
6291
 
@@ -6143,19 +6293,9 @@ function _chainify() {
6143
6293
  chainified = _context.sent;
6144
6294
  merged = mergeTokenLists(l1TokenList, // providing l1 first to make sure duplicated tokens resolve to this list
6145
6295
  chainified);
6146
- tokenMap = {};
6147
-
6148
- if (merged.tokens && merged.tokens.length > 0) {
6149
- merged.tokens.forEach(function (token) {
6150
- tokenMap[token.chainId + "_" + token.address] = token;
6151
- });
6152
- }
6296
+ return _context.abrupt("return", merged);
6153
6297
 
6154
- return _context.abrupt("return", _extends({}, merged, {
6155
- tokenMap: tokenMap
6156
- }));
6157
-
6158
- case 11:
6298
+ case 9:
6159
6299
  case "end":
6160
6300
  return _context.stop();
6161
6301
  }
@@ -6220,7 +6360,7 @@ function mergeTokenLists(primary, secondary) {
6220
6360
 
6221
6361
  var merged = merge(group[0], group[1]);
6222
6362
 
6223
- if ((_merged$extensions = merged.extensions) != null && _merged$extensions.bridgeInfo) {
6363
+ if ((_merged$extensions = merged.extensions) != null && _merged$extensions.bridgeInfo && typeof merged.extensions.bridgeInfo === 'object') {
6224
6364
  // remove reference to self-chain from merge
6225
6365
  delete merged.extensions.bridgeInfo[merged.chainId];
6226
6366
  }