@keplr-wallet/stores-ibc 0.12.205 → 0.12.207
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/build/currency-registrar.js +226 -135
- package/build/currency-registrar.js.map +1 -1
- package/package.json +7 -7
- package/src/currency-registrar.ts +294 -182
|
@@ -145,7 +145,42 @@ class IBCCurrencyRegistrar {
|
|
|
145
145
|
const paths = denomTrace.paths;
|
|
146
146
|
// The previous chain id from current path.
|
|
147
147
|
let chainIdBefore = chainId;
|
|
148
|
-
for (
|
|
148
|
+
for (let i = 0; i < paths.length; i++) {
|
|
149
|
+
const path = paths[i];
|
|
150
|
+
const isLast = i === paths.length - 1;
|
|
151
|
+
if (
|
|
152
|
+
// 현재 ethereum ibc의 경우 ethereum까지 타고 들어가서 nested하게 처리할 방법은 없다.
|
|
153
|
+
// 마지막 path일 경우만 처리한다.
|
|
154
|
+
isLast &&
|
|
155
|
+
this.chainStore.getChain(chainIdBefore).hasFeature("ibc-v2") &&
|
|
156
|
+
denomTrace.denom.startsWith("0x")) {
|
|
157
|
+
const clientState = this.queriesStore
|
|
158
|
+
.get(chainIdBefore)
|
|
159
|
+
.cosmos.queryIBCClientStateV2.getClientState(path.channelId);
|
|
160
|
+
if (clientState.isFetching) {
|
|
161
|
+
isFetching = true;
|
|
162
|
+
}
|
|
163
|
+
if (clientState.clientChainId &&
|
|
164
|
+
!Number.isNaN(parseInt(clientState.clientChainId))) {
|
|
165
|
+
if (this.chainStore.hasChain(`eip155:${clientState.clientChainId}`)) {
|
|
166
|
+
const ethereumChainId = `eip155:${clientState.clientChainId}`;
|
|
167
|
+
// TODO: counterparty channel id를 구해야할듯한데
|
|
168
|
+
// https://github.com/cosmos/ibc-go/blob/a8b4af9c757f5235a965718597f73f039c4a5708/proto/ibc/core/client/v2/query.proto#L15
|
|
169
|
+
// 이것으로 추정되지만 현재 cosmos testnet에서 해당 쿼리가 501 not implemented로 반환되기 때문에 일단 패스...
|
|
170
|
+
path.clientChainId = ethereumChainId;
|
|
171
|
+
chainIdBefore = ethereumChainId;
|
|
172
|
+
originChainInfo = this.chainStore.getChain(ethereumChainId);
|
|
173
|
+
if (!counterpartyChainInfo) {
|
|
174
|
+
counterpartyChainInfo =
|
|
175
|
+
this.chainStore.getChain(ethereumChainId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
originChainInfo = undefined;
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
149
184
|
const clientState = this.queriesStore
|
|
150
185
|
.get(chainIdBefore)
|
|
151
186
|
.cosmos.queryIBCClientState.getClientState(path.portId, path.channelId);
|
|
@@ -189,164 +224,220 @@ class IBCCurrencyRegistrar {
|
|
|
189
224
|
}
|
|
190
225
|
}
|
|
191
226
|
if (originChainInfo && denomTrace) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
227
|
+
// 이 경우 ethereum 계열이기 때문에 다르게 처리해야한다.
|
|
228
|
+
if (this.chainStore.isEvmOnlyChain(originChainInfo.chainId)) {
|
|
229
|
+
// 유저가 Add Token을 통해서 추가했을 경우
|
|
230
|
+
const currency = originChainInfo.currencies.find((cur) => {
|
|
231
|
+
return cur.coinMinimalDenom === `erc20:${denomTrace.denom}`;
|
|
232
|
+
});
|
|
233
|
+
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
234
|
+
if (currency) {
|
|
235
|
+
return {
|
|
236
|
+
value: {
|
|
237
|
+
coinDecimals: currency.coinDecimals,
|
|
238
|
+
coinGeckoId: currency.coinGeckoId,
|
|
239
|
+
coinImageUrl: currency.coinImageUrl,
|
|
240
|
+
coinMinimalDenom: denomHelper.denom,
|
|
241
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, currency),
|
|
242
|
+
paths: denomTrace.paths,
|
|
243
|
+
originChainId: originChainInfo.chainId,
|
|
244
|
+
originCurrency: currency,
|
|
245
|
+
},
|
|
246
|
+
done: true,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
else if (originQueries.ethereum) {
|
|
250
|
+
const queryCoingecko = originQueries.ethereum.queryEthereumCoingeckoTokenInfo.getQueryContract(denomTrace.denom);
|
|
251
|
+
if (queryCoingecko &&
|
|
252
|
+
queryCoingecko.symbol != null &&
|
|
253
|
+
queryCoingecko.decimals != null) {
|
|
254
|
+
const erc20Currency = {
|
|
255
|
+
type: "erc20",
|
|
256
|
+
coinMinimalDenom: `erc20:${denomTrace.denom}`,
|
|
257
|
+
contractAddress: denomTrace.denom,
|
|
258
|
+
coinDenom: queryCoingecko.symbol,
|
|
259
|
+
coinDecimals: queryCoingecko.decimals,
|
|
260
|
+
coinGeckoId: queryCoingecko.coingeckoId,
|
|
261
|
+
coinImageUrl: queryCoingecko.logoURI,
|
|
262
|
+
};
|
|
263
|
+
return {
|
|
264
|
+
value: {
|
|
265
|
+
coinDecimals: erc20Currency.coinDecimals,
|
|
266
|
+
coinGeckoId: erc20Currency.coinGeckoId,
|
|
267
|
+
coinImageUrl: erc20Currency.coinImageUrl,
|
|
268
|
+
coinMinimalDenom: denomHelper.denom,
|
|
269
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, erc20Currency),
|
|
270
|
+
paths: denomTrace.paths,
|
|
271
|
+
originChainId: originChainInfo.chainId,
|
|
272
|
+
originCurrency: erc20Currency,
|
|
273
|
+
},
|
|
274
|
+
done: fromCache && !queryCoingecko.isFetching,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
const isCW20Currency = denomTrace.denom.split(/^(cw20):(\w+)$/).length === 4;
|
|
281
|
+
const isERC20Currency = denomTrace.denom.split(/^(erc20)\/(\w+)$/).length === 4;
|
|
282
|
+
switch (true) {
|
|
283
|
+
case isCW20Currency:
|
|
284
|
+
const isSecret20Currency = (_a = originChainInfo.features) === null || _a === void 0 ? void 0 : _a.includes("secretwasm");
|
|
285
|
+
if (!isSecret20Currency) {
|
|
286
|
+
let isFetching = false;
|
|
287
|
+
// If the origin currency is ics20-cw20.
|
|
288
|
+
let cw20Currency = originChainInfo.currencies.find((cur) => denomTrace &&
|
|
289
|
+
cur.coinMinimalDenom.startsWith(denomTrace.denom));
|
|
290
|
+
if (!cw20Currency &&
|
|
291
|
+
this.chainStore.hasChain(originChainInfo.chainId)) {
|
|
292
|
+
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
293
|
+
if (originQueries.cosmwasm) {
|
|
294
|
+
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
295
|
+
const contractInfo = originQueries.cosmwasm.querycw20ContractInfo.getQueryContract(contractAddress);
|
|
296
|
+
isFetching = contractInfo.isFetching;
|
|
297
|
+
if (contractInfo.response) {
|
|
298
|
+
cw20Currency = {
|
|
299
|
+
type: "cw20",
|
|
300
|
+
contractAddress,
|
|
301
|
+
coinDecimals: contractInfo.response.data.decimals,
|
|
302
|
+
coinDenom: contractInfo.response.data.symbol,
|
|
303
|
+
coinMinimalDenom: `cw20:${contractAddress}:${contractInfo.response.data.name}`,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (cw20Currency) {
|
|
309
|
+
return {
|
|
310
|
+
value: {
|
|
311
|
+
coinDecimals: cw20Currency.coinDecimals,
|
|
312
|
+
coinGeckoId: cw20Currency.coinGeckoId,
|
|
313
|
+
coinImageUrl: cw20Currency.coinImageUrl,
|
|
314
|
+
coinMinimalDenom: denomHelper.denom,
|
|
315
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, cw20Currency),
|
|
316
|
+
paths: denomTrace.paths,
|
|
317
|
+
originChainId: originChainInfo.chainId,
|
|
318
|
+
originCurrency: cw20Currency,
|
|
319
|
+
},
|
|
320
|
+
done: fromCache && !isFetching,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
let isSecret20Fetching = false;
|
|
326
|
+
// If the origin currency is ics20-cw20.
|
|
327
|
+
let secret20Currency = originChainInfo.currencies.find((cur) => denomTrace &&
|
|
328
|
+
cur.coinMinimalDenom.startsWith(denomTrace.denom));
|
|
329
|
+
if (!secret20Currency &&
|
|
330
|
+
this.chainStore.hasChain(originChainInfo.chainId)) {
|
|
331
|
+
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
332
|
+
if (originQueries.secret) {
|
|
333
|
+
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
334
|
+
const contractInfo = originQueries.secret.querySecret20ContractInfo.getQueryContract(contractAddress);
|
|
335
|
+
isSecret20Fetching = contractInfo.isFetching;
|
|
336
|
+
if (contractInfo.response) {
|
|
337
|
+
secret20Currency = {
|
|
338
|
+
type: "secret20",
|
|
339
|
+
contractAddress,
|
|
340
|
+
coinDecimals: contractInfo.response.data.token_info.decimals,
|
|
341
|
+
coinDenom: contractInfo.response.data.token_info.symbol,
|
|
342
|
+
coinMinimalDenom: `secret20:${contractAddress}:${contractInfo.response.data.token_info.name}`,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (secret20Currency) {
|
|
348
|
+
return {
|
|
349
|
+
value: {
|
|
350
|
+
coinDecimals: secret20Currency.coinDecimals,
|
|
351
|
+
coinGeckoId: secret20Currency.coinGeckoId,
|
|
352
|
+
coinImageUrl: secret20Currency.coinImageUrl,
|
|
353
|
+
coinMinimalDenom: denomHelper.denom,
|
|
354
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, secret20Currency),
|
|
355
|
+
paths: denomTrace.paths,
|
|
356
|
+
originChainId: originChainInfo.chainId,
|
|
357
|
+
originCurrency: secret20Currency,
|
|
358
|
+
},
|
|
359
|
+
done: fromCache && !isSecret20Fetching,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
case isERC20Currency:
|
|
365
|
+
let isERC20Fetching = false;
|
|
366
|
+
// If the origin currency is ics20-erc20.
|
|
367
|
+
let erc20Currency = originChainInfo.currencies.find((cur) => denomTrace && cur.coinMinimalDenom.startsWith(denomTrace.denom));
|
|
368
|
+
if (!erc20Currency &&
|
|
202
369
|
this.chainStore.hasChain(originChainInfo.chainId)) {
|
|
203
370
|
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
204
|
-
if (originQueries.
|
|
205
|
-
const contractAddress = denomTrace.denom.replace("
|
|
206
|
-
const contractInfo = originQueries.
|
|
207
|
-
|
|
208
|
-
if (contractInfo.
|
|
209
|
-
|
|
210
|
-
type: "
|
|
371
|
+
if (originQueries.ethereum) {
|
|
372
|
+
const contractAddress = denomTrace.denom.replace("erc20/", "");
|
|
373
|
+
const contractInfo = originQueries.ethereum.queryEthereumERC20ContractInfo.getQueryContract(contractAddress);
|
|
374
|
+
isERC20Fetching = contractInfo.isFetching;
|
|
375
|
+
if (contractInfo.tokenInfo) {
|
|
376
|
+
erc20Currency = {
|
|
377
|
+
type: "erc20",
|
|
211
378
|
contractAddress,
|
|
212
|
-
coinDecimals: contractInfo.
|
|
213
|
-
coinDenom: contractInfo.
|
|
214
|
-
coinMinimalDenom: `
|
|
379
|
+
coinDecimals: contractInfo.tokenInfo.decimals,
|
|
380
|
+
coinDenom: contractInfo.tokenInfo.symbol,
|
|
381
|
+
coinMinimalDenom: `erc20:${contractAddress}`,
|
|
215
382
|
};
|
|
216
383
|
}
|
|
217
384
|
}
|
|
218
385
|
}
|
|
219
|
-
if (
|
|
386
|
+
if (erc20Currency) {
|
|
220
387
|
return {
|
|
221
388
|
value: {
|
|
222
|
-
coinDecimals:
|
|
223
|
-
coinGeckoId:
|
|
224
|
-
coinImageUrl:
|
|
389
|
+
coinDecimals: erc20Currency.coinDecimals,
|
|
390
|
+
coinGeckoId: erc20Currency.coinGeckoId,
|
|
391
|
+
coinImageUrl: erc20Currency.coinImageUrl,
|
|
225
392
|
coinMinimalDenom: denomHelper.denom,
|
|
226
|
-
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo,
|
|
393
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, erc20Currency),
|
|
227
394
|
paths: denomTrace.paths,
|
|
228
395
|
originChainId: originChainInfo.chainId,
|
|
229
|
-
originCurrency:
|
|
396
|
+
originCurrency: erc20Currency,
|
|
230
397
|
},
|
|
231
|
-
done: fromCache && !
|
|
398
|
+
done: fromCache && !isERC20Fetching,
|
|
232
399
|
};
|
|
233
400
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
let secret20Currency = originChainInfo.currencies.find((cur) => denomTrace && cur.coinMinimalDenom.startsWith(denomTrace.denom));
|
|
239
|
-
if (!secret20Currency &&
|
|
240
|
-
this.chainStore.hasChain(originChainInfo.chainId)) {
|
|
241
|
-
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
242
|
-
if (originQueries.secret) {
|
|
243
|
-
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
244
|
-
const contractInfo = originQueries.secret.querySecret20ContractInfo.getQueryContract(contractAddress);
|
|
245
|
-
isSecret20Fetching = contractInfo.isFetching;
|
|
246
|
-
if (contractInfo.response) {
|
|
247
|
-
secret20Currency = {
|
|
248
|
-
type: "secret20",
|
|
249
|
-
contractAddress,
|
|
250
|
-
coinDecimals: contractInfo.response.data.token_info.decimals,
|
|
251
|
-
coinDenom: contractInfo.response.data.token_info.symbol,
|
|
252
|
-
coinMinimalDenom: `secret20:${contractAddress}:${contractInfo.response.data.token_info.name}`,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
if (secret20Currency) {
|
|
401
|
+
break;
|
|
402
|
+
default:
|
|
403
|
+
const currency = originChainInfo.findCurrency(denomTrace.denom);
|
|
404
|
+
if (currency && !("paths" in currency)) {
|
|
258
405
|
return {
|
|
259
406
|
value: {
|
|
260
|
-
coinDecimals:
|
|
261
|
-
coinGeckoId:
|
|
262
|
-
coinImageUrl:
|
|
407
|
+
coinDecimals: currency.coinDecimals,
|
|
408
|
+
coinGeckoId: currency.coinGeckoId,
|
|
409
|
+
coinImageUrl: currency.coinImageUrl,
|
|
263
410
|
coinMinimalDenom: denomHelper.denom,
|
|
264
|
-
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo,
|
|
411
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, currency),
|
|
265
412
|
paths: denomTrace.paths,
|
|
266
413
|
originChainId: originChainInfo.chainId,
|
|
267
|
-
originCurrency:
|
|
414
|
+
originCurrency: currency,
|
|
268
415
|
},
|
|
269
|
-
done:
|
|
416
|
+
done: (() => {
|
|
417
|
+
if (originChainInfo.isCurrencyRegistrationInProgress(currency.coinMinimalDenom)) {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
return fromCache;
|
|
421
|
+
})(),
|
|
270
422
|
};
|
|
271
423
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
case
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
contractAddress,
|
|
289
|
-
coinDecimals: contractInfo.tokenInfo.decimals,
|
|
290
|
-
coinDenom: contractInfo.tokenInfo.symbol,
|
|
291
|
-
coinMinimalDenom: `erc20:${contractAddress}`,
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
if (erc20Currency) {
|
|
297
|
-
return {
|
|
298
|
-
value: {
|
|
299
|
-
coinDecimals: erc20Currency.coinDecimals,
|
|
300
|
-
coinGeckoId: erc20Currency.coinGeckoId,
|
|
301
|
-
coinImageUrl: erc20Currency.coinImageUrl,
|
|
302
|
-
coinMinimalDenom: denomHelper.denom,
|
|
303
|
-
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, erc20Currency),
|
|
304
|
-
paths: denomTrace.paths,
|
|
305
|
-
originChainId: originChainInfo.chainId,
|
|
306
|
-
originCurrency: erc20Currency,
|
|
307
|
-
},
|
|
308
|
-
done: fromCache && !isERC20Fetching,
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
break;
|
|
312
|
-
default:
|
|
313
|
-
const currency = originChainInfo.findCurrency(denomTrace.denom);
|
|
314
|
-
if (currency && !("paths" in currency)) {
|
|
315
|
-
return {
|
|
316
|
-
value: {
|
|
317
|
-
coinDecimals: currency.coinDecimals,
|
|
318
|
-
coinGeckoId: currency.coinGeckoId,
|
|
319
|
-
coinImageUrl: currency.coinImageUrl,
|
|
320
|
-
coinMinimalDenom: denomHelper.denom,
|
|
321
|
-
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, currency),
|
|
322
|
-
paths: denomTrace.paths,
|
|
323
|
-
originChainId: originChainInfo.chainId,
|
|
324
|
-
originCurrency: currency,
|
|
325
|
-
},
|
|
326
|
-
done: (() => {
|
|
327
|
-
if (originChainInfo.isCurrencyRegistrationInProgress(currency.coinMinimalDenom)) {
|
|
328
|
-
return false;
|
|
329
|
-
}
|
|
330
|
-
return fromCache;
|
|
331
|
-
})(),
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
break;
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
426
|
+
// In this case, just show the raw currency.
|
|
427
|
+
// But, it is possible to know the currency from query later.
|
|
428
|
+
// So, let them to be observed.
|
|
429
|
+
return {
|
|
430
|
+
value: {
|
|
431
|
+
coinDecimals: 0,
|
|
432
|
+
coinMinimalDenom: denomHelper.denom,
|
|
433
|
+
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, undefined),
|
|
434
|
+
paths: denomTrace.paths,
|
|
435
|
+
originChainId: undefined,
|
|
436
|
+
originCurrency: undefined,
|
|
437
|
+
},
|
|
438
|
+
done: false,
|
|
439
|
+
};
|
|
335
440
|
}
|
|
336
|
-
// In this case, just show the raw currency.
|
|
337
|
-
// But, it is possible to know the currency from query later.
|
|
338
|
-
// So, let them to be observed.
|
|
339
|
-
return {
|
|
340
|
-
value: {
|
|
341
|
-
coinDecimals: 0,
|
|
342
|
-
coinMinimalDenom: denomHelper.denom,
|
|
343
|
-
coinDenom: this.coinDenomGenerator(denomTrace, originChainInfo, counterpartyChainInfo, undefined),
|
|
344
|
-
paths: denomTrace.paths,
|
|
345
|
-
originChainId: undefined,
|
|
346
|
-
originCurrency: undefined,
|
|
347
|
-
},
|
|
348
|
-
done: false,
|
|
349
|
-
};
|
|
350
441
|
}
|
|
351
442
|
return {
|
|
352
443
|
value: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency-registrar.js","sourceRoot":"","sources":["../src/currency-registrar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"currency-registrar.js","sourceRoot":"","sources":["../src/currency-registrar.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keplr-wallet/stores-ibc",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.207",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"author": "chainapsis",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
"lint-fix": "eslint --fix \"src/**/*\" && prettier --write \"src/**/*\""
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@keplr-wallet/common": "0.12.
|
|
20
|
-
"@keplr-wallet/cosmos": "0.12.
|
|
21
|
-
"@keplr-wallet/stores": "0.12.
|
|
22
|
-
"@keplr-wallet/stores-eth": "0.12.
|
|
23
|
-
"@keplr-wallet/types": "0.12.
|
|
19
|
+
"@keplr-wallet/common": "0.12.207",
|
|
20
|
+
"@keplr-wallet/cosmos": "0.12.207",
|
|
21
|
+
"@keplr-wallet/stores": "0.12.207",
|
|
22
|
+
"@keplr-wallet/stores-eth": "0.12.207",
|
|
23
|
+
"@keplr-wallet/types": "0.12.207"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"mobx": "^6",
|
|
27
27
|
"mobx-utils": "^6"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "0d9a2b1a0185fcd65e37929bf749226c7e954ecc"
|
|
30
30
|
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
runInAction,
|
|
7
7
|
toJS,
|
|
8
8
|
} from "mobx";
|
|
9
|
-
import { AppCurrency, ChainInfo } from "@keplr-wallet/types";
|
|
9
|
+
import { AppCurrency, ChainInfo, ERC20Currency } from "@keplr-wallet/types";
|
|
10
10
|
import {
|
|
11
11
|
IChainInfoImpl,
|
|
12
12
|
ChainStore,
|
|
@@ -257,7 +257,50 @@ export class IBCCurrencyRegistrar {
|
|
|
257
257
|
const paths = denomTrace.paths;
|
|
258
258
|
// The previous chain id from current path.
|
|
259
259
|
let chainIdBefore = chainId;
|
|
260
|
-
for (
|
|
260
|
+
for (let i = 0; i < paths.length; i++) {
|
|
261
|
+
const path = paths[i];
|
|
262
|
+
const isLast = i === paths.length - 1;
|
|
263
|
+
if (
|
|
264
|
+
// 현재 ethereum ibc의 경우 ethereum까지 타고 들어가서 nested하게 처리할 방법은 없다.
|
|
265
|
+
// 마지막 path일 경우만 처리한다.
|
|
266
|
+
isLast &&
|
|
267
|
+
this.chainStore.getChain(chainIdBefore).hasFeature("ibc-v2") &&
|
|
268
|
+
denomTrace.denom.startsWith("0x")
|
|
269
|
+
) {
|
|
270
|
+
const clientState = this.queriesStore
|
|
271
|
+
.get(chainIdBefore)
|
|
272
|
+
.cosmos.queryIBCClientStateV2.getClientState(path.channelId);
|
|
273
|
+
if (clientState.isFetching) {
|
|
274
|
+
isFetching = true;
|
|
275
|
+
}
|
|
276
|
+
if (
|
|
277
|
+
clientState.clientChainId &&
|
|
278
|
+
!Number.isNaN(parseInt(clientState.clientChainId))
|
|
279
|
+
) {
|
|
280
|
+
if (
|
|
281
|
+
this.chainStore.hasChain(`eip155:${clientState.clientChainId}`)
|
|
282
|
+
) {
|
|
283
|
+
const ethereumChainId = `eip155:${clientState.clientChainId}`;
|
|
284
|
+
|
|
285
|
+
// TODO: counterparty channel id를 구해야할듯한데
|
|
286
|
+
// https://github.com/cosmos/ibc-go/blob/a8b4af9c757f5235a965718597f73f039c4a5708/proto/ibc/core/client/v2/query.proto#L15
|
|
287
|
+
// 이것으로 추정되지만 현재 cosmos testnet에서 해당 쿼리가 501 not implemented로 반환되기 때문에 일단 패스...
|
|
288
|
+
|
|
289
|
+
path.clientChainId = ethereumChainId;
|
|
290
|
+
|
|
291
|
+
chainIdBefore = ethereumChainId;
|
|
292
|
+
originChainInfo = this.chainStore.getChain(ethereumChainId);
|
|
293
|
+
if (!counterpartyChainInfo) {
|
|
294
|
+
counterpartyChainInfo =
|
|
295
|
+
this.chainStore.getChain(ethereumChainId);
|
|
296
|
+
}
|
|
297
|
+
} else {
|
|
298
|
+
originChainInfo = undefined;
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
261
304
|
const clientState = this.queriesStore
|
|
262
305
|
.get(chainIdBefore)
|
|
263
306
|
.cosmos.queryIBCClientState.getClientState(
|
|
@@ -315,233 +358,302 @@ export class IBCCurrencyRegistrar {
|
|
|
315
358
|
}
|
|
316
359
|
|
|
317
360
|
if (originChainInfo && denomTrace) {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
361
|
+
// 이 경우 ethereum 계열이기 때문에 다르게 처리해야한다.
|
|
362
|
+
if (this.chainStore.isEvmOnlyChain(originChainInfo.chainId)) {
|
|
363
|
+
// 유저가 Add Token을 통해서 추가했을 경우
|
|
364
|
+
const currency = originChainInfo.currencies.find((cur) => {
|
|
365
|
+
return cur.coinMinimalDenom === `erc20:${denomTrace!.denom}`;
|
|
366
|
+
});
|
|
367
|
+
const originQueries = this.queriesStore.get(originChainInfo.chainId);
|
|
368
|
+
if (currency) {
|
|
369
|
+
return {
|
|
370
|
+
value: {
|
|
371
|
+
coinDecimals: currency.coinDecimals,
|
|
372
|
+
coinGeckoId: currency.coinGeckoId,
|
|
373
|
+
coinImageUrl: currency.coinImageUrl,
|
|
374
|
+
coinMinimalDenom: denomHelper.denom,
|
|
375
|
+
coinDenom: this.coinDenomGenerator(
|
|
376
|
+
denomTrace,
|
|
377
|
+
originChainInfo,
|
|
378
|
+
counterpartyChainInfo,
|
|
379
|
+
currency
|
|
380
|
+
),
|
|
381
|
+
paths: denomTrace.paths,
|
|
382
|
+
originChainId: originChainInfo.chainId,
|
|
383
|
+
originCurrency: currency,
|
|
384
|
+
},
|
|
385
|
+
done: true,
|
|
386
|
+
};
|
|
387
|
+
} else if (originQueries.ethereum) {
|
|
388
|
+
const queryCoingecko =
|
|
389
|
+
originQueries.ethereum.queryEthereumCoingeckoTokenInfo.getQueryContract(
|
|
390
|
+
denomTrace.denom
|
|
391
|
+
);
|
|
392
|
+
if (
|
|
393
|
+
queryCoingecko &&
|
|
394
|
+
queryCoingecko.symbol != null &&
|
|
395
|
+
queryCoingecko.decimals != null
|
|
396
|
+
) {
|
|
397
|
+
const erc20Currency: ERC20Currency = {
|
|
398
|
+
type: "erc20",
|
|
399
|
+
coinMinimalDenom: `erc20:${denomTrace!.denom}`,
|
|
400
|
+
contractAddress: denomTrace.denom,
|
|
401
|
+
coinDenom: queryCoingecko.symbol,
|
|
402
|
+
coinDecimals: queryCoingecko.decimals,
|
|
403
|
+
coinGeckoId: queryCoingecko.coingeckoId,
|
|
404
|
+
coinImageUrl: queryCoingecko.logoURI,
|
|
405
|
+
};
|
|
406
|
+
return {
|
|
407
|
+
value: {
|
|
408
|
+
coinDecimals: erc20Currency.coinDecimals,
|
|
409
|
+
coinGeckoId: erc20Currency.coinGeckoId,
|
|
410
|
+
coinImageUrl: erc20Currency.coinImageUrl,
|
|
411
|
+
coinMinimalDenom: denomHelper.denom,
|
|
412
|
+
coinDenom: this.coinDenomGenerator(
|
|
413
|
+
denomTrace,
|
|
414
|
+
originChainInfo,
|
|
415
|
+
counterpartyChainInfo,
|
|
416
|
+
erc20Currency
|
|
417
|
+
),
|
|
418
|
+
paths: denomTrace.paths,
|
|
419
|
+
originChainId: originChainInfo.chainId,
|
|
420
|
+
originCurrency: erc20Currency,
|
|
421
|
+
},
|
|
422
|
+
done: fromCache && !queryCoingecko.isFetching,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
} else {
|
|
427
|
+
const isCW20Currency =
|
|
428
|
+
denomTrace.denom.split(/^(cw20):(\w+)$/).length === 4;
|
|
429
|
+
const isERC20Currency =
|
|
430
|
+
denomTrace.denom.split(/^(erc20)\/(\w+)$/).length === 4;
|
|
431
|
+
switch (true) {
|
|
432
|
+
case isCW20Currency:
|
|
433
|
+
const isSecret20Currency =
|
|
434
|
+
originChainInfo.features?.includes("secretwasm");
|
|
435
|
+
|
|
436
|
+
if (!isSecret20Currency) {
|
|
437
|
+
let isFetching = false;
|
|
438
|
+
// If the origin currency is ics20-cw20.
|
|
439
|
+
let cw20Currency = originChainInfo.currencies.find(
|
|
440
|
+
(cur) =>
|
|
441
|
+
denomTrace &&
|
|
442
|
+
cur.coinMinimalDenom.startsWith(denomTrace.denom)
|
|
443
|
+
);
|
|
444
|
+
if (
|
|
445
|
+
!cw20Currency &&
|
|
446
|
+
this.chainStore.hasChain(originChainInfo.chainId)
|
|
447
|
+
) {
|
|
448
|
+
const originQueries = this.queriesStore.get(
|
|
449
|
+
originChainInfo.chainId
|
|
450
|
+
);
|
|
451
|
+
if (originQueries.cosmwasm) {
|
|
452
|
+
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
453
|
+
const contractInfo =
|
|
454
|
+
originQueries.cosmwasm.querycw20ContractInfo.getQueryContract(
|
|
455
|
+
contractAddress
|
|
456
|
+
);
|
|
457
|
+
isFetching = contractInfo.isFetching;
|
|
458
|
+
if (contractInfo.response) {
|
|
459
|
+
cw20Currency = {
|
|
460
|
+
type: "cw20",
|
|
461
|
+
contractAddress,
|
|
462
|
+
coinDecimals: contractInfo.response.data.decimals,
|
|
463
|
+
coinDenom: contractInfo.response.data.symbol,
|
|
464
|
+
coinMinimalDenom: `cw20:${contractAddress}:${contractInfo.response.data.name}`,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
if (cw20Currency) {
|
|
471
|
+
return {
|
|
472
|
+
value: {
|
|
473
|
+
coinDecimals: cw20Currency.coinDecimals,
|
|
474
|
+
coinGeckoId: cw20Currency.coinGeckoId,
|
|
475
|
+
coinImageUrl: cw20Currency.coinImageUrl,
|
|
476
|
+
coinMinimalDenom: denomHelper.denom,
|
|
477
|
+
coinDenom: this.coinDenomGenerator(
|
|
478
|
+
denomTrace,
|
|
479
|
+
originChainInfo,
|
|
480
|
+
counterpartyChainInfo,
|
|
481
|
+
cw20Currency
|
|
482
|
+
),
|
|
483
|
+
paths: denomTrace.paths,
|
|
484
|
+
originChainId: originChainInfo.chainId,
|
|
485
|
+
originCurrency: cw20Currency,
|
|
486
|
+
},
|
|
487
|
+
done: fromCache && !isFetching,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
} else {
|
|
491
|
+
let isSecret20Fetching = false;
|
|
492
|
+
// If the origin currency is ics20-cw20.
|
|
493
|
+
let secret20Currency = originChainInfo.currencies.find(
|
|
494
|
+
(cur) =>
|
|
495
|
+
denomTrace &&
|
|
496
|
+
cur.coinMinimalDenom.startsWith(denomTrace.denom)
|
|
497
|
+
);
|
|
498
|
+
if (
|
|
499
|
+
!secret20Currency &&
|
|
500
|
+
this.chainStore.hasChain(originChainInfo.chainId)
|
|
501
|
+
) {
|
|
502
|
+
const originQueries = this.queriesStore.get(
|
|
503
|
+
originChainInfo.chainId
|
|
504
|
+
);
|
|
505
|
+
if (originQueries.secret) {
|
|
506
|
+
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
507
|
+
const contractInfo =
|
|
508
|
+
originQueries.secret.querySecret20ContractInfo.getQueryContract(
|
|
509
|
+
contractAddress
|
|
510
|
+
);
|
|
511
|
+
isSecret20Fetching = contractInfo.isFetching;
|
|
512
|
+
if (contractInfo.response) {
|
|
513
|
+
secret20Currency = {
|
|
514
|
+
type: "secret20",
|
|
515
|
+
contractAddress,
|
|
516
|
+
coinDecimals:
|
|
517
|
+
contractInfo.response.data.token_info.decimals,
|
|
518
|
+
coinDenom: contractInfo.response.data.token_info.symbol,
|
|
519
|
+
coinMinimalDenom: `secret20:${contractAddress}:${contractInfo.response.data.token_info.name}`,
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
if (secret20Currency) {
|
|
526
|
+
return {
|
|
527
|
+
value: {
|
|
528
|
+
coinDecimals: secret20Currency.coinDecimals,
|
|
529
|
+
coinGeckoId: secret20Currency.coinGeckoId,
|
|
530
|
+
coinImageUrl: secret20Currency.coinImageUrl,
|
|
531
|
+
coinMinimalDenom: denomHelper.denom,
|
|
532
|
+
coinDenom: this.coinDenomGenerator(
|
|
533
|
+
denomTrace,
|
|
534
|
+
originChainInfo,
|
|
535
|
+
counterpartyChainInfo,
|
|
536
|
+
secret20Currency
|
|
537
|
+
),
|
|
538
|
+
paths: denomTrace.paths,
|
|
539
|
+
originChainId: originChainInfo.chainId,
|
|
540
|
+
originCurrency: secret20Currency,
|
|
541
|
+
},
|
|
542
|
+
done: fromCache && !isSecret20Fetching,
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
break;
|
|
547
|
+
case isERC20Currency:
|
|
548
|
+
let isERC20Fetching = false;
|
|
549
|
+
// If the origin currency is ics20-erc20.
|
|
550
|
+
let erc20Currency = originChainInfo.currencies.find(
|
|
331
551
|
(cur) =>
|
|
332
552
|
denomTrace && cur.coinMinimalDenom.startsWith(denomTrace.denom)
|
|
333
553
|
);
|
|
334
554
|
if (
|
|
335
|
-
!
|
|
555
|
+
!erc20Currency &&
|
|
336
556
|
this.chainStore.hasChain(originChainInfo.chainId)
|
|
337
557
|
) {
|
|
338
558
|
const originQueries = this.queriesStore.get(
|
|
339
559
|
originChainInfo.chainId
|
|
340
560
|
);
|
|
341
|
-
if (originQueries.
|
|
342
|
-
const contractAddress = denomTrace.denom.replace("
|
|
561
|
+
if (originQueries.ethereum) {
|
|
562
|
+
const contractAddress = denomTrace.denom.replace("erc20/", "");
|
|
343
563
|
const contractInfo =
|
|
344
|
-
originQueries.
|
|
564
|
+
originQueries.ethereum.queryEthereumERC20ContractInfo.getQueryContract(
|
|
345
565
|
contractAddress
|
|
346
566
|
);
|
|
347
|
-
|
|
348
|
-
if (contractInfo.
|
|
349
|
-
|
|
350
|
-
type: "
|
|
567
|
+
isERC20Fetching = contractInfo.isFetching;
|
|
568
|
+
if (contractInfo.tokenInfo) {
|
|
569
|
+
erc20Currency = {
|
|
570
|
+
type: "erc20",
|
|
351
571
|
contractAddress,
|
|
352
|
-
coinDecimals: contractInfo.
|
|
353
|
-
coinDenom: contractInfo.
|
|
354
|
-
coinMinimalDenom: `
|
|
572
|
+
coinDecimals: contractInfo.tokenInfo.decimals,
|
|
573
|
+
coinDenom: contractInfo.tokenInfo.symbol,
|
|
574
|
+
coinMinimalDenom: `erc20:${contractAddress}`,
|
|
355
575
|
};
|
|
356
576
|
}
|
|
357
577
|
}
|
|
358
578
|
}
|
|
359
579
|
|
|
360
|
-
if (
|
|
580
|
+
if (erc20Currency) {
|
|
361
581
|
return {
|
|
362
582
|
value: {
|
|
363
|
-
coinDecimals:
|
|
364
|
-
coinGeckoId:
|
|
365
|
-
coinImageUrl:
|
|
583
|
+
coinDecimals: erc20Currency.coinDecimals,
|
|
584
|
+
coinGeckoId: erc20Currency.coinGeckoId,
|
|
585
|
+
coinImageUrl: erc20Currency.coinImageUrl,
|
|
366
586
|
coinMinimalDenom: denomHelper.denom,
|
|
367
587
|
coinDenom: this.coinDenomGenerator(
|
|
368
588
|
denomTrace,
|
|
369
589
|
originChainInfo,
|
|
370
590
|
counterpartyChainInfo,
|
|
371
|
-
|
|
591
|
+
erc20Currency
|
|
372
592
|
),
|
|
373
593
|
paths: denomTrace.paths,
|
|
374
594
|
originChainId: originChainInfo.chainId,
|
|
375
|
-
originCurrency:
|
|
595
|
+
originCurrency: erc20Currency,
|
|
376
596
|
},
|
|
377
|
-
done: fromCache && !
|
|
597
|
+
done: fromCache && !isERC20Fetching,
|
|
378
598
|
};
|
|
379
599
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
let secret20Currency = originChainInfo.currencies.find(
|
|
384
|
-
(cur) =>
|
|
385
|
-
denomTrace && cur.coinMinimalDenom.startsWith(denomTrace.denom)
|
|
386
|
-
);
|
|
387
|
-
if (
|
|
388
|
-
!secret20Currency &&
|
|
389
|
-
this.chainStore.hasChain(originChainInfo.chainId)
|
|
390
|
-
) {
|
|
391
|
-
const originQueries = this.queriesStore.get(
|
|
392
|
-
originChainInfo.chainId
|
|
393
|
-
);
|
|
394
|
-
if (originQueries.secret) {
|
|
395
|
-
const contractAddress = denomTrace.denom.replace("cw20:", "");
|
|
396
|
-
const contractInfo =
|
|
397
|
-
originQueries.secret.querySecret20ContractInfo.getQueryContract(
|
|
398
|
-
contractAddress
|
|
399
|
-
);
|
|
400
|
-
isSecret20Fetching = contractInfo.isFetching;
|
|
401
|
-
if (contractInfo.response) {
|
|
402
|
-
secret20Currency = {
|
|
403
|
-
type: "secret20",
|
|
404
|
-
contractAddress,
|
|
405
|
-
coinDecimals:
|
|
406
|
-
contractInfo.response.data.token_info.decimals,
|
|
407
|
-
coinDenom: contractInfo.response.data.token_info.symbol,
|
|
408
|
-
coinMinimalDenom: `secret20:${contractAddress}:${contractInfo.response.data.token_info.name}`,
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
}
|
|
600
|
+
break;
|
|
601
|
+
default:
|
|
602
|
+
const currency = originChainInfo.findCurrency(denomTrace.denom);
|
|
413
603
|
|
|
414
|
-
if (
|
|
604
|
+
if (currency && !("paths" in currency)) {
|
|
415
605
|
return {
|
|
416
606
|
value: {
|
|
417
|
-
coinDecimals:
|
|
418
|
-
coinGeckoId:
|
|
419
|
-
coinImageUrl:
|
|
607
|
+
coinDecimals: currency.coinDecimals,
|
|
608
|
+
coinGeckoId: currency.coinGeckoId,
|
|
609
|
+
coinImageUrl: currency.coinImageUrl,
|
|
420
610
|
coinMinimalDenom: denomHelper.denom,
|
|
421
611
|
coinDenom: this.coinDenomGenerator(
|
|
422
612
|
denomTrace,
|
|
423
613
|
originChainInfo,
|
|
424
614
|
counterpartyChainInfo,
|
|
425
|
-
|
|
615
|
+
currency
|
|
426
616
|
),
|
|
427
617
|
paths: denomTrace.paths,
|
|
428
618
|
originChainId: originChainInfo.chainId,
|
|
429
|
-
originCurrency:
|
|
619
|
+
originCurrency: currency,
|
|
430
620
|
},
|
|
431
|
-
done:
|
|
621
|
+
done: (() => {
|
|
622
|
+
if (
|
|
623
|
+
originChainInfo.isCurrencyRegistrationInProgress(
|
|
624
|
+
currency.coinMinimalDenom
|
|
625
|
+
)
|
|
626
|
+
) {
|
|
627
|
+
return false;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
return fromCache;
|
|
631
|
+
})(),
|
|
432
632
|
};
|
|
433
633
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
case isERC20Currency:
|
|
437
|
-
let isERC20Fetching = false;
|
|
438
|
-
// If the origin currency is ics20-erc20.
|
|
439
|
-
let erc20Currency = originChainInfo.currencies.find(
|
|
440
|
-
(cur) =>
|
|
441
|
-
denomTrace && cur.coinMinimalDenom.startsWith(denomTrace.denom)
|
|
442
|
-
);
|
|
443
|
-
if (
|
|
444
|
-
!erc20Currency &&
|
|
445
|
-
this.chainStore.hasChain(originChainInfo.chainId)
|
|
446
|
-
) {
|
|
447
|
-
const originQueries = this.queriesStore.get(
|
|
448
|
-
originChainInfo.chainId
|
|
449
|
-
);
|
|
450
|
-
if (originQueries.ethereum) {
|
|
451
|
-
const contractAddress = denomTrace.denom.replace("erc20/", "");
|
|
452
|
-
const contractInfo =
|
|
453
|
-
originQueries.ethereum.queryEthereumERC20ContractInfo.getQueryContract(
|
|
454
|
-
contractAddress
|
|
455
|
-
);
|
|
456
|
-
isERC20Fetching = contractInfo.isFetching;
|
|
457
|
-
if (contractInfo.tokenInfo) {
|
|
458
|
-
erc20Currency = {
|
|
459
|
-
type: "erc20",
|
|
460
|
-
contractAddress,
|
|
461
|
-
coinDecimals: contractInfo.tokenInfo.decimals,
|
|
462
|
-
coinDenom: contractInfo.tokenInfo.symbol,
|
|
463
|
-
coinMinimalDenom: `erc20:${contractAddress}`,
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
if (erc20Currency) {
|
|
470
|
-
return {
|
|
471
|
-
value: {
|
|
472
|
-
coinDecimals: erc20Currency.coinDecimals,
|
|
473
|
-
coinGeckoId: erc20Currency.coinGeckoId,
|
|
474
|
-
coinImageUrl: erc20Currency.coinImageUrl,
|
|
475
|
-
coinMinimalDenom: denomHelper.denom,
|
|
476
|
-
coinDenom: this.coinDenomGenerator(
|
|
477
|
-
denomTrace,
|
|
478
|
-
originChainInfo,
|
|
479
|
-
counterpartyChainInfo,
|
|
480
|
-
erc20Currency
|
|
481
|
-
),
|
|
482
|
-
paths: denomTrace.paths,
|
|
483
|
-
originChainId: originChainInfo.chainId,
|
|
484
|
-
originCurrency: erc20Currency,
|
|
485
|
-
},
|
|
486
|
-
done: fromCache && !isERC20Fetching,
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
break;
|
|
490
|
-
default:
|
|
491
|
-
const currency = originChainInfo.findCurrency(denomTrace.denom);
|
|
492
|
-
|
|
493
|
-
if (currency && !("paths" in currency)) {
|
|
494
|
-
return {
|
|
495
|
-
value: {
|
|
496
|
-
coinDecimals: currency.coinDecimals,
|
|
497
|
-
coinGeckoId: currency.coinGeckoId,
|
|
498
|
-
coinImageUrl: currency.coinImageUrl,
|
|
499
|
-
coinMinimalDenom: denomHelper.denom,
|
|
500
|
-
coinDenom: this.coinDenomGenerator(
|
|
501
|
-
denomTrace,
|
|
502
|
-
originChainInfo,
|
|
503
|
-
counterpartyChainInfo,
|
|
504
|
-
currency
|
|
505
|
-
),
|
|
506
|
-
paths: denomTrace.paths,
|
|
507
|
-
originChainId: originChainInfo.chainId,
|
|
508
|
-
originCurrency: currency,
|
|
509
|
-
},
|
|
510
|
-
done: (() => {
|
|
511
|
-
if (
|
|
512
|
-
originChainInfo.isCurrencyRegistrationInProgress(
|
|
513
|
-
currency.coinMinimalDenom
|
|
514
|
-
)
|
|
515
|
-
) {
|
|
516
|
-
return false;
|
|
517
|
-
}
|
|
634
|
+
break;
|
|
635
|
+
}
|
|
518
636
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
637
|
+
// In this case, just show the raw currency.
|
|
638
|
+
// But, it is possible to know the currency from query later.
|
|
639
|
+
// So, let them to be observed.
|
|
640
|
+
return {
|
|
641
|
+
value: {
|
|
642
|
+
coinDecimals: 0,
|
|
643
|
+
coinMinimalDenom: denomHelper.denom,
|
|
644
|
+
coinDenom: this.coinDenomGenerator(
|
|
645
|
+
denomTrace,
|
|
646
|
+
originChainInfo,
|
|
647
|
+
counterpartyChainInfo,
|
|
648
|
+
undefined
|
|
649
|
+
),
|
|
650
|
+
paths: denomTrace.paths,
|
|
651
|
+
originChainId: undefined,
|
|
652
|
+
originCurrency: undefined,
|
|
653
|
+
},
|
|
654
|
+
done: false,
|
|
655
|
+
};
|
|
524
656
|
}
|
|
525
|
-
|
|
526
|
-
// In this case, just show the raw currency.
|
|
527
|
-
// But, it is possible to know the currency from query later.
|
|
528
|
-
// So, let them to be observed.
|
|
529
|
-
return {
|
|
530
|
-
value: {
|
|
531
|
-
coinDecimals: 0,
|
|
532
|
-
coinMinimalDenom: denomHelper.denom,
|
|
533
|
-
coinDenom: this.coinDenomGenerator(
|
|
534
|
-
denomTrace,
|
|
535
|
-
originChainInfo,
|
|
536
|
-
counterpartyChainInfo,
|
|
537
|
-
undefined
|
|
538
|
-
),
|
|
539
|
-
paths: denomTrace.paths,
|
|
540
|
-
originChainId: undefined,
|
|
541
|
-
originCurrency: undefined,
|
|
542
|
-
},
|
|
543
|
-
done: false,
|
|
544
|
-
};
|
|
545
657
|
}
|
|
546
658
|
|
|
547
659
|
return {
|