@uniswap/token-list-bridge-utils 0.1.1-beta.1 → 0.1.1-beta.2
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.
- package/dist/arbitrum/gateway.d.ts +2 -0
- package/dist/{arb-token-lists/src/lib → arbitrum}/instantiate_bridge.d.ts +3 -4
- package/dist/constants/types.d.ts +30 -0
- package/dist/fixtures/index.d.ts +9 -0
- package/dist/providers/ArbitrumMappingProvider.d.ts +7 -6
- package/dist/providers/MappingProvider.d.ts +4 -2
- package/dist/providers/OptimismMappingProvider.d.ts +5 -4
- package/dist/providers/PolygonMappingProvider.d.ts +4 -2
- package/dist/providers/index.d.ts +2 -4
- package/dist/token-list-bridge-utils.cjs.development.js +324 -904
- package/dist/token-list-bridge-utils.cjs.development.js.map +1 -1
- package/dist/token-list-bridge-utils.cjs.production.min.js +1 -1
- package/dist/token-list-bridge-utils.cjs.production.min.js.map +1 -1
- package/dist/token-list-bridge-utils.esm.js +326 -900
- package/dist/token-list-bridge-utils.esm.js.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/package.json +7 -4
- package/src/arbitrum/gateway.ts +25 -0
- package/src/{arb-token-lists/src/lib → arbitrum}/instantiate_bridge.ts +11 -15
- package/src/constants/types.ts +28 -0
- package/src/fixtures/index.ts +40 -5
- package/src/index.test.ts +60 -18
- package/src/index.ts +5 -7
- package/src/providers/ArbitrumMappingProvider.ts +31 -21
- package/src/providers/MappingProvider.ts +4 -2
- package/src/providers/OptimismMappingProvider.ts +21 -5
- package/src/providers/PolygonMappingProvider.ts +22 -114
- package/src/providers/index.ts +81 -2
- package/src/utils.ts +71 -1
- package/dist/arb-token-lists/server/app.d.ts +0 -1
- package/dist/arb-token-lists/src/lib/getClargs.d.ts +0 -8
- package/dist/arb-token-lists/src/lib/graph.d.ts +0 -2
- package/dist/arb-token-lists/src/lib/token_list_gen.d.ts +0 -23
- package/dist/arb-token-lists/src/lib/types.d.ts +0 -36
- package/dist/arb-token-lists/src/lib/utils.d.ts +0 -18
- package/dist/arb-token-lists/src/main.d.ts +0 -1
- package/src/arb-token-lists/.env.sample +0 -4
- package/src/arb-token-lists/.eslintrc.js +0 -43
- package/src/arb-token-lists/.gitignore +0 -4
- package/src/arb-token-lists/package.json +0 -40
- package/src/arb-token-lists/readme.md +0 -14
- package/src/arb-token-lists/server/app.ts +0 -21
- package/src/arb-token-lists/src/Assets/coingecko_uris.json +0 -5108
- package/src/arb-token-lists/src/Assets/logo_uris.json +0 -44
- package/src/arb-token-lists/src/WarningList/warningTokens.json +0 -290
- package/src/arb-token-lists/src/lib/getClargs.ts +0 -32
- package/src/arb-token-lists/src/lib/graph.ts +0 -116
- package/src/arb-token-lists/src/lib/token_list_gen.ts +0 -334
- package/src/arb-token-lists/src/lib/types.ts +0 -44
- package/src/arb-token-lists/src/lib/utils.ts +0 -285
- package/src/arb-token-lists/src/main.ts +0 -54
- package/src/arb-token-lists/tsconfig.json +0 -20
- package/src/arb-token-lists/update_all +0 -6
- package/src/arb-token-lists/yarn.lock +0 -4273
|
@@ -3,28 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var lodash = require('lodash');
|
|
6
|
-
var tokenLists = require('@uniswap/token-lists');
|
|
7
|
-
var arbTs = require('arb-ts');
|
|
8
6
|
var ethers = require('ethers');
|
|
7
|
+
var dotenv = require('dotenv');
|
|
8
|
+
var sdk = require('@arbitrum/sdk');
|
|
9
|
+
var L1GatewayRouter__factory = require('@arbitrum/sdk/dist/lib/abi/factories/L1GatewayRouter__factory');
|
|
9
10
|
var fs = require('fs');
|
|
10
|
-
var graphqlRequest = require('graphql-request');
|
|
11
|
-
var Ajv = require('ajv');
|
|
12
|
-
var addFormats = require('ajv-formats');
|
|
13
11
|
var axios = require('axios');
|
|
14
|
-
var betterAjvErrors = require('better-ajv-errors');
|
|
15
|
-
var path = require('path');
|
|
16
|
-
var yargs = require('yargs/yargs');
|
|
17
|
-
var dotenv = require('dotenv');
|
|
18
12
|
|
|
19
13
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
20
14
|
|
|
21
|
-
var Ajv__default = /*#__PURE__*/_interopDefaultLegacy(Ajv);
|
|
22
|
-
var addFormats__default = /*#__PURE__*/_interopDefaultLegacy(addFormats);
|
|
23
15
|
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
|
|
24
|
-
var betterAjvErrors__default = /*#__PURE__*/_interopDefaultLegacy(betterAjvErrors);
|
|
25
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
26
|
-
var yargs__default = /*#__PURE__*/_interopDefaultLegacy(yargs);
|
|
27
|
-
var dotenv__default = /*#__PURE__*/_interopDefaultLegacy(dotenv);
|
|
28
16
|
|
|
29
17
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
30
18
|
try {
|
|
@@ -80,15 +68,6 @@ function _extends() {
|
|
|
80
68
|
return _extends.apply(this, arguments);
|
|
81
69
|
}
|
|
82
70
|
|
|
83
|
-
function _taggedTemplateLiteralLoose(strings, raw) {
|
|
84
|
-
if (!raw) {
|
|
85
|
-
raw = strings.slice(0);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
strings.raw = raw;
|
|
89
|
-
return strings;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
71
|
function _unsupportedIterableToArray(o, minLen) {
|
|
93
72
|
if (!o) return;
|
|
94
73
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -900,25 +879,63 @@ var ChainId;
|
|
|
900
879
|
ChainId[ChainId["POLYGON_MUMBAI"] = 80001] = "POLYGON_MUMBAI";
|
|
901
880
|
})(ChainId || (ChainId = {}));
|
|
902
881
|
|
|
903
|
-
var
|
|
904
|
-
|
|
905
|
-
var
|
|
906
|
-
var
|
|
882
|
+
var networkID = 42161;
|
|
883
|
+
dotenv.config();
|
|
884
|
+
var getNetworkConfig = /*#__PURE__*/function () {
|
|
885
|
+
var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
886
|
+
var l2Network, l1Network, arbProvider, ethProvider, l1MultiCaller, l2MultiCaller;
|
|
887
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
888
|
+
while (1) {
|
|
889
|
+
switch (_context.prev = _context.next) {
|
|
890
|
+
case 0:
|
|
891
|
+
_context.next = 2;
|
|
892
|
+
return sdk.getL2Network(networkID);
|
|
907
893
|
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
var listNameToArbifiedListName = function listNameToArbifiedListName(name) {
|
|
913
|
-
var prefix = 'Arbed ';
|
|
914
|
-
var fileName = sanitizeString(name);
|
|
894
|
+
case 2:
|
|
895
|
+
l2Network = _context.sent;
|
|
896
|
+
_context.next = 5;
|
|
897
|
+
return sdk.getL1Network(l2Network.partnerChainID);
|
|
915
898
|
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
899
|
+
case 5:
|
|
900
|
+
l1Network = _context.sent;
|
|
901
|
+
arbProvider = new ethers.providers.JsonRpcProvider(l2Network.rpcURL);
|
|
902
|
+
ethProvider = new ethers.providers.JsonRpcProvider(l1Network.rpcURL);
|
|
903
|
+
_context.next = 10;
|
|
904
|
+
return sdk.MultiCaller.fromProvider(ethProvider);
|
|
905
|
+
|
|
906
|
+
case 10:
|
|
907
|
+
l1MultiCaller = _context.sent;
|
|
908
|
+
_context.next = 13;
|
|
909
|
+
return sdk.MultiCaller.fromProvider(arbProvider);
|
|
910
|
+
|
|
911
|
+
case 13:
|
|
912
|
+
l2MultiCaller = _context.sent;
|
|
913
|
+
return _context.abrupt("return", {
|
|
914
|
+
l1: {
|
|
915
|
+
network: l1Network,
|
|
916
|
+
provider: ethProvider,
|
|
917
|
+
multiCaller: l1MultiCaller
|
|
918
|
+
},
|
|
919
|
+
l2: {
|
|
920
|
+
network: l2Network,
|
|
921
|
+
provider: arbProvider,
|
|
922
|
+
multiCaller: l2MultiCaller
|
|
923
|
+
}
|
|
924
|
+
});
|
|
925
|
+
|
|
926
|
+
case 15:
|
|
927
|
+
case "end":
|
|
928
|
+
return _context.stop();
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
}, _callee);
|
|
932
|
+
}));
|
|
933
|
+
|
|
934
|
+
return function getNetworkConfig() {
|
|
935
|
+
return _ref.apply(this, arguments);
|
|
936
|
+
};
|
|
937
|
+
}();
|
|
919
938
|
|
|
920
|
-
return fileName.split(' ').slice(0, 2).join(' ').slice(0, 20);
|
|
921
|
-
};
|
|
922
939
|
var getL2TokenAddressesFromL1 = /*#__PURE__*/function () {
|
|
923
940
|
var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenAddresses, multiCaller, l1GatewayRouterAddress) {
|
|
924
941
|
var iFace;
|
|
@@ -926,7 +943,7 @@ var getL2TokenAddressesFromL1 = /*#__PURE__*/function () {
|
|
|
926
943
|
while (1) {
|
|
927
944
|
switch (_context.prev = _context.next) {
|
|
928
945
|
case 0:
|
|
929
|
-
iFace =
|
|
946
|
+
iFace = L1GatewayRouter__factory.L1GatewayRouter__factory.createInterface();
|
|
930
947
|
_context.next = 3;
|
|
931
948
|
return multiCaller.multiCall(l1TokenAddresses.map(function (addr) {
|
|
932
949
|
return {
|
|
@@ -955,243 +972,218 @@ var getL2TokenAddressesFromL1 = /*#__PURE__*/function () {
|
|
|
955
972
|
return _ref.apply(this, arguments);
|
|
956
973
|
};
|
|
957
974
|
}();
|
|
958
|
-
var getL2TokenAddressesFromL2 = /*#__PURE__*/function () {
|
|
959
|
-
var _ref2 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(l1TokenAddresses, multiCaller, l2GatewayRouterAddress) {
|
|
960
|
-
var iFace;
|
|
961
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
962
|
-
while (1) {
|
|
963
|
-
switch (_context2.prev = _context2.next) {
|
|
964
|
-
case 0:
|
|
965
|
-
iFace = arbTs.abi.L2GatewayRouter__factory.createInterface();
|
|
966
|
-
_context2.next = 3;
|
|
967
|
-
return multiCaller.multiCall(l1TokenAddresses.map(function (addr) {
|
|
968
|
-
return {
|
|
969
|
-
encoder: function encoder() {
|
|
970
|
-
return iFace.encodeFunctionData('calculateL2TokenAddress', [addr]);
|
|
971
|
-
},
|
|
972
|
-
decoder: function decoder(returnData) {
|
|
973
|
-
return iFace.decodeFunctionResult('calculateL2TokenAddress', returnData)[0];
|
|
974
|
-
},
|
|
975
|
-
targetAddr: l2GatewayRouterAddress
|
|
976
|
-
};
|
|
977
|
-
}));
|
|
978
975
|
|
|
979
|
-
|
|
980
|
-
|
|
976
|
+
/**
|
|
977
|
+
* This provider provides the l1->l2(Arbitrum) address mappings using the arbitrum SDK.
|
|
978
|
+
*/
|
|
981
979
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
}, _callee2);
|
|
988
|
-
}));
|
|
980
|
+
var ArbitrumMappingProvider = /*#__PURE__*/function () {
|
|
981
|
+
function ArbitrumMappingProvider(l1TokenList) {
|
|
982
|
+
this.l1TokenList = void 0;
|
|
983
|
+
this.l1TokenList = l1TokenList;
|
|
984
|
+
}
|
|
989
985
|
|
|
990
|
-
|
|
991
|
-
return _ref2.apply(this, arguments);
|
|
992
|
-
};
|
|
993
|
-
}();
|
|
994
|
-
var getLogoUri = /*#__PURE__*/function () {
|
|
995
|
-
var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(l1TokenAddress) {
|
|
996
|
-
var l1TokenAddressLCase, logoUri, coinGeckoURI, trustWalletUri, uris, _iterator, _step, uri, res;
|
|
986
|
+
var _proto = ArbitrumMappingProvider.prototype;
|
|
997
987
|
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
case 0:
|
|
1002
|
-
l1TokenAddressLCase = l1TokenAddress.toLowerCase();
|
|
1003
|
-
logoUri = logoUris[l1TokenAddressLCase];
|
|
1004
|
-
coinGeckoURI = coingeckoURIs[l1TokenAddressLCase];
|
|
1005
|
-
trustWalletUri = "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/" + l1TokenAddress + "/logo.png";
|
|
1006
|
-
uris = [logoUri, coinGeckoURI, trustWalletUri].filter(function (x) {
|
|
1007
|
-
return !!x;
|
|
1008
|
-
});
|
|
1009
|
-
_iterator = _createForOfIteratorHelperLoose(uris);
|
|
988
|
+
_proto.provide = /*#__PURE__*/function () {
|
|
989
|
+
var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
990
|
+
var tokens, _yield$getNetworkConf, l1, l2, tokenAddresses, l2AddressesFromL1;
|
|
1010
991
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
992
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
993
|
+
while (1) {
|
|
994
|
+
switch (_context.prev = _context.next) {
|
|
995
|
+
case 0:
|
|
996
|
+
tokens = {};
|
|
997
|
+
_context.next = 3;
|
|
998
|
+
return getNetworkConfig();
|
|
999
|
+
|
|
1000
|
+
case 3:
|
|
1001
|
+
_yield$getNetworkConf = _context.sent;
|
|
1002
|
+
l1 = _yield$getNetworkConf.l1;
|
|
1003
|
+
l2 = _yield$getNetworkConf.l2;
|
|
1004
|
+
tokenAddresses = this.l1TokenList.tokens.map(function (token) {
|
|
1005
|
+
return token.address.toLowerCase();
|
|
1006
|
+
});
|
|
1007
|
+
_context.next = 9;
|
|
1008
|
+
return getL2TokenAddressesFromL1(tokenAddresses, l1.multiCaller, l2.network.tokenBridge.l1GatewayRouter);
|
|
1016
1009
|
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1010
|
+
case 9:
|
|
1011
|
+
l2AddressesFromL1 = _context.sent;
|
|
1012
|
+
tokens = tokenAddresses.reduce(function (obj, key, index) {
|
|
1013
|
+
var _extends2;
|
|
1021
1014
|
|
|
1022
|
-
|
|
1023
|
-
|
|
1015
|
+
return _extends({}, obj, (_extends2 = {}, _extends2[key] = l2AddressesFromL1[index], _extends2));
|
|
1016
|
+
}, {});
|
|
1017
|
+
return _context.abrupt("return", tokens);
|
|
1024
1018
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1019
|
+
case 12:
|
|
1020
|
+
case "end":
|
|
1021
|
+
return _context.stop();
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
}, _callee, this);
|
|
1025
|
+
}));
|
|
1026
|
+
|
|
1027
|
+
function provide() {
|
|
1028
|
+
return _provide.apply(this, arguments);
|
|
1029
|
+
}
|
|
1029
1030
|
|
|
1030
|
-
|
|
1031
|
+
return provide;
|
|
1032
|
+
}();
|
|
1033
|
+
|
|
1034
|
+
return ArbitrumMappingProvider;
|
|
1035
|
+
}();
|
|
1036
|
+
|
|
1037
|
+
function compareTokenInfos(t1, t2) {
|
|
1038
|
+
if (t1.chainId === t2.chainId) {
|
|
1039
|
+
return t1.symbol.toLowerCase() < t2.symbol.toLowerCase() ? -1 : 1;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
return t1.chainId < t2.chainId ? -1 : 1;
|
|
1043
|
+
} // ref: https://github.com/OffchainLabs/arb-token-lists/blob/master/src/lib/utils.ts
|
|
1031
1044
|
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1045
|
+
function getTokenList(_x) {
|
|
1046
|
+
return _getTokenList.apply(this, arguments);
|
|
1047
|
+
}
|
|
1035
1048
|
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1049
|
+
function _getTokenList() {
|
|
1050
|
+
_getTokenList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(l1TokenListOrPathOrUrl) {
|
|
1051
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
1052
|
+
while (1) {
|
|
1053
|
+
switch (_context5.prev = _context5.next) {
|
|
1054
|
+
case 0:
|
|
1055
|
+
if (!(typeof l1TokenListOrPathOrUrl === 'string')) {
|
|
1056
|
+
_context5.next = 4;
|
|
1057
|
+
break;
|
|
1058
|
+
}
|
|
1039
1059
|
|
|
1040
|
-
|
|
1041
|
-
_context3.next = 6;
|
|
1042
|
-
break;
|
|
1060
|
+
return _context5.abrupt("return", getTokenListObj(l1TokenListOrPathOrUrl));
|
|
1043
1061
|
|
|
1044
|
-
case
|
|
1045
|
-
return
|
|
1062
|
+
case 4:
|
|
1063
|
+
return _context5.abrupt("return", l1TokenListOrPathOrUrl);
|
|
1046
1064
|
|
|
1047
|
-
case
|
|
1065
|
+
case 5:
|
|
1048
1066
|
case "end":
|
|
1049
|
-
return
|
|
1067
|
+
return _context5.stop();
|
|
1050
1068
|
}
|
|
1051
1069
|
}
|
|
1052
|
-
},
|
|
1070
|
+
}, _callee5);
|
|
1053
1071
|
}));
|
|
1072
|
+
return _getTokenList.apply(this, arguments);
|
|
1073
|
+
}
|
|
1054
1074
|
|
|
1055
|
-
return function getLogoUri(_x7) {
|
|
1056
|
-
return _ref3.apply(this, arguments);
|
|
1057
|
-
};
|
|
1058
|
-
}();
|
|
1059
1075
|
var getTokenListObjFromUrl = /*#__PURE__*/function () {
|
|
1060
|
-
var
|
|
1061
|
-
return _regeneratorRuntime.wrap(function
|
|
1076
|
+
var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(url) {
|
|
1077
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1062
1078
|
while (1) {
|
|
1063
|
-
switch (
|
|
1079
|
+
switch (_context.prev = _context.next) {
|
|
1064
1080
|
case 0:
|
|
1065
|
-
|
|
1081
|
+
_context.next = 2;
|
|
1066
1082
|
return axios__default["default"].get(url);
|
|
1067
1083
|
|
|
1068
1084
|
case 2:
|
|
1069
|
-
return
|
|
1085
|
+
return _context.abrupt("return", _context.sent.data);
|
|
1070
1086
|
|
|
1071
1087
|
case 3:
|
|
1072
1088
|
case "end":
|
|
1073
|
-
return
|
|
1089
|
+
return _context.stop();
|
|
1074
1090
|
}
|
|
1075
1091
|
}
|
|
1076
|
-
},
|
|
1092
|
+
}, _callee);
|
|
1077
1093
|
}));
|
|
1078
1094
|
|
|
1079
|
-
return function getTokenListObjFromUrl(
|
|
1080
|
-
return
|
|
1095
|
+
return function getTokenListObjFromUrl(_x2) {
|
|
1096
|
+
return _ref.apply(this, arguments);
|
|
1081
1097
|
};
|
|
1082
1098
|
}();
|
|
1083
1099
|
var getTokenListObjFromLocalPath = /*#__PURE__*/function () {
|
|
1084
|
-
var
|
|
1085
|
-
return _regeneratorRuntime.wrap(function
|
|
1100
|
+
var _ref2 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(path) {
|
|
1101
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
1086
1102
|
while (1) {
|
|
1087
|
-
switch (
|
|
1103
|
+
switch (_context2.prev = _context2.next) {
|
|
1088
1104
|
case 0:
|
|
1089
|
-
return
|
|
1105
|
+
return _context2.abrupt("return", JSON.parse(fs.readFileSync(path).toString()));
|
|
1090
1106
|
|
|
1091
1107
|
case 1:
|
|
1092
1108
|
case "end":
|
|
1093
|
-
return
|
|
1109
|
+
return _context2.stop();
|
|
1094
1110
|
}
|
|
1095
1111
|
}
|
|
1096
|
-
},
|
|
1112
|
+
}, _callee2);
|
|
1097
1113
|
}));
|
|
1098
1114
|
|
|
1099
|
-
return function getTokenListObjFromLocalPath(
|
|
1100
|
-
return
|
|
1115
|
+
return function getTokenListObjFromLocalPath(_x3) {
|
|
1116
|
+
return _ref2.apply(this, arguments);
|
|
1101
1117
|
};
|
|
1102
1118
|
}();
|
|
1103
|
-
var tokenListIsValid = function tokenListIsValid(tokenList) {
|
|
1104
|
-
var ajv = new Ajv__default["default"]();
|
|
1105
|
-
addFormats__default["default"](ajv);
|
|
1106
|
-
var validate = ajv.compile(tokenLists.schema);
|
|
1107
|
-
var res = validate(tokenList);
|
|
1108
|
-
|
|
1109
|
-
if (validate.errors) {
|
|
1110
|
-
var output = betterAjvErrors__default["default"](tokenLists.schema, tokenList, validate.errors, {
|
|
1111
|
-
indent: 2
|
|
1112
|
-
});
|
|
1113
|
-
console.log(output);
|
|
1114
|
-
}
|
|
1115
|
-
|
|
1116
|
-
return res;
|
|
1117
|
-
};
|
|
1118
|
-
var validateTokenListWithErrorThrowing = function validateTokenListWithErrorThrowing(tokenList) {
|
|
1119
|
-
try {
|
|
1120
|
-
var valid = tokenListIsValid(tokenList);
|
|
1121
|
-
if (valid) return true;else throw new Error('Data does not conform to token list schema; not sure why');
|
|
1122
|
-
} catch (e) {
|
|
1123
|
-
console.log('Invalid token list:');
|
|
1124
|
-
throw e;
|
|
1125
|
-
}
|
|
1126
|
-
};
|
|
1127
1119
|
var getTokenListObj = /*#__PURE__*/function () {
|
|
1128
|
-
var
|
|
1120
|
+
var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(pathOrUrl) {
|
|
1129
1121
|
var tokenList;
|
|
1130
|
-
return _regeneratorRuntime.wrap(function
|
|
1122
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
1131
1123
|
while (1) {
|
|
1132
|
-
switch (
|
|
1124
|
+
switch (_context4.prev = _context4.next) {
|
|
1133
1125
|
case 0:
|
|
1134
|
-
|
|
1126
|
+
_context4.next = 2;
|
|
1135
1127
|
return function () {
|
|
1136
|
-
var
|
|
1128
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(pathOrUrl) {
|
|
1137
1129
|
var localFileExists, looksLikeUrl;
|
|
1138
|
-
return _regeneratorRuntime.wrap(function
|
|
1130
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
1139
1131
|
while (1) {
|
|
1140
|
-
switch (
|
|
1132
|
+
switch (_context3.prev = _context3.next) {
|
|
1141
1133
|
case 0:
|
|
1142
1134
|
localFileExists = fs.existsSync(pathOrUrl);
|
|
1143
1135
|
looksLikeUrl = isValidHttpUrl(pathOrUrl);
|
|
1144
1136
|
|
|
1145
1137
|
if (!localFileExists) {
|
|
1146
|
-
|
|
1138
|
+
_context3.next = 6;
|
|
1147
1139
|
break;
|
|
1148
1140
|
}
|
|
1149
1141
|
|
|
1150
|
-
return
|
|
1142
|
+
return _context3.abrupt("return", getTokenListObjFromLocalPath(pathOrUrl));
|
|
1151
1143
|
|
|
1152
1144
|
case 6:
|
|
1153
1145
|
if (!looksLikeUrl) {
|
|
1154
|
-
|
|
1146
|
+
_context3.next = 12;
|
|
1155
1147
|
break;
|
|
1156
1148
|
}
|
|
1157
1149
|
|
|
1158
|
-
|
|
1150
|
+
_context3.next = 9;
|
|
1159
1151
|
return getTokenListObjFromUrl(pathOrUrl);
|
|
1160
1152
|
|
|
1161
1153
|
case 9:
|
|
1162
|
-
return
|
|
1154
|
+
return _context3.abrupt("return", _context3.sent);
|
|
1163
1155
|
|
|
1164
1156
|
case 12:
|
|
1165
1157
|
throw new Error('Could not find token list');
|
|
1166
1158
|
|
|
1167
1159
|
case 13:
|
|
1168
1160
|
case "end":
|
|
1169
|
-
return
|
|
1161
|
+
return _context3.stop();
|
|
1170
1162
|
}
|
|
1171
1163
|
}
|
|
1172
|
-
},
|
|
1164
|
+
}, _callee3);
|
|
1173
1165
|
}));
|
|
1174
1166
|
|
|
1175
|
-
return function (
|
|
1176
|
-
return
|
|
1167
|
+
return function (_x5) {
|
|
1168
|
+
return _ref4.apply(this, arguments);
|
|
1177
1169
|
};
|
|
1178
1170
|
}()(pathOrUrl);
|
|
1179
1171
|
|
|
1180
1172
|
case 2:
|
|
1181
|
-
tokenList =
|
|
1173
|
+
tokenList = _context4.sent;
|
|
1182
1174
|
isTokenList(tokenList);
|
|
1183
|
-
return
|
|
1175
|
+
return _context4.abrupt("return", tokenList);
|
|
1184
1176
|
|
|
1185
1177
|
case 5:
|
|
1186
1178
|
case "end":
|
|
1187
|
-
return
|
|
1179
|
+
return _context4.stop();
|
|
1188
1180
|
}
|
|
1189
1181
|
}
|
|
1190
|
-
},
|
|
1182
|
+
}, _callee4);
|
|
1191
1183
|
}));
|
|
1192
1184
|
|
|
1193
|
-
return function getTokenListObj(
|
|
1194
|
-
return
|
|
1185
|
+
return function getTokenListObj(_x4) {
|
|
1186
|
+
return _ref3.apply(this, arguments);
|
|
1195
1187
|
};
|
|
1196
1188
|
}(); // https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url
|
|
1197
1189
|
|
|
@@ -1207,6 +1199,7 @@ function isValidHttpUrl(urlString) {
|
|
|
1207
1199
|
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
1208
1200
|
} // typeguard:
|
|
1209
1201
|
|
|
1202
|
+
|
|
1210
1203
|
var isTokenList = function isTokenList(obj) {
|
|
1211
1204
|
var expectedListKeys = ['name', 'timestamp', 'version', 'tokens'];
|
|
1212
1205
|
var actualListKeys = new Set(Object.keys(obj));
|
|
@@ -1214,7 +1207,7 @@ var isTokenList = function isTokenList(obj) {
|
|
|
1214
1207
|
if (!expectedListKeys.every(function (key) {
|
|
1215
1208
|
return actualListKeys.has(key);
|
|
1216
1209
|
})) {
|
|
1217
|
-
throw new Error(
|
|
1210
|
+
throw new Error('tokenlist typeguard error: required list key not included');
|
|
1218
1211
|
}
|
|
1219
1212
|
|
|
1220
1213
|
var version = obj.version,
|
|
@@ -1223,7 +1216,7 @@ var isTokenList = function isTokenList(obj) {
|
|
|
1223
1216
|
if (!['major', 'minor', 'patch'].every(function (key) {
|
|
1224
1217
|
return typeof version[key] === 'number';
|
|
1225
1218
|
})) {
|
|
1226
|
-
throw new Error(
|
|
1219
|
+
throw new Error('tokenlist typeguard error: invalid version');
|
|
1227
1220
|
}
|
|
1228
1221
|
|
|
1229
1222
|
if (!tokens.every(function (token) {
|
|
@@ -1232,625 +1225,123 @@ var isTokenList = function isTokenList(obj) {
|
|
|
1232
1225
|
return tokenKeys.has(key);
|
|
1233
1226
|
});
|
|
1234
1227
|
})) {
|
|
1235
|
-
throw new Error(
|
|
1228
|
+
throw new Error('tokenlist typeguard error: token missing required key');
|
|
1236
1229
|
}
|
|
1237
1230
|
};
|
|
1238
|
-
var sanitizeString = function sanitizeString(str) {
|
|
1239
|
-
return str.replace(/[^ \w.'+\-%/À-ÖØ-öø-ÿ:&\[\]\(\)]/gi, '');
|
|
1240
|
-
};
|
|
1241
|
-
var excludeList = /*#__PURE__*/['0x0CE51000d5244F1EAac0B313a792D5a5f96931BF', '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f', '0xEDA6eFE5556e134Ef52f2F858aa1e81c84CDA84b', '0xe54942077Df7b8EEf8D4e6bCe2f7B58B0082b0cd', '0x282db609e787a132391eb64820ba6129fceb2695', '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3', '0x106538cc16f938776c7c180186975bca23875287', '0xB4A3B0Faf0Ab53df58001804DdA5Bfc6a3D59008' // spera
|
|
1242
|
-
// "0x960b236a07cf122663c4303350609a66a7b288c0", //aragon old
|
|
1243
|
-
].map(function (s) {
|
|
1244
|
-
return s.toLowerCase();
|
|
1245
|
-
});
|
|
1246
1231
|
|
|
1247
|
-
var
|
|
1248
|
-
|
|
1249
|
-
|
|
1232
|
+
var optimismTokenListURL = 'https://raw.githubusercontent.com/' + 'ethereum-optimism/ethereum-optimism.github.io/2138386277e4156d159615d1840882cecc398437/optimism.tokenlist.json';
|
|
1233
|
+
/**
|
|
1234
|
+
* The Optimism L2 mapping (linked above) is manually maintained by the Optimism team.
|
|
1235
|
+
*
|
|
1236
|
+
* This provider provides the l1->l2(Optimism) token mappings.
|
|
1237
|
+
*/
|
|
1250
1238
|
|
|
1251
|
-
var
|
|
1252
|
-
|
|
1253
|
-
case '42161':
|
|
1254
|
-
return apolloL2GatewaysClient;
|
|
1239
|
+
var OptimismMappingProvider = /*#__PURE__*/function () {
|
|
1240
|
+
function OptimismMappingProvider() {}
|
|
1255
1241
|
|
|
1256
|
-
|
|
1257
|
-
return apolloL2GatewaysRinkebyClient;
|
|
1242
|
+
var _proto = OptimismMappingProvider.prototype;
|
|
1258
1243
|
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
};
|
|
1244
|
+
_proto.provide = /*#__PURE__*/function () {
|
|
1245
|
+
var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
1246
|
+
var tokens, optimismTokens, _iterator, _step, token, _token$extensions;
|
|
1263
1247
|
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1248
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1249
|
+
while (1) {
|
|
1250
|
+
switch (_context.prev = _context.next) {
|
|
1251
|
+
case 0:
|
|
1252
|
+
tokens = {};
|
|
1253
|
+
_context.next = 3;
|
|
1254
|
+
return getTokenList(optimismTokenListURL);
|
|
1268
1255
|
|
|
1269
|
-
|
|
1270
|
-
|
|
1256
|
+
case 3:
|
|
1257
|
+
optimismTokens = _context.sent;
|
|
1271
1258
|
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
})) {
|
|
1275
|
-
throw new Error("Graph result: missing top level key");
|
|
1276
|
-
}
|
|
1259
|
+
for (_iterator = _createForOfIteratorHelperLoose(optimismTokens.tokens); !(_step = _iterator()).done;) {
|
|
1260
|
+
token = _step.value;
|
|
1277
1261
|
|
|
1278
|
-
|
|
1262
|
+
if (token.chainId === ChainId.MAINNET) {
|
|
1263
|
+
tokens[token.address.toLowerCase()] = token == null ? void 0 : (_token$extensions = token.extensions) == null ? void 0 : _token$extensions.bridgeInfo[ChainId.OPTIMISM].tokenAddress;
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1279
1266
|
|
|
1280
|
-
|
|
1281
|
-
throw new Error("Graph result: no joinTableEntry");
|
|
1282
|
-
}
|
|
1267
|
+
return _context.abrupt("return", tokens);
|
|
1283
1268
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
}
|
|
1269
|
+
case 6:
|
|
1270
|
+
case "end":
|
|
1271
|
+
return _context.stop();
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}, _callee);
|
|
1275
|
+
}));
|
|
1288
1276
|
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1277
|
+
function provide() {
|
|
1278
|
+
return _provide.apply(this, arguments);
|
|
1279
|
+
}
|
|
1292
1280
|
|
|
1293
|
-
return
|
|
1294
|
-
|
|
1295
|
-
switch (_context.prev = _context.next) {
|
|
1296
|
-
case 0:
|
|
1297
|
-
clientUrl = chaidIdToGraphClientUrl(networkID); // lazy solution for big lists for now; we'll have to paginate once we have > 500 tokens registed
|
|
1281
|
+
return provide;
|
|
1282
|
+
}();
|
|
1298
1283
|
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
break;
|
|
1302
|
-
}
|
|
1284
|
+
return OptimismMappingProvider;
|
|
1285
|
+
}();
|
|
1303
1286
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1287
|
+
var url = 'https://tokenmapper.api.matic.today/api/v1/mapping?';
|
|
1288
|
+
var params = 'map_type=[%22POS%22]&chain_id=137&limit=200&offset=';
|
|
1289
|
+
/**
|
|
1290
|
+
* The Polygon team manually maintains the mapping via user submissions at
|
|
1291
|
+
* https://mapper.polygon.technology.
|
|
1292
|
+
*
|
|
1293
|
+
* This provider provides the l1->l2(Polygon) token mappings.
|
|
1294
|
+
*/
|
|
1306
1295
|
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
allTokenAddresses = new Set(allTokens.map(function (token) {
|
|
1310
|
-
return token.l1TokenAddr.toLowerCase();
|
|
1311
|
-
}));
|
|
1312
|
-
l1TokenAddresses = l1TokenAddresses.filter(function (addr) {
|
|
1313
|
-
return allTokenAddresses.has(addr.toLowerCase());
|
|
1314
|
-
});
|
|
1296
|
+
var PolygonMappingProvider = /*#__PURE__*/function () {
|
|
1297
|
+
function PolygonMappingProvider() {}
|
|
1315
1298
|
|
|
1316
|
-
|
|
1317
|
-
_context.next = 9;
|
|
1318
|
-
break;
|
|
1319
|
-
}
|
|
1299
|
+
var _proto = PolygonMappingProvider.prototype;
|
|
1320
1300
|
|
|
1321
|
-
|
|
1301
|
+
_proto.provide = /*#__PURE__*/function () {
|
|
1302
|
+
var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
1303
|
+
var offset, tokens, response, _iterator, _step, token;
|
|
1322
1304
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
return graphqlRequest.request(clientUrl, query);
|
|
1305
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1306
|
+
while (1) {
|
|
1307
|
+
switch (_context.prev = _context.next) {
|
|
1308
|
+
case 0:
|
|
1309
|
+
offset = 0;
|
|
1310
|
+
tokens = {};
|
|
1330
1311
|
|
|
1331
|
-
|
|
1332
|
-
_yield$request = _context.sent;
|
|
1333
|
-
tokens = _yield$request.tokens;
|
|
1334
|
-
tokens.map(function (token) {
|
|
1335
|
-
return isGraphTokenResult(token);
|
|
1336
|
-
});
|
|
1337
|
-
return _context.abrupt("return", tokens.filter(function (token) {
|
|
1338
|
-
return !excludeList.includes(token.l1TokenAddr.toLowerCase());
|
|
1339
|
-
}));
|
|
1312
|
+
case 2:
|
|
1340
1313
|
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
return _context.stop();
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
}, _callee);
|
|
1347
|
-
}));
|
|
1314
|
+
_context.next = 5;
|
|
1315
|
+
return axios__default["default"].get("" + url + params + offset);
|
|
1348
1316
|
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
};
|
|
1352
|
-
}();
|
|
1353
|
-
var getAllTokens = /*#__PURE__*/function () {
|
|
1354
|
-
var _ref2 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(networkID) {
|
|
1355
|
-
var clientUrl, query, _yield$request2, tokens;
|
|
1317
|
+
case 5:
|
|
1318
|
+
response = _context.sent;
|
|
1356
1319
|
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
case 0:
|
|
1361
|
-
clientUrl = chaidIdToGraphClientUrl(networkID);
|
|
1362
|
-
query = graphqlRequest.gql(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n {\n tokens(first: 500, skip: 0) {\n l1TokenAddr: id\n joinTableEntry: gateway(\n first: 1\n orderBy: blockNum\n orderDirection: desc\n ) {\n id\n blockNum\n token {\n tokenAddr: id\n }\n gateway {\n gatewayAddr: id\n }\n }\n }\n }\n "])));
|
|
1363
|
-
_context2.next = 4;
|
|
1364
|
-
return graphqlRequest.request(clientUrl, query);
|
|
1365
|
-
|
|
1366
|
-
case 4:
|
|
1367
|
-
_yield$request2 = _context2.sent;
|
|
1368
|
-
tokens = _yield$request2.tokens;
|
|
1369
|
-
tokens.map(function (token) {
|
|
1370
|
-
return isGraphTokenResult(token);
|
|
1371
|
-
});
|
|
1372
|
-
return _context2.abrupt("return", tokens.filter(function (token) {
|
|
1373
|
-
return !excludeList.includes(token.l1TokenAddr.toLowerCase());
|
|
1374
|
-
}));
|
|
1375
|
-
|
|
1376
|
-
case 8:
|
|
1377
|
-
case "end":
|
|
1378
|
-
return _context2.stop();
|
|
1379
|
-
}
|
|
1380
|
-
}
|
|
1381
|
-
}, _callee2);
|
|
1382
|
-
}));
|
|
1383
|
-
|
|
1384
|
-
return function getAllTokens(_x3) {
|
|
1385
|
-
return _ref2.apply(this, arguments);
|
|
1386
|
-
};
|
|
1387
|
-
}();
|
|
1388
|
-
|
|
1389
|
-
/*
|
|
1390
|
-
* Copyright 2021, Offchain Labs, Inc.
|
|
1391
|
-
*
|
|
1392
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1393
|
-
* you may not use this file except in compliance with the License.
|
|
1394
|
-
* You may obtain a copy of the License at
|
|
1395
|
-
*
|
|
1396
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1397
|
-
*
|
|
1398
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
1399
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1400
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1401
|
-
* See the License for the specific language governing permissions and
|
|
1402
|
-
* limitations under the License.
|
|
1403
|
-
*/
|
|
1404
|
-
var argv = /*#__PURE__*/yargs__default["default"](process.argv.slice(2)).options({
|
|
1405
|
-
l2NetworkID: {
|
|
1406
|
-
type: 'number'
|
|
1407
|
-
},
|
|
1408
|
-
tokenList: {
|
|
1409
|
-
type: 'string'
|
|
1410
|
-
}
|
|
1411
|
-
}).parseSync();
|
|
1412
|
-
|
|
1413
|
-
var _args$l2NetworkID;
|
|
1414
|
-
dotenv__default["default"].config();
|
|
1415
|
-
var networkID = ((_args$l2NetworkID = argv.l2NetworkID) == null ? void 0 : /*#__PURE__*/_args$l2NetworkID.toString()) || '42161';
|
|
1416
|
-
console.log('Using L2 networkID:', networkID);
|
|
1417
|
-
var getNetworkConfig = /*#__PURE__*/function () {
|
|
1418
|
-
var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
1419
|
-
var l2Network, l1Network, arbProvider, ethProvider, l1MultiCaller, l2MultiCaller, tokenBridger;
|
|
1420
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1421
|
-
while (1) {
|
|
1422
|
-
switch (_context.prev = _context.next) {
|
|
1423
|
-
case 0:
|
|
1424
|
-
_context.next = 2;
|
|
1425
|
-
return arbTs.getL2Network(networkID);
|
|
1426
|
-
|
|
1427
|
-
case 2:
|
|
1428
|
-
l2Network = _context.sent;
|
|
1429
|
-
_context.next = 5;
|
|
1430
|
-
return arbTs.getL1Network(l2Network.partnerChainID);
|
|
1431
|
-
|
|
1432
|
-
case 5:
|
|
1433
|
-
l1Network = _context.sent;
|
|
1434
|
-
arbProvider = new ethers.providers.JsonRpcProvider(l2Network.rpcURL);
|
|
1435
|
-
ethProvider = new ethers.providers.JsonRpcProvider(l1Network.rpcURL);
|
|
1436
|
-
_context.next = 10;
|
|
1437
|
-
return arbTs.MultiCaller.fromProvider(ethProvider);
|
|
1438
|
-
|
|
1439
|
-
case 10:
|
|
1440
|
-
l1MultiCaller = _context.sent;
|
|
1441
|
-
_context.next = 13;
|
|
1442
|
-
return arbTs.MultiCaller.fromProvider(arbProvider);
|
|
1443
|
-
|
|
1444
|
-
case 13:
|
|
1445
|
-
l2MultiCaller = _context.sent;
|
|
1446
|
-
tokenBridger = new arbTs.TokenBridger(l2Network);
|
|
1447
|
-
return _context.abrupt("return", {
|
|
1448
|
-
l1: {
|
|
1449
|
-
network: l1Network,
|
|
1450
|
-
provider: ethProvider,
|
|
1451
|
-
multiCaller: l1MultiCaller
|
|
1452
|
-
},
|
|
1453
|
-
l2: {
|
|
1454
|
-
network: l2Network,
|
|
1455
|
-
provider: arbProvider,
|
|
1456
|
-
multiCaller: l2MultiCaller
|
|
1457
|
-
},
|
|
1458
|
-
tokenBridger: tokenBridger
|
|
1459
|
-
});
|
|
1460
|
-
|
|
1461
|
-
case 16:
|
|
1462
|
-
case "end":
|
|
1463
|
-
return _context.stop();
|
|
1464
|
-
}
|
|
1465
|
-
}
|
|
1466
|
-
}, _callee);
|
|
1467
|
-
}));
|
|
1468
|
-
|
|
1469
|
-
return function getNetworkConfig() {
|
|
1470
|
-
return _ref.apply(this, arguments);
|
|
1471
|
-
};
|
|
1472
|
-
}();
|
|
1473
|
-
|
|
1474
|
-
var l2ToL1GatewayAddresses = {
|
|
1475
|
-
// L2 ERC20 Gateway mainnet
|
|
1476
|
-
'0x09e9222e96e7b4ae2a407b98d48e330053351eee': '0xa3A7B6F88361F48403514059F1F16C8E78d60EeC',
|
|
1477
|
-
// L2 Arb-Custom Gateway mainnet
|
|
1478
|
-
'0x096760f208390250649e3e8763348e783aef5562': '0xcEe284F754E854890e311e3280b767F80797180d',
|
|
1479
|
-
// L2 weth mainnet
|
|
1480
|
-
'0x6c411ad3e74de3e7bd422b94a27770f5b86c623b': '0xd92023E9d9911199a6711321D1277285e6d4e2db',
|
|
1481
|
-
// L2 dai gateway mainnet
|
|
1482
|
-
'0x467194771dae2967aef3ecbedd3bf9a310c76c65': '0xd3b5b60020504bc3489d6949d545893982ba3011',
|
|
1483
|
-
// L2 ERC20 Gateway rinkeby
|
|
1484
|
-
"0x195c107f3f75c4c93eba7d9a1312f19305d6375f": "0x91169Dbb45e6804743F94609De50D511C437572E",
|
|
1485
|
-
// L2 Arb-Custom Gateway rinkeby
|
|
1486
|
-
"0x9b014455acc2fe90c52803849d0002aeec184a06": "0x917dc9a69F65dC3082D518192cd3725E1Fa96cA2",
|
|
1487
|
-
// L2 Weth Gateway rinkeby
|
|
1488
|
-
"0xf94bc045c4e926cc0b34e8d1c41cd7a043304ac9": "0x81d1a19cf7071732D4313c75dE8DD5b8CF697eFD",
|
|
1489
|
-
// old L2 weth gateway in rinkeby? we can prob remove this
|
|
1490
|
-
"0xf90eb31045d5b924900aff29344deb42eae0b087": "0x81d1a19cf7071732D4313c75dE8DD5b8CF697eFD",
|
|
1491
|
-
// livepeer gateway mainnet
|
|
1492
|
-
"0x6d2457a4ad276000a615295f7a80f79e48ccd318": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676"
|
|
1493
|
-
};
|
|
1494
|
-
var generateTokenList = /*#__PURE__*/function () {
|
|
1495
|
-
var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenList, prevArbTokenList, options) {
|
|
1496
|
-
var name, mainLogoUri, _yield$getNetworkConf, l1, l2, tokens, l1TokenAddresses, l2AddressesFromL1, l2AddressesFromL2, tokenData, logoUris, _iterator, _step, token, uri, arbifiedTokens, arbifiedTokenList, l1ArbedTokenList, l1AddressesOfBridgedTokens, unbridgedTokens, version, arbTokenList, validationTokenList;
|
|
1497
|
-
|
|
1498
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1499
|
-
while (1) {
|
|
1500
|
-
switch (_context.prev = _context.next) {
|
|
1501
|
-
case 0:
|
|
1502
|
-
if (!(options != null && options.includeAllL1Tokens && options.includeUnbridgedL1Tokens)) {
|
|
1503
|
-
_context.next = 2;
|
|
1504
|
-
break;
|
|
1505
|
-
}
|
|
1506
|
-
|
|
1507
|
-
throw new Error("Cannot include both of AllL1Tokens and UnbridgedL1Tokens since UnbridgedL1Tokens is a subset of AllL1Tokens.");
|
|
1508
|
-
|
|
1509
|
-
case 2:
|
|
1510
|
-
name = l1TokenList.name;
|
|
1511
|
-
mainLogoUri = l1TokenList.logoURI;
|
|
1512
|
-
_context.next = 6;
|
|
1513
|
-
return getNetworkConfig();
|
|
1514
|
-
|
|
1515
|
-
case 6:
|
|
1516
|
-
_yield$getNetworkConf = _context.sent;
|
|
1517
|
-
l1 = _yield$getNetworkConf.l1;
|
|
1518
|
-
l2 = _yield$getNetworkConf.l2;
|
|
1519
|
-
|
|
1520
|
-
if (!(options && options.getAllTokensInNetwork)) {
|
|
1521
|
-
_context.next = 15;
|
|
1522
|
-
break;
|
|
1523
|
-
}
|
|
1524
|
-
|
|
1525
|
-
_context.next = 12;
|
|
1526
|
-
return getAllTokens(l2.network.chainID);
|
|
1527
|
-
|
|
1528
|
-
case 12:
|
|
1529
|
-
_context.t0 = _context.sent;
|
|
1530
|
-
_context.next = 18;
|
|
1531
|
-
break;
|
|
1532
|
-
|
|
1533
|
-
case 15:
|
|
1534
|
-
_context.next = 17;
|
|
1535
|
-
return getTokens(l1TokenList.tokens.map(function (token) {
|
|
1536
|
-
return token.address.toLowerCase();
|
|
1537
|
-
}), l2.network.chainID);
|
|
1538
|
-
|
|
1539
|
-
case 17:
|
|
1540
|
-
_context.t0 = _context.sent;
|
|
1541
|
-
|
|
1542
|
-
case 18:
|
|
1543
|
-
tokens = _context.t0;
|
|
1544
|
-
l1TokenAddresses = tokens.map(function (token) {
|
|
1545
|
-
return token.l1TokenAddr;
|
|
1546
|
-
});
|
|
1547
|
-
_context.next = 22;
|
|
1548
|
-
return getL2TokenAddressesFromL1(l1TokenAddresses, l1.multiCaller, l2.network.tokenBridge.l1GatewayRouter);
|
|
1549
|
-
|
|
1550
|
-
case 22:
|
|
1551
|
-
l2AddressesFromL1 = _context.sent;
|
|
1552
|
-
_context.next = 25;
|
|
1553
|
-
return getL2TokenAddressesFromL2(l1TokenAddresses, l2.multiCaller, l2.network.tokenBridge.l2GatewayRouter);
|
|
1554
|
-
|
|
1555
|
-
case 25:
|
|
1556
|
-
l2AddressesFromL2 = _context.sent;
|
|
1557
|
-
// if the l2 route hasn't been updated yet we remove the token from the bridged tokens
|
|
1558
|
-
tokens = tokens.filter(function (t, i) {
|
|
1559
|
-
return l2AddressesFromL1[i] === l2AddressesFromL2[i];
|
|
1560
|
-
});
|
|
1561
|
-
_context.next = 29;
|
|
1562
|
-
return l2.multiCaller.getTokenData(l2AddressesFromL1.map(function (t) {
|
|
1563
|
-
return t || ethers.constants.AddressZero;
|
|
1564
|
-
}), {
|
|
1565
|
-
name: true,
|
|
1566
|
-
decimals: true,
|
|
1567
|
-
symbol: true
|
|
1568
|
-
});
|
|
1569
|
-
|
|
1570
|
-
case 29:
|
|
1571
|
-
tokenData = _context.sent;
|
|
1572
|
-
logoUris = [];
|
|
1573
|
-
_iterator = _createForOfIteratorHelperLoose(tokens);
|
|
1574
|
-
|
|
1575
|
-
case 32:
|
|
1576
|
-
if ((_step = _iterator()).done) {
|
|
1577
|
-
_context.next = 40;
|
|
1578
|
-
break;
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1581
|
-
token = _step.value;
|
|
1582
|
-
_context.next = 36;
|
|
1583
|
-
return getLogoUri(token.l1TokenAddr);
|
|
1584
|
-
|
|
1585
|
-
case 36:
|
|
1586
|
-
uri = _context.sent;
|
|
1587
|
-
logoUris.push(uri);
|
|
1588
|
-
|
|
1589
|
-
case 38:
|
|
1590
|
-
_context.next = 32;
|
|
1591
|
-
break;
|
|
1592
|
-
|
|
1593
|
-
case 40:
|
|
1594
|
-
arbifiedTokens = tokens.map(function (t, i) {
|
|
1595
|
-
return {
|
|
1596
|
-
token: t,
|
|
1597
|
-
l2Address: l2AddressesFromL2[i],
|
|
1598
|
-
tokenDatum: tokenData[i]
|
|
1599
|
-
};
|
|
1600
|
-
}) // it's possible that even though l2AddressesFromL1[i] === l2AddressesFromL2[i] these addresses could be the zero address
|
|
1601
|
-
// this can happen if the graphql query returns an address that hasnt been bridged
|
|
1602
|
-
.filter(function (t) {
|
|
1603
|
-
return t.l2Address != undefined && t.l2Address !== ethers.constants.AddressZero;
|
|
1604
|
-
}).map(function (token, i) {
|
|
1605
|
-
var _bridgeInfo, _bridgeInfo2;
|
|
1606
|
-
|
|
1607
|
-
var l2GatewayAddress = token.token.joinTableEntry[0].gateway.gatewayAddr;
|
|
1608
|
-
var _token$tokenDatum = token.tokenDatum,
|
|
1609
|
-
_name = _token$tokenDatum.name,
|
|
1610
|
-
decimals = _token$tokenDatum.decimals,
|
|
1611
|
-
_symbol = _token$tokenDatum.symbol;
|
|
1612
|
-
if (decimals === undefined) throw new Error("Unexpected undefined token decimals: " + JSON.stringify(token));
|
|
1613
|
-
|
|
1614
|
-
_name = function () {
|
|
1615
|
-
if (_name === undefined) throw new Error("Unexpected undefined token name: " + JSON.stringify(token)); // if token name is empty, instead set the address as the name
|
|
1616
|
-
// we remove the initial 0x since the token list standard only allows up to 40 characters
|
|
1617
|
-
else if (_name === "") return token.token.l1TokenAddr.substring(2); // parse null terminated bytes32 strings
|
|
1618
|
-
else if (_name.length === 64) return ethers.utils.parseBytes32String("0x" + _name);else return _name;
|
|
1619
|
-
}();
|
|
1620
|
-
|
|
1621
|
-
_symbol = function () {
|
|
1622
|
-
if (_symbol === undefined) throw new Error("Unexpected undefined token symbol: " + JSON.stringify(token)); // schema doesn't allow for empty symbols, and has a max length of 20
|
|
1623
|
-
else if (_symbol === "") return _name.substring(0, Math.min(_name.length, 20)); // parse null terminated bytes32 strings
|
|
1624
|
-
else if (_symbol.length === 64) return ethers.utils.parseBytes32String("0x" + _symbol);else return _symbol;
|
|
1625
|
-
}();
|
|
1626
|
-
|
|
1627
|
-
var name = sanitizeString(_name);
|
|
1628
|
-
var symbol = sanitizeString(_symbol);
|
|
1629
|
-
var arbTokenInfo = {
|
|
1630
|
-
chainId: +l2.network.chainID,
|
|
1631
|
-
address: token.l2Address,
|
|
1632
|
-
name: name,
|
|
1633
|
-
symbol: symbol,
|
|
1634
|
-
decimals: decimals,
|
|
1635
|
-
extensions: {
|
|
1636
|
-
bridgeInfo: (_bridgeInfo = {}, _bridgeInfo[l1.network.chainID] = {
|
|
1637
|
-
tokenAddress: token.token.l1TokenAddr,
|
|
1638
|
-
originBridgeAddress: l2GatewayAddress,
|
|
1639
|
-
destBridgeAddress: l2ToL1GatewayAddresses[l2GatewayAddress.toLowerCase()]
|
|
1640
|
-
}, _bridgeInfo)
|
|
1641
|
-
}
|
|
1642
|
-
};
|
|
1643
|
-
var l1TokenInfo = {
|
|
1644
|
-
chainId: +l1.network.chainID,
|
|
1645
|
-
address: token.token.l1TokenAddr,
|
|
1646
|
-
name: name,
|
|
1647
|
-
symbol: symbol,
|
|
1648
|
-
decimals: decimals,
|
|
1649
|
-
extensions: {
|
|
1650
|
-
bridgeInfo: (_bridgeInfo2 = {}, _bridgeInfo2[l2.network.chainID] = {
|
|
1651
|
-
tokenAddress: token.l2Address,
|
|
1652
|
-
originBridgeAddress: l2ToL1GatewayAddresses[l2GatewayAddress.toLowerCase()],
|
|
1653
|
-
destBridgeAddress: l2GatewayAddress
|
|
1654
|
-
}, _bridgeInfo2)
|
|
1655
|
-
}
|
|
1656
|
-
};
|
|
1657
|
-
|
|
1658
|
-
if (logoUris[i]) {
|
|
1659
|
-
arbTokenInfo = _extends({}, {
|
|
1660
|
-
logoURI: logoUris[i]
|
|
1661
|
-
}, arbTokenInfo);
|
|
1662
|
-
} else {
|
|
1663
|
-
console.log('no logo uri for ', token.token.l1TokenAddr, symbol);
|
|
1320
|
+
if (!(response.data.message === 'success')) {
|
|
1321
|
+
_context.next = 11;
|
|
1322
|
+
break;
|
|
1664
1323
|
}
|
|
1665
1324
|
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
};
|
|
1670
|
-
}).filter(function (_ref2) {
|
|
1671
|
-
var arbTokenInfo = _ref2.arbTokenInfo;
|
|
1672
|
-
return arbTokenInfo.extensions && arbTokenInfo.extensions.bridgeInfo[l1.network.chainID].originBridgeAddress !== arbTs.constants.DISABLED_GATEWAY;
|
|
1673
|
-
});
|
|
1674
|
-
arbifiedTokenList = arbifiedTokens.map(function (_ref3) {
|
|
1675
|
-
var arbTokenInfo = _ref3.arbTokenInfo;
|
|
1676
|
-
return arbTokenInfo;
|
|
1677
|
-
}).sort(function (a, b) {
|
|
1678
|
-
return a.symbol < b.symbol ? -1 : 1;
|
|
1679
|
-
});
|
|
1680
|
-
l1ArbedTokenList = arbifiedTokens.map(function (_ref4) {
|
|
1681
|
-
var l1TokenInfo = _ref4.l1TokenInfo;
|
|
1682
|
-
return l1TokenInfo;
|
|
1683
|
-
});
|
|
1684
|
-
console.log("List has " + arbifiedTokenList.length + " bridged tokens");
|
|
1685
|
-
|
|
1686
|
-
if (options != null && options.includeAllL1Tokens) {
|
|
1687
|
-
arbifiedTokenList = arbifiedTokenList.concat(l1ArbedTokenList);
|
|
1688
|
-
} else if (options != null && options.includeUnbridgedL1Tokens) {
|
|
1689
|
-
l1AddressesOfBridgedTokens = new Set(tokens.map(function (token) {
|
|
1690
|
-
return token.l1TokenAddr.toLowerCase();
|
|
1691
|
-
}));
|
|
1692
|
-
unbridgedTokens = l1ArbedTokenList.filter(function (l1TokenInfo) {
|
|
1693
|
-
return !l1AddressesOfBridgedTokens.has(l1TokenInfo.address.toLowerCase()) && l1TokenInfo.chainId === +l1.network.chainID;
|
|
1694
|
-
}).sort(function (a, b) {
|
|
1695
|
-
return a.symbol < b.symbol ? -1 : 1;
|
|
1696
|
-
});
|
|
1697
|
-
console.log("List has " + unbridgedTokens.length + " unbridged tokens");
|
|
1698
|
-
arbifiedTokenList = arbifiedTokenList.concat(unbridgedTokens);
|
|
1699
|
-
}
|
|
1700
|
-
|
|
1701
|
-
version = function () {
|
|
1702
|
-
if (prevArbTokenList) {
|
|
1703
|
-
// @ts-ignore
|
|
1704
|
-
var versionBump = tokenLists.minVersionBump(prevArbTokenList.tokens, arbifiedTokenList); // tmp: library doesn't nicely handle patches (for extensions object)
|
|
1705
|
-
|
|
1706
|
-
if (versionBump === tokenLists.VersionUpgrade.PATCH) {
|
|
1707
|
-
versionBump = tokenLists.VersionUpgrade.NONE;
|
|
1708
|
-
}
|
|
1709
|
-
|
|
1710
|
-
return tokenLists.nextVersion(prevArbTokenList.version, versionBump);
|
|
1325
|
+
for (_iterator = _createForOfIteratorHelperLoose(response.data.data.mapping); !(_step = _iterator()).done;) {
|
|
1326
|
+
token = _step.value;
|
|
1327
|
+
tokens[token.root_token.toLowerCase()] = token;
|
|
1711
1328
|
}
|
|
1712
1329
|
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
};
|
|
1718
|
-
}();
|
|
1719
|
-
|
|
1720
|
-
arbTokenList = {
|
|
1721
|
-
name: listNameToArbifiedListName(name),
|
|
1722
|
-
timestamp: new Date().toISOString(),
|
|
1723
|
-
version: version,
|
|
1724
|
-
tokens: arbifiedTokenList,
|
|
1725
|
-
logoURI: mainLogoUri
|
|
1726
|
-
};
|
|
1727
|
-
validationTokenList = _extends({}, arbTokenList, {
|
|
1728
|
-
tokens: arbTokenList.tokens
|
|
1729
|
-
});
|
|
1730
|
-
validateTokenListWithErrorThrowing(validationTokenList);
|
|
1731
|
-
console.log("Generated list with total " + arbTokenList.tokens.length + " tokens");
|
|
1732
|
-
console.log('version:', version);
|
|
1733
|
-
return _context.abrupt("return", arbTokenList);
|
|
1734
|
-
|
|
1735
|
-
case 52:
|
|
1736
|
-
case "end":
|
|
1737
|
-
return _context.stop();
|
|
1738
|
-
}
|
|
1739
|
-
}
|
|
1740
|
-
}, _callee);
|
|
1741
|
-
}));
|
|
1742
|
-
|
|
1743
|
-
return function generateTokenList(_x, _x2, _x3) {
|
|
1744
|
-
return _ref.apply(this, arguments);
|
|
1745
|
-
};
|
|
1746
|
-
}();
|
|
1747
|
-
|
|
1748
|
-
function compareTokenInfos(t1, t2) {
|
|
1749
|
-
if (t1.chainId === t2.chainId) {
|
|
1750
|
-
return t1.symbol.toLowerCase() < t2.symbol.toLowerCase() ? -1 : 1;
|
|
1751
|
-
}
|
|
1752
|
-
|
|
1753
|
-
return t1.chainId < t2.chainId ? -1 : 1;
|
|
1754
|
-
}
|
|
1755
|
-
function getTokenList(_x) {
|
|
1756
|
-
return _getTokenList.apply(this, arguments);
|
|
1757
|
-
}
|
|
1758
|
-
|
|
1759
|
-
function _getTokenList() {
|
|
1760
|
-
_getTokenList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenListOrPathOrUrl) {
|
|
1761
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1762
|
-
while (1) {
|
|
1763
|
-
switch (_context.prev = _context.next) {
|
|
1764
|
-
case 0:
|
|
1765
|
-
if (!(typeof l1TokenListOrPathOrUrl === 'string')) {
|
|
1766
|
-
_context.next = 4;
|
|
1767
|
-
break;
|
|
1768
|
-
}
|
|
1769
|
-
|
|
1770
|
-
return _context.abrupt("return", getTokenListObj(l1TokenListOrPathOrUrl));
|
|
1771
|
-
|
|
1772
|
-
case 4:
|
|
1773
|
-
return _context.abrupt("return", l1TokenListOrPathOrUrl);
|
|
1774
|
-
|
|
1775
|
-
case 5:
|
|
1776
|
-
case "end":
|
|
1777
|
-
return _context.stop();
|
|
1778
|
-
}
|
|
1779
|
-
}
|
|
1780
|
-
}, _callee);
|
|
1781
|
-
}));
|
|
1782
|
-
return _getTokenList.apply(this, arguments);
|
|
1783
|
-
}
|
|
1784
|
-
|
|
1785
|
-
/**
|
|
1786
|
-
* The Arbitrum team maintains an (unpublished) package to `arbify` an L1
|
|
1787
|
-
* token list.
|
|
1788
|
-
*
|
|
1789
|
-
* The provider simply invokes this package which we host as a submodule.
|
|
1790
|
-
*/
|
|
1791
|
-
|
|
1792
|
-
var ArbitrumMappingProvider = /*#__PURE__*/function () {
|
|
1793
|
-
function ArbitrumMappingProvider() {}
|
|
1794
|
-
|
|
1795
|
-
var _proto = ArbitrumMappingProvider.prototype;
|
|
1796
|
-
|
|
1797
|
-
_proto.provide = /*#__PURE__*/function () {
|
|
1798
|
-
var _provide = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(l1TokenList) {
|
|
1799
|
-
var arbedTokenList;
|
|
1800
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1801
|
-
while (1) {
|
|
1802
|
-
switch (_context.prev = _context.next) {
|
|
1803
|
-
case 0:
|
|
1804
|
-
_context.next = 2;
|
|
1805
|
-
return generateTokenList(l1TokenList,
|
|
1806
|
-
/*prevArbTokenList=*/
|
|
1807
|
-
undefined, {
|
|
1808
|
-
includeAllL1Tokens: true
|
|
1809
|
-
});
|
|
1810
|
-
|
|
1811
|
-
case 2:
|
|
1812
|
-
arbedTokenList = _context.sent;
|
|
1813
|
-
return _context.abrupt("return", _extends({}, arbedTokenList, {
|
|
1814
|
-
tokens: arbedTokenList.tokens.sort(compareTokenInfos)
|
|
1815
|
-
}));
|
|
1816
|
-
|
|
1817
|
-
case 4:
|
|
1818
|
-
case "end":
|
|
1819
|
-
return _context.stop();
|
|
1820
|
-
}
|
|
1821
|
-
}
|
|
1822
|
-
}, _callee);
|
|
1823
|
-
}));
|
|
1824
|
-
|
|
1825
|
-
function provide(_x) {
|
|
1826
|
-
return _provide.apply(this, arguments);
|
|
1827
|
-
}
|
|
1828
|
-
|
|
1829
|
-
return provide;
|
|
1830
|
-
}();
|
|
1831
|
-
|
|
1832
|
-
return ArbitrumMappingProvider;
|
|
1833
|
-
}();
|
|
1330
|
+
if (!(response.data.data.has_next_page === true)) {
|
|
1331
|
+
_context.next = 11;
|
|
1332
|
+
break;
|
|
1333
|
+
}
|
|
1834
1334
|
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
*
|
|
1838
|
-
* This provider mostly no-ops, i.e. grabs the list and returns it.
|
|
1839
|
-
*/
|
|
1840
|
-
var OptimismMappingProvider = /*#__PURE__*/function () {
|
|
1841
|
-
function OptimismMappingProvider() {}
|
|
1335
|
+
offset += 200;
|
|
1336
|
+
return _context.abrupt("continue", 2);
|
|
1842
1337
|
|
|
1843
|
-
|
|
1338
|
+
case 11:
|
|
1339
|
+
return _context.abrupt("break", 14);
|
|
1844
1340
|
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1848
|
-
while (1) {
|
|
1849
|
-
switch (_context.prev = _context.next) {
|
|
1850
|
-
case 0:
|
|
1851
|
-
return _context.abrupt("return", l1TokenList);
|
|
1341
|
+
case 14:
|
|
1342
|
+
return _context.abrupt("return", tokens);
|
|
1852
1343
|
|
|
1853
|
-
case
|
|
1344
|
+
case 15:
|
|
1854
1345
|
case "end":
|
|
1855
1346
|
return _context.stop();
|
|
1856
1347
|
}
|
|
@@ -1858,160 +1349,91 @@ var OptimismMappingProvider = /*#__PURE__*/function () {
|
|
|
1858
1349
|
}, _callee);
|
|
1859
1350
|
}));
|
|
1860
1351
|
|
|
1861
|
-
function provide(
|
|
1352
|
+
function provide() {
|
|
1862
1353
|
return _provide.apply(this, arguments);
|
|
1863
1354
|
}
|
|
1864
1355
|
|
|
1865
1356
|
return provide;
|
|
1866
1357
|
}();
|
|
1867
1358
|
|
|
1868
|
-
return
|
|
1359
|
+
return PolygonMappingProvider;
|
|
1869
1360
|
}();
|
|
1870
1361
|
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
*/
|
|
1875
|
-
|
|
1876
|
-
var PolygonMappingProvider = /*#__PURE__*/function () {
|
|
1877
|
-
function PolygonMappingProvider() {}
|
|
1878
|
-
|
|
1879
|
-
var _proto = PolygonMappingProvider.prototype;
|
|
1362
|
+
function buildList(_x, _x2) {
|
|
1363
|
+
return _buildList.apply(this, arguments);
|
|
1364
|
+
}
|
|
1880
1365
|
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1366
|
+
function _buildList() {
|
|
1367
|
+
_buildList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(chainId, l1TokenList) {
|
|
1368
|
+
var tokenAddressMap, mappedTokens, _iterator, _step, rootToken, childToken, childTokenValid, _bridgeInfo, _bridgeInfo2, toRootExtensions, toChildExtensions, rootTokenInfo, childTokenInfo, tokenList;
|
|
1884
1369
|
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1370
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
1371
|
+
while (1) {
|
|
1372
|
+
switch (_context.prev = _context.next) {
|
|
1373
|
+
case 0:
|
|
1374
|
+
_context.next = 2;
|
|
1375
|
+
return getMappingProvider(chainId, l1TokenList).provide();
|
|
1891
1376
|
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1377
|
+
case 2:
|
|
1378
|
+
tokenAddressMap = _context.sent;
|
|
1379
|
+
mappedTokens = [];
|
|
1895
1380
|
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1381
|
+
for (_iterator = _createForOfIteratorHelperLoose(l1TokenList.tokens); !(_step = _iterator()).done;) {
|
|
1382
|
+
rootToken = _step.value;
|
|
1383
|
+
childToken = tokenAddressMap[rootToken.address.toLowerCase()];
|
|
1384
|
+
childTokenValid = Boolean(childToken && (typeof childToken === 'object' ? !childToken.deleted : true));
|
|
1900
1385
|
|
|
1386
|
+
if (rootToken.chainId === ChainId.MAINNET) {
|
|
1387
|
+
// build extension info if available
|
|
1901
1388
|
toRootExtensions = childTokenValid ? {
|
|
1902
1389
|
extensions: {
|
|
1903
1390
|
bridgeInfo: (_bridgeInfo = {}, _bridgeInfo[rootToken.chainId] = {
|
|
1904
|
-
tokenAddress:
|
|
1391
|
+
tokenAddress: ethers.ethers.utils.getAddress(rootToken.address)
|
|
1905
1392
|
}, _bridgeInfo)
|
|
1906
1393
|
}
|
|
1907
1394
|
} : {};
|
|
1908
1395
|
toChildExtensions = childTokenValid ? {
|
|
1909
1396
|
extensions: {
|
|
1910
|
-
bridgeInfo: (_bridgeInfo2 = {}, _bridgeInfo2[
|
|
1911
|
-
tokenAddress: childToken.child_token
|
|
1397
|
+
bridgeInfo: (_bridgeInfo2 = {}, _bridgeInfo2[chainId] = {
|
|
1398
|
+
tokenAddress: ethers.ethers.utils.getAddress(typeof childToken === 'object' ? childToken.child_token : childToken)
|
|
1912
1399
|
}, _bridgeInfo2)
|
|
1913
1400
|
}
|
|
1914
1401
|
} : {};
|
|
1915
1402
|
rootTokenInfo = _extends({}, rootToken, toChildExtensions);
|
|
1916
1403
|
childTokenInfo = _extends({}, rootToken, {
|
|
1917
|
-
chainId:
|
|
1918
|
-
|
|
1919
|
-
symbol: (_childToken$symbol = childToken.symbol) != null ? _childToken$symbol : rootToken.symbol,
|
|
1920
|
-
address: childToken.child_token
|
|
1404
|
+
chainId: chainId,
|
|
1405
|
+
address: ethers.ethers.utils.getAddress(typeof childToken === 'object' ? childToken.child_token : childToken)
|
|
1921
1406
|
}, toRootExtensions);
|
|
1922
1407
|
mappedTokens.push(rootTokenInfo);
|
|
1923
|
-
mappedTokens.push(childTokenInfo);
|
|
1924
|
-
}
|
|
1925
|
-
|
|
1926
|
-
tokenList = {
|
|
1927
|
-
name: "Polygon " + l1TokenList.name,
|
|
1928
|
-
timestamp: new Date().toISOString(),
|
|
1929
|
-
version: l1TokenList.version,
|
|
1930
|
-
tokens: mappedTokens.sort(compareTokenInfos)
|
|
1931
|
-
};
|
|
1932
|
-
return _context.abrupt("return", tokenList);
|
|
1933
|
-
|
|
1934
|
-
case 7:
|
|
1935
|
-
case "end":
|
|
1936
|
-
return _context.stop();
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
|
-
}, _callee);
|
|
1940
|
-
}));
|
|
1941
|
-
|
|
1942
|
-
function provide(_x) {
|
|
1943
|
-
return _provide.apply(this, arguments);
|
|
1944
|
-
}
|
|
1945
|
-
|
|
1946
|
-
return provide;
|
|
1947
|
-
}();
|
|
1948
|
-
|
|
1949
|
-
return PolygonMappingProvider;
|
|
1950
|
-
}();
|
|
1951
|
-
var url = 'https://tokenmapper.api.matic.today/api/v1/mapping?';
|
|
1952
|
-
var params = 'map_type=[%22POS%22]&chain_id=137&limit=200&offset=';
|
|
1953
|
-
|
|
1954
|
-
function fetchPolygonMappedTokens() {
|
|
1955
|
-
return _fetchPolygonMappedTokens.apply(this, arguments);
|
|
1956
|
-
}
|
|
1957
|
-
|
|
1958
|
-
function _fetchPolygonMappedTokens() {
|
|
1959
|
-
_fetchPolygonMappedTokens = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
1960
|
-
var offset, tokens, response, _iterator2, _step2, token;
|
|
1961
1408
|
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
offset = 0;
|
|
1967
|
-
tokens = {};
|
|
1968
|
-
|
|
1969
|
-
case 2:
|
|
1970
|
-
|
|
1971
|
-
_context2.next = 5;
|
|
1972
|
-
return axios__default["default"].get("" + url + params + offset);
|
|
1973
|
-
|
|
1974
|
-
case 5:
|
|
1975
|
-
response = _context2.sent;
|
|
1976
|
-
|
|
1977
|
-
if (!(response.data.message === 'success')) {
|
|
1978
|
-
_context2.next = 11;
|
|
1979
|
-
break;
|
|
1980
|
-
}
|
|
1981
|
-
|
|
1982
|
-
for (_iterator2 = _createForOfIteratorHelperLoose(response.data.data.mapping); !(_step2 = _iterator2()).done;) {
|
|
1983
|
-
token = _step2.value;
|
|
1984
|
-
tokens[token.root_token.toLowerCase()] = token;
|
|
1985
|
-
}
|
|
1986
|
-
|
|
1987
|
-
if (!(response.data.data.has_next_page === true)) {
|
|
1988
|
-
_context2.next = 11;
|
|
1989
|
-
break;
|
|
1409
|
+
if (childTokenValid) {
|
|
1410
|
+
mappedTokens.push(childTokenInfo);
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1990
1413
|
}
|
|
1991
1414
|
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
return _context2.abrupt("return", tokens);
|
|
1415
|
+
tokenList = {
|
|
1416
|
+
name: "(ChainId: " + chainId + ") " + l1TokenList.name,
|
|
1417
|
+
timestamp: new Date().toISOString(),
|
|
1418
|
+
version: l1TokenList.version,
|
|
1419
|
+
tokens: mappedTokens.sort(compareTokenInfos)
|
|
1420
|
+
};
|
|
1421
|
+
return _context.abrupt("return", tokenList);
|
|
2000
1422
|
|
|
2001
|
-
case
|
|
1423
|
+
case 7:
|
|
2002
1424
|
case "end":
|
|
2003
|
-
return
|
|
1425
|
+
return _context.stop();
|
|
2004
1426
|
}
|
|
2005
1427
|
}
|
|
2006
|
-
},
|
|
1428
|
+
}, _callee);
|
|
2007
1429
|
}));
|
|
2008
|
-
return
|
|
1430
|
+
return _buildList.apply(this, arguments);
|
|
2009
1431
|
}
|
|
2010
1432
|
|
|
2011
|
-
function getMappingProvider(chainId) {
|
|
1433
|
+
function getMappingProvider(chainId, l1TokenList) {
|
|
2012
1434
|
switch (chainId) {
|
|
2013
1435
|
case ChainId.ARBITRUM_ONE:
|
|
2014
|
-
return new ArbitrumMappingProvider();
|
|
1436
|
+
return new ArbitrumMappingProvider(l1TokenList);
|
|
2015
1437
|
|
|
2016
1438
|
case ChainId.OPTIMISM:
|
|
2017
1439
|
return new OptimismMappingProvider();
|
|
@@ -2149,36 +1571,35 @@ function chainifyTokenList(_x2, _x3) {
|
|
|
2149
1571
|
|
|
2150
1572
|
function _chainifyTokenList() {
|
|
2151
1573
|
_chainifyTokenList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chainId, l1TokenListOrPathOrUrl) {
|
|
2152
|
-
var tokenList;
|
|
1574
|
+
var l1TokenList, tokenList;
|
|
2153
1575
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
2154
1576
|
while (1) {
|
|
2155
1577
|
switch (_context2.prev = _context2.next) {
|
|
2156
1578
|
case 0:
|
|
2157
1579
|
_context2.prev = 0;
|
|
2158
|
-
_context2.
|
|
2159
|
-
_context2.next = 4;
|
|
1580
|
+
_context2.next = 3;
|
|
2160
1581
|
return getTokenList(l1TokenListOrPathOrUrl);
|
|
2161
1582
|
|
|
2162
|
-
case
|
|
2163
|
-
|
|
2164
|
-
_context2.next =
|
|
2165
|
-
return
|
|
1583
|
+
case 3:
|
|
1584
|
+
l1TokenList = _context2.sent;
|
|
1585
|
+
_context2.next = 6;
|
|
1586
|
+
return buildList(chainId, l1TokenList);
|
|
2166
1587
|
|
|
2167
|
-
case
|
|
1588
|
+
case 6:
|
|
2168
1589
|
tokenList = _context2.sent;
|
|
2169
1590
|
return _context2.abrupt("return", verifyExtensions(tokenList));
|
|
2170
1591
|
|
|
2171
|
-
case
|
|
2172
|
-
_context2.prev =
|
|
2173
|
-
_context2.
|
|
2174
|
-
throw new Error("An error occured: " + _context2.
|
|
1592
|
+
case 10:
|
|
1593
|
+
_context2.prev = 10;
|
|
1594
|
+
_context2.t0 = _context2["catch"](0);
|
|
1595
|
+
throw new Error("An error occured: " + _context2.t0);
|
|
2175
1596
|
|
|
2176
|
-
case
|
|
1597
|
+
case 13:
|
|
2177
1598
|
case "end":
|
|
2178
1599
|
return _context2.stop();
|
|
2179
1600
|
}
|
|
2180
1601
|
}
|
|
2181
|
-
}, _callee2, null, [[0,
|
|
1602
|
+
}, _callee2, null, [[0, 10]]);
|
|
2182
1603
|
}));
|
|
2183
1604
|
return _chainifyTokenList.apply(this, arguments);
|
|
2184
1605
|
}
|
|
@@ -2200,7 +1621,6 @@ function mergeTokenLists(primary, secondary) {
|
|
|
2200
1621
|
|
|
2201
1622
|
if ((_merged$extensions = merged.extensions) != null && _merged$extensions.bridgeInfo) {
|
|
2202
1623
|
// remove reference to self-chain from merge
|
|
2203
|
-
// @ts-expect-error TokenList schema doesn't yet define objects
|
|
2204
1624
|
delete merged.extensions.bridgeInfo[merged.chainId];
|
|
2205
1625
|
}
|
|
2206
1626
|
|