@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.
- package/dist/abis/erc20.d.ts +3 -0
- package/dist/token-list-bridge-utils.cjs.development.js +498 -205
- 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 +497 -205
- package/dist/token-list-bridge-utils.esm.js.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/package.json +3 -2
- package/src/abis/erc20.ts +226 -0
- package/src/arbitrum/set_rpc.ts +4 -3
- package/src/providers/index.ts +33 -13
- package/src/utils.ts +28 -0
|
@@ -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
|
-
|
|
1630
|
+
web3.setProvider(getRpcUrl(chainId));
|
|
1631
|
+
_context.next = 3;
|
|
1404
1632
|
return getMappingProvider(chainId, l1TokenList).provide();
|
|
1405
1633
|
|
|
1406
|
-
case
|
|
1634
|
+
case 3:
|
|
1407
1635
|
tokenAddressMap = _context.sent;
|
|
1408
1636
|
mappedTokens = [];
|
|
1637
|
+
_iterator = _createForOfIteratorHelperLoose(l1TokenList.tokens);
|
|
1409
1638
|
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
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
|
-
|
|
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
|
|
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:
|