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