@uniswap/token-list-bridge-utils 1.0.7 → 1.0.8

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.
@@ -4,10 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var lodash = require('lodash');
6
6
  var dotenv = require('dotenv');
7
- var ethers = require('ethers');
8
- var L1GatewayRouter__factory = require('@arbitrum/sdk/dist/lib/abi/factories/L1GatewayRouter__factory');
9
7
  var fs = require('fs');
10
8
  var axios = require('axios');
9
+ var ethers = require('ethers');
10
+ var L1GatewayRouter__factory = require('@arbitrum/sdk/dist/lib/abi/factories/L1GatewayRouter__factory');
11
+ var Web3 = require('web3');
11
12
 
12
13
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
14
 
@@ -30,6 +31,7 @@ function _interopNamespace(e) {
30
31
  }
31
32
 
32
33
  var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
34
+ var Web3__default = /*#__PURE__*/_interopDefaultLegacy(Web3);
33
35
 
34
36
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
35
37
  try {
@@ -896,173 +898,6 @@ var ChainId;
896
898
  ChainId[ChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI";
897
899
  })(ChainId || (ChainId = {}));
898
900
 
899
- dotenv.config();
900
- process.env.MAINNET_RPC = process.env.MAINNET_RPC || 'https://cloudflare-eth.com/';
901
-
902
- var networkID = 42161; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
903
-
904
- var getNetworkConfig = /*#__PURE__*/function () {
905
- var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
906
- var _yield$import, getL1Network, getL2Network, MultiCaller, l2Network, l1Network, arbProvider, ethProvider, l1MultiCaller, l2MultiCaller;
907
-
908
- return _regeneratorRuntime.wrap(function _callee$(_context) {
909
- while (1) {
910
- switch (_context.prev = _context.next) {
911
- case 0:
912
- _context.next = 2;
913
- return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@arbitrum/sdk')); });
914
-
915
- case 2:
916
- _yield$import = _context.sent;
917
- getL1Network = _yield$import.getL1Network;
918
- getL2Network = _yield$import.getL2Network;
919
- MultiCaller = _yield$import.MultiCaller;
920
- _context.next = 8;
921
- return getL2Network(networkID);
922
-
923
- case 8:
924
- l2Network = _context.sent;
925
- _context.next = 11;
926
- return getL1Network(l2Network.partnerChainID);
927
-
928
- case 11:
929
- l1Network = _context.sent;
930
- arbProvider = new ethers.providers.JsonRpcProvider(l2Network.rpcURL);
931
- ethProvider = new ethers.providers.JsonRpcProvider(l1Network.rpcURL);
932
- _context.next = 16;
933
- return MultiCaller.fromProvider(ethProvider);
934
-
935
- case 16:
936
- l1MultiCaller = _context.sent;
937
- _context.next = 19;
938
- return MultiCaller.fromProvider(arbProvider);
939
-
940
- case 19:
941
- l2MultiCaller = _context.sent;
942
- return _context.abrupt("return", {
943
- l1: {
944
- network: l1Network,
945
- provider: ethProvider,
946
- multiCaller: l1MultiCaller
947
- },
948
- l2: {
949
- network: l2Network,
950
- provider: arbProvider,
951
- multiCaller: l2MultiCaller
952
- }
953
- });
954
-
955
- case 21:
956
- case "end":
957
- return _context.stop();
958
- }
959
- }
960
- }, _callee);
961
- }));
962
-
963
- return function getNetworkConfig() {
964
- return _ref.apply(this, arguments);
965
- };
966
- }();
967
-
968
- var getL2TokenAddressesFromL1 = /*#__PURE__*/function () {
969
- var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenAddresses, multiCaller, l1GatewayRouterAddress) {
970
- var iFace;
971
- return _regeneratorRuntime.wrap(function _callee$(_context) {
972
- while (1) {
973
- switch (_context.prev = _context.next) {
974
- case 0:
975
- iFace = L1GatewayRouter__factory.L1GatewayRouter__factory.createInterface();
976
- _context.next = 3;
977
- return multiCaller.multiCall(l1TokenAddresses.map(function (addr) {
978
- return {
979
- encoder: function encoder() {
980
- return iFace.encodeFunctionData('calculateL2TokenAddress', [addr]);
981
- },
982
- decoder: function decoder(returnData) {
983
- return iFace.decodeFunctionResult('calculateL2TokenAddress', returnData)[0];
984
- },
985
- targetAddr: l1GatewayRouterAddress
986
- };
987
- }));
988
-
989
- case 3:
990
- return _context.abrupt("return", _context.sent);
991
-
992
- case 4:
993
- case "end":
994
- return _context.stop();
995
- }
996
- }
997
- }, _callee);
998
- }));
999
-
1000
- return function getL2TokenAddressesFromL1(_x, _x2, _x3) {
1001
- return _ref.apply(this, arguments);
1002
- };
1003
- }();
1004
-
1005
- /**
1006
- * This provider provides the l1->l2(Arbitrum) address mappings using the arbitrum SDK.
1007
- */
1008
-
1009
- var ArbitrumMappingProvider = /*#__PURE__*/function () {
1010
- function ArbitrumMappingProvider(l1TokenList) {
1011
- this.l1TokenList = void 0;
1012
- this.l1TokenList = l1TokenList;
1013
- }
1014
-
1015
- var _proto = ArbitrumMappingProvider.prototype;
1016
-
1017
- _proto.provide = /*#__PURE__*/function () {
1018
- var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1019
- var tokens, _yield$getNetworkConf, l1, l2, tokenAddresses, l2AddressesFromL1;
1020
-
1021
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1022
- while (1) {
1023
- switch (_context.prev = _context.next) {
1024
- case 0:
1025
- tokens = {};
1026
- _context.next = 3;
1027
- return getNetworkConfig();
1028
-
1029
- case 3:
1030
- _yield$getNetworkConf = _context.sent;
1031
- l1 = _yield$getNetworkConf.l1;
1032
- l2 = _yield$getNetworkConf.l2;
1033
- tokenAddresses = this.l1TokenList.tokens.map(function (token) {
1034
- return token.address.toLowerCase();
1035
- });
1036
- _context.next = 9;
1037
- return getL2TokenAddressesFromL1(tokenAddresses, l1.multiCaller, l2.network.tokenBridge.l1GatewayRouter);
1038
-
1039
- case 9:
1040
- l2AddressesFromL1 = _context.sent;
1041
- tokens = tokenAddresses.reduce(function (obj, key, index) {
1042
- var _extends2;
1043
-
1044
- return _extends({}, obj, (_extends2 = {}, _extends2[key] = l2AddressesFromL1[index], _extends2));
1045
- }, {});
1046
- return _context.abrupt("return", tokens);
1047
-
1048
- case 12:
1049
- case "end":
1050
- return _context.stop();
1051
- }
1052
- }
1053
- }, _callee, this);
1054
- }));
1055
-
1056
- function provide() {
1057
- return _provide.apply(this, arguments);
1058
- }
1059
-
1060
- return provide;
1061
- }();
1062
-
1063
- return ArbitrumMappingProvider;
1064
- }();
1065
-
1066
901
  function compareTokenInfos(t1, t2) {
1067
902
  if (t1.chainId === t2.chainId) {
1068
903
  return t1.symbol.toLowerCase() < t2.symbol.toLowerCase() ? -1 : 1;
@@ -1257,6 +1092,228 @@ var isTokenList = function isTokenList(obj) {
1257
1092
  throw new Error('tokenlist typeguard error: token missing required key');
1258
1093
  }
1259
1094
  };
1095
+ function getRpcUrl(chainId) {
1096
+ switch (chainId) {
1097
+ case ChainId.MAINNET:
1098
+ return 'https://cloudflare-eth.com/';
1099
+
1100
+ case ChainId.OPTIMISM:
1101
+ return 'https://mainnet.optimism.io';
1102
+
1103
+ case ChainId.OPTIMISTIC_KOVAN:
1104
+ return 'https://kovan.optimism.io';
1105
+
1106
+ case ChainId.ARBITRUM_ONE:
1107
+ return 'https://arb1.arbitrum.io/rpc';
1108
+
1109
+ case ChainId.ARBITRUM_RINKEBY:
1110
+ return 'https://rinkeby.arbitrum.io/rpc';
1111
+
1112
+ case ChainId.POLYGON:
1113
+ return 'https://polygon-rpc.com/';
1114
+
1115
+ case ChainId.POLYGON_MUMBAI:
1116
+ return 'https://rpc-endpoints.superfluid.dev/mumbai';
1117
+ }
1118
+
1119
+ throw new Error('Unsupported ChainId');
1120
+ }
1121
+ function getTokenSymbolFromContract(_x6) {
1122
+ return _getTokenSymbolFromContract.apply(this, arguments);
1123
+ }
1124
+
1125
+ function _getTokenSymbolFromContract() {
1126
+ _getTokenSymbolFromContract = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(tokenContract) {
1127
+ var symbol;
1128
+ return _regeneratorRuntime.wrap(function _callee6$(_context6) {
1129
+ while (1) {
1130
+ switch (_context6.prev = _context6.next) {
1131
+ case 0:
1132
+ _context6.next = 2;
1133
+ return Promise.all([tokenContract.methods.symbol().call()]);
1134
+
1135
+ case 2:
1136
+ symbol = _context6.sent;
1137
+ return _context6.abrupt("return", symbol);
1138
+
1139
+ case 4:
1140
+ case "end":
1141
+ return _context6.stop();
1142
+ }
1143
+ }
1144
+ }, _callee6);
1145
+ }));
1146
+ return _getTokenSymbolFromContract.apply(this, arguments);
1147
+ }
1148
+
1149
+ var _process$env, _process$env$MAINNET_;
1150
+
1151
+ dotenv.config();
1152
+ (_process$env$MAINNET_ = (_process$env = process.env).MAINNET_RPC) != null ? _process$env$MAINNET_ : _process$env.MAINNET_RPC = /*#__PURE__*/getRpcUrl(ChainId.MAINNET);
1153
+
1154
+ var networkID = 42161; // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/instantiate_bridge.ts
1155
+
1156
+ var getNetworkConfig = /*#__PURE__*/function () {
1157
+ var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1158
+ var _yield$import, getL1Network, getL2Network, MultiCaller, l2Network, l1Network, arbProvider, ethProvider, l1MultiCaller, l2MultiCaller;
1159
+
1160
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1161
+ while (1) {
1162
+ switch (_context.prev = _context.next) {
1163
+ case 0:
1164
+ _context.next = 2;
1165
+ return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@arbitrum/sdk')); });
1166
+
1167
+ case 2:
1168
+ _yield$import = _context.sent;
1169
+ getL1Network = _yield$import.getL1Network;
1170
+ getL2Network = _yield$import.getL2Network;
1171
+ MultiCaller = _yield$import.MultiCaller;
1172
+ _context.next = 8;
1173
+ return getL2Network(networkID);
1174
+
1175
+ case 8:
1176
+ l2Network = _context.sent;
1177
+ _context.next = 11;
1178
+ return getL1Network(l2Network.partnerChainID);
1179
+
1180
+ case 11:
1181
+ l1Network = _context.sent;
1182
+ arbProvider = new ethers.providers.JsonRpcProvider(l2Network.rpcURL);
1183
+ ethProvider = new ethers.providers.JsonRpcProvider(l1Network.rpcURL);
1184
+ _context.next = 16;
1185
+ return MultiCaller.fromProvider(ethProvider);
1186
+
1187
+ case 16:
1188
+ l1MultiCaller = _context.sent;
1189
+ _context.next = 19;
1190
+ return MultiCaller.fromProvider(arbProvider);
1191
+
1192
+ case 19:
1193
+ l2MultiCaller = _context.sent;
1194
+ return _context.abrupt("return", {
1195
+ l1: {
1196
+ network: l1Network,
1197
+ provider: ethProvider,
1198
+ multiCaller: l1MultiCaller
1199
+ },
1200
+ l2: {
1201
+ network: l2Network,
1202
+ provider: arbProvider,
1203
+ multiCaller: l2MultiCaller
1204
+ }
1205
+ });
1206
+
1207
+ case 21:
1208
+ case "end":
1209
+ return _context.stop();
1210
+ }
1211
+ }
1212
+ }, _callee);
1213
+ }));
1214
+
1215
+ return function getNetworkConfig() {
1216
+ return _ref.apply(this, arguments);
1217
+ };
1218
+ }();
1219
+
1220
+ var getL2TokenAddressesFromL1 = /*#__PURE__*/function () {
1221
+ var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenAddresses, multiCaller, l1GatewayRouterAddress) {
1222
+ var iFace;
1223
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1224
+ while (1) {
1225
+ switch (_context.prev = _context.next) {
1226
+ case 0:
1227
+ iFace = L1GatewayRouter__factory.L1GatewayRouter__factory.createInterface();
1228
+ _context.next = 3;
1229
+ return multiCaller.multiCall(l1TokenAddresses.map(function (addr) {
1230
+ return {
1231
+ encoder: function encoder() {
1232
+ return iFace.encodeFunctionData('calculateL2TokenAddress', [addr]);
1233
+ },
1234
+ decoder: function decoder(returnData) {
1235
+ return iFace.decodeFunctionResult('calculateL2TokenAddress', returnData)[0];
1236
+ },
1237
+ targetAddr: l1GatewayRouterAddress
1238
+ };
1239
+ }));
1240
+
1241
+ case 3:
1242
+ return _context.abrupt("return", _context.sent);
1243
+
1244
+ case 4:
1245
+ case "end":
1246
+ return _context.stop();
1247
+ }
1248
+ }
1249
+ }, _callee);
1250
+ }));
1251
+
1252
+ return function getL2TokenAddressesFromL1(_x, _x2, _x3) {
1253
+ return _ref.apply(this, arguments);
1254
+ };
1255
+ }();
1256
+
1257
+ /**
1258
+ * This provider provides the l1->l2(Arbitrum) address mappings using the arbitrum SDK.
1259
+ */
1260
+
1261
+ var ArbitrumMappingProvider = /*#__PURE__*/function () {
1262
+ function ArbitrumMappingProvider(l1TokenList) {
1263
+ this.l1TokenList = void 0;
1264
+ this.l1TokenList = l1TokenList;
1265
+ }
1266
+
1267
+ var _proto = ArbitrumMappingProvider.prototype;
1268
+
1269
+ _proto.provide = /*#__PURE__*/function () {
1270
+ var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1271
+ var tokens, _yield$getNetworkConf, l1, l2, tokenAddresses, l2AddressesFromL1;
1272
+
1273
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1274
+ while (1) {
1275
+ switch (_context.prev = _context.next) {
1276
+ case 0:
1277
+ tokens = {};
1278
+ _context.next = 3;
1279
+ return getNetworkConfig();
1280
+
1281
+ case 3:
1282
+ _yield$getNetworkConf = _context.sent;
1283
+ l1 = _yield$getNetworkConf.l1;
1284
+ l2 = _yield$getNetworkConf.l2;
1285
+ tokenAddresses = this.l1TokenList.tokens.map(function (token) {
1286
+ return token.address.toLowerCase();
1287
+ });
1288
+ _context.next = 9;
1289
+ return getL2TokenAddressesFromL1(tokenAddresses, l1.multiCaller, l2.network.tokenBridge.l1GatewayRouter);
1290
+
1291
+ case 9:
1292
+ l2AddressesFromL1 = _context.sent;
1293
+ tokens = tokenAddresses.reduce(function (obj, key, index) {
1294
+ var _extends2;
1295
+
1296
+ return _extends({}, obj, (_extends2 = {}, _extends2[key] = l2AddressesFromL1[index], _extends2));
1297
+ }, {});
1298
+ return _context.abrupt("return", tokens);
1299
+
1300
+ case 12:
1301
+ case "end":
1302
+ return _context.stop();
1303
+ }
1304
+ }
1305
+ }, _callee, this);
1306
+ }));
1307
+
1308
+ function provide() {
1309
+ return _provide.apply(this, arguments);
1310
+ }
1311
+
1312
+ return provide;
1313
+ }();
1314
+
1315
+ return ArbitrumMappingProvider;
1316
+ }();
1260
1317
 
1261
1318
  var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/2138386277e4156d159615d1840882cecc398437/optimism.tokenlist.json';
1262
1319
  /**
@@ -1388,60 +1445,258 @@ var PolygonMappingProvider = /*#__PURE__*/function () {
1388
1445
  return PolygonMappingProvider;
1389
1446
  }();
1390
1447
 
1448
+ var abi = [{
1449
+ constant: true,
1450
+ inputs: [],
1451
+ name: 'name',
1452
+ outputs: [{
1453
+ name: '',
1454
+ type: 'string'
1455
+ }],
1456
+ payable: false,
1457
+ stateMutability: 'view',
1458
+ type: 'function'
1459
+ }, {
1460
+ constant: false,
1461
+ inputs: [{
1462
+ name: '_spender',
1463
+ type: 'address'
1464
+ }, {
1465
+ name: '_value',
1466
+ type: 'uint256'
1467
+ }],
1468
+ name: 'approve',
1469
+ outputs: [{
1470
+ name: '',
1471
+ type: 'bool'
1472
+ }],
1473
+ payable: false,
1474
+ stateMutability: 'nonpayable',
1475
+ type: 'function'
1476
+ }, {
1477
+ constant: true,
1478
+ inputs: [],
1479
+ name: 'totalSupply',
1480
+ outputs: [{
1481
+ name: '',
1482
+ type: 'uint256'
1483
+ }],
1484
+ payable: false,
1485
+ stateMutability: 'view',
1486
+ type: 'function'
1487
+ }, {
1488
+ constant: false,
1489
+ inputs: [{
1490
+ name: '_from',
1491
+ type: 'address'
1492
+ }, {
1493
+ name: '_to',
1494
+ type: 'address'
1495
+ }, {
1496
+ name: '_value',
1497
+ type: 'uint256'
1498
+ }],
1499
+ name: 'transferFrom',
1500
+ outputs: [{
1501
+ name: '',
1502
+ type: 'bool'
1503
+ }],
1504
+ payable: false,
1505
+ stateMutability: 'nonpayable',
1506
+ type: 'function'
1507
+ }, {
1508
+ constant: true,
1509
+ inputs: [],
1510
+ name: 'decimals',
1511
+ outputs: [{
1512
+ name: '',
1513
+ type: 'uint8'
1514
+ }],
1515
+ payable: false,
1516
+ stateMutability: 'view',
1517
+ type: 'function'
1518
+ }, {
1519
+ constant: true,
1520
+ inputs: [{
1521
+ name: '_owner',
1522
+ type: 'address'
1523
+ }],
1524
+ name: 'balanceOf',
1525
+ outputs: [{
1526
+ name: 'balance',
1527
+ type: 'uint256'
1528
+ }],
1529
+ payable: false,
1530
+ stateMutability: 'view',
1531
+ type: 'function'
1532
+ }, {
1533
+ constant: true,
1534
+ inputs: [],
1535
+ name: 'symbol',
1536
+ outputs: [{
1537
+ name: '',
1538
+ type: 'string'
1539
+ }],
1540
+ payable: false,
1541
+ stateMutability: 'view',
1542
+ type: 'function'
1543
+ }, {
1544
+ constant: false,
1545
+ inputs: [{
1546
+ name: '_to',
1547
+ type: 'address'
1548
+ }, {
1549
+ name: '_value',
1550
+ type: 'uint256'
1551
+ }],
1552
+ name: 'transfer',
1553
+ outputs: [{
1554
+ name: '',
1555
+ type: 'bool'
1556
+ }],
1557
+ payable: false,
1558
+ stateMutability: 'nonpayable',
1559
+ type: 'function'
1560
+ }, {
1561
+ constant: true,
1562
+ inputs: [{
1563
+ name: '_owner',
1564
+ type: 'address'
1565
+ }, {
1566
+ name: '_spender',
1567
+ type: 'address'
1568
+ }],
1569
+ name: 'allowance',
1570
+ outputs: [{
1571
+ name: '',
1572
+ type: 'uint256'
1573
+ }],
1574
+ payable: false,
1575
+ stateMutability: 'view',
1576
+ type: 'function'
1577
+ }, {
1578
+ payable: true,
1579
+ stateMutability: 'payable',
1580
+ type: 'fallback'
1581
+ }, {
1582
+ anonymous: false,
1583
+ inputs: [{
1584
+ indexed: true,
1585
+ name: 'owner',
1586
+ type: 'address'
1587
+ }, {
1588
+ indexed: true,
1589
+ name: 'spender',
1590
+ type: 'address'
1591
+ }, {
1592
+ indexed: false,
1593
+ name: 'value',
1594
+ type: 'uint256'
1595
+ }],
1596
+ name: 'Approval',
1597
+ type: 'event'
1598
+ }, {
1599
+ anonymous: false,
1600
+ inputs: [{
1601
+ indexed: true,
1602
+ name: 'from',
1603
+ type: 'address'
1604
+ }, {
1605
+ indexed: true,
1606
+ name: 'to',
1607
+ type: 'address'
1608
+ }, {
1609
+ indexed: false,
1610
+ name: 'value',
1611
+ type: 'uint256'
1612
+ }],
1613
+ name: 'Transfer',
1614
+ type: 'event'
1615
+ }];
1616
+
1617
+ var web3 = /*#__PURE__*/new Web3__default["default"]();
1391
1618
  function buildList(_x, _x2) {
1392
1619
  return _buildList.apply(this, arguments);
1393
- }
1620
+ } // using a symbol lookup contract call to check whether the token exists on the L2
1394
1621
 
1395
1622
  function _buildList() {
1396
1623
  _buildList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(chainId, l1TokenList) {
1397
- var tokenAddressMap, mappedTokens, _iterator, _step, rootToken, childToken, childTokenValid, _bridgeInfo, _bridgeInfo2, toRootExtensions, toChildExtensions, rootTokenInfo, childTokenInfo, tokenList;
1624
+ var tokenAddressMap, mappedTokens, _iterator, _step, rootToken, childToken, childTokenAddress, childTokenValid, _bridgeInfo, _bridgeInfo2, toRootExtensions, toChildExtensions, rootTokenInfo, childTokenInfo, tokenList;
1398
1625
 
1399
1626
  return _regeneratorRuntime.wrap(function _callee$(_context) {
1400
1627
  while (1) {
1401
1628
  switch (_context.prev = _context.next) {
1402
1629
  case 0:
1403
- _context.next = 2;
1630
+ web3.setProvider(getRpcUrl(chainId));
1631
+ _context.next = 3;
1404
1632
  return getMappingProvider(chainId, l1TokenList).provide();
1405
1633
 
1406
- case 2:
1634
+ case 3:
1407
1635
  tokenAddressMap = _context.sent;
1408
1636
  mappedTokens = [];
1637
+ _iterator = _createForOfIteratorHelperLoose(l1TokenList.tokens);
1409
1638
 
1410
- for (_iterator = _createForOfIteratorHelperLoose(l1TokenList.tokens); !(_step = _iterator()).done;) {
1411
- rootToken = _step.value;
1412
- childToken = tokenAddressMap[rootToken.address.toLowerCase()];
1413
- childTokenValid = Boolean(childToken && (typeof childToken === 'object' ? !childToken.deleted : true));
1414
-
1415
- if (rootToken.chainId === ChainId.MAINNET) {
1416
- // build extension info if available
1417
- toRootExtensions = childTokenValid ? {
1418
- extensions: {
1419
- bridgeInfo: (_bridgeInfo = {}, _bridgeInfo[rootToken.chainId] = {
1420
- tokenAddress: ethers.ethers.utils.getAddress(rootToken.address)
1421
- }, _bridgeInfo)
1422
- }
1423
- } : {};
1424
- toChildExtensions = childTokenValid ? {
1425
- extensions: {
1426
- bridgeInfo: (_bridgeInfo2 = {}, _bridgeInfo2[chainId] = {
1427
- tokenAddress: ethers.ethers.utils.getAddress(typeof childToken === 'object' ? childToken.child_token : childToken)
1428
- }, _bridgeInfo2)
1429
- }
1430
- } : {};
1431
- rootTokenInfo = _extends({}, rootToken, toChildExtensions);
1432
-
1433
- if (childTokenValid) {
1434
- childTokenInfo = _extends({}, rootToken, {
1435
- chainId: chainId,
1436
- address: ethers.ethers.utils.getAddress(typeof childToken === 'object' ? childToken.child_token : childToken)
1437
- }, toRootExtensions);
1438
- mappedTokens.push(childTokenInfo);
1439
- }
1639
+ case 6:
1640
+ if ((_step = _iterator()).done) {
1641
+ _context.next = 21;
1642
+ break;
1643
+ }
1644
+
1645
+ rootToken = _step.value;
1646
+ childToken = tokenAddressMap[rootToken.address.toLowerCase()];
1647
+ childTokenAddress = childToken ? ethers.ethers.utils.getAddress(typeof childToken === 'object' ? childToken.child_token : childToken) : undefined;
1648
+ _context.t0 = Boolean;
1649
+ _context.t1 = childTokenAddress && (typeof childToken === 'object' ? !childToken.deleted : true);
1650
+
1651
+ if (!_context.t1) {
1652
+ _context.next = 16;
1653
+ break;
1654
+ }
1440
1655
 
1441
- mappedTokens.push(rootTokenInfo);
1656
+ _context.next = 15;
1657
+ return hasExistingTokenContract(childTokenAddress, chainId);
1658
+
1659
+ case 15:
1660
+ _context.t1 = _context.sent;
1661
+
1662
+ case 16:
1663
+ _context.t2 = _context.t1;
1664
+ childTokenValid = (0, _context.t0)(_context.t2);
1665
+
1666
+ if (rootToken.chainId === ChainId.MAINNET) {
1667
+ // build extension info if available
1668
+ toRootExtensions = childTokenValid ? {
1669
+ extensions: {
1670
+ bridgeInfo: (_bridgeInfo = {}, _bridgeInfo[rootToken.chainId] = {
1671
+ tokenAddress: ethers.ethers.utils.getAddress(rootToken.address)
1672
+ }, _bridgeInfo)
1673
+ }
1674
+ } : {};
1675
+ toChildExtensions = childTokenValid ? {
1676
+ extensions: {
1677
+ bridgeInfo: (_bridgeInfo2 = {}, _bridgeInfo2[chainId] = {
1678
+ tokenAddress: childTokenAddress
1679
+ }, _bridgeInfo2)
1680
+ }
1681
+ } : {};
1682
+ rootTokenInfo = _extends({}, rootToken, toChildExtensions);
1683
+
1684
+ if (childTokenValid) {
1685
+ childTokenInfo = _extends({}, rootToken, {
1686
+ chainId: chainId,
1687
+ address: childTokenAddress
1688
+ }, toRootExtensions);
1689
+ mappedTokens.push(childTokenInfo);
1442
1690
  }
1691
+
1692
+ mappedTokens.push(rootTokenInfo);
1443
1693
  }
1444
1694
 
1695
+ case 19:
1696
+ _context.next = 6;
1697
+ break;
1698
+
1699
+ case 21:
1445
1700
  tokenList = {
1446
1701
  name: "(ChainId: " + chainId + ") " + l1TokenList.name,
1447
1702
  timestamp: new Date().toISOString(),
@@ -1450,7 +1705,7 @@ function _buildList() {
1450
1705
  };
1451
1706
  return _context.abrupt("return", tokenList);
1452
1707
 
1453
- case 7:
1708
+ case 23:
1454
1709
  case "end":
1455
1710
  return _context.stop();
1456
1711
  }
@@ -1460,6 +1715,44 @@ function _buildList() {
1460
1715
  return _buildList.apply(this, arguments);
1461
1716
  }
1462
1717
 
1718
+ function hasExistingTokenContract(_x3, _x4) {
1719
+ return _hasExistingTokenContract.apply(this, arguments);
1720
+ }
1721
+
1722
+ function _hasExistingTokenContract() {
1723
+ _hasExistingTokenContract = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(address, chainId) {
1724
+ var contract;
1725
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1726
+ while (1) {
1727
+ switch (_context2.prev = _context2.next) {
1728
+ case 0:
1729
+ _context2.prev = 0;
1730
+ contract = new web3.eth.Contract(abi, address);
1731
+ _context2.next = 4;
1732
+ return getTokenSymbolFromContract(contract);
1733
+
1734
+ case 4:
1735
+ _context2.next = 9;
1736
+ break;
1737
+
1738
+ case 6:
1739
+ _context2.prev = 6;
1740
+ _context2.t0 = _context2["catch"](0);
1741
+ return _context2.abrupt("return", false);
1742
+
1743
+ case 9:
1744
+ return _context2.abrupt("return", true);
1745
+
1746
+ case 10:
1747
+ case "end":
1748
+ return _context2.stop();
1749
+ }
1750
+ }
1751
+ }, _callee2, null, [[0, 6]]);
1752
+ }));
1753
+ return _hasExistingTokenContract.apply(this, arguments);
1754
+ }
1755
+
1463
1756
  function getMappingProvider(chainId, l1TokenList) {
1464
1757
  switch (chainId) {
1465
1758
  case ChainId.ARBITRUM_ONE: