@mezo-org/passport 0.5.1 → 0.5.2-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/api/portal.d.ts +3 -7
- package/dist/src/api/portal.d.ts.map +1 -1
- package/dist/src/api/portal.js +1 -1
- package/dist/src/api/portal.js.map +1 -1
- package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -1
- package/dist/src/hooks/useAssetsConversionRates.js +11 -38
- package/dist/src/hooks/useAssetsConversionRates.js.map +1 -1
- package/dist/src/hooks/useBorrowData.d.ts +0 -15
- package/dist/src/hooks/useBorrowData.d.ts.map +1 -1
- package/dist/src/hooks/useBorrowData.js +3 -25
- package/dist/src/hooks/useBorrowData.js.map +1 -1
- package/dist/src/hooks/useCollateralPrice.d.ts +17 -0
- package/dist/src/hooks/useCollateralPrice.d.ts.map +1 -0
- package/dist/src/hooks/useCollateralPrice.js +56 -0
- package/dist/src/hooks/useCollateralPrice.js.map +1 -0
- package/dist/src/hooks/useTokensBalances copy.d.ts +74 -0
- package/dist/src/hooks/useTokensBalances copy.d.ts.map +1 -0
- package/dist/src/hooks/useTokensBalances copy.js +206 -0
- package/dist/src/hooks/useTokensBalances copy.js.map +1 -0
- package/dist/src/lib/contracts/index.d.ts +1 -1
- package/dist/src/lib/contracts/index.d.ts.map +1 -1
- package/dist/src/lib/contracts/index.js +0 -1
- package/dist/src/lib/contracts/index.js.map +1 -1
- package/dist/src/utils/number2.test.d.ts +2 -0
- package/dist/src/utils/number2.test.d.ts.map +1 -0
- package/dist/src/utils/number2.test.js +223 -0
- package/dist/src/utils/number2.test.js.map +1 -0
- package/dist/src/utils/numbers.test.js.map +1 -1
- package/package.json +1 -1
- package/src/api/portal.ts +4 -8
- package/src/hooks/useAssetsConversionRates.ts +14 -43
- package/src/hooks/useBorrowData.ts +5 -27
- package/src/hooks/useCollateralPrice.ts +64 -0
- package/src/hooks/useTokensBalances copy.ts +289 -0
- package/src/lib/contracts/index.ts +0 -2
- package/src/utils/number2.test.ts +309 -0
- package/src/utils/numbers.test.ts +1 -0
- package/dist/src/lib/contracts/priceOracle.d.ts +0 -43
- package/dist/src/lib/contracts/priceOracle.d.ts.map +0 -1
- package/dist/src/lib/contracts/priceOracle.js +0 -52
- package/dist/src/lib/contracts/priceOracle.js.map +0 -1
- package/src/lib/contracts/priceOracle.ts +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,WAAW,GACX,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,oBAAoB,GACpB,WAAW,CAAA;AAEf,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAC1C,CAAC,EACD;IACE,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CACF,CAAA;AAED,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,IAAI,GACJ,OAAO,GACP,OAAO,GACP,OAAO,GACP,WAAW,GACX,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,oBAAoB,GACpB,WAAW,CAAA;AAEf,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAC1C,CAAC,EACD;IACE,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CACF,CAAA;AAED,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,qBAAqB,EAYlB,YAAY,CAAC,cAAc,CAAC,CAAA;AAE5C,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD,eAAO,MAAM,sBAAsB,EAInB,YAAY,CAAC,kBAAkB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAE5G,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAC5G,OAAO,SAAS,MAAM,6DAA6D,CAAA;AACnF,OAAO,gBAAgB,MAAM,6DAA6D,CAAA;AA8B1F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,SAAS;CAC0B,CAAA;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,gBAAgB;CACmB,CAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAE5G,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,UAAU,MAAM,yDAAyD,CAAA;AAChF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,cAAc,MAAM,6DAA6D,CAAA;AACxF,OAAO,YAAY,MAAM,2DAA2D,CAAA;AACpF,OAAO,QAAQ,MAAM,uDAAuD,CAAA;AAC5E,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,WAAW,MAAM,0DAA0D,CAAA;AAClF,OAAO,eAAe,MAAM,8DAA8D,CAAA;AAC1F,OAAO,WAAW,MAAM,wDAAwD,CAAA;AAChF,OAAO,mBAAmB,MAAM,gEAAgE,CAAA;AAChG,OAAO,yBAAyB,MAAM,sEAAsE,CAAA;AAC5G,OAAO,SAAS,MAAM,6DAA6D,CAAA;AACnF,OAAO,gBAAgB,MAAM,6DAA6D,CAAA;AA8B1F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,WAAW;CACyB,CAAA;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,SAAS;CAC0B,CAAA;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,mBAAmB;IACjC,kBAAkB,EAAE,yBAAyB;IAC7C,SAAS,EAAE,gBAAgB;CACmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number2.test.d.ts","sourceRoot":"","sources":["../../../src/utils/number2.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { bigIntToFloat, bigIntToHumanReadableFormat, floatToBigInt, floatToHumanReadableFormat, multiplyBigIntWithDecimal, normalizeDecimalNumber, trimBeforeDecimals, trimDecimals, } from "./number2";
|
|
2
|
+
describe("floatToBigInt", () => {
|
|
3
|
+
it("should convert integer string to bigint with default decimals", () => {
|
|
4
|
+
expect(floatToBigInt({ amount: "1" })).toBe(1000000000000000000n);
|
|
5
|
+
});
|
|
6
|
+
it("should convert float string to bigint with default decimals", () => {
|
|
7
|
+
expect(floatToBigInt({ amount: "1.23" })).toBe(1230000000000000000n);
|
|
8
|
+
});
|
|
9
|
+
it("should convert float string to bigint with custom decimals", () => {
|
|
10
|
+
expect(floatToBigInt({ amount: "1.23", decimals: 2 })).toBe(123n);
|
|
11
|
+
expect(floatToBigInt({ amount: "1.2345", decimals: 2 })).toBe(123n);
|
|
12
|
+
expect(floatToBigInt({ amount: "1.2345", decimals: 6 })).toBe(1234500n);
|
|
13
|
+
});
|
|
14
|
+
it("should handle numbers as input", () => {
|
|
15
|
+
expect(floatToBigInt({ amount: 2.5 })).toBe(2500000000000000000n);
|
|
16
|
+
});
|
|
17
|
+
it("should handle zero", () => {
|
|
18
|
+
expect(floatToBigInt({ amount: "0" })).toBe(0n);
|
|
19
|
+
expect(floatToBigInt({ amount: 0 })).toBe(0n);
|
|
20
|
+
});
|
|
21
|
+
it("should handle negative numbers", () => {
|
|
22
|
+
expect(floatToBigInt({ amount: "-1.5" })).toBe(-1500000000000000000n);
|
|
23
|
+
});
|
|
24
|
+
it("should handle numbers with thousands separator", () => {
|
|
25
|
+
expect(floatToBigInt({ amount: "1,234.56" })).toBe(1234560000000000000000n);
|
|
26
|
+
});
|
|
27
|
+
it("should return 0n for invalid input", () => {
|
|
28
|
+
expect(floatToBigInt({ amount: "abc" })).toBe(0n);
|
|
29
|
+
expect(floatToBigInt({ amount: "1.2.3" })).toBe(0n);
|
|
30
|
+
expect(floatToBigInt({ amount: "" })).toBe(0n);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("bigIntToFloat", () => {
|
|
34
|
+
it("should convert bigint to float string with default decimals", () => {
|
|
35
|
+
expect(bigIntToFloat({ amount: 1000000000000000000n })).toBe("1");
|
|
36
|
+
expect(bigIntToFloat({ amount: 1230000000000000000n })).toBe("1.23");
|
|
37
|
+
});
|
|
38
|
+
it("should convert bigint to float string with custom decimals", () => {
|
|
39
|
+
expect(bigIntToFloat({ amount: 123n, decimals: 2 })).toBe("1.23");
|
|
40
|
+
expect(bigIntToFloat({ amount: 1234500n, decimals: 6 })).toBe("1.2345");
|
|
41
|
+
});
|
|
42
|
+
it("should handle desiredDecimals less than decimals", () => {
|
|
43
|
+
expect(bigIntToFloat({
|
|
44
|
+
amount: 1234567890000000000n,
|
|
45
|
+
decimals: 18,
|
|
46
|
+
desiredDecimals: 2,
|
|
47
|
+
})).toBe("1.23");
|
|
48
|
+
expect(bigIntToFloat({
|
|
49
|
+
amount: 1234567890000000000n,
|
|
50
|
+
decimals: 18,
|
|
51
|
+
desiredDecimals: 6,
|
|
52
|
+
})).toBe("1.234568");
|
|
53
|
+
});
|
|
54
|
+
it("should handle zero", () => {
|
|
55
|
+
expect(bigIntToFloat({ amount: 0n })).toBe("0");
|
|
56
|
+
});
|
|
57
|
+
it("should handle negative numbers", () => {
|
|
58
|
+
expect(bigIntToFloat({ amount: -1500000000000000000n })).toBe("-1.5");
|
|
59
|
+
});
|
|
60
|
+
it("should handle rounding up", () => {
|
|
61
|
+
expect(bigIntToFloat({
|
|
62
|
+
amount: 1249999999999999999n,
|
|
63
|
+
decimals: 18,
|
|
64
|
+
desiredDecimals: 2,
|
|
65
|
+
})).toBe("1.25");
|
|
66
|
+
expect(bigIntToFloat({
|
|
67
|
+
amount: 1234567890000000000n,
|
|
68
|
+
decimals: 18,
|
|
69
|
+
desiredDecimals: 4,
|
|
70
|
+
})).toBe("1.2346");
|
|
71
|
+
});
|
|
72
|
+
it("should handle large numbers", () => {
|
|
73
|
+
expect(bigIntToFloat({
|
|
74
|
+
amount: 123456789012345678901234567890n,
|
|
75
|
+
decimals: 18,
|
|
76
|
+
desiredDecimals: 2,
|
|
77
|
+
})).toBe("123456789012.35");
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("floatToHumanReadableFormat", () => {
|
|
81
|
+
it("should format number with thousands separator and default decimals", () => {
|
|
82
|
+
expect(floatToHumanReadableFormat({ amount: 1234567.891 })).toBe("1,234,567.89");
|
|
83
|
+
expect(floatToHumanReadableFormat({ amount: "1234567.891" })).toBe("1,234,567.89");
|
|
84
|
+
});
|
|
85
|
+
it("should format with custom decimals", () => {
|
|
86
|
+
expect(floatToHumanReadableFormat({ amount: 1234567.891, desiredDecimals: 3 })).toBe("1,234,567.891");
|
|
87
|
+
expect(floatToHumanReadableFormat({ amount: 1234567.8, desiredDecimals: 0 })).toBe("1,234,568");
|
|
88
|
+
});
|
|
89
|
+
it("should format with minDecimals", () => {
|
|
90
|
+
expect(floatToHumanReadableFormat({
|
|
91
|
+
amount: 1234.5,
|
|
92
|
+
desiredDecimals: 2,
|
|
93
|
+
minDecimals: 1,
|
|
94
|
+
})).toBe("1,234.5");
|
|
95
|
+
expect(floatToHumanReadableFormat({
|
|
96
|
+
amount: 1234.5,
|
|
97
|
+
desiredDecimals: 2,
|
|
98
|
+
minDecimals: 2,
|
|
99
|
+
})).toBe("1,234.50");
|
|
100
|
+
expect(floatToHumanReadableFormat({
|
|
101
|
+
amount: 1234.5,
|
|
102
|
+
desiredDecimals: 2,
|
|
103
|
+
minDecimals: 4,
|
|
104
|
+
})).toBe("1,234.5000");
|
|
105
|
+
});
|
|
106
|
+
it("should return '0' for invalid input", () => {
|
|
107
|
+
expect(floatToHumanReadableFormat({ amount: "abc" })).toBe("0");
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe("bigIntToHumanReadableFormat", () => {
|
|
111
|
+
it("should format bigint to human readable string", () => {
|
|
112
|
+
expect(bigIntToHumanReadableFormat({
|
|
113
|
+
amount: 1234567890000000000n,
|
|
114
|
+
decimals: 18,
|
|
115
|
+
desiredDecimals: 2,
|
|
116
|
+
})).toBe("1.23");
|
|
117
|
+
expect(bigIntToHumanReadableFormat({
|
|
118
|
+
amount: 1234567890000000000n,
|
|
119
|
+
decimals: 18,
|
|
120
|
+
desiredDecimals: 6,
|
|
121
|
+
})).toBe("1.234568");
|
|
122
|
+
});
|
|
123
|
+
it("should handle negative values", () => {
|
|
124
|
+
expect(bigIntToHumanReadableFormat({
|
|
125
|
+
amount: -1234567890000000000n,
|
|
126
|
+
decimals: 18,
|
|
127
|
+
desiredDecimals: 2,
|
|
128
|
+
})).toBe("-1.23");
|
|
129
|
+
});
|
|
130
|
+
it("should show <0.01 for very small nonzero values", () => {
|
|
131
|
+
expect(bigIntToHumanReadableFormat({
|
|
132
|
+
amount: 1n,
|
|
133
|
+
decimals: 18,
|
|
134
|
+
desiredDecimals: 2,
|
|
135
|
+
})).toBe("<0.01");
|
|
136
|
+
expect(bigIntToHumanReadableFormat({
|
|
137
|
+
amount: -1n,
|
|
138
|
+
decimals: 18,
|
|
139
|
+
desiredDecimals: 2,
|
|
140
|
+
})).toBe("<0.01");
|
|
141
|
+
});
|
|
142
|
+
it("should format with minDecimals", () => {
|
|
143
|
+
expect(bigIntToHumanReadableFormat({
|
|
144
|
+
amount: 1234000000000000000n,
|
|
145
|
+
decimals: 18,
|
|
146
|
+
desiredDecimals: 2,
|
|
147
|
+
minDecimals: 3,
|
|
148
|
+
})).toBe("1.234");
|
|
149
|
+
expect(bigIntToHumanReadableFormat({
|
|
150
|
+
amount: 1234000000000000000n,
|
|
151
|
+
decimals: 18,
|
|
152
|
+
desiredDecimals: 3,
|
|
153
|
+
minDecimals: 2,
|
|
154
|
+
})).toBe("1.234");
|
|
155
|
+
expect(bigIntToHumanReadableFormat({
|
|
156
|
+
amount: 1234000000000000000n,
|
|
157
|
+
decimals: 18,
|
|
158
|
+
desiredDecimals: 2,
|
|
159
|
+
minDecimals: 4,
|
|
160
|
+
})).toBe("1.2340");
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe("multiplyBigIntWithDecimal", () => {
|
|
164
|
+
it("should multiply bigint by integer", () => {
|
|
165
|
+
expect(multiplyBigIntWithDecimal(10n, 2)).toBe(20n);
|
|
166
|
+
});
|
|
167
|
+
it("should multiply bigint by decimal", () => {
|
|
168
|
+
expect(multiplyBigIntWithDecimal(100n, 0.5)).toBe(50n);
|
|
169
|
+
expect(multiplyBigIntWithDecimal(100n, 1.25)).toBe(125n);
|
|
170
|
+
});
|
|
171
|
+
it("should handle scientific notation", () => {
|
|
172
|
+
expect(multiplyBigIntWithDecimal(100n, 1e-2)).toBe(1n);
|
|
173
|
+
});
|
|
174
|
+
it("should handle zero", () => {
|
|
175
|
+
expect(multiplyBigIntWithDecimal(0n, 1.5)).toBe(0n);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("trimDecimals", () => {
|
|
179
|
+
it("should trim decimals to specified precision", () => {
|
|
180
|
+
expect(trimDecimals("1.23456", 2)).toBe("1.23");
|
|
181
|
+
expect(trimDecimals("1.2", 4)).toBe("1.2");
|
|
182
|
+
expect(trimDecimals("1", 2)).toBe("1");
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe("trimBeforeDecimals", () => {
|
|
186
|
+
it("should trim integer part to specified length", () => {
|
|
187
|
+
expect(trimBeforeDecimals("12345.67", 3)).toBe("123.67");
|
|
188
|
+
expect(trimBeforeDecimals("12.34", 5)).toBe("12.34");
|
|
189
|
+
expect(trimBeforeDecimals("123456", 2)).toBe("12.");
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe("normalizeDecimalNumber", () => {
|
|
193
|
+
it("should remove invalid characters", () => {
|
|
194
|
+
expect(normalizeDecimalNumber("12a3.4b5")).toBe("123.45");
|
|
195
|
+
});
|
|
196
|
+
it("should prevent multiple dots", () => {
|
|
197
|
+
expect(normalizeDecimalNumber("1.2.3")).toBe("12.3");
|
|
198
|
+
expect(normalizeDecimalNumber("1..1.2")).toBe("11.2");
|
|
199
|
+
});
|
|
200
|
+
it("should allow only digits and one dot", () => {
|
|
201
|
+
expect(normalizeDecimalNumber("abc")).toBe("");
|
|
202
|
+
expect(normalizeDecimalNumber("123")).toBe("123");
|
|
203
|
+
});
|
|
204
|
+
it("should handle leading and trailing spaces", () => {
|
|
205
|
+
expect(normalizeDecimalNumber(" 1.23 ")).toBe("1.23");
|
|
206
|
+
expect(normalizeDecimalNumber(" 1.2.3 ")).toBe("12.3");
|
|
207
|
+
});
|
|
208
|
+
it("should handle empty input", () => {
|
|
209
|
+
expect(normalizeDecimalNumber("")).toBe("");
|
|
210
|
+
expect(normalizeDecimalNumber(" ")).toBe("");
|
|
211
|
+
});
|
|
212
|
+
it("should handle numbers with thousands separator", () => {
|
|
213
|
+
expect(normalizeDecimalNumber("1,234.56")).toBe("1234.56");
|
|
214
|
+
expect(normalizeDecimalNumber("1,234,567.89")).toBe("1234567.89");
|
|
215
|
+
});
|
|
216
|
+
it("should handle scientific notation", () => {
|
|
217
|
+
// This function does not support scientific notation as our input is expected
|
|
218
|
+
// to accept only decimal numbers
|
|
219
|
+
expect(normalizeDecimalNumber("1e3")).toBe("13");
|
|
220
|
+
expect(normalizeDecimalNumber("1.23e2")).toBe("1.232");
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=number2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number2.test.js","sourceRoot":"","sources":["../../../src/utils/number2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.test.js","sourceRoot":"","sources":["../../../src/utils/numbers.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"numbers.test.js","sourceRoot":"","sources":["../../../src/utils/numbers.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/portal.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { ApiClient } from "./client"
|
|
2
2
|
|
|
3
3
|
type PortalStatistics = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
currentUsdPerBtc: string
|
|
8
|
-
currentUsdPerEth: string
|
|
9
|
-
currentUsdPerTToken: string
|
|
10
|
-
usdPerBtc24hChange: string
|
|
4
|
+
btcPrice: number
|
|
5
|
+
tTokenPrice: number
|
|
6
|
+
usersCount: number
|
|
11
7
|
}
|
|
12
8
|
|
|
13
9
|
type PortalMats = {
|
|
@@ -33,7 +29,7 @@ export class PortalApiClient extends ApiClient {
|
|
|
33
29
|
}
|
|
34
30
|
|
|
35
31
|
async getPortalStatistics() {
|
|
36
|
-
const data = await this.handleRequest<PortalStatistics>("/
|
|
32
|
+
const data = await this.handleRequest<PortalStatistics>("/v2/statistics", {
|
|
37
33
|
method: "GET",
|
|
38
34
|
})
|
|
39
35
|
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import { useQuery } from "@tanstack/react-query"
|
|
2
|
-
import { useConfig } from "wagmi"
|
|
3
|
-
import { readContract } from "wagmi/actions"
|
|
4
2
|
import { parseUnits } from "viem"
|
|
5
3
|
import { ONE_SECOND_MS } from "../utils/time"
|
|
6
4
|
import { usePortalApiClient } from "./usePortalApiClient"
|
|
7
|
-
import {
|
|
8
|
-
import { CHAIN_ID } from "../constants"
|
|
9
|
-
import { usePassportContext } from "./usePassportContext"
|
|
10
|
-
import { normalizePrecision } from "../utils/numbers"
|
|
5
|
+
import { useCollateralPrice } from "./useCollateralPrice"
|
|
11
6
|
|
|
12
7
|
export const CONVERSION_RATE_DECIMALS = 18
|
|
13
8
|
|
|
@@ -26,54 +21,30 @@ export const QUERY_KEY = "passport.assetsConversionRates"
|
|
|
26
21
|
*/
|
|
27
22
|
export function useAssetsConversionRates() {
|
|
28
23
|
const portalApiClient = usePortalApiClient()
|
|
29
|
-
const {
|
|
30
|
-
const config = useConfig()
|
|
24
|
+
const { data: collateralPriceData } = useCollateralPrice()
|
|
31
25
|
|
|
32
|
-
|
|
33
|
-
queryKey: [QUERY_KEY],
|
|
34
|
-
queryFn: async () =>
|
|
35
|
-
Promise.all([
|
|
36
|
-
portalApiClient.getPortalStatistics(),
|
|
37
|
-
readContract(config, {
|
|
38
|
-
...priceOracleContract,
|
|
39
|
-
functionName: "latestRoundData",
|
|
40
|
-
chainId: CHAIN_ID[environment],
|
|
41
|
-
}),
|
|
42
|
-
]),
|
|
43
|
-
select: ([portalStatistics, btcPriceData]) => {
|
|
44
|
-
const tTokenConversionRate = portalStatistics.currentUsdPerTToken
|
|
45
|
-
const [, btcConversionRate] = btcPriceData
|
|
26
|
+
const collateralPrice = collateralPriceData?.toString()
|
|
46
27
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
28
|
+
return useQuery({
|
|
29
|
+
queryKey: [QUERY_KEY, collateralPrice],
|
|
30
|
+
queryFn: async () => Promise.all([portalApiClient.getPortalStatistics()]),
|
|
31
|
+
enabled: !!collateralPrice,
|
|
32
|
+
select: ([portalStatistics]) => {
|
|
33
|
+
const tTokenConversionRate = portalStatistics.tTokenPrice
|
|
34
|
+
|
|
35
|
+
const tPrice = parseUnits(
|
|
36
|
+
tTokenConversionRate.toString(),
|
|
50
37
|
CONVERSION_RATE_DECIMALS,
|
|
51
38
|
)
|
|
52
39
|
|
|
53
40
|
return {
|
|
54
41
|
rates: {
|
|
55
42
|
mT: tPrice,
|
|
56
|
-
BTC:
|
|
43
|
+
BTC: BigInt(collateralPrice!),
|
|
57
44
|
},
|
|
58
45
|
decimals: CONVERSION_RATE_DECIMALS,
|
|
59
46
|
}
|
|
60
47
|
},
|
|
61
|
-
refetchInterval:
|
|
62
|
-
if (!state.data) return MAX_PRICE_DELAY
|
|
63
|
-
|
|
64
|
-
const [, btcPriceData] = state.data
|
|
65
|
-
const [, , , updatedAt] = btcPriceData
|
|
66
|
-
|
|
67
|
-
if (!updatedAt) return MAX_PRICE_DELAY
|
|
68
|
-
|
|
69
|
-
const age = Date.now() - Number(updatedAt) * 1000
|
|
70
|
-
|
|
71
|
-
return age > MAX_PRICE_DELAY
|
|
72
|
-
? // If the data is stale, we want to refetch as soon as possible, but
|
|
73
|
-
// not faster than once per second, to avoid excessive requests.
|
|
74
|
-
// Math.max ensures the interval is at least 1 second.
|
|
75
|
-
Math.max(ONE_SECOND_MS, MAX_PRICE_DELAY - age)
|
|
76
|
-
: MAX_PRICE_DELAY - age
|
|
77
|
-
},
|
|
48
|
+
refetchInterval: MAX_PRICE_DELAY,
|
|
78
49
|
})
|
|
79
50
|
}
|
|
@@ -13,6 +13,7 @@ import { bigIntMax, normalizePrecision } from "../utils/numbers"
|
|
|
13
13
|
import useWalletAccount from "./useWalletAccount"
|
|
14
14
|
import { getAsset } from "../utils/assets"
|
|
15
15
|
import { convertToUsd } from "../utils/currency"
|
|
16
|
+
import { useCollateralPrice } from "./useCollateralPrice"
|
|
16
17
|
|
|
17
18
|
const DEBT_AND_COLL_PRECISION = 18
|
|
18
19
|
|
|
@@ -85,22 +86,6 @@ const BORROWER_OPERATIONS_ABI = [
|
|
|
85
86
|
},
|
|
86
87
|
] as const
|
|
87
88
|
|
|
88
|
-
const PRICE_FEED_ABI = [
|
|
89
|
-
{
|
|
90
|
-
inputs: [],
|
|
91
|
-
name: "fetchPrice",
|
|
92
|
-
outputs: [
|
|
93
|
-
{
|
|
94
|
-
internalType: "uint256",
|
|
95
|
-
name: "",
|
|
96
|
-
type: "uint256",
|
|
97
|
-
},
|
|
98
|
-
],
|
|
99
|
-
stateMutability: "view",
|
|
100
|
-
type: "function",
|
|
101
|
-
},
|
|
102
|
-
] as const
|
|
103
|
-
|
|
104
89
|
/**
|
|
105
90
|
* Query hook for getting borrow data. Returns collateral and trove debt for the
|
|
106
91
|
* connected account, based on it's evm address.
|
|
@@ -110,18 +95,18 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
110
95
|
const { environment = "mainnet" } = usePassportContext()
|
|
111
96
|
const walletAccount = useWalletAccount()
|
|
112
97
|
|
|
98
|
+
const { data: collateralPrice } = useCollateralPrice()
|
|
99
|
+
|
|
113
100
|
const contractAddress = useMemo(() => {
|
|
114
101
|
if (environment === "mainnet") {
|
|
115
102
|
return {
|
|
116
103
|
troveManager: mainnetBorrowContracts.TroveManager.address,
|
|
117
104
|
borrowerOperations: mainnetBorrowContracts.BorrowerOperations.address,
|
|
118
|
-
priceFeed: mainnetBorrowContracts.PriceFeed.address,
|
|
119
105
|
}
|
|
120
106
|
}
|
|
121
107
|
return {
|
|
122
108
|
troveManager: testnetBorrowContracts.TroveManager.address,
|
|
123
109
|
borrowerOperations: testnetBorrowContracts.BorrowerOperations.address,
|
|
124
|
-
priceFeed: testnetBorrowContracts.PriceFeed.address,
|
|
125
110
|
}
|
|
126
111
|
}, [environment])
|
|
127
112
|
|
|
@@ -144,15 +129,9 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
144
129
|
functionName: "MUSD_GAS_COMPENSATION",
|
|
145
130
|
chainId,
|
|
146
131
|
},
|
|
147
|
-
{
|
|
148
|
-
abi: PRICE_FEED_ABI,
|
|
149
|
-
address: contractAddress.priceFeed,
|
|
150
|
-
functionName: "fetchPrice",
|
|
151
|
-
chainId,
|
|
152
|
-
},
|
|
153
132
|
],
|
|
154
133
|
query: {
|
|
155
|
-
enabled: !!walletAccount.accountAddress,
|
|
134
|
+
enabled: !!walletAccount.accountAddress && !!collateralPrice?.toString,
|
|
156
135
|
staleTime: 5 * ONE_MINUTE_MS,
|
|
157
136
|
retry: 1,
|
|
158
137
|
select: (data) => {
|
|
@@ -161,7 +140,6 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
161
140
|
|
|
162
141
|
const [rawCollateral, principal, interest] = data[0].result!
|
|
163
142
|
const gasCompensation = data[1].result!
|
|
164
|
-
const collateralPrice = data[2].result!
|
|
165
143
|
|
|
166
144
|
const btcDetails = getAsset("BTC")
|
|
167
145
|
|
|
@@ -173,7 +151,7 @@ export function useBorrowData(queryOptions = {}) {
|
|
|
173
151
|
usd: convertToUsd(
|
|
174
152
|
rawCollateral,
|
|
175
153
|
DEBT_AND_COLL_PRECISION,
|
|
176
|
-
collateralPrice
|
|
154
|
+
collateralPrice!,
|
|
177
155
|
DEBT_AND_COLL_PRECISION,
|
|
178
156
|
),
|
|
179
157
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { useReadContract } from "wagmi"
|
|
2
|
+
import { useMemo } from "react"
|
|
3
|
+
import { ONE_MINUTE_MS } from "../utils/time"
|
|
4
|
+
import {
|
|
5
|
+
mainnetBorrowContracts,
|
|
6
|
+
testnetBorrowContracts,
|
|
7
|
+
} from "../lib/contracts"
|
|
8
|
+
import { usePassportContext } from "./usePassportContext"
|
|
9
|
+
import { CHAIN_ID } from "../constants"
|
|
10
|
+
import useWalletAccount from "./useWalletAccount"
|
|
11
|
+
|
|
12
|
+
// Wagmi handles typesafety with ABI const assertions. TypeScript doesn't
|
|
13
|
+
// support importing JSON as const yet so types cannot be inferred from the
|
|
14
|
+
// imported contract. As a workaround there is minimal ABI definition that can
|
|
15
|
+
// be asserted types from.
|
|
16
|
+
// Ref: https://wagmi.sh/core/typescript#const-assert-abis-typed-data
|
|
17
|
+
|
|
18
|
+
const PRICE_FEED_ABI = [
|
|
19
|
+
{
|
|
20
|
+
inputs: [],
|
|
21
|
+
name: "fetchPrice",
|
|
22
|
+
outputs: [
|
|
23
|
+
{
|
|
24
|
+
internalType: "uint256",
|
|
25
|
+
name: "",
|
|
26
|
+
type: "uint256",
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
stateMutability: "view",
|
|
30
|
+
type: "function",
|
|
31
|
+
},
|
|
32
|
+
] as const
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Query hook for getting borrow data. Returns collateral and trove debt for the
|
|
36
|
+
* connected account, based on it's evm address.
|
|
37
|
+
* @param queryOptions Query options passed to the underlying `useQuery` hook.
|
|
38
|
+
*/
|
|
39
|
+
export function useCollateralPrice(queryOptions = {}) {
|
|
40
|
+
const { environment = "mainnet" } = usePassportContext()
|
|
41
|
+
const walletAccount = useWalletAccount()
|
|
42
|
+
|
|
43
|
+
const priceFeedContractAddress = useMemo(() => {
|
|
44
|
+
if (environment === "mainnet") {
|
|
45
|
+
return mainnetBorrowContracts.PriceFeed.address
|
|
46
|
+
}
|
|
47
|
+
return testnetBorrowContracts.PriceFeed.address
|
|
48
|
+
}, [environment])
|
|
49
|
+
|
|
50
|
+
const chainId = CHAIN_ID[environment]
|
|
51
|
+
|
|
52
|
+
return useReadContract({
|
|
53
|
+
abi: PRICE_FEED_ABI,
|
|
54
|
+
address: priceFeedContractAddress,
|
|
55
|
+
functionName: "fetchPrice",
|
|
56
|
+
chainId,
|
|
57
|
+
query: {
|
|
58
|
+
enabled: !!walletAccount.accountAddress,
|
|
59
|
+
staleTime: 5 * ONE_MINUTE_MS,
|
|
60
|
+
retry: 1,
|
|
61
|
+
...queryOptions,
|
|
62
|
+
},
|
|
63
|
+
})
|
|
64
|
+
}
|