@keplr-wallet/stores 0.13.34 → 0.13.36
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/token-factory/currency-registrar.d.ts +1 -0
- package/build/token-factory/currency-registrar.js +54 -1
- package/build/token-factory/currency-registrar.js.map +1 -1
- package/build/token-factory/currency-registrar.spec.d.ts +1 -0
- package/build/token-factory/currency-registrar.spec.js +75 -0
- package/build/token-factory/currency-registrar.spec.js.map +1 -0
- package/package.json +11 -11
- package/src/token-factory/currency-registrar.spec.ts +101 -0
- package/src/token-factory/currency-registrar.ts +66 -0
|
@@ -10,6 +10,7 @@ type Cache = {
|
|
|
10
10
|
notFound: true;
|
|
11
11
|
timestamp: number;
|
|
12
12
|
};
|
|
13
|
+
export declare function isBlockedTokenFactoryAtomCurrency(currency: Pick<Currency, "coinDenom" | "coinMinimalDenom">): boolean;
|
|
13
14
|
export declare class TokenFactoryCurrencyRegistrar {
|
|
14
15
|
protected readonly kvStore: KVStore;
|
|
15
16
|
protected readonly cacheDuration: number;
|
|
@@ -15,10 +15,47 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TokenFactoryCurrencyRegistrar = void 0;
|
|
18
|
+
exports.TokenFactoryCurrencyRegistrar = exports.isBlockedTokenFactoryAtomCurrency = void 0;
|
|
19
19
|
const common_1 = require("@keplr-wallet/common");
|
|
20
20
|
const mobx_1 = require("mobx");
|
|
21
21
|
const cosmos_1 = require("@keplr-wallet/cosmos");
|
|
22
|
+
function getTokenFactorySubdenom(coinMinimalDenom) {
|
|
23
|
+
const prefix = "factory/";
|
|
24
|
+
if (!coinMinimalDenom.startsWith(prefix)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const index = coinMinimalDenom.indexOf("/", prefix.length);
|
|
28
|
+
if (index < 0) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
return coinMinimalDenom.slice(index + 1);
|
|
32
|
+
}
|
|
33
|
+
const ALLOWED_TOKEN_FACTORY_ATOM_DENOMS = new Set([
|
|
34
|
+
// Exact-denom allowlist for known legit ATOM-related token-factory assets,
|
|
35
|
+
// sourced from cosmos/chain-registry assetlists.
|
|
36
|
+
"factory/kujira1h9f3k54j060pzlnea8ep8qfymsmwl5yhwc5hqept5p2esqzve7tq2ghnm4/ulp",
|
|
37
|
+
"factory/kujira13my0qtm2a8jp0wg8uzg49tyn4zcea8scy3dc7ghn8z9eys08yzls49ymdm/ulp",
|
|
38
|
+
"factory/kujira1yncutssgh2vj9scaymtteg949hwcft07c6qmgarxnaf04yesq3jsn6g2uv/ulp",
|
|
39
|
+
"factory/neutron1shwxlkpdjd8h5wdtrykypwd2v62z5glr95yp0etdcspkkjwm5meq82ndxs/amatom",
|
|
40
|
+
"factory/neutron13lkh47msw28yynspc5rnmty3yktk43wc3dsv0l/ATOM1KLFG",
|
|
41
|
+
"factory/neutron1k6hr0f83e7un2wjf29cspk7j69jrnskk65k3ek2nj9dztrlzpj6q00rtsa/udatom",
|
|
42
|
+
"factory/neutron15lku24mqhvy4v4gryrqs4662n9v9q4ux9tayn89cmdzldjcgawushxvm76/amatom",
|
|
43
|
+
"factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom",
|
|
44
|
+
]);
|
|
45
|
+
function isBlockedTokenFactoryAtomCurrency(currency) {
|
|
46
|
+
const denomHelper = new common_1.DenomHelper(currency.coinMinimalDenom);
|
|
47
|
+
if (denomHelper.type !== "native" ||
|
|
48
|
+
!denomHelper.denom.startsWith("factory/")) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (ALLOWED_TOKEN_FACTORY_ATOM_DENOMS.has(denomHelper.denom)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const subdenom = getTokenFactorySubdenom(denomHelper.denom);
|
|
55
|
+
return ((subdenom === null || subdenom === void 0 ? void 0 : subdenom.toLowerCase().includes("atom")) === true ||
|
|
56
|
+
currency.coinDenom.toLowerCase().includes("atom"));
|
|
57
|
+
}
|
|
58
|
+
exports.isBlockedTokenFactoryAtomCurrency = isBlockedTokenFactoryAtomCurrency;
|
|
22
59
|
class TokenFactoryCurrencyRegistrar {
|
|
23
60
|
constructor(kvStore, cacheDuration = 24 * 3600 * 1000, // 1 days
|
|
24
61
|
failedCacheDuration = 1 * 3600 * 1000, // 1 hours
|
|
@@ -122,6 +159,14 @@ class TokenFactoryCurrencyRegistrar {
|
|
|
122
159
|
notFound: true,
|
|
123
160
|
};
|
|
124
161
|
}
|
|
162
|
+
if (isBlockedTokenFactoryAtomCurrency(cached.currency)) {
|
|
163
|
+
return {
|
|
164
|
+
res: undefined,
|
|
165
|
+
isFetching: false,
|
|
166
|
+
fromCache: true,
|
|
167
|
+
notFound: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
125
170
|
if (!staled) {
|
|
126
171
|
return {
|
|
127
172
|
res: cached.currency,
|
|
@@ -148,6 +193,14 @@ class TokenFactoryCurrencyRegistrar {
|
|
|
148
193
|
notFound: true,
|
|
149
194
|
};
|
|
150
195
|
}
|
|
196
|
+
if (isBlockedTokenFactoryAtomCurrency(queryCurrency.response.data)) {
|
|
197
|
+
return {
|
|
198
|
+
res: undefined,
|
|
199
|
+
isFetching: isGlobalFetching,
|
|
200
|
+
fromCache: false,
|
|
201
|
+
notFound: true,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
151
204
|
return {
|
|
152
205
|
res: queryCurrency.response.data,
|
|
153
206
|
isFetching: isGlobalFetching,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency-registrar.js","sourceRoot":"","sources":["../../src/token-factory/currency-registrar.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAEA,iDAA4D;AAC5D,+BAA+D;AAE/D,iDAAqD;AAarD,MAAa,6BAA6B;IAOxC,YACqB,OAAgB,EAChB,gBAAwB,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,SAAS;IACnD,sBAA8B,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,UAAU;IACzD,OAAe,EACf,GAAW,EACX,UAAsB,EACtB,YAA2B;QAN3B,YAAO,GAAP,OAAO,CAAS;QAChB,kBAAa,GAAb,aAAa,CAA2B;QACxC,wBAAmB,GAAnB,mBAAmB,CAA0B;QAC7C,YAAO,GAAP,OAAO,CAAQ;QACf,QAAG,GAAH,GAAG,CAAQ;QACX,eAAU,GAAV,UAAU,CAAY;QACtB,iBAAY,GAAZ,YAAY,CAAe;QAZzC,mBAAc,GAAG,KAAK,CAAC;QAEpB,UAAK,GAAuB,IAAI,GAAG,EAAE,CAAC;QACtC,gBAAW,GAAuB,IAAI,GAAG,EAAE,CAAC;QAWpD,IAAI,CAAC,UAAU,CAAC,yBAAyB,CACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;QAEF,IAAA,qBAAc,EAAC,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEK,IAAI;;YACR,MAAM,KAAK,GAAG,+BAA+B,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,KAAK,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE;gBACT,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;aACF;YAED,IAAA,kBAAW,EAAC,GAAG,EAAE;gBACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAES,iBAAiB,CACzB,OAAe,EACf,gBAAwB;QAOxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC7C,OAAO;SACR;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;YAC7D,OAAO;SACR;QAED,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC,gBAAgB,CAAC,CAAC;QACtD,IACE,WAAW,CAAC,IAAI,KAAK,QAAQ;YAC7B,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EACzC;YACA,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,KAAK;aACZ,CAAC;SACH;QAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,UAAU,EAAE;YAClB,gBAAgB,GAAG,IAAI,CAAC;SACzB;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;YACrC,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE;oBACvC,QAAQ,EAAE,SAAS;oBACnB,QAAQ;oBACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;aACJ;iBAAM,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE;oBACvC,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;aACJ;SACF;QACD,IAAI,QAAQ,EAAE;YACZ,OAAO;gBACL,KAAK,oBACA,QAAQ,CACZ;gBACD,IAAI,EAAE,CAAC,gBAAgB;aACxB,CAAC;SACH;aAAM;YACL,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,gBAAgB;aACxB,CAAC;SACH;IACH,CAAC;IAES,WAAW,CACnB,OAAe,EACf,gBAAwB;;QAOxB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CACnD,OAAO,EACP,gBAAgB,CACjB,CAAC;QACF,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnB,OAAO;oBACL,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,IAAI;iBACf,CAAC;aACH;YACD,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;oBACL,GAAG,EAAE,MAAM,CAAC,QAAQ;oBACpB,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,KAAK;iBAChB,CAAC;aACH;SACF;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAC1D,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,GAAG;aACL,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7B,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAC5D,CAAC;QAEF,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,MAAM,QAAQ,GAAyB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,aAAa,CAAC,UAAU,EAAE;YAC5B,gBAAgB,GAAG,IAAI,CAAC;SACzB;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE;YAC1B,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,KAAK,gBAAgB,EAAE;gBACrE,OAAO;oBACL,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,gBAAgB;oBAC5B,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,IAAI;iBACf,CAAC;aACH;YAED,OAAO;gBACL,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI;gBAChC,UAAU,EAAE,gBAAgB;gBAC5B,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;aAChB,CAAC;SACH;aAAM;YACL,MAAM,QAAQ,GAAG,CAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,MAAM,MAAK,GAAG,CAAC;YACrD,OAAO;gBACL,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;gBACpC,UAAU,EAAE,gBAAgB;gBAC5B,SAAS,EAAE,KAAK;gBAChB,QAAQ;aACT,CAAC;SACH;IACH,CAAC;IAES,gBAAgB,CACxB,OAAe,EACf,gBAAwB;QAExB,MAAM,GAAG,GAAG,GACV,sBAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAC/B,IAAI,gBAAgB,EAAE,CAAC;QAEvB,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,CAAC,QAAQ,EAAE;gBAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE;oBACzD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB;wBACE,MAAM,KAAK,GAAG,+BAA+B,CAAC;wBAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,KAAK,EAAE,GAAG,CAAC,CAAC;qBACrD;oBACD,GAAG,GAAG,SAAS,CAAC;oBAChB,MAAM,GAAG,KAAK,CAAC;iBAChB;aACF;iBAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,WAAW,EAAE;oBAChB;wBACE,MAAM,KAAK,GAAG,+BAA+B,CAAC;wBAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,KAAK,EAAE,GAAG,CAAC,CAAC;qBACrD;oBAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAChC;gBAED,MAAM,GAAG,IAAI,CAAC;aACf;SACF;QAED,OAAO;YACL,GAAG;YACH,MAAM;SACP,CAAC;IACJ,CAAC;IAES,QAAQ,CAChB,OAAe,EACf,gBAAwB,EACxB,KAAY;QAEZ,MAAM,GAAG,GAAG,GACV,sBAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAC/B,IAAI,gBAAgB,EAAE,CAAC;QAEvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B;YACE,MAAM,KAAK,GAAG,+BAA+B,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAwB,KAAK,EAAE,GAAG,CAAC,CAAC;SACrD;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAClC;IACH,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"currency-registrar.js","sourceRoot":"","sources":["../../src/token-factory/currency-registrar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const currency_registrar_1 = require("./currency-registrar");
|
|
4
|
+
describe("TokenFactoryCurrencyRegistrar", () => {
|
|
5
|
+
describe("isBlockedTokenFactoryAtomCurrency", () => {
|
|
6
|
+
it("blocks token factory currencies with atom in the subdenom", () => {
|
|
7
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)({
|
|
8
|
+
coinDenom: "ATOMAP",
|
|
9
|
+
coinMinimalDenom: "factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/ATOMAP",
|
|
10
|
+
})).toBe(true);
|
|
11
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)({
|
|
12
|
+
coinDenom: "REWARDATOM",
|
|
13
|
+
coinMinimalDenom: "factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/REWARDATOM",
|
|
14
|
+
})).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
it("blocks token factory currencies with atom in the display denom", () => {
|
|
17
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)({
|
|
18
|
+
coinDenom: "ATOMEREWARD",
|
|
19
|
+
coinMinimalDenom: "factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/reward",
|
|
20
|
+
})).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it("does not block non-token-factory atom currencies", () => {
|
|
23
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)({
|
|
24
|
+
coinDenom: "stATOM",
|
|
25
|
+
coinMinimalDenom: "ibc/abc",
|
|
26
|
+
})).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
it("does not block unrelated token factory currencies", () => {
|
|
29
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)({
|
|
30
|
+
coinDenom: "NTRN",
|
|
31
|
+
coinMinimalDenom: "factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/NTRN",
|
|
32
|
+
})).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it("does not block chain-registry registered atom-related factory currencies", () => {
|
|
35
|
+
const allowedCurrencies = [
|
|
36
|
+
{
|
|
37
|
+
coinDenom: "LP-ATOM-MNTA",
|
|
38
|
+
coinMinimalDenom: "factory/kujira1h9f3k54j060pzlnea8ep8qfymsmwl5yhwc5hqept5p2esqzve7tq2ghnm4/ulp",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
coinDenom: "LP-ATOM-USDC",
|
|
42
|
+
coinMinimalDenom: "factory/kujira13my0qtm2a8jp0wg8uzg49tyn4zcea8scy3dc7ghn8z9eys08yzls49ymdm/ulp",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
coinDenom: "LP-ATOM-USK",
|
|
46
|
+
coinMinimalDenom: "factory/kujira1yncutssgh2vj9scaymtteg949hwcft07c6qmgarxnaf04yesq3jsn6g2uv/ulp",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
coinDenom: "amATOM",
|
|
50
|
+
coinMinimalDenom: "factory/neutron1shwxlkpdjd8h5wdtrykypwd2v62z5glr95yp0etdcspkkjwm5meq82ndxs/amatom",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
coinDenom: "ATOM1KLFG",
|
|
54
|
+
coinMinimalDenom: "factory/neutron13lkh47msw28yynspc5rnmty3yktk43wc3dsv0l/ATOM1KLFG",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
coinDenom: "dATOM",
|
|
58
|
+
coinMinimalDenom: "factory/neutron1k6hr0f83e7un2wjf29cspk7j69jrnskk65k3ek2nj9dztrlzpj6q00rtsa/udatom",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
coinDenom: "amATOM",
|
|
62
|
+
coinMinimalDenom: "factory/neutron15lku24mqhvy4v4gryrqs4662n9v9q4ux9tayn89cmdzldjcgawushxvm76/amatom",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
coinDenom: "sqATOM",
|
|
66
|
+
coinMinimalDenom: "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom",
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
for (const currency of allowedCurrencies) {
|
|
70
|
+
expect((0, currency_registrar_1.isBlockedTokenFactoryAtomCurrency)(currency)).toBe(false);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=currency-registrar.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency-registrar.spec.js","sourceRoot":"","sources":["../../src/token-factory/currency-registrar.spec.ts"],"names":[],"mappings":";;AAAA,6DAAyE;AAEzE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,CACJ,IAAA,sDAAiC,EAAC;gBAChC,SAAS,EAAE,QAAQ;gBACnB,gBAAgB,EACd,mFAAmF;aACtF,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,CACJ,IAAA,sDAAiC,EAAC;gBAChC,SAAS,EAAE,YAAY;gBACvB,gBAAgB,EACd,uFAAuF;aAC1F,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,CACJ,IAAA,sDAAiC,EAAC;gBAChC,SAAS,EAAE,aAAa;gBACxB,gBAAgB,EACd,mFAAmF;aACtF,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CACJ,IAAA,sDAAiC,EAAC;gBAChC,SAAS,EAAE,QAAQ;gBACnB,gBAAgB,EAAE,SAAS;aAC5B,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,CACJ,IAAA,sDAAiC,EAAC;gBAChC,SAAS,EAAE,MAAM;gBACjB,gBAAgB,EACd,iFAAiF;aACpF,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,iBAAiB,GAAG;gBACxB;oBACE,SAAS,EAAE,cAAc;oBACzB,gBAAgB,EACd,+EAA+E;iBAClF;gBACD;oBACE,SAAS,EAAE,cAAc;oBACzB,gBAAgB,EACd,+EAA+E;iBAClF;gBACD;oBACE,SAAS,EAAE,aAAa;oBACxB,gBAAgB,EACd,+EAA+E;iBAClF;gBACD;oBACE,SAAS,EAAE,QAAQ;oBACnB,gBAAgB,EACd,mFAAmF;iBACtF;gBACD;oBACE,SAAS,EAAE,WAAW;oBACtB,gBAAgB,EACd,kEAAkE;iBACrE;gBACD;oBACE,SAAS,EAAE,OAAO;oBAClB,gBAAgB,EACd,mFAAmF;iBACtF;gBACD;oBACE,SAAS,EAAE,QAAQ;oBACnB,gBAAgB,EACd,mFAAmF;iBACtF;gBACD;oBACE,SAAS,EAAE,QAAQ;oBACnB,gBAAgB,EACd,4DAA4D;iBAC/D;aACF,CAAC;YAEF,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;gBACxC,MAAM,CAAC,IAAA,sDAAiC,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjE;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keplr-wallet/stores",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.36",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"author": "chainapsis",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -21,18 +21,18 @@
|
|
|
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.36"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@ethersproject/address": "^5.7.0",
|
|
28
|
-
"@keplr-wallet/common": "0.13.
|
|
29
|
-
"@keplr-wallet/cosmos": "0.13.
|
|
30
|
-
"@keplr-wallet/crypto": "0.13.
|
|
31
|
-
"@keplr-wallet/mobx-utils": "0.13.
|
|
32
|
-
"@keplr-wallet/proto-types": "0.13.
|
|
33
|
-
"@keplr-wallet/simple-fetch": "0.13.
|
|
34
|
-
"@keplr-wallet/types": "0.13.
|
|
35
|
-
"@keplr-wallet/unit": "0.13.
|
|
28
|
+
"@keplr-wallet/common": "0.13.36",
|
|
29
|
+
"@keplr-wallet/cosmos": "0.13.36",
|
|
30
|
+
"@keplr-wallet/crypto": "0.13.36",
|
|
31
|
+
"@keplr-wallet/mobx-utils": "0.13.36",
|
|
32
|
+
"@keplr-wallet/proto-types": "0.13.36",
|
|
33
|
+
"@keplr-wallet/simple-fetch": "0.13.36",
|
|
34
|
+
"@keplr-wallet/types": "0.13.36",
|
|
35
|
+
"@keplr-wallet/unit": "0.13.36",
|
|
36
36
|
"buffer": "^6.0.3",
|
|
37
37
|
"deepmerge": "^4.2.2",
|
|
38
38
|
"eventemitter3": "^4.0.7",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"mobx": "^6",
|
|
45
45
|
"mobx-utils": "^6"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "43bf315aca3d27f9e5965a8caf9eaa0ae4ad2529"
|
|
48
48
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { isBlockedTokenFactoryAtomCurrency } from "./currency-registrar";
|
|
2
|
+
|
|
3
|
+
describe("TokenFactoryCurrencyRegistrar", () => {
|
|
4
|
+
describe("isBlockedTokenFactoryAtomCurrency", () => {
|
|
5
|
+
it("blocks token factory currencies with atom in the subdenom", () => {
|
|
6
|
+
expect(
|
|
7
|
+
isBlockedTokenFactoryAtomCurrency({
|
|
8
|
+
coinDenom: "ATOMAP",
|
|
9
|
+
coinMinimalDenom:
|
|
10
|
+
"factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/ATOMAP",
|
|
11
|
+
})
|
|
12
|
+
).toBe(true);
|
|
13
|
+
|
|
14
|
+
expect(
|
|
15
|
+
isBlockedTokenFactoryAtomCurrency({
|
|
16
|
+
coinDenom: "REWARDATOM",
|
|
17
|
+
coinMinimalDenom:
|
|
18
|
+
"factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/REWARDATOM",
|
|
19
|
+
})
|
|
20
|
+
).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("blocks token factory currencies with atom in the display denom", () => {
|
|
24
|
+
expect(
|
|
25
|
+
isBlockedTokenFactoryAtomCurrency({
|
|
26
|
+
coinDenom: "ATOMEREWARD",
|
|
27
|
+
coinMinimalDenom:
|
|
28
|
+
"factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/reward",
|
|
29
|
+
})
|
|
30
|
+
).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("does not block non-token-factory atom currencies", () => {
|
|
34
|
+
expect(
|
|
35
|
+
isBlockedTokenFactoryAtomCurrency({
|
|
36
|
+
coinDenom: "stATOM",
|
|
37
|
+
coinMinimalDenom: "ibc/abc",
|
|
38
|
+
})
|
|
39
|
+
).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("does not block unrelated token factory currencies", () => {
|
|
43
|
+
expect(
|
|
44
|
+
isBlockedTokenFactoryAtomCurrency({
|
|
45
|
+
coinDenom: "NTRN",
|
|
46
|
+
coinMinimalDenom:
|
|
47
|
+
"factory/neutron1d59rkwmkt6f46aeyra6zfk6ghehlsqc2qevw96c6x4xfmyk4qxhsjh8ajn/NTRN",
|
|
48
|
+
})
|
|
49
|
+
).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("does not block chain-registry registered atom-related factory currencies", () => {
|
|
53
|
+
const allowedCurrencies = [
|
|
54
|
+
{
|
|
55
|
+
coinDenom: "LP-ATOM-MNTA",
|
|
56
|
+
coinMinimalDenom:
|
|
57
|
+
"factory/kujira1h9f3k54j060pzlnea8ep8qfymsmwl5yhwc5hqept5p2esqzve7tq2ghnm4/ulp",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
coinDenom: "LP-ATOM-USDC",
|
|
61
|
+
coinMinimalDenom:
|
|
62
|
+
"factory/kujira13my0qtm2a8jp0wg8uzg49tyn4zcea8scy3dc7ghn8z9eys08yzls49ymdm/ulp",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
coinDenom: "LP-ATOM-USK",
|
|
66
|
+
coinMinimalDenom:
|
|
67
|
+
"factory/kujira1yncutssgh2vj9scaymtteg949hwcft07c6qmgarxnaf04yesq3jsn6g2uv/ulp",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
coinDenom: "amATOM",
|
|
71
|
+
coinMinimalDenom:
|
|
72
|
+
"factory/neutron1shwxlkpdjd8h5wdtrykypwd2v62z5glr95yp0etdcspkkjwm5meq82ndxs/amatom",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
coinDenom: "ATOM1KLFG",
|
|
76
|
+
coinMinimalDenom:
|
|
77
|
+
"factory/neutron13lkh47msw28yynspc5rnmty3yktk43wc3dsv0l/ATOM1KLFG",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
coinDenom: "dATOM",
|
|
81
|
+
coinMinimalDenom:
|
|
82
|
+
"factory/neutron1k6hr0f83e7un2wjf29cspk7j69jrnskk65k3ek2nj9dztrlzpj6q00rtsa/udatom",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
coinDenom: "amATOM",
|
|
86
|
+
coinMinimalDenom:
|
|
87
|
+
"factory/neutron15lku24mqhvy4v4gryrqs4662n9v9q4ux9tayn89cmdzldjcgawushxvm76/amatom",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
coinDenom: "sqATOM",
|
|
91
|
+
coinMinimalDenom:
|
|
92
|
+
"factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom",
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
|
|
96
|
+
for (const currency of allowedCurrencies) {
|
|
97
|
+
expect(isBlockedTokenFactoryAtomCurrency(currency)).toBe(false);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -16,6 +16,55 @@ type Cache =
|
|
|
16
16
|
timestamp: number;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
+
function getTokenFactorySubdenom(coinMinimalDenom: string): string | undefined {
|
|
20
|
+
const prefix = "factory/";
|
|
21
|
+
if (!coinMinimalDenom.startsWith(prefix)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const index = coinMinimalDenom.indexOf("/", prefix.length);
|
|
26
|
+
if (index < 0) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return coinMinimalDenom.slice(index + 1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const ALLOWED_TOKEN_FACTORY_ATOM_DENOMS = new Set<string>([
|
|
34
|
+
// Exact-denom allowlist for known legit ATOM-related token-factory assets,
|
|
35
|
+
// sourced from cosmos/chain-registry assetlists.
|
|
36
|
+
"factory/kujira1h9f3k54j060pzlnea8ep8qfymsmwl5yhwc5hqept5p2esqzve7tq2ghnm4/ulp",
|
|
37
|
+
"factory/kujira13my0qtm2a8jp0wg8uzg49tyn4zcea8scy3dc7ghn8z9eys08yzls49ymdm/ulp",
|
|
38
|
+
"factory/kujira1yncutssgh2vj9scaymtteg949hwcft07c6qmgarxnaf04yesq3jsn6g2uv/ulp",
|
|
39
|
+
"factory/neutron1shwxlkpdjd8h5wdtrykypwd2v62z5glr95yp0etdcspkkjwm5meq82ndxs/amatom",
|
|
40
|
+
"factory/neutron13lkh47msw28yynspc5rnmty3yktk43wc3dsv0l/ATOM1KLFG",
|
|
41
|
+
"factory/neutron1k6hr0f83e7un2wjf29cspk7j69jrnskk65k3ek2nj9dztrlzpj6q00rtsa/udatom",
|
|
42
|
+
"factory/neutron15lku24mqhvy4v4gryrqs4662n9v9q4ux9tayn89cmdzldjcgawushxvm76/amatom",
|
|
43
|
+
"factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom",
|
|
44
|
+
]);
|
|
45
|
+
|
|
46
|
+
export function isBlockedTokenFactoryAtomCurrency(
|
|
47
|
+
currency: Pick<Currency, "coinDenom" | "coinMinimalDenom">
|
|
48
|
+
): boolean {
|
|
49
|
+
const denomHelper = new DenomHelper(currency.coinMinimalDenom);
|
|
50
|
+
if (
|
|
51
|
+
denomHelper.type !== "native" ||
|
|
52
|
+
!denomHelper.denom.startsWith("factory/")
|
|
53
|
+
) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (ALLOWED_TOKEN_FACTORY_ATOM_DENOMS.has(denomHelper.denom)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const subdenom = getTokenFactorySubdenom(denomHelper.denom);
|
|
62
|
+
return (
|
|
63
|
+
subdenom?.toLowerCase().includes("atom") === true ||
|
|
64
|
+
currency.coinDenom.toLowerCase().includes("atom")
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
19
68
|
export class TokenFactoryCurrencyRegistrar {
|
|
20
69
|
@observable
|
|
21
70
|
public _isInitialized = false;
|
|
@@ -152,6 +201,14 @@ export class TokenFactoryCurrencyRegistrar {
|
|
|
152
201
|
notFound: true,
|
|
153
202
|
};
|
|
154
203
|
}
|
|
204
|
+
if (isBlockedTokenFactoryAtomCurrency(cached.currency)) {
|
|
205
|
+
return {
|
|
206
|
+
res: undefined,
|
|
207
|
+
isFetching: false,
|
|
208
|
+
fromCache: true,
|
|
209
|
+
notFound: true,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
155
212
|
if (!staled) {
|
|
156
213
|
return {
|
|
157
214
|
res: cached.currency,
|
|
@@ -185,6 +242,15 @@ export class TokenFactoryCurrencyRegistrar {
|
|
|
185
242
|
};
|
|
186
243
|
}
|
|
187
244
|
|
|
245
|
+
if (isBlockedTokenFactoryAtomCurrency(queryCurrency.response.data)) {
|
|
246
|
+
return {
|
|
247
|
+
res: undefined,
|
|
248
|
+
isFetching: isGlobalFetching,
|
|
249
|
+
fromCache: false,
|
|
250
|
+
notFound: true,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
188
254
|
return {
|
|
189
255
|
res: queryCurrency.response.data,
|
|
190
256
|
isFetching: isGlobalFetching,
|