@uniswap/token-list-bridge-utils 2.1.0 → 2.2.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.
@@ -872,6 +872,7 @@ var ChainId;
872
872
  ChainId[ChainId["CELO"] = 42220] = "CELO";
873
873
  ChainId[ChainId["BNB"] = 56] = "BNB";
874
874
  ChainId[ChainId["AVALANCHE"] = 43114] = "AVALANCHE";
875
+ ChainId[ChainId["BASE"] = 8453] = "BASE";
875
876
  ChainId[ChainId["BASE_GOERLI"] = 84531] = "BASE_GOERLI";
876
877
  })(ChainId || (ChainId = {}));
877
878
 
@@ -1099,6 +1100,9 @@ function getRpcUrl(chainId) {
1099
1100
  case ChainId.AVALANCHE:
1100
1101
  return 'https://api.avax.network/ext/bc/C/rpc';
1101
1102
 
1103
+ case ChainId.BASE:
1104
+ return 'https://mainnet.base.org';
1105
+
1102
1106
  case ChainId.BASE_GOERLI:
1103
1107
  return 'https://goerli.base.org';
1104
1108
  }
@@ -1138,7 +1142,13 @@ var _process$env, _process$env$MAINNET_;
1138
1142
  config();
1139
1143
  (_process$env$MAINNET_ = (_process$env = process.env).MAINNET_RPC) != null ? _process$env$MAINNET_ : _process$env.MAINNET_RPC = /*#__PURE__*/getRpcUrl(ChainId.MAINNET);
1140
1144
 
1141
- var networkID = 42161; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
1145
+ var networkID = 42161;
1146
+
1147
+ var l2Rpc = function l2Rpc(chainId) {
1148
+ 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';
1149
+ throw new Error('No L2 RPC detected');
1150
+ }; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
1151
+
1142
1152
 
1143
1153
  var getNetworkConfig = /*#__PURE__*/function () {
1144
1154
  var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
@@ -1166,8 +1176,8 @@ var getNetworkConfig = /*#__PURE__*/function () {
1166
1176
 
1167
1177
  case 11:
1168
1178
  l1Network = _context.sent;
1169
- arbProvider = new providers.JsonRpcProvider(l2Network.rpcURL);
1170
- ethProvider = new providers.JsonRpcProvider(l1Network.rpcURL);
1179
+ arbProvider = new providers.JsonRpcProvider(l2Rpc(l2Network.chainID));
1180
+ ethProvider = new providers.JsonRpcProvider(process.env.MAINNET_RPC);
1171
1181
  _context.next = 16;
1172
1182
  return MultiCaller.fromProvider(ethProvider);
1173
1183
 
@@ -1302,7 +1312,7 @@ var ArbitrumMappingProvider = /*#__PURE__*/function () {
1302
1312
  return ArbitrumMappingProvider;
1303
1313
  }();
1304
1314
 
1305
- var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/2138386277e4156d159615d1840882cecc398437/optimism.tokenlist.json';
1315
+ var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
1306
1316
  /**
1307
1317
  * The Optimism L2 mapping (linked above) is manually maintained by the Optimism team.
1308
1318
  *
@@ -1316,8 +1326,7 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
1316
1326
 
1317
1327
  _proto.provide = /*#__PURE__*/function () {
1318
1328
  var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1319
- var tokens, optimismTokens, _iterator, _step, token, _token$extensions;
1320
-
1329
+ var tokens, allTokens, opTokenId_baseAddressMap;
1321
1330
  return _regeneratorRuntime.wrap(function _callee$(_context) {
1322
1331
  while (1) {
1323
1332
  switch (_context.prev = _context.next) {
@@ -1327,19 +1336,27 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
1327
1336
  return getTokenList(optimismTokenListURL);
1328
1337
 
1329
1338
  case 3:
1330
- optimismTokens = _context.sent;
1331
-
1332
- for (_iterator = _createForOfIteratorHelperLoose(optimismTokens.tokens); !(_step = _iterator()).done;) {
1333
- token = _step.value;
1339
+ allTokens = _context.sent;
1340
+ opTokenId_baseAddressMap = {};
1341
+ allTokens.tokens.forEach(function (token) {
1342
+ if (token.chainId === ChainId.OPTIMISM) {
1343
+ var _token$extensions;
1334
1344
 
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;
1345
+ if (typeof ((_token$extensions = token.extensions) == null ? void 0 : _token$extensions.opTokenId) === 'string') {
1346
+ opTokenId_baseAddressMap[token.extensions.opTokenId] = token.address;
1347
+ }
1337
1348
  }
1338
- }
1349
+ });
1350
+ allTokens.tokens.forEach(function (token) {
1351
+ var _token$extensions2;
1339
1352
 
1353
+ if (token.chainId === ChainId.MAINNET && typeof ((_token$extensions2 = token.extensions) == null ? void 0 : _token$extensions2.opTokenId) === 'string' && token.extensions.opTokenId in opTokenId_baseAddressMap) {
1354
+ tokens[token.address.toLowerCase()] = opTokenId_baseAddressMap[token.extensions.opTokenId];
1355
+ }
1356
+ });
1340
1357
  return _context.abrupt("return", tokens);
1341
1358
 
1342
- case 6:
1359
+ case 8:
1343
1360
  case "end":
1344
1361
  return _context.stop();
1345
1362
  }
@@ -5667,7 +5684,7 @@ var AvalancheMappingProvider = /*#__PURE__*/function () {
5667
5684
  return AvalancheMappingProvider;
5668
5685
  }();
5669
5686
 
5670
- var baseGoerliTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5687
+ var baseGoerliTokenListURL$1 = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5671
5688
  /**
5672
5689
  * The Base Goerli mapping (linked above) is manually maintained by the Coinbase team
5673
5690
  * in this repository: https://github.com/ethereum-optimism/ethereum-optimism.github.io.
@@ -5687,7 +5704,7 @@ var BaseGoerliMappingProvider = /*#__PURE__*/function () {
5687
5704
  case 0:
5688
5705
  tokens = {};
5689
5706
  _context.next = 3;
5690
- return getTokenList(baseGoerliTokenListURL);
5707
+ return getTokenList(baseGoerliTokenListURL$1);
5691
5708
 
5692
5709
  case 3:
5693
5710
  allTokens = _context.sent;
@@ -5728,9 +5745,70 @@ var BaseGoerliMappingProvider = /*#__PURE__*/function () {
5728
5745
  return BaseGoerliMappingProvider;
5729
5746
  }();
5730
5747
 
5748
+ var baseGoerliTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/master/optimism.tokenlist.json';
5749
+ /**
5750
+ * The Base mapping (linked above) is manually maintained by the Coinbase team
5751
+ * in this repository: https://github.com/ethereum-optimism/ethereum-optimism.github.io.
5752
+ */
5753
+
5754
+ var BaseMappingProvider = /*#__PURE__*/function () {
5755
+ function BaseMappingProvider() {}
5756
+
5757
+ var _proto = BaseMappingProvider.prototype;
5758
+
5759
+ _proto.provide = /*#__PURE__*/function () {
5760
+ var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
5761
+ var tokens, allTokens, opTokenId_baseAddressMap;
5762
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
5763
+ while (1) {
5764
+ switch (_context.prev = _context.next) {
5765
+ case 0:
5766
+ tokens = {};
5767
+ _context.next = 3;
5768
+ return getTokenList(baseGoerliTokenListURL);
5769
+
5770
+ case 3:
5771
+ allTokens = _context.sent;
5772
+ opTokenId_baseAddressMap = {};
5773
+ allTokens.tokens.forEach(function (token) {
5774
+ if (token.chainId === ChainId.BASE) {
5775
+ var _token$extensions;
5776
+
5777
+ if (typeof ((_token$extensions = token.extensions) == null ? void 0 : _token$extensions.opTokenId) === 'string') {
5778
+ opTokenId_baseAddressMap[token.extensions.opTokenId] = token.address;
5779
+ }
5780
+ }
5781
+ });
5782
+ allTokens.tokens.forEach(function (token) {
5783
+ var _token$extensions2;
5784
+
5785
+ if (token.chainId === ChainId.MAINNET && typeof ((_token$extensions2 = token.extensions) == null ? void 0 : _token$extensions2.opTokenId) === 'string' && token.extensions.opTokenId in opTokenId_baseAddressMap) {
5786
+ tokens[token.address.toLowerCase()] = opTokenId_baseAddressMap[token.extensions.opTokenId];
5787
+ }
5788
+ });
5789
+ return _context.abrupt("return", tokens);
5790
+
5791
+ case 8:
5792
+ case "end":
5793
+ return _context.stop();
5794
+ }
5795
+ }
5796
+ }, _callee);
5797
+ }));
5798
+
5799
+ function provide() {
5800
+ return _provide.apply(this, arguments);
5801
+ }
5802
+
5803
+ return provide;
5804
+ }();
5805
+
5806
+ return BaseMappingProvider;
5807
+ }();
5808
+
5731
5809
  var web3 = /*#__PURE__*/new Web3(); // chains we support fetching mappings for (can be different than the l2ChainIds arg for buildList)
5732
5810
 
5733
- var CHAINS_WITH_MAPPING_PROVIDERS = [ChainId.ARBITRUM_ONE, ChainId.POLYGON, ChainId.OPTIMISM, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE_GOERLI];
5811
+ var CHAINS_WITH_MAPPING_PROVIDERS = [ChainId.ARBITRUM_ONE, ChainId.POLYGON, ChainId.OPTIMISM, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE, ChainId.BASE_GOERLI];
5734
5812
  function buildList(_x, _x2) {
5735
5813
  return _buildList.apply(this, arguments);
5736
5814
  } // using a symbol lookup contract call to check whether the token exists on the L2
@@ -5922,6 +6000,9 @@ function getMappingProvider(chainId, l1TokenList) {
5922
6000
  case ChainId.AVALANCHE:
5923
6001
  return new AvalancheMappingProvider();
5924
6002
 
6003
+ case ChainId.BASE:
6004
+ return new BaseMappingProvider();
6005
+
5925
6006
  case ChainId.BASE_GOERLI:
5926
6007
  return new BaseGoerliMappingProvider();
5927
6008
 
@@ -5988,18 +6069,27 @@ function getChildTokenDetails(_x7, _x8, _x9) {
5988
6069
 
5989
6070
  function _getChildTokenDetails() {
5990
6071
  _getChildTokenDetails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(l1Token, chainId, chainIdToMappingsMap) {
5991
- var _l1Token$extensions, _l1Token$extensions$b, _l1Token$extensions$b2;
6072
+ var _l1Token$extensions;
5992
6073
 
5993
- var existingMapping, childToken, childTokenAddress, childTokenValid, decimals;
6074
+ var bridgeInfo, existingMapping, bridgeInfoForChain, childToken, childTokenAddress, childTokenValid, decimals;
5994
6075
  return _regeneratorRuntime.wrap(function _callee5$(_context6) {
5995
6076
  while (1) {
5996
6077
  switch (_context6.prev = _context6.next) {
5997
6078
  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
6079
+ bridgeInfo = l1Token == null ? void 0 : (_l1Token$extensions = l1Token.extensions) == null ? void 0 : _l1Token$extensions.bridgeInfo;
6080
+
6081
+ if (bridgeInfo && typeof bridgeInfo === 'object') {
6082
+ bridgeInfoForChain = bridgeInfo[chainId];
6083
+
6084
+ if (bridgeInfoForChain && typeof bridgeInfoForChain === 'object') {
6085
+ existingMapping = bridgeInfoForChain.tokenAddress;
6086
+ }
6087
+ } // use the externally fetched mappings if manual entry doesn't exist for the token/chain mapping
5999
6088
  // and the given chain is supported for fetching mappings
6000
6089
 
6090
+
6001
6091
  if (!(CHAINS_WITH_MAPPING_PROVIDERS.includes(chainId) && existingMapping === undefined)) {
6002
- _context6.next = 14;
6092
+ _context6.next = 15;
6003
6093
  break;
6004
6094
  }
6005
6095
 
@@ -6009,17 +6099,17 @@ function _getChildTokenDetails() {
6009
6099
  _context6.t1 = childTokenAddress;
6010
6100
 
6011
6101
  if (!_context6.t1) {
6012
- _context6.next = 10;
6102
+ _context6.next = 11;
6013
6103
  break;
6014
6104
  }
6015
6105
 
6016
- _context6.next = 9;
6106
+ _context6.next = 10;
6017
6107
  return hasExistingTokenContract(childTokenAddress, chainId);
6018
6108
 
6019
- case 9:
6109
+ case 10:
6020
6110
  _context6.t1 = _context6.sent;
6021
6111
 
6022
- case 10:
6112
+ case 11:
6023
6113
  _context6.t2 = _context6.t1;
6024
6114
  childTokenValid = (0, _context6.t0)(_context6.t2);
6025
6115
  decimals = childToken && (chainId === ChainId.BNB || chainId === ChainId.AVALANCHE) ? childToken.decimals : undefined;
@@ -6029,13 +6119,13 @@ function _getChildTokenDetails() {
6029
6119
  decimals: decimals
6030
6120
  });
6031
6121
 
6032
- case 14:
6122
+ case 15:
6033
6123
  return _context6.abrupt("return", {
6034
6124
  childTokenValid: !!existingMapping,
6035
6125
  childTokenAddress: existingMapping
6036
6126
  });
6037
6127
 
6038
- case 15:
6128
+ case 16:
6039
6129
  case "end":
6040
6130
  return _context6.stop();
6041
6131
  }
@@ -6125,7 +6215,7 @@ function chainify(_x) {
6125
6215
 
6126
6216
  function _chainify() {
6127
6217
  _chainify = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenListOrPathOrUrl) {
6128
- var l1TokenList, l2Chains, chainified, merged, tokenMap;
6218
+ var l1TokenList, l2Chains, chainified, merged;
6129
6219
  return _regeneratorRuntime.wrap(function _callee$(_context) {
6130
6220
  while (1) {
6131
6221
  switch (_context.prev = _context.next) {
@@ -6135,7 +6225,7 @@ function _chainify() {
6135
6225
 
6136
6226
  case 2:
6137
6227
  l1TokenList = _context.sent;
6138
- l2Chains = [ChainId.POLYGON, ChainId.ARBITRUM_ONE, ChainId.OPTIMISM, ChainId.CELO, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE_GOERLI];
6228
+ l2Chains = [ChainId.POLYGON, ChainId.ARBITRUM_ONE, ChainId.OPTIMISM, ChainId.CELO, ChainId.BNB, ChainId.AVALANCHE, ChainId.BASE, ChainId.BASE_GOERLI];
6139
6229
  _context.next = 6;
6140
6230
  return chainifyTokenList(l2Chains, l1TokenListOrPathOrUrl);
6141
6231
 
@@ -6143,19 +6233,9 @@ function _chainify() {
6143
6233
  chainified = _context.sent;
6144
6234
  merged = mergeTokenLists(l1TokenList, // providing l1 first to make sure duplicated tokens resolve to this list
6145
6235
  chainified);
6146
- tokenMap = {};
6236
+ return _context.abrupt("return", merged);
6147
6237
 
6148
- if (merged.tokens && merged.tokens.length > 0) {
6149
- merged.tokens.forEach(function (token) {
6150
- tokenMap[token.chainId + "_" + token.address] = token;
6151
- });
6152
- }
6153
-
6154
- return _context.abrupt("return", _extends({}, merged, {
6155
- tokenMap: tokenMap
6156
- }));
6157
-
6158
- case 11:
6238
+ case 9:
6159
6239
  case "end":
6160
6240
  return _context.stop();
6161
6241
  }
@@ -6220,7 +6300,7 @@ function mergeTokenLists(primary, secondary) {
6220
6300
 
6221
6301
  var merged = merge(group[0], group[1]);
6222
6302
 
6223
- if ((_merged$extensions = merged.extensions) != null && _merged$extensions.bridgeInfo) {
6303
+ if ((_merged$extensions = merged.extensions) != null && _merged$extensions.bridgeInfo && typeof merged.extensions.bridgeInfo === 'object') {
6224
6304
  // remove reference to self-chain from merge
6225
6305
  delete merged.extensions.bridgeInfo[merged.chainId];
6226
6306
  }