@bitgo-beta/statics 15.1.1-beta.214 → 15.1.1-beta.2140
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/src/account.d.ts +1188 -73
- package/dist/src/account.d.ts.map +1 -1
- package/dist/src/account.js +1794 -161
- package/dist/src/ada.d.ts +1 -0
- package/dist/src/ada.d.ts.map +1 -1
- package/dist/src/ada.js +7 -3
- package/dist/src/allCoinsAndTokens.d.ts +2 -0
- package/dist/src/allCoinsAndTokens.d.ts.map +1 -0
- package/dist/src/allCoinsAndTokens.js +1916 -0
- package/dist/src/avaxp.d.ts +1 -0
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +8 -3
- package/dist/src/base.d.ts +2981 -45
- package/dist/src/base.d.ts.map +1 -1
- package/dist/src/base.js +3101 -56
- package/dist/src/bip44CoinTypes.d.ts +26 -0
- package/dist/src/bip44CoinTypes.d.ts.map +1 -0
- package/dist/src/bip44CoinTypes.js +148 -0
- package/dist/src/canton.d.ts +35 -0
- package/dist/src/canton.d.ts.map +1 -0
- package/dist/src/canton.js +51 -0
- package/dist/src/coinFeatures.d.ts +134 -0
- package/dist/src/coinFeatures.d.ts.map +1 -0
- package/dist/src/coinFeatures.js +817 -0
- package/dist/src/coins/adaTokens.d.ts +2 -0
- package/dist/src/coins/adaTokens.d.ts.map +1 -0
- package/dist/src/coins/adaTokens.js +27 -0
- package/dist/src/coins/avaxTokens.d.ts +2 -0
- package/dist/src/coins/avaxTokens.d.ts.map +1 -0
- package/dist/src/coins/avaxTokens.js +133 -0
- package/dist/src/coins/botOfcTokens.d.ts +3 -0
- package/dist/src/coins/botOfcTokens.d.ts.map +1 -0
- package/dist/src/coins/botOfcTokens.js +352 -0
- package/dist/src/coins/botTokens.d.ts +3 -0
- package/dist/src/coins/botTokens.d.ts.map +1 -0
- package/dist/src/coins/botTokens.js +1662 -0
- package/dist/src/coins/bscTokens.d.ts +2 -0
- package/dist/src/coins/bscTokens.d.ts.map +1 -0
- package/dist/src/coins/bscTokens.js +421 -0
- package/dist/src/coins/cantonTokens.d.ts +2 -0
- package/dist/src/coins/cantonTokens.d.ts.map +1 -0
- package/dist/src/coins/cantonTokens.js +134 -0
- package/dist/src/coins/cosmosTokens.d.ts +2 -0
- package/dist/src/coins/cosmosTokens.d.ts.map +1 -0
- package/dist/src/coins/cosmosTokens.js +14 -0
- package/dist/src/coins/erc20Coins.d.ts +2 -0
- package/dist/src/coins/erc20Coins.d.ts.map +1 -0
- package/dist/src/coins/erc20Coins.js +2087 -0
- package/dist/src/coins/erc7984Tokens.d.ts +17 -0
- package/dist/src/coins/erc7984Tokens.d.ts.map +1 -0
- package/dist/src/coins/erc7984Tokens.js +40 -0
- package/dist/src/coins/generateERC20.d.ts +36 -0
- package/dist/src/coins/generateERC20.d.ts.map +1 -0
- package/dist/src/coins/generateERC20.js +46 -0
- package/dist/src/coins/hoodethTokens.d.ts +2 -0
- package/dist/src/coins/hoodethTokens.d.ts.map +1 -0
- package/dist/src/coins/hoodethTokens.js +319 -0
- package/dist/src/coins/jettonTokens.d.ts +2 -0
- package/dist/src/coins/jettonTokens.d.ts.map +1 -0
- package/dist/src/coins/jettonTokens.js +19 -0
- package/dist/src/coins/nep141Tokens.d.ts +2 -0
- package/dist/src/coins/nep141Tokens.d.ts.map +1 -0
- package/dist/src/coins/nep141Tokens.js +18 -0
- package/dist/src/coins/ofcCoins.d.ts +2 -0
- package/dist/src/coins/ofcCoins.d.ts.map +1 -0
- package/dist/src/coins/ofcCoins.js +1503 -0
- package/dist/src/coins/ofcErc20Coins.d.ts +4 -0
- package/dist/src/coins/ofcErc20Coins.d.ts.map +1 -0
- package/dist/src/coins/ofcErc20Coins.js +1907 -0
- package/dist/src/coins/ofcHoodethTokens.d.ts +2 -0
- package/dist/src/coins/ofcHoodethTokens.d.ts.map +1 -0
- package/dist/src/coins/ofcHoodethTokens.js +317 -0
- package/dist/src/coins/polygonTokens.d.ts +2 -0
- package/dist/src/coins/polygonTokens.d.ts.map +1 -0
- package/dist/src/coins/polygonTokens.js +220 -0
- package/dist/src/coins/polyxTokens.d.ts +2 -0
- package/dist/src/coins/polyxTokens.d.ts.map +1 -0
- package/dist/src/coins/polyxTokens.js +22 -0
- package/dist/src/coins/sip10Tokens.d.ts +2 -0
- package/dist/src/coins/sip10Tokens.d.ts.map +1 -0
- package/dist/src/coins/sip10Tokens.js +25 -0
- package/dist/src/coins/solTokens.d.ts +3 -0
- package/dist/src/coins/solTokens.d.ts.map +1 -0
- package/dist/src/coins/solTokens.js +538 -0
- package/dist/src/coins/vetTokens.d.ts +2 -0
- package/dist/src/coins/vetTokens.d.ts.map +1 -0
- package/dist/src/coins/vetTokens.js +11 -0
- package/dist/src/coins.d.ts +22 -1
- package/dist/src/coins.d.ts.map +1 -1
- package/dist/src/coins.js +485 -2064
- package/dist/src/constants.d.ts +6 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +8 -2
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +37 -2
- package/dist/src/flrp.d.ts +41 -0
- package/dist/src/flrp.d.ts.map +1 -0
- package/dist/src/flrp.js +66 -0
- package/dist/src/hypeevm.d.ts +28 -0
- package/dist/src/hypeevm.d.ts.map +1 -0
- package/dist/src/hypeevm.js +60 -0
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +53 -3
- package/dist/src/kaspa.d.ts +35 -0
- package/dist/src/kaspa.d.ts.map +1 -0
- package/dist/src/kaspa.js +63 -0
- package/dist/src/lightning.d.ts +44 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +64 -0
- package/dist/src/map.d.ts +38 -1
- package/dist/src/map.d.ts.map +1 -1
- package/dist/src/map.js +269 -35
- package/dist/src/networkFeatureMapForTokens.d.ts +30 -0
- package/dist/src/networkFeatureMapForTokens.d.ts.map +1 -0
- package/dist/src/networkFeatureMapForTokens.js +92 -0
- package/dist/src/networks.d.ts +2065 -72
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +2532 -108
- package/dist/src/ofc.d.ts +695 -3
- package/dist/src/ofc.d.ts.map +1 -1
- package/dist/src/ofc.js +1653 -28
- package/dist/src/safe.d.ts +22 -0
- package/dist/src/safe.d.ts.map +1 -0
- package/dist/src/safe.js +28 -0
- package/dist/src/tokenConfig.d.ts +718 -114
- package/dist/src/tokenConfig.d.ts.map +1 -1
- package/dist/src/tokenConfig.js +1132 -233
- package/dist/src/utxo.d.ts +7 -2
- package/dist/src/utxo.d.ts.map +1 -1
- package/dist/src/utxo.js +132 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -3
- package/.mocharc.js +0 -10
- package/.prettierignore +0 -2
- package/CHANGELOG.md +0 -1584
package/dist/src/map.js
CHANGED
|
@@ -2,51 +2,166 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CoinMap = void 0;
|
|
4
4
|
const errors_1 = require("./errors");
|
|
5
|
+
const account_1 = require("./account");
|
|
5
6
|
class CoinMap {
|
|
6
7
|
constructor() {
|
|
7
8
|
this._map = new Map();
|
|
8
9
|
this._coinByIds = new Map();
|
|
9
10
|
// Holds key equivalences used during an asset name migration
|
|
10
11
|
this._coinByAliases = new Map();
|
|
12
|
+
// map of coin by address -> the key is the family:contractAddress
|
|
13
|
+
// the family is the where the coin is e.g l1 chains like eth, bsc etc. or l2 like arbeth, celo etc.
|
|
14
|
+
this._coinByContractAddress = new Map();
|
|
15
|
+
// map of coin by NFT collection ID -> the key is the (t)family:nftCollectionID
|
|
16
|
+
this._coinByNftCollectionID = new Map();
|
|
17
|
+
// Lazily initialized cache for chainId to coin name mapping (derived from network definitions)
|
|
18
|
+
this._coinByChainId = null;
|
|
11
19
|
// Do not instantiate
|
|
12
20
|
}
|
|
21
|
+
static contractAddressKey(coin) {
|
|
22
|
+
return `${coin.family}:${coin.contractAddress}`;
|
|
23
|
+
}
|
|
24
|
+
static nftCollectionIdKey(coin) {
|
|
25
|
+
return `${coin.prefix}${coin.family}:${coin.nftCollectionId}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether a different token with the same contract address (or NFT collection id) is already
|
|
29
|
+
* registered. Token identity in the map is keyed by name/id/alias, but a token also claims a
|
|
30
|
+
* contract-address key (`family:contractAddress`) and, for NFTs, a collection-id key. Two tokens
|
|
31
|
+
* that share such a key but differ in name cannot coexist — `addCoin` throws on the second.
|
|
32
|
+
* Callers merging externally-sourced tokens use this to skip a colliding token rather than crash.
|
|
33
|
+
*/
|
|
34
|
+
hasTokenAddressConflict(coin) {
|
|
35
|
+
if (coin instanceof account_1.ContractAddressDefinedToken) {
|
|
36
|
+
const key = CoinMap.contractAddressKey(coin);
|
|
37
|
+
const existing = this._coinByContractAddress.get(key);
|
|
38
|
+
return existing !== undefined && existing.network.type === coin.network.type;
|
|
39
|
+
}
|
|
40
|
+
if (coin instanceof account_1.NFTCollectionIdDefinedToken) {
|
|
41
|
+
const key = CoinMap.nftCollectionIdKey(coin);
|
|
42
|
+
const existing = this._coinByNftCollectionID.get(key);
|
|
43
|
+
return existing !== undefined && existing.network.type === coin.network.type;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
13
47
|
static fromCoins(coins) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
48
|
+
const coinMap = new CoinMap();
|
|
49
|
+
coins.forEach((coin) => {
|
|
50
|
+
coinMap.addCoin(coin);
|
|
51
|
+
});
|
|
52
|
+
return coinMap;
|
|
53
|
+
}
|
|
54
|
+
addCoin(coin) {
|
|
55
|
+
if (this._map.has(coin.name)) {
|
|
56
|
+
throw new errors_1.DuplicateCoinDefinitionError(coin.name);
|
|
57
|
+
}
|
|
58
|
+
if (this._coinByIds.has(coin.id)) {
|
|
59
|
+
throw new errors_1.DuplicateCoinIdDefinitionError(coin.id);
|
|
60
|
+
}
|
|
61
|
+
const alias = coin.alias;
|
|
62
|
+
if (alias && this._coinByAliases.has(alias)) {
|
|
63
|
+
throw new errors_1.DuplicateCoinDefinitionError(alias);
|
|
64
|
+
}
|
|
65
|
+
this._map.set(coin.name, coin);
|
|
66
|
+
this._coinByIds.set(coin.id, coin);
|
|
67
|
+
if (alias) {
|
|
68
|
+
this._coinByAliases.set(coin.alias, coin);
|
|
69
|
+
}
|
|
70
|
+
if (coin.isToken) {
|
|
71
|
+
if (coin instanceof account_1.ContractAddressDefinedToken) {
|
|
72
|
+
const contractAddressKey = CoinMap.contractAddressKey(coin);
|
|
73
|
+
const existingByContractAddress = this._coinByContractAddress.get(contractAddressKey);
|
|
74
|
+
if (existingByContractAddress) {
|
|
75
|
+
if (existingByContractAddress.network.type === coin.network.type) {
|
|
76
|
+
throw new errors_1.DuplicateContractAddressDefinitionError(contractAddressKey, existingByContractAddress.name);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this._coinByContractAddress.set(contractAddressKey, coin);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (coin instanceof account_1.NFTCollectionIdDefinedToken) {
|
|
84
|
+
const nftCollectionKey = CoinMap.nftCollectionIdKey(coin);
|
|
85
|
+
const existingByNftCollectionId = this._coinByNftCollectionID.get(nftCollectionKey);
|
|
86
|
+
if (existingByNftCollectionId) {
|
|
87
|
+
if (existingByNftCollectionId.network.type === coin.network.type) {
|
|
88
|
+
throw new errors_1.DuplicateNftCollectionIdDefinitionError(nftCollectionKey, existingByNftCollectionId.name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this._coinByNftCollectionID.set(nftCollectionKey, coin);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Replace a coin (token or base coin) in the CoinMap with a new object carrying refreshed modifiable
|
|
99
|
+
* fields. The existing record is looked up by id, and the swap only happens when its immutable fields
|
|
100
|
+
* (id, name, contract address and alias) are unchanged. Anything else throws before the map
|
|
101
|
+
* is touched. Coins that are not in the map yet are added.
|
|
102
|
+
* @param {Readonly<BaseCoin>} coin new coin object
|
|
103
|
+
* @throws {CoinReplacementNotAllowedError} when an immutable field differs from the existing record
|
|
104
|
+
*/
|
|
105
|
+
replace(coin) {
|
|
106
|
+
if (this.has(coin.id)) {
|
|
107
|
+
const oldCoin = this.get(coin.id);
|
|
108
|
+
CoinMap.assertImmutableFieldsUnchanged(oldCoin, coin);
|
|
109
|
+
this._map.delete(oldCoin.name);
|
|
110
|
+
this._coinByIds.delete(oldCoin.id);
|
|
111
|
+
if (oldCoin.alias) {
|
|
112
|
+
this._coinByAliases.delete(oldCoin.alias);
|
|
113
|
+
}
|
|
114
|
+
if (oldCoin instanceof account_1.ContractAddressDefinedToken) {
|
|
115
|
+
this._coinByContractAddress.delete(CoinMap.contractAddressKey(oldCoin));
|
|
116
|
+
}
|
|
117
|
+
else if (oldCoin instanceof account_1.NFTCollectionIdDefinedToken) {
|
|
118
|
+
this._coinByNftCollectionID.delete(CoinMap.nftCollectionIdKey(oldCoin));
|
|
17
119
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
120
|
+
}
|
|
121
|
+
this.addCoin(coin);
|
|
122
|
+
}
|
|
123
|
+
static assertImmutableFieldsUnchanged(oldCoin, newCoin) {
|
|
124
|
+
const oldContractAddress = oldCoin instanceof account_1.ContractAddressDefinedToken ? oldCoin.contractAddress : undefined;
|
|
125
|
+
const newContractAddress = newCoin instanceof account_1.ContractAddressDefinedToken ? newCoin.contractAddress : undefined;
|
|
126
|
+
if (oldCoin.id !== newCoin.id) {
|
|
127
|
+
throw new errors_1.CoinReplacementNotAllowedError(oldCoin.name, 'immutable field id changed');
|
|
128
|
+
}
|
|
129
|
+
if (oldCoin.name !== newCoin.name) {
|
|
130
|
+
throw new errors_1.CoinReplacementNotAllowedError(oldCoin.name, 'immutable field name changed');
|
|
131
|
+
}
|
|
132
|
+
if (oldContractAddress !== newContractAddress) {
|
|
133
|
+
throw new errors_1.CoinReplacementNotAllowedError(oldCoin.name, 'immutable field contractAddress changed');
|
|
134
|
+
}
|
|
135
|
+
if (oldCoin.alias !== newCoin.alias) {
|
|
136
|
+
throw new errors_1.CoinReplacementNotAllowedError(oldCoin.name, 'immutable field alias changed');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
buildChainIdMap() {
|
|
140
|
+
const chainIdMap = new Map();
|
|
141
|
+
this._map.forEach((coin, coinName) => {
|
|
142
|
+
// Skip tokens - they share the same chainId as their parent chain
|
|
143
|
+
if (coin.isToken) {
|
|
144
|
+
return;
|
|
21
145
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (
|
|
26
|
-
|
|
146
|
+
const network = coin.network;
|
|
147
|
+
if ('chainId' in network && typeof network.chainId === 'number') {
|
|
148
|
+
const chainId = network.chainId;
|
|
149
|
+
if (!chainIdMap.has(chainId)) {
|
|
150
|
+
chainIdMap.set(chainId, coinName);
|
|
27
151
|
}
|
|
28
|
-
coinMap._coinByAliases.set(alias, coin);
|
|
29
152
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
56: 'bsc',
|
|
43
|
-
97: 'tbsc',
|
|
44
|
-
42161: 'arbeth',
|
|
45
|
-
421614: 'tarbeth',
|
|
46
|
-
10: 'opeth',
|
|
47
|
-
11155420: 'topeth',
|
|
48
|
-
};
|
|
49
|
-
return ethLikeCoinFromChainId[chainId];
|
|
153
|
+
});
|
|
154
|
+
return chainIdMap;
|
|
155
|
+
}
|
|
156
|
+
coinNameFromChainId(chainId) {
|
|
157
|
+
const coinName = CoinMap.LEGACY_CHAIN_ID_MAP[chainId];
|
|
158
|
+
if (coinName) {
|
|
159
|
+
return coinName;
|
|
160
|
+
}
|
|
161
|
+
if (this._coinByChainId === null) {
|
|
162
|
+
this._coinByChainId = this.buildChainIdMap();
|
|
163
|
+
}
|
|
164
|
+
return this._coinByChainId.get(chainId);
|
|
50
165
|
}
|
|
51
166
|
/**
|
|
52
167
|
* Override `get` to throw if a coin is missing, instead of returning undefined.
|
|
@@ -55,14 +170,32 @@ class CoinMap {
|
|
|
55
170
|
* @return {BaseCoin}
|
|
56
171
|
*/
|
|
57
172
|
get(key) {
|
|
58
|
-
const coin = this.
|
|
173
|
+
const coin = this.getOrUndefined(key);
|
|
59
174
|
if (coin) {
|
|
60
175
|
return coin;
|
|
61
176
|
}
|
|
62
177
|
throw new errors_1.CoinNotDefinedError(key);
|
|
63
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Safe accessor that returns undefined instead of throwing when a coin is not found.
|
|
181
|
+
* Prefer this over `get` at call sites where the coin name is not guaranteed to be
|
|
182
|
+
* registered — it makes the missing-coin case explicit in the type system.
|
|
183
|
+
* @param {string} key
|
|
184
|
+
* @return {BaseCoin | undefined}
|
|
185
|
+
*/
|
|
186
|
+
getOrUndefined(key) {
|
|
187
|
+
return (this._map.get(key) ||
|
|
188
|
+
this._coinByIds.get(key) ||
|
|
189
|
+
this._coinByAliases.get(key) ||
|
|
190
|
+
this._coinByContractAddress.get(key) ||
|
|
191
|
+
this._coinByNftCollectionID.get(key));
|
|
192
|
+
}
|
|
64
193
|
has(key) {
|
|
65
|
-
return this._map.has(key) ||
|
|
194
|
+
return (this._map.has(key) ||
|
|
195
|
+
this._coinByIds.has(key) ||
|
|
196
|
+
this._coinByAliases.has(key) ||
|
|
197
|
+
this._coinByContractAddress.has(key) ||
|
|
198
|
+
this._coinByNftCollectionID.has(key));
|
|
66
199
|
}
|
|
67
200
|
map(mapper) {
|
|
68
201
|
const mapResult = [];
|
|
@@ -95,4 +228,105 @@ class CoinMap {
|
|
|
95
228
|
}
|
|
96
229
|
}
|
|
97
230
|
exports.CoinMap = CoinMap;
|
|
98
|
-
|
|
231
|
+
/**
|
|
232
|
+
* Hardcoded mapping for backward compatibility.
|
|
233
|
+
*/
|
|
234
|
+
CoinMap.LEGACY_CHAIN_ID_MAP = {
|
|
235
|
+
1: 'eth',
|
|
236
|
+
42: 'teth',
|
|
237
|
+
5: 'gteth',
|
|
238
|
+
560048: 'hteth',
|
|
239
|
+
10001: 'ethw',
|
|
240
|
+
80002: 'tpolygon',
|
|
241
|
+
137: 'polygon',
|
|
242
|
+
56: 'bsc',
|
|
243
|
+
97: 'tbsc',
|
|
244
|
+
42161: 'arbeth',
|
|
245
|
+
421614: 'tarbeth',
|
|
246
|
+
10: 'opeth',
|
|
247
|
+
11155420: 'topeth',
|
|
248
|
+
1116: 'coredao',
|
|
249
|
+
1114: 'tcoredao',
|
|
250
|
+
248: 'oas',
|
|
251
|
+
9372: 'toas',
|
|
252
|
+
14: 'flr',
|
|
253
|
+
114: 'tflr',
|
|
254
|
+
19: 'sgb',
|
|
255
|
+
16: 'tsgb',
|
|
256
|
+
1111: 'wemix',
|
|
257
|
+
1112: 'twemix',
|
|
258
|
+
50: 'xdc',
|
|
259
|
+
51: 'txdc',
|
|
260
|
+
80094: 'bera',
|
|
261
|
+
80069: 'tbera',
|
|
262
|
+
42220: 'celo',
|
|
263
|
+
11142220: 'tcelo',
|
|
264
|
+
2222: 'kava',
|
|
265
|
+
2221: 'tkava',
|
|
266
|
+
43114: 'avaxc',
|
|
267
|
+
43113: 'tavaxc',
|
|
268
|
+
100: 'gno',
|
|
269
|
+
130: 'unieth',
|
|
270
|
+
1301: 'tunieth',
|
|
271
|
+
190415: 'hppeth',
|
|
272
|
+
181228: 'thppeth',
|
|
273
|
+
6985385: 'h',
|
|
274
|
+
7080969: 'th',
|
|
275
|
+
4663: 'hoodeth',
|
|
276
|
+
46630: 'thoodeth',
|
|
277
|
+
324: 'zksyncera',
|
|
278
|
+
300: 'tzksyncera',
|
|
279
|
+
8453: 'baseeth',
|
|
280
|
+
84532: 'tbaseeth',
|
|
281
|
+
143: 'mon',
|
|
282
|
+
10143: 'tmon',
|
|
283
|
+
480: 'world',
|
|
284
|
+
4801: 'tworld',
|
|
285
|
+
5031: 'somi',
|
|
286
|
+
50312: 'tstt',
|
|
287
|
+
1868: 'soneium',
|
|
288
|
+
1946: 'tsoneium',
|
|
289
|
+
33111: 'tapechain',
|
|
290
|
+
33139: 'apechain',
|
|
291
|
+
688689: 'tphrs',
|
|
292
|
+
102030: 'ctc',
|
|
293
|
+
102031: 'tctc',
|
|
294
|
+
998: 'thypeevm',
|
|
295
|
+
999: 'hypeevm',
|
|
296
|
+
16602: 'tog',
|
|
297
|
+
16661: 'og',
|
|
298
|
+
9746: 'txpl',
|
|
299
|
+
9745: 'xpl',
|
|
300
|
+
14601: 'tsonic',
|
|
301
|
+
146: 'sonic',
|
|
302
|
+
1328: 'tseievm',
|
|
303
|
+
1329: 'seievm',
|
|
304
|
+
1001: 'tkaia',
|
|
305
|
+
8217: 'kaia',
|
|
306
|
+
1270: 'tirys',
|
|
307
|
+
59141: 'tlineaeth',
|
|
308
|
+
59144: 'lineaeth',
|
|
309
|
+
1315: 'tip',
|
|
310
|
+
1514: 'ip',
|
|
311
|
+
545: 'tflow',
|
|
312
|
+
747: 'flow',
|
|
313
|
+
98867: 'tplume',
|
|
314
|
+
98866: 'plume',
|
|
315
|
+
6343: 'tmegaeth',
|
|
316
|
+
4326: 'megaeth',
|
|
317
|
+
295: 'hbarevm',
|
|
318
|
+
296: 'thbarevm',
|
|
319
|
+
196: 'okbxlayer',
|
|
320
|
+
1952: 'tokbxlayer',
|
|
321
|
+
5734951: 'jovayeth',
|
|
322
|
+
2019775: 'tjovayeth',
|
|
323
|
+
5042: 'arcusdc',
|
|
324
|
+
5042002: 'tarcusdc',
|
|
325
|
+
4217: 'tempo',
|
|
326
|
+
42431: 'ttempo',
|
|
327
|
+
5000: 'mantle',
|
|
328
|
+
5003: 'tmantle',
|
|
329
|
+
25363: 'fluenteth',
|
|
330
|
+
20994: 'tfluenteth',
|
|
331
|
+
};
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FPa0I7QUFDbEIsdUNBQXFGO0FBR3JGLE1BQWEsT0FBTztJQWFsQjtRQVppQixTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDN0MsZUFBVSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3BFLDZEQUE2RDtRQUM1QyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3hFLGtFQUFrRTtRQUNsRSxvR0FBb0c7UUFDbkYsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDaEYsK0VBQStFO1FBQzlELDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ2hGLCtGQUErRjtRQUN2RixtQkFBYyxHQUErQixJQUFJLENBQUM7UUFHeEQscUJBQXFCO0lBQ3ZCLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QixDQUFDLElBQXdCO1FBQ3JELElBQUksSUFBSSxZQUFZLHFDQUEyQixFQUFFLENBQUM7WUFDaEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsT0FBTyxR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ZixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFdBQVc7SUFDaEIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsT0FBTyxFQUFFLFdBQVc7SUFDcEIsSUFBSSxFQUFFLFNBQVM7SUFDZixPQUFPLEVBQUUsVUFBVTtJQUNuQixJQUFJLEVBQUUsT0FBTztJQUNiLEtBQUssRUFBRSxRQUFRO0lBQ2YsSUFBSSxFQUFFLFFBQVE7SUFDZCxJQUFJLEVBQUUsU0FBUztJQUNmLEtBQUssRUFBRSxXQUFXO0lBQ2xCLEtBQUssRUFBRSxZQUFZO0NBQ3BCLEFBakcwQyxDQWlHekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge1xuICBEdXBsaWNhdGVDb2luRGVmaW5pdGlvbkVycm9yLFxuICBDb2luTm90RGVmaW5lZEVycm9yLFxuICBEdXBsaWNhdGVDb2luSWREZWZpbml0aW9uRXJyb3IsXG4gIER1cGxpY2F0ZUNvbnRyYWN0QWRkcmVzc0RlZmluaXRpb25FcnJvcixcbiAgRHVwbGljYXRlTmZ0Q29sbGVjdGlvbklkRGVmaW5pdGlvbkVycm9yLFxuICBDb2luUmVwbGFjZW1lbnROb3RBbGxvd2VkRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbiwgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuIH0gZnJvbSAnLi9hY2NvdW50JztcbmltcG9ydCB7IEV0aGVyZXVtTmV0d29yayB9IGZyb20gJy4vbmV0d29ya3MnO1xuXG5leHBvcnQgY2xhc3MgQ29pbk1hcCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvaW5CeUlkcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIEhvbGRzIGtleSBlcXVpdmFsZW5jZXMgdXNlZCBkdXJpbmcgYW4gYXNzZXQgbmFtZSBtaWdyYXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5QWxpYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIG1hcCBvZiBjb2luIGJ5IGFkZHJlc3MgLT4gdGhlIGtleSBpcyB0aGUgZmFtaWx5OmNvbnRyYWN0QWRkcmVzc1xuICAvLyB0aGUgZmFtaWx5IGlzIHRoZSB3aGVyZSB0aGUgY29pbiBpcyBlLmcgbDEgY2hhaW5zIGxpa2UgZXRoLCBic2MgZXRjLiBvciBsMiBsaWtlIGFyYmV0aCwgY2VsbyBldGMuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvaW5CeUNvbnRyYWN0QWRkcmVzcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIG1hcCBvZiBjb2luIGJ5IE5GVCBjb2xsZWN0aW9uIElEIC0+IHRoZSBrZXkgaXMgdGhlICh0KWZhbWlseTpuZnRDb2xsZWN0aW9uSURcbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5TmZ0Q29sbGVjdGlvbklEID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgLy8gTGF6aWx5IGluaXRpYWxpemVkIGNhY2hlIGZvciBjaGFpbklkIHRvIGNvaW4gbmFtZSBtYXBwaW5nIChkZXJpdmVkIGZyb20gbmV0d29yayBkZWZpbml0aW9ucylcbiAgcHJpdmF0ZSBfY29pbkJ5Q2hhaW5JZDogTWFwPG51bWJlciwgc3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRG8gbm90IGluc3RhbnRpYXRlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb250cmFjdEFkZHJlc3NLZXkoY29pbjogQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29pbi5mYW1pbHl9OiR7Y29pbi5jb250cmFjdEFkZHJlc3N9YDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5mdENvbGxlY3Rpb25JZEtleShjb2luOiBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb2luLnByZWZpeH0ke2NvaW4uZmFtaWx5fToke2NvaW4ubmZ0Q29sbGVjdGlvbklkfWA7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGRpZmZlcmVudCB0b2tlbiB3aXRoIHRoZSBzYW1lIGNvbnRyYWN0IGFkZHJlc3MgKG9yIE5GVCBjb2xsZWN0aW9uIGlkKSBpcyBhbHJlYWR5XG4gICAqIHJlZ2lzdGVyZWQuIFRva2VuIGlkZW50aXR5IGluIHRoZSBtYXAgaXMga2V5ZWQgYnkgbmFtZS9pZC9hbGlhcywgYnV0IGEgdG9rZW4gYWxzbyBjbGFpbXMgYVxuICAgKiBjb250cmFjdC1hZGRyZXNzIGtleSAoYGZhbWlseTpjb250cmFjdEFkZHJlc3NgKSBhbmQsIGZvciBORlRzLCBhIGNvbGxlY3Rpb24taWQga2V5LiBUd28gdG9rZW5zXG4gICAqIHRoYXQgc2hhcmUgc3VjaCBhIGtleSBidXQgZGlmZmVyIGluIG5hbWUgY2Fubm90IGNvZXhpc3Qg4oCUIGBhZGRDb2luYCB0aHJvd3Mgb24gdGhlIHNlY29uZC5cbiAgICogQ2FsbGVycyBtZXJnaW5nIGV4dGVybmFsbHktc291cmNlZCB0b2tlbnMgdXNlIHRoaXMgdG8gc2tpcCBhIGNvbGxpZGluZyB0b2tlbiByYXRoZXIgdGhhbiBjcmFzaC5cbiAgICovXG4gIHB1YmxpYyBoYXNUb2tlbkFkZHJlc3NDb25mbGljdChjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiBib29sZWFuIHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbikge1xuICAgICAgY29uc3Qga2V5ID0gQ29pbk1hcC5jb250cmFjdEFkZHJlc3NLZXkoY29pbik7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBleGlzdGluZyAhPT0gdW5kZWZpbmVkICYmIGV4aXN0aW5nLm5ldHdvcmsudHlwZSA9PT0gY29pbi5uZXR3b3JrLnR5cGU7XG4gICAgfVxuICAgIGlmIChjb2luIGluc3RhbmNlb2YgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuKSB7XG4gICAgICBjb25zdCBrZXkgPSBDb2luTWFwLm5mdENvbGxlY3Rpb25JZEtleShjb2luKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChrZXkpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcubmV0d29yay50eXBlID09PSBjb2luLm5ldHdvcmsudHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db2lucyhjb2luczogUmVhZG9ubHk8QmFzZUNvaW4+W10pOiBDb2luTWFwIHtcbiAgICBjb25zdCBjb2luTWFwID0gbmV3IENvaW5NYXAoKTtcbiAgICBjb2lucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgICBjb2luTWFwLmFkZENvaW4oY29pbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvaW5NYXA7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29pbihjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWFwLmhhcyhjb2luLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQ29pbkRlZmluaXRpb25FcnJvcihjb2luLm5hbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29pbkJ5SWRzLmhhcyhjb2luLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUNvaW5JZERlZmluaXRpb25FcnJvcihjb2luLmlkKTtcbiAgICB9XG4gICAgY29uc3QgYWxpYXMgPSBjb2luLmFsaWFzO1xuICAgIGlmIChhbGlhcyAmJiB0aGlzLl9jb2luQnlBbGlhc2VzLmhhcyhhbGlhcykpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVDb2luRGVmaW5pdGlvbkVycm9yKGFsaWFzKTtcbiAgICB9XG4gICAgdGhpcy5fbWFwLnNldChjb2luLm5hbWUsIGNvaW4pO1xuICAgIHRoaXMuX2NvaW5CeUlkcy5zZXQoY29pbi5pZCwgY29pbik7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICB0aGlzLl9jb2luQnlBbGlhc2VzLnNldChjb2luLmFsaWFzLCBjb2luKTtcbiAgICB9XG5cbiAgICBpZiAoY29pbi5pc1Rva2VuKSB7XG4gICAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbikge1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3NLZXkgPSBDb2luTWFwLmNvbnRyYWN0QWRkcmVzc0tleShjb2luKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcyA9IHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoY29udHJhY3RBZGRyZXNzS2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nQnlDb250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcy5uZXR3b3JrLnR5cGUgPT09IGNvaW4ubmV0d29yay50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQ29udHJhY3RBZGRyZXNzRGVmaW5pdGlvbkVycm9yKGNvbnRyYWN0QWRkcmVzc0tleSwgZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcy5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLnNldChjb250cmFjdEFkZHJlc3NLZXksIGNvaW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgbmZ0Q29sbGVjdGlvbktleSA9IENvaW5NYXAubmZ0Q29sbGVjdGlvbklkS2V5KGNvaW4pO1xuICAgICAgICBjb25zdCBleGlzdGluZ0J5TmZ0Q29sbGVjdGlvbklkID0gdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChuZnRDb2xsZWN0aW9uS2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nQnlOZnRDb2xsZWN0aW9uSWQpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCeU5mdENvbGxlY3Rpb25JZC5uZXR3b3JrLnR5cGUgPT09IGNvaW4ubmV0d29yay50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlTmZ0Q29sbGVjdGlvbklkRGVmaW5pdGlvbkVycm9yKG5mdENvbGxlY3Rpb25LZXksIGV4aXN0aW5nQnlOZnRDb2xsZWN0aW9uSWQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5zZXQobmZ0Q29sbGVjdGlvbktleSwgY29pbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIGNvaW4gKHRva2VuIG9yIGJhc2UgY29pbikgaW4gdGhlIENvaW5NYXAgd2l0aCBhIG5ldyBvYmplY3QgY2FycnlpbmcgcmVmcmVzaGVkIG1vZGlmaWFibGVcbiAgICogZmllbGRzLiBUaGUgZXhpc3RpbmcgcmVjb3JkIGlzIGxvb2tlZCB1cCBieSBpZCwgYW5kIHRoZSBzd2FwIG9ubHkgaGFwcGVucyB3aGVuIGl0cyBpbW11dGFibGUgZmllbGRzXG4gICAqIChpZCwgbmFtZSwgY29udHJhY3QgYWRkcmVzcyBhbmQgYWxpYXMpIGFyZSB1bmNoYW5nZWQuIEFueXRoaW5nIGVsc2UgdGhyb3dzIGJlZm9yZSB0aGUgbWFwXG4gICAqIGlzIHRvdWNoZWQuIENvaW5zIHRoYXQgYXJlIG5vdCBpbiB0aGUgbWFwIHlldCBhcmUgYWRkZWQuXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8QmFzZUNvaW4+fSBjb2luIG5ldyBjb2luIG9iamVjdFxuICAgKiBAdGhyb3dzIHtDb2luUmVwbGFjZW1lbnROb3RBbGxvd2VkRXJyb3J9IHdoZW4gYW4gaW1tdXRhYmxlIGZpZWxkIGRpZmZlcnMgZnJvbSB0aGUgZXhpc3RpbmcgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZShjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXMoY29pbi5pZCkpIHtcbiAgICAgIGNvbnN0IG9sZENvaW4gPSB0aGlzLmdldChjb2luLmlkKTtcbiAgICAgIENvaW5NYXAuYXNzZXJ0SW1tdXRhYmxlRmllbGRzVW5jaGFuZ2VkKG9sZENvaW4sIGNvaW4pO1xuICAgICAgdGhpcy5fbWFwLmRlbGV0ZShvbGRDb2luLm5hbWUpO1xuICAgICAgdGhpcy5fY29pbkJ5SWRzLmRlbGV0ZShvbGRDb2luLmlkKTtcbiAgICAgIGlmIChvbGRDb2luLmFsaWFzKSB7XG4gICAgICAgIHRoaXMuX2NvaW5CeUFsaWFzZXMuZGVsZXRlKG9sZENvaW4uYWxpYXMpO1xuICAgICAgfVxuICAgICAgaWYgKG9sZENvaW4gaW5zdGFuY2VvZiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLmRlbGV0ZShDb2luTWFwLmNvbnRyYWN0QWRkcmVzc0tleShvbGRDb2luKSk7XG4gICAgICB9IGVsc2UgaWYgKG9sZENvaW4gaW5zdGFuY2VvZiBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmRlbGV0ZShDb2luTWFwLm5mdENvbGxlY3Rpb25JZEtleShvbGRDb2luKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkQ29pbihjb2luKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzc2VydEltbXV0YWJsZUZpZWxkc1VuY2hhbmdlZChvbGRDb2luOiBSZWFkb25seTxCYXNlQ29pbj4sIG5ld0NvaW46IFJlYWRvbmx5PEJhc2VDb2luPik6IHZvaWQge1xuICAgIGNvbnN0IG9sZENvbnRyYWN0QWRkcmVzcyA9IG9sZENvaW4gaW5zdGFuY2VvZiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4gPyBvbGRDb2luLmNvbnRyYWN0QWRkcmVzcyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXdDb250cmFjdEFkZHJlc3MgPSBuZXdDb2luIGluc3RhbmNlb2YgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuID8gbmV3Q29pbi5jb250cmFjdEFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gICAgaWYgKG9sZENvaW4uaWQgIT09IG5ld0NvaW4uaWQpIHtcbiAgICAgIHRocm93IG5ldyBDb2luUmVwbGFjZW1lbnROb3RBbGxvd2VkRXJyb3Iob2xkQ29pbi5uYW1lLCAnaW1tdXRhYmxlIGZpZWxkIGlkIGNoYW5nZWQnKTtcbiAgICB9XG4gICAgaWYgKG9sZENvaW4ubmFtZSAhPT0gbmV3Q29pbi5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQ29pblJlcGxhY2VtZW50Tm90QWxsb3dlZEVycm9yKG9sZENvaW4ubmFtZSwgJ2ltbXV0YWJsZSBmaWVsZCBuYW1lIGNoYW5nZWQnKTtcbiAgICB9XG4gICAgaWYgKG9sZENvbnRyYWN0QWRkcmVzcyAhPT0gbmV3Q29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29pblJlcGxhY2VtZW50Tm90QWxsb3dlZEVycm9yKG9sZENvaW4ubmFtZSwgJ2ltbXV0YWJsZSBmaWVsZCBjb250cmFjdEFkZHJlc3MgY2hhbmdlZCcpO1xuICAgIH1cbiAgICBpZiAob2xkQ29pbi5hbGlhcyAhPT0gbmV3Q29pbi5hbGlhcykge1xuICAgICAgdGhyb3cgbmV3IENvaW5SZXBsYWNlbWVudE5vdEFsbG93ZWRFcnJvcihvbGRDb2luLm5hbWUsICdpbW11dGFibGUgZmllbGQgYWxpYXMgY2hhbmdlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkY29kZWQgbWFwcGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExFR0FDWV9DSEFJTl9JRF9NQVA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgMTogJ2V0aCcsXG4gICAgNDI6ICd0ZXRoJyxcbiAgICA1OiAnZ3RldGgnLFxuICAgIDU2MDA0ODogJ2h0ZXRoJyxcbiAgICAxMDAwMTogJ2V0aHcnLFxuICAgIDgwMDAyOiAndHBvbHlnb24nLFxuICAgIDEzNzogJ3BvbHlnb24nLFxuICAgIDU2OiAnYnNjJyxcbiAgICA5NzogJ3Ric2MnLFxuICAgIDQyMTYxOiAnYXJiZXRoJyxcbiAgICA0MjE2MTQ6ICd0YXJiZXRoJyxcbiAgICAxMDogJ29wZXRoJyxcbiAgICAxMTE1NTQyMDogJ3RvcGV0aCcsXG4gICAgMTExNjogJ2NvcmVkYW8nLFxuICAgIDExMTQ6ICd0Y29yZWRhbycsXG4gICAgMjQ4OiAnb2FzJyxcbiAgICA5MzcyOiAndG9hcycsXG4gICAgMTQ6ICdmbHInLFxuICAgIDExNDogJ3RmbHInLFxuICAgIDE5OiAnc2diJyxcbiAgICAxNjogJ3RzZ2InLFxuICAgIDExMTE6ICd3ZW1peCcsXG4gICAgMTExMjogJ3R3ZW1peCcsXG4gICAgNTA6ICd4ZGMnLFxuICAgIDUxOiAndHhkYycsXG4gICAgODAwOTQ6ICdiZXJhJyxcbiAgICA4MDA2OTogJ3RiZXJhJyxcbiAgICA0MjIyMDogJ2NlbG8nLFxuICAgIDExMTQyMjIwOiAndGNlbG8nLFxuICAgIDIyMjI6ICdrYXZhJyxcbiAgICAyMjIxOiAndGthdmEnLFxuICAgIDQzMTE0OiAnYXZheGMnLFxuICAgIDQzMTEzOiAndGF2YXhjJyxcbiAgICAxMDA6ICdnbm8nLFxuICAgIDEzMDogJ3VuaWV0aCcsXG4gICAgMTMwMTogJ3R1bmlldGgnLFxuICAgIDE5MDQxNTogJ2hwcGV0aCcsXG4gICAgMTgxMjI4OiAndGhwcGV0aCcsXG4gICAgNjk4NTM4NTogJ2gnLFxuICAgIDcwODA5Njk6ICd0aCcsXG4gICAgNDY2MzogJ2hvb2RldGgnLFxuICAgIDQ2NjMwOiAndGhvb2RldGgnLFxuICAgIDMyNDogJ3prc3luY2VyYScsXG4gICAgMzAwOiAndHprc3luY2VyYScsXG4gICAgODQ1MzogJ2Jhc2VldGgnLFxuICAgIDg0NTMyOiAndGJhc2VldGgnLFxuICAgIDE0MzogJ21vbicsXG4gICAgMTAxNDM6ICd0bW9uJyxcbiAgICA0ODA6ICd3b3JsZCcsXG4gICAgNDgwMTogJ3R3b3JsZCcsXG4gICAgNTAzMTogJ3NvbWknLFxuICAgIDUwMzEyOiAndHN0dCcsXG4gICAgMTg2ODogJ3NvbmVpdW0nLFxuICAgIDE5NDY6ICd0c29uZWl1bScsXG4gICAgMzMxMTE6ICd0YXBlY2hhaW4nLFxuICAgIDMzMTM5OiAnYXBlY2hhaW4nLFxuICAgIDY4ODY4OTogJ3RwaHJzJyxcbiAgICAxMDIwMzA6ICdjdGMnLFxuICAgIDEwMjAzMTogJ3RjdGMnLFxuICAgIDk5ODogJ3RoeXBlZXZtJyxcbiAgICA5OTk6ICdoeXBlZXZtJyxcbiAgICAxNjYwMjogJ3RvZycsXG4gICAgMTY2NjE6ICdvZycsXG4gICAgOTc0NjogJ3R4cGwnLFxuICAgIDk3NDU6ICd4cGwnLFxuICAgIDE0NjAxOiAndHNvbmljJyxcbiAgICAxNDY6ICdzb25pYycsXG4gICAgMTMyODogJ3RzZWlldm0nLFxuICAgIDEzMjk6ICdzZWlldm0nLFxuICAgIDEwMDE6ICd0a2FpYScsXG4gICAgODIxNzogJ2thaWEnLFxuICAgIDEyNzA6ICd0aXJ5cycsXG4gICAgNTkxNDE6ICd0bGluZWFldGgnLFxuICAgIDU5MTQ0OiAnbGluZWFldGgnLFxuICAgIDEzMTU6ICd0aXAnLFxuICAgIDE1MTQ6ICdpcCcsXG4gICAgNTQ1OiAndGZsb3cnLFxuICAgIDc0NzogJ2Zsb3cnLFxuICAgIDk4ODY3OiAndHBsdW1lJyxcbiAgICA5ODg2NjogJ3BsdW1lJyxcbiAgICA2MzQzOiAndG1lZ2FldGgnLFxuICAgIDQzMjY6ICdtZWdhZXRoJyxcbiAgICAyOTU6ICdoYmFyZXZtJyxcbiAgICAyOTY6ICd0aGJhcmV2bScsXG4gICAgMTk2OiAnb2tieGxheWVyJyxcbiAgICAxOTUyOiAndG9rYnhsYXllcicsXG4gICAgNTczNDk1MTogJ2pvdmF5ZXRoJyxcbiAgICAyMDE5Nzc1OiAndGpvdmF5ZXRoJyxcbiAgICA1MDQyOiAnYXJjdXNkYycsXG4gICAgNTA0MjAwMjogJ3RhcmN1c2RjJyxcbiAgICA0MjE3OiAndGVtcG8nLFxuICAgIDQyNDMxOiAndHRlbXBvJyxcbiAgICA1MDAwOiAnbWFudGxlJyxcbiAgICA1MDAzOiAndG1hbnRsZScsXG4gICAgMjUzNjM6ICdmbHVlbnRldGgnLFxuICAgIDIwOTk0OiAndGZsdWVudGV0aCcsXG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZENoYWluSWRNYXAoKTogTWFwPG51bWJlciwgc3RyaW5nPiB7XG4gICAgY29uc3QgY2hhaW5JZE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgdGhpcy5fbWFwLmZvckVhY2goKGNvaW4sIGNvaW5OYW1lKSA9PiB7XG4gICAgICAvLyBTa2lwIHRva2VucyAtIHRoZXkgc2hhcmUgdGhlIHNhbWUgY2hhaW5JZCBhcyB0aGVpciBwYXJlbnQgY2hhaW5cbiAgICAgIGlmIChjb2luLmlzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV0d29yayA9IGNvaW4ubmV0d29yaztcbiAgICAgIGlmICgnY2hhaW5JZCcgaW4gbmV0d29yayAmJiB0eXBlb2YgKG5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBjaGFpbklkID0gKG5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkO1xuICAgICAgICBpZiAoIWNoYWluSWRNYXAuaGFzKGNoYWluSWQpKSB7XG4gICAgICAgICAgY2hhaW5JZE1hcC5zZXQoY2hhaW5JZCwgY29pbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoYWluSWRNYXA7XG4gIH1cblxuICBwdWJsaWMgY29pbk5hbWVGcm9tQ2hhaW5JZChjaGFpbklkOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvaW5OYW1lID0gQ29pbk1hcC5MRUdBQ1lfQ0hBSU5fSURfTUFQW2NoYWluSWRdO1xuICAgIGlmIChjb2luTmFtZSkge1xuICAgICAgcmV0dXJuIGNvaW5OYW1lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb2luQnlDaGFpbklkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9jb2luQnlDaGFpbklkID0gdGhpcy5idWlsZENoYWluSWRNYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvaW5CeUNoYWluSWQuZ2V0KGNoYWluSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGBnZXRgIHRvIHRocm93IGlmIGEgY29pbiBpcyBtaXNzaW5nLCBpbnN0ZWFkIG9mIHJldHVybmluZyB1bmRlZmluZWQuXG4gICAqIEl0IHdpbGwgaG9ub3Iga2V5IGVxdWl2YWxlbmNlcyBpbiBjYXNlIGdpdmVuIGtleSBpcyBtaXNzaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge0Jhc2VDb2lufVxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IFJlYWRvbmx5PEJhc2VDb2luPiB7XG4gICAgY29uc3QgY29pbiA9IHRoaXMuZ2V0T3JVbmRlZmluZWQoa2V5KTtcbiAgICBpZiAoY29pbikge1xuICAgICAgcmV0dXJuIGNvaW47XG4gICAgfVxuICAgIHRocm93IG5ldyBDb2luTm90RGVmaW5lZEVycm9yKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZSBhY2Nlc3NvciB0aGF0IHJldHVybnMgdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhyb3dpbmcgd2hlbiBhIGNvaW4gaXMgbm90IGZvdW5kLlxuICAgKiBQcmVmZXIgdGhpcyBvdmVyIGBnZXRgIGF0IGNhbGwgc2l0ZXMgd2hlcmUgdGhlIGNvaW4gbmFtZSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuICAgKiByZWdpc3RlcmVkIOKAlCBpdCBtYWtlcyB0aGUgbWlzc2luZy1jb2luIGNhc2UgZXhwbGljaXQgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge0Jhc2VDb2luIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgcHVibGljIGdldE9yVW5kZWZpbmVkKGtleTogc3RyaW5nKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fbWFwLmdldChrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlJZHMuZ2V0KGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUFsaWFzZXMuZ2V0KGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChrZXkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fbWFwLmhhcyhrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlJZHMuaGFzKGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUFsaWFzZXMuaGFzKGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5oYXMoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmhhcyhrZXkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VD4obWFwcGVyOiAoY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LCBjb2luTmFtZTogc3RyaW5nKSA9PiBUKTogVFtdIHtcbiAgICBjb25zdCBtYXBSZXN1bHQ6IFRbXSA9IFtdO1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBtYXBSZXN1bHQucHVzaChtYXBwZXIodmFsdWUsIGtleSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBSZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgcmVkdWNlPFQ+KHJlZHVjZXI6IChhY2M6IFQsIGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gVCwgaW5pdGlhbFZhbHVlOiBUKTogVCB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgYWNjID0gcmVkdWNlcihhY2MsIHZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gYm9vbGVhbik6IENvaW5NYXAge1xuICAgIGNvbnN0IGZpbHRlclJlc3VsdDogUmVhZG9ubHk8QmFzZUNvaW4+W10gPSBbXTtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5KSkge1xuICAgICAgICBmaWx0ZXJSZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvaW5NYXAuZnJvbUNvaW5zKGZpbHRlclJlc3VsdCk7XG4gIH1cblxuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPl0+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CoinFamily, CoinFeature } from './base';
|
|
2
|
+
/** Register default token features for a dynamically onboarded chain family. */
|
|
3
|
+
export declare function registerNetworkFeatures(family: string, features: CoinFeature[]): void;
|
|
4
|
+
/** Default token feature set shared by "plain" EVM-compatible chain families (no bespoke features). */
|
|
5
|
+
export declare const EVM_TOKEN_FEATURES: CoinFeature[];
|
|
6
|
+
/** Same as EVM_TOKEN_FEATURES, minus EIP1559, for EVM-compatible families that don't support it (e.g. xdc). */
|
|
7
|
+
export declare const EVM_TOKEN_FEATURES_NON_EIP1559: CoinFeature[];
|
|
8
|
+
/**
|
|
9
|
+
* Populate networkFeatureMapForTokens for every family whose base coin carries
|
|
10
|
+
* CoinFeature.SUPPORTS_ERC20 and isn't already explicitly listed below, using EVM_TOKEN_FEATURES
|
|
11
|
+
* (or its non-EIP1559 variant, mirroring the base coin's own EIP1559 support). Called once from
|
|
12
|
+
* coins.ts (which has access to the full coin map) so this module doesn't need to import it
|
|
13
|
+
* directly (that would create a circular import: coins.ts -> networkFeatureMapForTokens.ts ->
|
|
14
|
+
* allCoinsAndTokens.ts -> coins/botTokens.ts -> networkFeatureMapForTokens.ts).
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerErc20Families(families: Iterable<[family: string, supportsEip1559: boolean]>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Look up token features for a family.
|
|
19
|
+
* Checks the static map first (including entries backfilled by registerErc20Families), then the
|
|
20
|
+
* dynamic map. Returns undefined if the family isn't recognized by either.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getNetworkFeatures(family: string): CoinFeature[] | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the final feature list for a token: the family's default token features
|
|
25
|
+
* plus `additionalFeatures`, minus `excludedFeatures`. Used by generated bot-token
|
|
26
|
+
* lists to apply the per-token diff returned by AMS (`features=false`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function getTokenFeatures(family: string, additionalFeatures?: CoinFeature[], excludedFeatures?: CoinFeature[]): CoinFeature[];
|
|
29
|
+
export declare const networkFeatureMapForTokens: Partial<Record<CoinFamily, CoinFeature[]>>;
|
|
30
|
+
//# sourceMappingURL=networkFeatureMapForTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkFeatureMapForTokens.d.ts","sourceRoot":"","sources":["../../src/networkFeatureMapForTokens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAiBjD,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAErF;AAED,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,EAAE,WAAW,EAQ3C,CAAC;AAEF,+GAA+G;AAC/G,eAAO,MAAM,8BAA8B,EAAE,WAAW,EAEvD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAQ1G;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,SAAS,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,WAAW,EAAO,EACtC,gBAAgB,GAAE,WAAW,EAAO,GACnC,WAAW,EAAE,CAIf;AAED,eAAO,MAAM,0BAA0B,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CA4BjF,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.networkFeatureMapForTokens = exports.EVM_TOKEN_FEATURES_NON_EIP1559 = exports.EVM_TOKEN_FEATURES = void 0;
|
|
4
|
+
exports.registerNetworkFeatures = registerNetworkFeatures;
|
|
5
|
+
exports.registerErc20Families = registerErc20Families;
|
|
6
|
+
exports.getNetworkFeatures = getNetworkFeatures;
|
|
7
|
+
exports.getTokenFeatures = getTokenFeatures;
|
|
8
|
+
const account_1 = require("./account");
|
|
9
|
+
const base_1 = require("./base");
|
|
10
|
+
const coinFeatures_1 = require("./coinFeatures");
|
|
11
|
+
const dynamicNetworkFeaturesMap = new Map();
|
|
12
|
+
/** Register default token features for a dynamically onboarded chain family. */
|
|
13
|
+
function registerNetworkFeatures(family, features) {
|
|
14
|
+
dynamicNetworkFeaturesMap.set(family, features);
|
|
15
|
+
}
|
|
16
|
+
/** Default token feature set shared by "plain" EVM-compatible chain families (no bespoke features). */
|
|
17
|
+
exports.EVM_TOKEN_FEATURES = [
|
|
18
|
+
...coinFeatures_1.EVM_FEATURES,
|
|
19
|
+
base_1.CoinFeature.SHARED_EVM_SIGNING,
|
|
20
|
+
base_1.CoinFeature.SHARED_EVM_SDK,
|
|
21
|
+
base_1.CoinFeature.EVM_COMPATIBLE_IMS,
|
|
22
|
+
base_1.CoinFeature.EVM_COMPATIBLE_UI,
|
|
23
|
+
base_1.CoinFeature.EVM_COMPATIBLE_WP,
|
|
24
|
+
base_1.CoinFeature.SUPPORTS_ERC20,
|
|
25
|
+
];
|
|
26
|
+
/** Same as EVM_TOKEN_FEATURES, minus EIP1559, for EVM-compatible families that don't support it (e.g. xdc). */
|
|
27
|
+
exports.EVM_TOKEN_FEATURES_NON_EIP1559 = exports.EVM_TOKEN_FEATURES.filter((feature) => feature !== base_1.CoinFeature.EIP1559);
|
|
28
|
+
/**
|
|
29
|
+
* Populate networkFeatureMapForTokens for every family whose base coin carries
|
|
30
|
+
* CoinFeature.SUPPORTS_ERC20 and isn't already explicitly listed below, using EVM_TOKEN_FEATURES
|
|
31
|
+
* (or its non-EIP1559 variant, mirroring the base coin's own EIP1559 support). Called once from
|
|
32
|
+
* coins.ts (which has access to the full coin map) so this module doesn't need to import it
|
|
33
|
+
* directly (that would create a circular import: coins.ts -> networkFeatureMapForTokens.ts ->
|
|
34
|
+
* allCoinsAndTokens.ts -> coins/botTokens.ts -> networkFeatureMapForTokens.ts).
|
|
35
|
+
*/
|
|
36
|
+
function registerErc20Families(families) {
|
|
37
|
+
for (const [family, supportsEip1559] of families) {
|
|
38
|
+
if (!(family in exports.networkFeatureMapForTokens)) {
|
|
39
|
+
exports.networkFeatureMapForTokens[family] = supportsEip1559
|
|
40
|
+
? exports.EVM_TOKEN_FEATURES
|
|
41
|
+
: exports.EVM_TOKEN_FEATURES_NON_EIP1559;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Look up token features for a family.
|
|
47
|
+
* Checks the static map first (including entries backfilled by registerErc20Families), then the
|
|
48
|
+
* dynamic map. Returns undefined if the family isn't recognized by either.
|
|
49
|
+
*/
|
|
50
|
+
function getNetworkFeatures(family) {
|
|
51
|
+
return exports.networkFeatureMapForTokens[family] ?? dynamicNetworkFeaturesMap.get(family);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the final feature list for a token: the family's default token features
|
|
55
|
+
* plus `additionalFeatures`, minus `excludedFeatures`. Used by generated bot-token
|
|
56
|
+
* lists to apply the per-token diff returned by AMS (`features=false`).
|
|
57
|
+
*/
|
|
58
|
+
function getTokenFeatures(family, additionalFeatures = [], excludedFeatures = []) {
|
|
59
|
+
const base = getNetworkFeatures(family) ?? [];
|
|
60
|
+
const excluded = new Set(excludedFeatures);
|
|
61
|
+
return [...new Set([...base, ...additionalFeatures])].filter((f) => !excluded.has(f));
|
|
62
|
+
}
|
|
63
|
+
exports.networkFeatureMapForTokens = {
|
|
64
|
+
algo: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
65
|
+
apt: coinFeatures_1.APT_FEATURES,
|
|
66
|
+
arbeth: [...account_1.AccountCoin.DEFAULT_FEATURES, base_1.CoinFeature.EIP1559],
|
|
67
|
+
avaxc: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
68
|
+
bera: [...account_1.AccountCoin.DEFAULT_FEATURES, base_1.CoinFeature.EIP1559],
|
|
69
|
+
bsc: coinFeatures_1.BSC_TOKEN_FEATURES,
|
|
70
|
+
canton: coinFeatures_1.CANTON_TOKEN_FEATURES,
|
|
71
|
+
celo: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
72
|
+
eth: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
73
|
+
baseeth: exports.EVM_TOKEN_FEATURES,
|
|
74
|
+
eos: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
75
|
+
gasevm: exports.EVM_TOKEN_FEATURES,
|
|
76
|
+
hbar: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
77
|
+
opeth: [...account_1.AccountCoin.DEFAULT_FEATURES, base_1.CoinFeature.EIP1559],
|
|
78
|
+
katanaeth: exports.EVM_TOKEN_FEATURES,
|
|
79
|
+
polygon: coinFeatures_1.POLYGON_TOKEN_FEATURES,
|
|
80
|
+
scrolleth: exports.EVM_TOKEN_FEATURES,
|
|
81
|
+
sol: coinFeatures_1.SOL_TOKEN_FEATURES,
|
|
82
|
+
stx: coinFeatures_1.STX_TOKEN_FEATURES,
|
|
83
|
+
sui: coinFeatures_1.SUI_TOKEN_FEATURES,
|
|
84
|
+
tao: coinFeatures_1.TAO_TOKEN_FEATURES,
|
|
85
|
+
polyx: coinFeatures_1.POLYX_TOKEN_FEATURES,
|
|
86
|
+
trx: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
87
|
+
xlm: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
88
|
+
xrp: account_1.AccountCoin.DEFAULT_FEATURES,
|
|
89
|
+
ofc: [],
|
|
90
|
+
ada: coinFeatures_1.ADA_TOKEN_FEATURES,
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUJBLDBEQUVDO0FBMEJELHNEQVFDO0FBT0QsZ0RBRUM7QUFPRCw0Q0FRQztBQS9FRCx1Q0FBd0M7QUFDeEMsaUNBQWlEO0FBQ2pELGlEQVl3QjtBQUV4QixNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0FBRW5FLGdGQUFnRjtBQUNoRixTQUFnQix1QkFBdUIsQ0FBQyxNQUFjLEVBQUUsUUFBdUI7SUFDN0UseUJBQXlCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsdUdBQXVHO0FBQzFGLFFBQUEsa0JBQWtCLEdBQWtCO0lBQy9DLEdBQUcsMkJBQVk7SUFDZixrQkFBVyxDQUFDLGtCQUFrQjtJQUM5QixrQkFBVyxDQUFDLGNBQWM7SUFDMUIsa0JBQVcsQ0FBQyxrQkFBa0I7SUFDOUIsa0JBQVcsQ0FBQyxpQkFBaUI7SUFDN0Isa0JBQVcsQ0FBQyxpQkFBaUI7SUFDN0Isa0JBQVcsQ0FBQyxjQUFjO0NBQzNCLENBQUM7QUFFRiwrR0FBK0c7QUFDbEcsUUFBQSw4QkFBOEIsR0FBa0IsMEJBQWtCLENBQUMsTUFBTSxDQUNwRixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLGtCQUFXLENBQUMsT0FBTyxDQUM3QyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLFFBQThEO0lBQ2xHLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksa0NBQTBCLENBQUMsRUFBRSxDQUFDO1lBQzVDLGtDQUEwQixDQUFDLE1BQW9CLENBQUMsR0FBRyxlQUFlO2dCQUNoRSxDQUFDLENBQUMsMEJBQWtCO2dCQUNwQixDQUFDLENBQUMsc0NBQThCLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxrQ0FBMEIsQ0FBQyxNQUFvQixDQUFDLElBQUkseUJBQXlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25HLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQWMsRUFDZCxxQkFBb0MsRUFBRSxFQUN0QyxtQkFBa0MsRUFBRTtJQUVwQyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQWMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBYyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRyxDQUFDO0FBRVksUUFBQSwwQkFBMEIsR0FBK0M7SUFDcEYsSUFBSSxFQUFFLHFCQUFXLENBQUMsZ0JBQWdCO0lBQ2xDLEdBQUcsRUFBRSwyQkFBWTtJQUNqQixNQUFNLEVBQUUsQ0FBQyxHQUFHLHFCQUFXLENBQUMsZ0JBQWdCLEVBQUUsa0JBQVcsQ0FBQyxPQUFPLENBQUM7SUFDOUQsS0FBSyxFQUFFLHFCQUFXLENBQUMsZ0JBQWdCO0lBQ25DLElBQUksRUFBRSxDQUFDLEdBQUcscUJBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBVyxDQUFDLE9BQU8sQ0FBQztJQUM1RCxHQUFHLEVBQUUsaUNBQWtCO0lBQ3ZCLE1BQU0sRUFBRSxvQ0FBcUI7SUFDN0IsSUFBSSxFQUFFLHFCQUFXLENBQUMsZ0JBQWdCO0lBQ2xDLEdBQUcsRUFBRSxxQkFBVyxDQUFDLGdCQUFnQjtJQUNqQyxPQUFPLEVBQUUsMEJBQWtCO0lBQzNCLEdBQUcsRUFBRSxxQkFBVyxDQUFDLGdCQUFnQjtJQUNqQyxNQUFNLEVBQUUsMEJBQWtCO0lBQzFCLElBQUksRUFBRSxxQkFBVyxDQUFDLGdCQUFnQjtJQUNsQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLHFCQUFXLENBQUMsZ0JBQWdCLEVBQUUsa0JBQVcsQ0FBQyxPQUFPLENBQUM7SUFDN0QsU0FBUyxFQUFFLDBCQUFrQjtJQUM3QixPQUFPLEVBQUUscUNBQXNCO0lBQy9CLFNBQVMsRUFBRSwwQkFBa0I7SUFDN0IsR0FBRyxFQUFFLGlDQUFrQjtJQUN2QixHQUFHLEVBQUUsaUNBQWtCO0lBQ3ZCLEdBQUcsRUFBRSxpQ0FBa0I7SUFDdkIsR0FBRyxFQUFFLGlDQUFrQjtJQUN2QixLQUFLLEVBQUUsbUNBQW9CO0lBQzNCLEdBQUcsRUFBRSxxQkFBVyxDQUFDLGdCQUFnQjtJQUNqQyxHQUFHLEVBQUUscUJBQVcsQ0FBQyxnQkFBZ0I7SUFDakMsR0FBRyxFQUFFLHFCQUFXLENBQUMsZ0JBQWdCO0lBQ2pDLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLGlDQUFrQjtDQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjb3VudENvaW4gfSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgQ29pbkZhbWlseSwgQ29pbkZlYXR1cmUgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtcbiAgQURBX1RPS0VOX0ZFQVRVUkVTLFxuICBBUFRfRkVBVFVSRVMsXG4gIEJTQ19UT0tFTl9GRUFUVVJFUyxcbiAgQ0FOVE9OX1RPS0VOX0ZFQVRVUkVTLFxuICBFVk1fRkVBVFVSRVMsXG4gIFBPTFlHT05fVE9LRU5fRkVBVFVSRVMsXG4gIFBPTFlYX1RPS0VOX0ZFQVRVUkVTLFxuICBTT0xfVE9LRU5fRkVBVFVSRVMsXG4gIFNUWF9UT0tFTl9GRUFUVVJFUyxcbiAgU1VJX1RPS0VOX0ZFQVRVUkVTLFxuICBUQU9fVE9LRU5fRkVBVFVSRVMsXG59IGZyb20gJy4vY29pbkZlYXR1cmVzJztcblxuY29uc3QgZHluYW1pY05ldHdvcmtGZWF0dXJlc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBDb2luRmVhdHVyZVtdPigpO1xuXG4vKiogUmVnaXN0ZXIgZGVmYXVsdCB0b2tlbiBmZWF0dXJlcyBmb3IgYSBkeW5hbWljYWxseSBvbmJvYXJkZWQgY2hhaW4gZmFtaWx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTmV0d29ya0ZlYXR1cmVzKGZhbWlseTogc3RyaW5nLCBmZWF0dXJlczogQ29pbkZlYXR1cmVbXSk6IHZvaWQge1xuICBkeW5hbWljTmV0d29ya0ZlYXR1cmVzTWFwLnNldChmYW1pbHksIGZlYXR1cmVzKTtcbn1cblxuLyoqIERlZmF1bHQgdG9rZW4gZmVhdHVyZSBzZXQgc2hhcmVkIGJ5IFwicGxhaW5cIiBFVk0tY29tcGF0aWJsZSBjaGFpbiBmYW1pbGllcyAobm8gYmVzcG9rZSBmZWF0dXJlcykuICovXG5leHBvcnQgY29uc3QgRVZNX1RPS0VOX0ZFQVRVUkVTOiBDb2luRmVhdHVyZVtdID0gW1xuICAuLi5FVk1fRkVBVFVSRVMsXG4gIENvaW5GZWF0dXJlLlNIQVJFRF9FVk1fU0lHTklORyxcbiAgQ29pbkZlYXR1cmUuU0hBUkVEX0VWTV9TREssXG4gIENvaW5GZWF0dXJlLkVWTV9DT01QQVRJQkxFX0lNUyxcbiAgQ29pbkZlYXR1cmUuRVZNX0NPTVBBVElCTEVfVUksXG4gIENvaW5GZWF0dXJlLkVWTV9DT01QQVRJQkxFX1dQLFxuICBDb2luRmVhdHVyZS5TVVBQT1JUU19FUkMyMCxcbl07XG5cbi8qKiBTYW1lIGFzIEVWTV9UT0tFTl9GRUFUVVJFUywgbWludXMgRUlQMTU1OSwgZm9yIEVWTS1jb21wYXRpYmxlIGZhbWlsaWVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCAoZS5nLiB4ZGMpLiAqL1xuZXhwb3J0IGNvbnN0IEVWTV9UT0tFTl9GRUFUVVJFU19OT05fRUlQMTU1OTogQ29pbkZlYXR1cmVbXSA9IEVWTV9UT0tFTl9GRUFUVVJFUy5maWx0ZXIoXG4gIChmZWF0dXJlKSA9PiBmZWF0dXJlICE9PSBDb2luRmVhdHVyZS5FSVAxNTU5XG4pO1xuXG4vKipcbiAqIFBvcHVsYXRlIG5ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zIGZvciBldmVyeSBmYW1pbHkgd2hvc2UgYmFzZSBjb2luIGNhcnJpZXNcbiAqIENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzIwIGFuZCBpc24ndCBhbHJlYWR5IGV4cGxpY2l0bHkgbGlzdGVkIGJlbG93LCB1c2luZyBFVk1fVE9LRU5fRkVBVFVSRVNcbiAqIChvciBpdHMgbm9uLUVJUDE1NTkgdmFyaWFudCwgbWlycm9yaW5nIHRoZSBiYXNlIGNvaW4ncyBvd24gRUlQMTU1OSBzdXBwb3J0KS4gQ2FsbGVkIG9uY2UgZnJvbVxuICogY29pbnMudHMgKHdoaWNoIGhhcyBhY2Nlc3MgdG8gdGhlIGZ1bGwgY29pbiBtYXApIHNvIHRoaXMgbW9kdWxlIGRvZXNuJ3QgbmVlZCB0byBpbXBvcnQgaXRcbiAqIGRpcmVjdGx5ICh0aGF0IHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIGltcG9ydDogY29pbnMudHMgLT4gbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMudHMgLT5cbiAqIGFsbENvaW5zQW5kVG9rZW5zLnRzIC0+IGNvaW5zL2JvdFRva2Vucy50cyAtPiBuZXR3b3JrRmVhdHVyZU1hcEZvclRva2Vucy50cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckVyYzIwRmFtaWxpZXMoZmFtaWxpZXM6IEl0ZXJhYmxlPFtmYW1pbHk6IHN0cmluZywgc3VwcG9ydHNFaXAxNTU5OiBib29sZWFuXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbZmFtaWx5LCBzdXBwb3J0c0VpcDE1NTldIG9mIGZhbWlsaWVzKSB7XG4gICAgaWYgKCEoZmFtaWx5IGluIG5ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zKSkge1xuICAgICAgbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnNbZmFtaWx5IGFzIENvaW5GYW1pbHldID0gc3VwcG9ydHNFaXAxNTU5XG4gICAgICAgID8gRVZNX1RPS0VOX0ZFQVRVUkVTXG4gICAgICAgIDogRVZNX1RPS0VOX0ZFQVRVUkVTX05PTl9FSVAxNTU5O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExvb2sgdXAgdG9rZW4gZmVhdHVyZXMgZm9yIGEgZmFtaWx5LlxuICogQ2hlY2tzIHRoZSBzdGF0aWMgbWFwIGZpcnN0IChpbmNsdWRpbmcgZW50cmllcyBiYWNrZmlsbGVkIGJ5IHJlZ2lzdGVyRXJjMjBGYW1pbGllcyksIHRoZW4gdGhlXG4gKiBkeW5hbWljIG1hcC4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGZhbWlseSBpc24ndCByZWNvZ25pemVkIGJ5IGVpdGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ldHdvcmtGZWF0dXJlcyhmYW1pbHk6IHN0cmluZyk6IENvaW5GZWF0dXJlW10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnNbZmFtaWx5IGFzIENvaW5GYW1pbHldID8/IGR5bmFtaWNOZXR3b3JrRmVhdHVyZXNNYXAuZ2V0KGZhbWlseSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZmluYWwgZmVhdHVyZSBsaXN0IGZvciBhIHRva2VuOiB0aGUgZmFtaWx5J3MgZGVmYXVsdCB0b2tlbiBmZWF0dXJlc1xuICogcGx1cyBgYWRkaXRpb25hbEZlYXR1cmVzYCwgbWludXMgYGV4Y2x1ZGVkRmVhdHVyZXNgLiBVc2VkIGJ5IGdlbmVyYXRlZCBib3QtdG9rZW5cbiAqIGxpc3RzIHRvIGFwcGx5IHRoZSBwZXItdG9rZW4gZGlmZiByZXR1cm5lZCBieSBBTVMgKGBmZWF0dXJlcz1mYWxzZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5GZWF0dXJlcyhcbiAgZmFtaWx5OiBzdHJpbmcsXG4gIGFkZGl0aW9uYWxGZWF0dXJlczogQ29pbkZlYXR1cmVbXSA9IFtdLFxuICBleGNsdWRlZEZlYXR1cmVzOiBDb2luRmVhdHVyZVtdID0gW11cbik6IENvaW5GZWF0dXJlW10ge1xuICBjb25zdCBiYXNlID0gZ2V0TmV0d29ya0ZlYXR1cmVzKGZhbWlseSkgPz8gW107XG4gIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldDxDb2luRmVhdHVyZT4oZXhjbHVkZWRGZWF0dXJlcyk7XG4gIHJldHVybiBbLi4ubmV3IFNldDxDb2luRmVhdHVyZT4oWy4uLmJhc2UsIC4uLmFkZGl0aW9uYWxGZWF0dXJlc10pXS5maWx0ZXIoKGYpID0+ICFleGNsdWRlZC5oYXMoZikpO1xufVxuXG5leHBvcnQgY29uc3QgbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnM6IFBhcnRpYWw8UmVjb3JkPENvaW5GYW1pbHksIENvaW5GZWF0dXJlW10+PiA9IHtcbiAgYWxnbzogQWNjb3VudENvaW4uREVGQVVMVF9GRUFUVVJFUyxcbiAgYXB0OiBBUFRfRkVBVFVSRVMsXG4gIGFyYmV0aDogWy4uLkFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsIENvaW5GZWF0dXJlLkVJUDE1NTldLFxuICBhdmF4YzogQWNjb3VudENvaW4uREVGQVVMVF9GRUFUVVJFUyxcbiAgYmVyYTogWy4uLkFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsIENvaW5GZWF0dXJlLkVJUDE1NTldLFxuICBic2M6IEJTQ19UT0tFTl9GRUFUVVJFUyxcbiAgY2FudG9uOiBDQU5UT05fVE9LRU5fRkVBVFVSRVMsXG4gIGNlbG86IEFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIGV0aDogQWNjb3VudENvaW4uREVGQVVMVF9GRUFUVVJFUyxcbiAgYmFzZWV0aDogRVZNX1RPS0VOX0ZFQVRVUkVTLFxuICBlb3M6IEFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIGdhc2V2bTogRVZNX1RPS0VOX0ZFQVRVUkVTLFxuICBoYmFyOiBBY2NvdW50Q29pbi5ERUZBVUxUX0ZFQVRVUkVTLFxuICBvcGV0aDogWy4uLkFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsIENvaW5GZWF0dXJlLkVJUDE1NTldLFxuICBrYXRhbmFldGg6IEVWTV9UT0tFTl9GRUFUVVJFUyxcbiAgcG9seWdvbjogUE9MWUdPTl9UT0tFTl9GRUFUVVJFUyxcbiAgc2Nyb2xsZXRoOiBFVk1fVE9LRU5fRkVBVFVSRVMsXG4gIHNvbDogU09MX1RPS0VOX0ZFQVRVUkVTLFxuICBzdHg6IFNUWF9UT0tFTl9GRUFUVVJFUyxcbiAgc3VpOiBTVUlfVE9LRU5fRkVBVFVSRVMsXG4gIHRhbzogVEFPX1RPS0VOX0ZFQVRVUkVTLFxuICBwb2x5eDogUE9MWVhfVE9LRU5fRkVBVFVSRVMsXG4gIHRyeDogQWNjb3VudENvaW4uREVGQVVMVF9GRUFUVVJFUyxcbiAgeGxtOiBBY2NvdW50Q29pbi5ERUZBVUxUX0ZFQVRVUkVTLFxuICB4cnA6IEFjY291bnRDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIG9mYzogW10sXG4gIGFkYTogQURBX1RPS0VOX0ZFQVRVUkVTLFxufTtcbiJdfQ==
|