@keplr-wallet/stores 0.13.28 → 0.13.30
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/chain/erc20.d.ts +1 -0
- package/build/chain/erc20.js +13 -0
- package/build/chain/erc20.js.map +1 -0
- package/build/chain/index.d.ts +1 -0
- package/build/chain/index.js +1 -0
- package/build/chain/index.js.map +1 -1
- package/build/query/cosmos/balance/balances.js +19 -3
- package/build/query/cosmos/balance/balances.js.map +1 -1
- package/build/query/cosmos/balance/balances.spec.d.ts +1 -0
- package/build/query/cosmos/balance/balances.spec.js +84 -0
- package/build/query/cosmos/balance/balances.spec.js.map +1 -0
- package/package.json +11 -11
- package/src/chain/erc20.ts +12 -0
- package/src/chain/index.ts +1 -0
- package/src/query/cosmos/balance/balances.spec.ts +117 -0
- package/src/query/cosmos/balance/balances.ts +30 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function shouldQueryERC20WithCosmosBank(chainIdentifier: string): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldQueryERC20WithCosmosBank = void 0;
|
|
4
|
+
function shouldQueryERC20WithCosmosBank(chainIdentifier) {
|
|
5
|
+
// Injective exposes MTS ERC20 balances through the Cosmos bank module.
|
|
6
|
+
// Injective dev/testnets are kept as full chain identifiers by ChainIdHelper.
|
|
7
|
+
// Other Ethermint chains should keep using the EVM ERC20 balance path.
|
|
8
|
+
return (chainIdentifier === "injective" ||
|
|
9
|
+
chainIdentifier === "injective-777" ||
|
|
10
|
+
chainIdentifier === "injective-888");
|
|
11
|
+
}
|
|
12
|
+
exports.shouldQueryERC20WithCosmosBank = shouldQueryERC20WithCosmosBank;
|
|
13
|
+
//# sourceMappingURL=erc20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../src/chain/erc20.ts"],"names":[],"mappings":";;;AAAA,SAAgB,8BAA8B,CAC5C,eAAuB;IAEvB,uEAAuE;IACvE,8EAA8E;IAC9E,uEAAuE;IACvE,OAAO,CACL,eAAe,KAAK,WAAW;QAC/B,eAAe,KAAK,eAAe;QACnC,eAAe,KAAK,eAAe,CACpC,CAAC;AACJ,CAAC;AAXD,wEAWC"}
|
package/build/chain/index.d.ts
CHANGED
package/build/chain/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./types"), exports);
|
|
18
18
|
__exportStar(require("./base"), exports);
|
|
19
|
+
__exportStar(require("./erc20"), exports);
|
|
19
20
|
__exportStar(require("./modular"), exports);
|
|
20
21
|
__exportStar(require("./v2-helpers"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/build/chain/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCAAuB;AACvB,4CAA0B;AAC1B,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,+CAA6B"}
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.ObservableQueryCosmosBalanceRegistry = exports.ObservableQueryCosmosBalancesImpl = exports.ObservableQueryCosmosBalancesImplParent = void 0;
|
|
19
19
|
const common_1 = require("@keplr-wallet/common");
|
|
20
20
|
const common_2 = require("../../../common");
|
|
21
|
+
const chain_1 = require("../../../chain");
|
|
21
22
|
const mobx_1 = require("mobx");
|
|
22
23
|
const unit_1 = require("@keplr-wallet/unit");
|
|
23
24
|
const chain_query_1 = require("../../chain-query");
|
|
@@ -51,12 +52,20 @@ class ObservableQueryCosmosBalancesImpl {
|
|
|
51
52
|
(0, mobx_1.makeObservable)(this);
|
|
52
53
|
}
|
|
53
54
|
get balance() {
|
|
54
|
-
var _a;
|
|
55
|
+
var _a, _b;
|
|
55
56
|
const currency = this.currency;
|
|
56
57
|
if (!this.response) {
|
|
57
58
|
return new unit_1.CoinPretty(currency, new unit_1.Int(0)).ready(false);
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
if (this.denomHelper.type === "erc20") {
|
|
61
|
+
const normalizedCoinMinimalDenom = common_1.DenomHelper.normalizeDenom(currency.coinMinimalDenom);
|
|
62
|
+
const matchedBalance = ((_a = this.response.data.balances) !== null && _a !== void 0 ? _a : []).find((balance) => common_1.DenomHelper.normalizeDenom(balance.denom) ===
|
|
63
|
+
normalizedCoinMinimalDenom);
|
|
64
|
+
return common_2.StoreUtils.getBalanceFromCurrency(currency, matchedBalance
|
|
65
|
+
? [Object.assign(Object.assign({}, matchedBalance), { denom: currency.coinMinimalDenom })]
|
|
66
|
+
: []);
|
|
67
|
+
}
|
|
68
|
+
return common_2.StoreUtils.getBalanceFromCurrency(currency, (_b = this.response.data.balances) !== null && _b !== void 0 ? _b : []);
|
|
60
69
|
}
|
|
61
70
|
get currency() {
|
|
62
71
|
const denom = this.denomHelper.denom;
|
|
@@ -131,7 +140,14 @@ class ObservableQueryCosmosBalanceRegistry {
|
|
|
131
140
|
getBalanceImpl(chainId, chainGetter, bech32Address, minimalDenom) {
|
|
132
141
|
const denomHelper = new common_1.DenomHelper(minimalDenom);
|
|
133
142
|
if (denomHelper.type !== "native") {
|
|
134
|
-
|
|
143
|
+
if (denomHelper.type !== "erc20") {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const mcInfo = chainGetter.getModularChain(chainId);
|
|
147
|
+
if (mcInfo.type !== "ethermint" ||
|
|
148
|
+
!(0, chain_1.shouldQueryERC20WithCosmosBank)(mcInfo.chainIdentifier)) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
135
151
|
}
|
|
136
152
|
try {
|
|
137
153
|
cosmos_1.Bech32Address.validate(bech32Address);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/query/cosmos/balance/balances.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,4CAKyB;
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/query/cosmos/balance/balances.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const common_1 = require("@keplr-wallet/common");
|
|
4
|
+
const cosmos_1 = require("@keplr-wallet/cosmos");
|
|
5
|
+
const unit_1 = require("@keplr-wallet/unit");
|
|
6
|
+
const common_2 = require("../../../common");
|
|
7
|
+
const balances_1 = require("./balances");
|
|
8
|
+
const bech32Address = "inj10alvsy3f0a6vsr7ghjh3rtygrhygavsk45803c";
|
|
9
|
+
const usdcCurrency = {
|
|
10
|
+
coinDenom: "USDC",
|
|
11
|
+
coinMinimalDenom: "erc20:0xa00c59ff5a080d2b954d0c75e46e22a0c371235a",
|
|
12
|
+
coinDecimals: 6,
|
|
13
|
+
};
|
|
14
|
+
function createRegistry(chainId, chainType) {
|
|
15
|
+
return new balances_1.ObservableQueryCosmosBalanceRegistry(new common_2.QuerySharedContext(new common_1.MemoryKVStore("test"), {
|
|
16
|
+
responseDebounceMs: 10,
|
|
17
|
+
})).getBalanceImpl(chainId, {
|
|
18
|
+
getModularChain: () => ({
|
|
19
|
+
type: chainType,
|
|
20
|
+
chainIdentifier: cosmos_1.ChainIdHelper.parse(chainId).identifier,
|
|
21
|
+
unwrapped: {
|
|
22
|
+
type: chainType,
|
|
23
|
+
cosmos: {
|
|
24
|
+
rest: "https://lcd.injective.example",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
}),
|
|
28
|
+
hasModularChain: () => true,
|
|
29
|
+
}, bech32Address, usdcCurrency.coinMinimalDenom);
|
|
30
|
+
}
|
|
31
|
+
describe("ObservableQueryCosmosBalanceRegistry", () => {
|
|
32
|
+
test("rejects erc20 denoms on non-ethermint chains", () => {
|
|
33
|
+
expect(createRegistry("injective-1", "cosmos")).toBeUndefined();
|
|
34
|
+
});
|
|
35
|
+
test("rejects erc20 denoms on non-Injective ethermint chains", () => {
|
|
36
|
+
expect(createRegistry("planq_7070-2", "ethermint")).toBeUndefined();
|
|
37
|
+
});
|
|
38
|
+
test.each(["injective-1", "injective-777", "injective-888"])("accepts erc20 denoms on Injective ethermint chains: %s", (chainId) => {
|
|
39
|
+
expect(createRegistry(chainId, "ethermint")).toBeDefined();
|
|
40
|
+
});
|
|
41
|
+
test("returns zero when an ethermint erc20 balance is missing", () => {
|
|
42
|
+
const balance = new balances_1.ObservableQueryCosmosBalancesImpl({
|
|
43
|
+
response: {
|
|
44
|
+
headers: {},
|
|
45
|
+
data: {
|
|
46
|
+
balances: [
|
|
47
|
+
{
|
|
48
|
+
denom: "inj",
|
|
49
|
+
amount: "123000000000000000000",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
}, "injective-1", {
|
|
55
|
+
getModularChain: () => ({
|
|
56
|
+
forceFindCurrency: () => usdcCurrency,
|
|
57
|
+
}),
|
|
58
|
+
hasModularChain: () => true,
|
|
59
|
+
}, new common_1.DenomHelper(usdcCurrency.coinMinimalDenom)).balance;
|
|
60
|
+
expect(balance.toDec().equals(new unit_1.Dec("0"))).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
test("matches ethermint erc20 balances using normalized denom casing", () => {
|
|
63
|
+
const balance = new balances_1.ObservableQueryCosmosBalancesImpl({
|
|
64
|
+
response: {
|
|
65
|
+
headers: {},
|
|
66
|
+
data: {
|
|
67
|
+
balances: [
|
|
68
|
+
{
|
|
69
|
+
denom: "erc20:0xa00C59fF5a080D2b954d0c75e46E22a0c371235a",
|
|
70
|
+
amount: "123000000",
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
}, "injective-1", {
|
|
76
|
+
getModularChain: () => ({
|
|
77
|
+
forceFindCurrency: () => usdcCurrency,
|
|
78
|
+
}),
|
|
79
|
+
hasModularChain: () => true,
|
|
80
|
+
}, new common_1.DenomHelper(usdcCurrency.coinMinimalDenom)).balance;
|
|
81
|
+
expect(balance.toDec().equals(new unit_1.Dec("123"))).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=balances.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balances.spec.js","sourceRoot":"","sources":["../../../../src/query/cosmos/balance/balances.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keplr-wallet/stores",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.30",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"author": "chainapsis",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
"typecheck": "npx tsc -p tsconfig.check.json"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@keplr-wallet/provider-mock": "0.13.
|
|
24
|
+
"@keplr-wallet/provider-mock": "0.13.30"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@keplr-wallet/common": "0.13.
|
|
28
|
-
"@keplr-wallet/cosmos": "0.13.
|
|
29
|
-
"@keplr-wallet/crypto": "0.13.
|
|
30
|
-
"@keplr-wallet/mobx-utils": "0.13.
|
|
31
|
-
"@keplr-wallet/proto-types": "0.13.
|
|
32
|
-
"@keplr-wallet/simple-fetch": "0.13.
|
|
33
|
-
"@keplr-wallet/types": "0.13.
|
|
34
|
-
"@keplr-wallet/unit": "0.13.
|
|
27
|
+
"@keplr-wallet/common": "0.13.30",
|
|
28
|
+
"@keplr-wallet/cosmos": "0.13.30",
|
|
29
|
+
"@keplr-wallet/crypto": "0.13.30",
|
|
30
|
+
"@keplr-wallet/mobx-utils": "0.13.30",
|
|
31
|
+
"@keplr-wallet/proto-types": "0.13.30",
|
|
32
|
+
"@keplr-wallet/simple-fetch": "0.13.30",
|
|
33
|
+
"@keplr-wallet/types": "0.13.30",
|
|
34
|
+
"@keplr-wallet/unit": "0.13.30",
|
|
35
35
|
"buffer": "^6.0.3",
|
|
36
36
|
"deepmerge": "^4.2.2",
|
|
37
37
|
"eventemitter3": "^4.0.7",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"mobx": "^6",
|
|
44
44
|
"mobx-utils": "^6"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "bbc7e090a71224f5ee81d404c76dbf71d91c2f91"
|
|
47
47
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function shouldQueryERC20WithCosmosBank(
|
|
2
|
+
chainIdentifier: string
|
|
3
|
+
): boolean {
|
|
4
|
+
// Injective exposes MTS ERC20 balances through the Cosmos bank module.
|
|
5
|
+
// Injective dev/testnets are kept as full chain identifiers by ChainIdHelper.
|
|
6
|
+
// Other Ethermint chains should keep using the EVM ERC20 balance path.
|
|
7
|
+
return (
|
|
8
|
+
chainIdentifier === "injective" ||
|
|
9
|
+
chainIdentifier === "injective-777" ||
|
|
10
|
+
chainIdentifier === "injective-888"
|
|
11
|
+
);
|
|
12
|
+
}
|
package/src/chain/index.ts
CHANGED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { DenomHelper, MemoryKVStore } from "@keplr-wallet/common";
|
|
2
|
+
import { ChainIdHelper } from "@keplr-wallet/cosmos";
|
|
3
|
+
import { Dec } from "@keplr-wallet/unit";
|
|
4
|
+
import { QuerySharedContext } from "../../../common";
|
|
5
|
+
import { ChainGetter } from "../../../chain";
|
|
6
|
+
import {
|
|
7
|
+
ObservableQueryCosmosBalanceRegistry,
|
|
8
|
+
ObservableQueryCosmosBalancesImpl,
|
|
9
|
+
} from "./balances";
|
|
10
|
+
|
|
11
|
+
const bech32Address = "inj10alvsy3f0a6vsr7ghjh3rtygrhygavsk45803c";
|
|
12
|
+
const usdcCurrency = {
|
|
13
|
+
coinDenom: "USDC",
|
|
14
|
+
coinMinimalDenom: "erc20:0xa00c59ff5a080d2b954d0c75e46e22a0c371235a",
|
|
15
|
+
coinDecimals: 6,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function createRegistry(chainId: string, chainType: "cosmos" | "ethermint") {
|
|
19
|
+
return new ObservableQueryCosmosBalanceRegistry(
|
|
20
|
+
new QuerySharedContext(new MemoryKVStore("test"), {
|
|
21
|
+
responseDebounceMs: 10,
|
|
22
|
+
})
|
|
23
|
+
).getBalanceImpl(
|
|
24
|
+
chainId,
|
|
25
|
+
{
|
|
26
|
+
getModularChain: () =>
|
|
27
|
+
({
|
|
28
|
+
type: chainType,
|
|
29
|
+
chainIdentifier: ChainIdHelper.parse(chainId).identifier,
|
|
30
|
+
unwrapped: {
|
|
31
|
+
type: chainType,
|
|
32
|
+
cosmos: {
|
|
33
|
+
rest: "https://lcd.injective.example",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
} as any),
|
|
37
|
+
hasModularChain: () => true,
|
|
38
|
+
} satisfies ChainGetter,
|
|
39
|
+
bech32Address,
|
|
40
|
+
usdcCurrency.coinMinimalDenom
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
describe("ObservableQueryCosmosBalanceRegistry", () => {
|
|
45
|
+
test("rejects erc20 denoms on non-ethermint chains", () => {
|
|
46
|
+
expect(createRegistry("injective-1", "cosmos")).toBeUndefined();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("rejects erc20 denoms on non-Injective ethermint chains", () => {
|
|
50
|
+
expect(createRegistry("planq_7070-2", "ethermint")).toBeUndefined();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test.each(["injective-1", "injective-777", "injective-888"])(
|
|
54
|
+
"accepts erc20 denoms on Injective ethermint chains: %s",
|
|
55
|
+
(chainId) => {
|
|
56
|
+
expect(createRegistry(chainId, "ethermint")).toBeDefined();
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
test("returns zero when an ethermint erc20 balance is missing", () => {
|
|
61
|
+
const balance = new ObservableQueryCosmosBalancesImpl(
|
|
62
|
+
{
|
|
63
|
+
response: {
|
|
64
|
+
headers: {},
|
|
65
|
+
data: {
|
|
66
|
+
balances: [
|
|
67
|
+
{
|
|
68
|
+
denom: "inj",
|
|
69
|
+
amount: "123000000000000000000",
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
} as any,
|
|
75
|
+
"injective-1",
|
|
76
|
+
{
|
|
77
|
+
getModularChain: () =>
|
|
78
|
+
({
|
|
79
|
+
forceFindCurrency: () => usdcCurrency,
|
|
80
|
+
} as any),
|
|
81
|
+
hasModularChain: () => true,
|
|
82
|
+
},
|
|
83
|
+
new DenomHelper(usdcCurrency.coinMinimalDenom)
|
|
84
|
+
).balance;
|
|
85
|
+
|
|
86
|
+
expect(balance.toDec().equals(new Dec("0"))).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("matches ethermint erc20 balances using normalized denom casing", () => {
|
|
90
|
+
const balance = new ObservableQueryCosmosBalancesImpl(
|
|
91
|
+
{
|
|
92
|
+
response: {
|
|
93
|
+
headers: {},
|
|
94
|
+
data: {
|
|
95
|
+
balances: [
|
|
96
|
+
{
|
|
97
|
+
denom: "erc20:0xa00C59fF5a080D2b954d0c75e46E22a0c371235a",
|
|
98
|
+
amount: "123000000",
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
} as any,
|
|
104
|
+
"injective-1",
|
|
105
|
+
{
|
|
106
|
+
getModularChain: () =>
|
|
107
|
+
({
|
|
108
|
+
forceFindCurrency: () => usdcCurrency,
|
|
109
|
+
} as any),
|
|
110
|
+
hasModularChain: () => true,
|
|
111
|
+
},
|
|
112
|
+
new DenomHelper(usdcCurrency.coinMinimalDenom)
|
|
113
|
+
).balance;
|
|
114
|
+
|
|
115
|
+
expect(balance.toDec().equals(new Dec("123"))).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
QuerySharedContext,
|
|
6
6
|
StoreUtils,
|
|
7
7
|
} from "../../../common";
|
|
8
|
-
import { ChainGetter } from "../../../chain";
|
|
8
|
+
import { ChainGetter, shouldQueryERC20WithCosmosBank } from "../../../chain";
|
|
9
9
|
import { computed, makeObservable } from "mobx";
|
|
10
10
|
import { CoinPretty, Int } from "@keplr-wallet/unit";
|
|
11
11
|
import { BalanceRegistry, IObservableQueryBalanceImpl } from "../../balances";
|
|
@@ -74,6 +74,24 @@ export class ObservableQueryCosmosBalancesImpl
|
|
|
74
74
|
return new CoinPretty(currency, new Int(0)).ready(false);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
if (this.denomHelper.type === "erc20") {
|
|
78
|
+
const normalizedCoinMinimalDenom = DenomHelper.normalizeDenom(
|
|
79
|
+
currency.coinMinimalDenom
|
|
80
|
+
);
|
|
81
|
+
const matchedBalance = (this.response.data.balances ?? []).find(
|
|
82
|
+
(balance) =>
|
|
83
|
+
DenomHelper.normalizeDenom(balance.denom) ===
|
|
84
|
+
normalizedCoinMinimalDenom
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
return StoreUtils.getBalanceFromCurrency(
|
|
88
|
+
currency,
|
|
89
|
+
matchedBalance
|
|
90
|
+
? [{ ...matchedBalance, denom: currency.coinMinimalDenom }]
|
|
91
|
+
: []
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
77
95
|
return StoreUtils.getBalanceFromCurrency(
|
|
78
96
|
currency,
|
|
79
97
|
this.response.data.balances ?? []
|
|
@@ -159,7 +177,17 @@ export class ObservableQueryCosmosBalanceRegistry implements BalanceRegistry {
|
|
|
159
177
|
): ObservableQueryCosmosBalancesImpl | undefined {
|
|
160
178
|
const denomHelper = new DenomHelper(minimalDenom);
|
|
161
179
|
if (denomHelper.type !== "native") {
|
|
162
|
-
|
|
180
|
+
if (denomHelper.type !== "erc20") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const mcInfo = chainGetter.getModularChain(chainId);
|
|
185
|
+
if (
|
|
186
|
+
mcInfo.type !== "ethermint" ||
|
|
187
|
+
!shouldQueryERC20WithCosmosBank(mcInfo.chainIdentifier)
|
|
188
|
+
) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
163
191
|
}
|
|
164
192
|
|
|
165
193
|
try {
|