curvance 4.1.2 → 5.1.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/README.md +65 -10
- package/dist/abis/OptimizerReader.json +43 -45
- package/dist/abis/ProtocolReader.json +279 -55
- package/dist/chains/arbitrum.js +3 -3
- package/dist/chains/arbitrum.js.map +1 -1
- package/dist/classes/Api.d.ts +2 -2
- package/dist/classes/Api.d.ts.map +1 -1
- package/dist/classes/Api.js +87 -14
- package/dist/classes/Api.js.map +1 -1
- package/dist/classes/BorrowableCToken.d.ts +9 -1
- package/dist/classes/BorrowableCToken.d.ts.map +1 -1
- package/dist/classes/BorrowableCToken.js +67 -12
- package/dist/classes/BorrowableCToken.js.map +1 -1
- package/dist/classes/CToken.d.ts +210 -21
- package/dist/classes/CToken.d.ts.map +1 -1
- package/dist/classes/CToken.js +692 -284
- package/dist/classes/CToken.js.map +1 -1
- package/dist/classes/Calldata.d.ts +2 -2
- package/dist/classes/Calldata.d.ts.map +1 -1
- package/dist/classes/Calldata.js +6 -2
- package/dist/classes/Calldata.js.map +1 -1
- package/dist/classes/DexAggregators/IDexAgg.d.ts +1 -1
- package/dist/classes/DexAggregators/Kuru.js +1 -1
- package/dist/classes/DexAggregators/Kuru.js.map +1 -1
- package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -1
- package/dist/classes/DexAggregators/KyberSwap.js +112 -61
- package/dist/classes/DexAggregators/KyberSwap.js.map +1 -1
- package/dist/classes/DexAggregators/MultiDexAgg.d.ts +2 -2
- package/dist/classes/DexAggregators/MultiDexAgg.d.ts.map +1 -1
- package/dist/classes/DexAggregators/MultiDexAgg.js +30 -18
- package/dist/classes/DexAggregators/MultiDexAgg.js.map +1 -1
- package/dist/classes/DexAggregators/UnsupportedDexAgg.d.ts +19 -0
- package/dist/classes/DexAggregators/UnsupportedDexAgg.d.ts.map +1 -0
- package/dist/classes/DexAggregators/UnsupportedDexAgg.js +29 -0
- package/dist/classes/DexAggregators/UnsupportedDexAgg.js.map +1 -0
- package/dist/classes/DexAggregators/helpers.d.ts +30 -0
- package/dist/classes/DexAggregators/helpers.d.ts.map +1 -0
- package/dist/classes/DexAggregators/helpers.js +57 -0
- package/dist/classes/DexAggregators/helpers.js.map +1 -0
- package/dist/classes/DexAggregators/index.d.ts +2 -0
- package/dist/classes/DexAggregators/index.d.ts.map +1 -1
- package/dist/classes/DexAggregators/index.js +1 -0
- package/dist/classes/DexAggregators/index.js.map +1 -1
- package/dist/classes/ERC20.d.ts +3 -3
- package/dist/classes/ERC20.d.ts.map +1 -1
- package/dist/classes/ERC20.js +26 -10
- package/dist/classes/ERC20.js.map +1 -1
- package/dist/classes/FormatConverter.d.ts.map +1 -1
- package/dist/classes/FormatConverter.js +4 -1
- package/dist/classes/FormatConverter.js.map +1 -1
- package/dist/classes/Market.d.ts +46 -8
- package/dist/classes/Market.d.ts.map +1 -1
- package/dist/classes/Market.js +342 -111
- package/dist/classes/Market.js.map +1 -1
- package/dist/classes/NativeToken.d.ts +2 -2
- package/dist/classes/NativeToken.d.ts.map +1 -1
- package/dist/classes/NativeToken.js +21 -7
- package/dist/classes/NativeToken.js.map +1 -1
- package/dist/classes/OptimizerReader.d.ts +15 -7
- package/dist/classes/OptimizerReader.d.ts.map +1 -1
- package/dist/classes/OptimizerReader.js +108 -30
- package/dist/classes/OptimizerReader.js.map +1 -1
- package/dist/classes/OracleManager.d.ts.map +1 -1
- package/dist/classes/OracleManager.js +11 -4
- package/dist/classes/OracleManager.js.map +1 -1
- package/dist/classes/PositionManager.d.ts.map +1 -1
- package/dist/classes/PositionManager.js +1 -3
- package/dist/classes/PositionManager.js.map +1 -1
- package/dist/classes/ProtocolReader.d.ts +30 -9
- package/dist/classes/ProtocolReader.d.ts.map +1 -1
- package/dist/classes/ProtocolReader.js +158 -138
- package/dist/classes/ProtocolReader.js.map +1 -1
- package/dist/classes/Zapper.d.ts +5 -5
- package/dist/classes/Zapper.d.ts.map +1 -1
- package/dist/classes/Zapper.js +21 -18
- package/dist/classes/Zapper.js.map +1 -1
- package/dist/contracts/monad-mainnet.json +1 -1
- package/dist/feePolicy.d.ts +2 -0
- package/dist/feePolicy.d.ts.map +1 -1
- package/dist/feePolicy.js +19 -0
- package/dist/feePolicy.js.map +1 -1
- package/dist/format/borrow.d.ts.map +1 -1
- package/dist/format/borrow.js +7 -1
- package/dist/format/borrow.js.map +1 -1
- package/dist/format/health.d.ts +3 -2
- package/dist/format/health.d.ts.map +1 -1
- package/dist/format/health.js +10 -9
- package/dist/format/health.js.map +1 -1
- package/dist/format/leverage.js +5 -4
- package/dist/format/leverage.js.map +1 -1
- package/dist/helpers.d.ts +14 -11
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +171 -52
- package/dist/helpers.js.map +1 -1
- package/dist/integrations/merkl.d.ts +2 -1
- package/dist/integrations/merkl.d.ts.map +1 -1
- package/dist/integrations/merkl.js +199 -4
- package/dist/integrations/merkl.js.map +1 -1
- package/dist/integrations/snapshot.d.ts +28 -24
- package/dist/integrations/snapshot.d.ts.map +1 -1
- package/dist/integrations/snapshot.js +106 -42
- package/dist/integrations/snapshot.js.map +1 -1
- package/dist/retry-provider.d.ts +6 -0
- package/dist/retry-provider.d.ts.map +1 -1
- package/dist/retry-provider.js +103 -11
- package/dist/retry-provider.js.map +1 -1
- package/dist/setup.d.ts +8 -6
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +125 -45
- package/dist/setup.js.map +1 -1
- package/dist/validation.d.ts +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +13 -7
- package/dist/validation.js.map +1 -1
- package/package.json +6 -3
package/dist/chains/arbitrum.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.testnet = void 0;
|
|
4
|
-
const
|
|
4
|
+
const UnsupportedDexAgg_1 = require("../classes/DexAggregators/UnsupportedDexAgg");
|
|
5
5
|
const rpc_1 = require("./rpc");
|
|
6
6
|
exports.testnet = {
|
|
7
7
|
chainId: 421614,
|
|
8
|
-
dexAgg: new
|
|
8
|
+
dexAgg: new UnsupportedDexAgg_1.UnsupportedDexAgg("arb-sepolia"),
|
|
9
9
|
rpc: (0, rpc_1.getChainRpcConfig)("arb-sepolia"),
|
|
10
10
|
provider: (0, rpc_1.createChainPrimaryProvider)("arb-sepolia"),
|
|
11
11
|
fallbackProviders: (0, rpc_1.createChainFallbackProviders)("arb-sepolia"),
|
|
12
12
|
native_symbol: 'ETH',
|
|
13
13
|
native_name: 'Ether',
|
|
14
|
-
wrapped_native: '
|
|
14
|
+
wrapped_native: '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73',
|
|
15
15
|
native_vaults: [],
|
|
16
16
|
vaults: []
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arbitrum.js","sourceRoot":"","sources":["../../src/chains/arbitrum.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"arbitrum.js","sourceRoot":"","sources":["../../src/chains/arbitrum.ts"],"names":[],"mappings":";;;AACA,mFAAgF;AAEhF,+BAAoG;AAEvF,QAAA,OAAO,GAAgB;IAChC,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,IAAI,qCAAiB,CAAC,aAAa,CAAC;IAC5C,GAAG,EAAE,IAAA,uBAAiB,EAAC,aAAa,CAAC;IACrC,QAAQ,EAAE,IAAA,gCAA0B,EAAC,aAAa,CAAC;IACnD,iBAAiB,EAAE,IAAA,kCAA4B,EAAC,aAAa,CAAC;IAC9D,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,OAAO;IACpB,cAAc,EAAE,4CAAuD;IACvE,aAAa,EAAE,EAAE;IACjB,MAAM,EAAE,EAAE;CACb,CAAA"}
|
package/dist/classes/Api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SetupConfigSnapshot } from "../setup";
|
|
2
2
|
import { address } from "../types";
|
|
3
3
|
export type IncentiveResponse = {
|
|
4
4
|
market: address;
|
|
@@ -21,7 +21,7 @@ export type Milestones = {
|
|
|
21
21
|
[key: string]: MilestoneResponse;
|
|
22
22
|
};
|
|
23
23
|
export type Incentives = {
|
|
24
|
-
[key:
|
|
24
|
+
[key: string]: Array<IncentiveResponse>;
|
|
25
25
|
};
|
|
26
26
|
export declare class Api {
|
|
27
27
|
private url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/classes/Api.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/classes/Api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC5B,CAAA;AACD,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAC9D,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAA;CAAE,CAAC;AA2FrE,qBAAa,GAAG;IACZ,OAAO,CAAC,GAAG,CAAS;gBAED,MAAM,CAAC,EAAE,mBAAmB;WAIlC,iBAAiB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;WA4C3F,UAAU,CAAC,MAAM,CAAC,EAAE,mBAAmB;;;;CA0CvD"}
|
package/dist/classes/Api.js
CHANGED
|
@@ -1,16 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Api = void 0;
|
|
4
|
-
const setup_1 = require("../setup");
|
|
5
4
|
const validation_1 = require("../validation");
|
|
5
|
+
function isRewardsResponse(value) {
|
|
6
|
+
if (typeof value !== "object" || value == null) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const maybeRewards = value;
|
|
10
|
+
return Array.isArray(maybeRewards.milestones) && Array.isArray(maybeRewards.incentives);
|
|
11
|
+
}
|
|
12
|
+
function isFiniteNumber(value) {
|
|
13
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
14
|
+
}
|
|
15
|
+
function isNonNegativeFiniteNumber(value) {
|
|
16
|
+
return isFiniteNumber(value) && value >= 0;
|
|
17
|
+
}
|
|
18
|
+
function isPositiveFiniteNumber(value) {
|
|
19
|
+
return isFiniteNumber(value) && value > 0;
|
|
20
|
+
}
|
|
21
|
+
function isNonEmptyString(value) {
|
|
22
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
23
|
+
}
|
|
24
|
+
function isMilestoneResponse(value) {
|
|
25
|
+
if (typeof value !== "object" || value == null) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const row = value;
|
|
29
|
+
return (isNonEmptyString(row.market) &&
|
|
30
|
+
isNonNegativeFiniteNumber(row.tvl) &&
|
|
31
|
+
isNonNegativeFiniteNumber(row.multiplier) &&
|
|
32
|
+
isNonNegativeFiniteNumber(row.fail_multiplier) &&
|
|
33
|
+
isNonEmptyString(row.chain_network) &&
|
|
34
|
+
isNonEmptyString(row.start_date) &&
|
|
35
|
+
isNonEmptyString(row.end_date) &&
|
|
36
|
+
isPositiveFiniteNumber(row.duration_in_days));
|
|
37
|
+
}
|
|
38
|
+
function isIncentiveResponse(value) {
|
|
39
|
+
if (typeof value !== "object" || value == null) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const row = value;
|
|
43
|
+
return (isNonEmptyString(row.market) &&
|
|
44
|
+
isNonEmptyString(row.type) &&
|
|
45
|
+
isNonNegativeFiniteNumber(row.rate) &&
|
|
46
|
+
isNonEmptyString(row.description) &&
|
|
47
|
+
isNonEmptyString(row.image));
|
|
48
|
+
}
|
|
49
|
+
function normalizeMarketKey(market) {
|
|
50
|
+
return market.toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
function isNativeYieldRow(value) {
|
|
53
|
+
if (typeof value !== "object" || value == null) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const row = value;
|
|
57
|
+
return typeof row.symbol === "string" && isNonNegativeFiniteNumber(row.apy);
|
|
58
|
+
}
|
|
59
|
+
function resolveDefaultSetupConfig(context) {
|
|
60
|
+
const config = require("../setup").setup_config;
|
|
61
|
+
if (config == undefined) {
|
|
62
|
+
throw new Error(`Setup config is not configured for ${context}. ` +
|
|
63
|
+
`Pass config explicitly or initialize setupChain() first.`);
|
|
64
|
+
}
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
6
67
|
class Api {
|
|
7
68
|
url;
|
|
8
|
-
constructor(config
|
|
9
|
-
this.url = config.api_url;
|
|
69
|
+
constructor(config) {
|
|
70
|
+
this.url = (config ?? resolveDefaultSetupConfig("Api")).api_url;
|
|
10
71
|
}
|
|
11
|
-
static async fetchNativeYields(config
|
|
12
|
-
const
|
|
13
|
-
|
|
72
|
+
static async fetchNativeYields(config) {
|
|
73
|
+
const resolvedConfig = config ?? resolveDefaultSetupConfig("Api.fetchNativeYields");
|
|
74
|
+
const { api_url } = resolvedConfig;
|
|
75
|
+
let chain = resolvedConfig.chain;
|
|
14
76
|
if (api_url == null) {
|
|
15
77
|
console.error("You must have an API URL setup to fetch native yields.");
|
|
16
78
|
return [];
|
|
@@ -21,13 +83,16 @@ class Api {
|
|
|
21
83
|
if (['monad'].includes(chain)) {
|
|
22
84
|
try {
|
|
23
85
|
const res = await (0, validation_1.fetchWithTimeout)(`${api_url}/v1/${chain}/native_apy`);
|
|
86
|
+
if (!res.ok) {
|
|
87
|
+
throw new Error(`Native yields request failed: ${res.status} ${res.statusText}`);
|
|
88
|
+
}
|
|
24
89
|
const yields = await res.json();
|
|
25
90
|
// Add validation
|
|
26
91
|
if (!yields || !yields.native_apy || !Array.isArray(yields.native_apy)) {
|
|
27
92
|
console.error("Invalid API response structure for native yields");
|
|
28
93
|
return [];
|
|
29
94
|
}
|
|
30
|
-
return yields.native_apy;
|
|
95
|
+
return yields.native_apy.filter(isNativeYieldRow);
|
|
31
96
|
}
|
|
32
97
|
catch (error) {
|
|
33
98
|
console.error("Error fetching native yields:", error);
|
|
@@ -38,13 +103,21 @@ class Api {
|
|
|
38
103
|
return [];
|
|
39
104
|
}
|
|
40
105
|
}
|
|
41
|
-
static async getRewards(config
|
|
42
|
-
const { chain, api_url } = config;
|
|
106
|
+
static async getRewards(config) {
|
|
107
|
+
const { chain, api_url } = config ?? resolveDefaultSetupConfig("Api.getRewards");
|
|
43
108
|
let milestones = {};
|
|
44
109
|
let incentives = {};
|
|
45
110
|
let rewards;
|
|
46
111
|
try {
|
|
47
|
-
|
|
112
|
+
const response = await (0, validation_1.fetchWithTimeout)(`${api_url}/v1/rewards/active/${chain}`);
|
|
113
|
+
if (!response.ok) {
|
|
114
|
+
throw new Error(`Rewards request failed: ${response.status} ${response.statusText}`);
|
|
115
|
+
}
|
|
116
|
+
const payload = await response.json();
|
|
117
|
+
if (!isRewardsResponse(payload)) {
|
|
118
|
+
throw new Error("Invalid rewards response structure");
|
|
119
|
+
}
|
|
120
|
+
rewards = payload;
|
|
48
121
|
}
|
|
49
122
|
catch (e) {
|
|
50
123
|
console.error("Failed to fetch rewards data from API:", e);
|
|
@@ -53,11 +126,11 @@ class Api {
|
|
|
53
126
|
incentives: []
|
|
54
127
|
};
|
|
55
128
|
}
|
|
56
|
-
for (const milestone of rewards.milestones) {
|
|
57
|
-
milestones[milestone.market] = milestone;
|
|
129
|
+
for (const milestone of rewards.milestones.filter(isMilestoneResponse)) {
|
|
130
|
+
milestones[normalizeMarketKey(milestone.market)] = milestone;
|
|
58
131
|
}
|
|
59
|
-
for (const incentive of rewards.incentives) {
|
|
60
|
-
const market = incentive.market;
|
|
132
|
+
for (const incentive of rewards.incentives.filter(isIncentiveResponse)) {
|
|
133
|
+
const market = normalizeMarketKey(incentive.market);
|
|
61
134
|
if (!(market in incentives)) {
|
|
62
135
|
incentives[market] = [];
|
|
63
136
|
}
|
package/dist/classes/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/classes/Api.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/classes/Api.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface IBorrowableCToken extends ICToken {
|
|
|
10
10
|
repay(amount: bigint): Promise<TransactionResponse>;
|
|
11
11
|
interestFee(): Promise<bigint>;
|
|
12
12
|
marketOutstandingDebt(): Promise<bigint>;
|
|
13
|
+
assetsHeld(): Promise<bigint>;
|
|
13
14
|
debtBalance(account: address): Promise<bigint>;
|
|
14
15
|
IRM(): Promise<address>;
|
|
15
16
|
}
|
|
@@ -19,7 +20,10 @@ export interface IDynamicIRM {
|
|
|
19
20
|
borrowRate(assetsHeld: bigint, debt: bigint): Promise<bigint>;
|
|
20
21
|
predictedBorrowRate(assetsHeld: bigint, debt: bigint): Promise<bigint>;
|
|
21
22
|
supplyRate(assetsHeld: bigint, debt: bigint, interestFee: bigint): Promise<bigint>;
|
|
22
|
-
adjustedBorrowRate(assetsHeld: bigint, debt: bigint): Promise<
|
|
23
|
+
adjustedBorrowRate(assetsHeld: bigint, debt: bigint): Promise<[
|
|
24
|
+
ratePerSecond: bigint,
|
|
25
|
+
adjustmentRate: bigint
|
|
26
|
+
]>;
|
|
23
27
|
utilizationRate(assetsHeld: bigint, debt: bigint): Promise<bigint>;
|
|
24
28
|
}
|
|
25
29
|
export declare class BorrowableCToken extends CToken {
|
|
@@ -42,6 +46,8 @@ export declare class BorrowableCToken extends CToken {
|
|
|
42
46
|
excess: bigint;
|
|
43
47
|
deficit: bigint;
|
|
44
48
|
isPossible: boolean;
|
|
49
|
+
loanSizeError: boolean;
|
|
50
|
+
oracleError: boolean;
|
|
45
51
|
priceStale: boolean;
|
|
46
52
|
}>;
|
|
47
53
|
fetchDebt(inUSD: true): Promise<USD>;
|
|
@@ -60,7 +66,9 @@ export declare class BorrowableCToken extends CToken {
|
|
|
60
66
|
fetchUtilizationRate(): Promise<bigint>;
|
|
61
67
|
fetchSupplyRate(): Promise<bigint>;
|
|
62
68
|
fetchLiquidity(): Promise<bigint>;
|
|
69
|
+
private checkRepayApproval;
|
|
63
70
|
repay(amount: TokenInput): Promise<TransactionResponse>;
|
|
71
|
+
private getBufferedRepayTimestamp;
|
|
64
72
|
fetchInterestFee(): Promise<bigint>;
|
|
65
73
|
marketOutstandingDebt(): Promise<bigint>;
|
|
66
74
|
debtBalance(account: address): Promise<bigint>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BorrowableCToken.d.ts","sourceRoot":"","sources":["../../src/classes/BorrowableCToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAwD,MAAM,YAAY,CAAC;AAG9F,OAAO,OAAO,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"BorrowableCToken.d.ts","sourceRoot":"","sources":["../../src/classes/BorrowableCToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,12 @@ const BorrowableCToken_json_1 = __importDefault(require("../abis/BorrowableCToke
|
|
|
10
10
|
const IDynamicIRM_json_1 = __importDefault(require("../abis/IDynamicIRM.json"));
|
|
11
11
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
12
12
|
const FormatConverter_1 = __importDefault(require("./FormatConverter"));
|
|
13
|
+
const REPAY_DEBT_BUFFER_TIME = 100n;
|
|
13
14
|
class BorrowableCToken extends CToken_1.CToken {
|
|
14
15
|
contract;
|
|
15
16
|
constructor(provider, address, cache, market) {
|
|
16
17
|
super(provider, address, cache, market);
|
|
17
|
-
this.contract = (0, helpers_1.contractSetup)(provider, address, BorrowableCToken_json_1.default);
|
|
18
|
+
this.contract = (0, helpers_1.contractSetup)(this.provider, address, BorrowableCToken_json_1.default);
|
|
18
19
|
}
|
|
19
20
|
getWriteContract() {
|
|
20
21
|
return (0, helpers_1.contractSetup)(this.requireSigner(), this.address, BorrowableCToken_json_1.default);
|
|
@@ -36,17 +37,43 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
36
37
|
}
|
|
37
38
|
async getMaxBorrowable(inUSD = false) {
|
|
38
39
|
const credit_usd = this.market.userRemainingCredit;
|
|
39
|
-
|
|
40
|
+
const safeCreditUsd = credit_usd.isFinite() && credit_usd.greaterThan(0)
|
|
41
|
+
? credit_usd
|
|
42
|
+
: new decimal_js_1.default(0);
|
|
43
|
+
const remainingDebtCap = this.cache.debtCap > this.cache.debt
|
|
44
|
+
? this.cache.debtCap - this.cache.debt
|
|
45
|
+
: 0n;
|
|
46
|
+
const availableLiquidity = this.cache.liquidity > 0n ? this.cache.liquidity : 0n;
|
|
47
|
+
const tokenCapacity = remainingDebtCap < availableLiquidity
|
|
48
|
+
? remainingDebtCap
|
|
49
|
+
: availableLiquidity;
|
|
50
|
+
const tokenCapacityUsd = this.convertTokensToUsd(tokenCapacity);
|
|
51
|
+
const cappedCreditUsd = decimal_js_1.default.min(safeCreditUsd, tokenCapacityUsd);
|
|
52
|
+
if (inUSD) {
|
|
53
|
+
return cappedCreditUsd.isFinite() && cappedCreditUsd.greaterThan(0)
|
|
54
|
+
? cappedCreditUsd
|
|
55
|
+
: new decimal_js_1.default(0);
|
|
56
|
+
}
|
|
57
|
+
if (cappedCreditUsd.eq(0)) {
|
|
58
|
+
return new decimal_js_1.default(0);
|
|
59
|
+
}
|
|
60
|
+
const maxBorrowable = this.convertUsdToTokens(cappedCreditUsd, true);
|
|
61
|
+
return maxBorrowable.isFinite() && maxBorrowable.greaterThan(0)
|
|
62
|
+
? maxBorrowable
|
|
63
|
+
: new decimal_js_1.default(0);
|
|
40
64
|
}
|
|
41
65
|
;
|
|
42
66
|
async depositAsCollateral(amount, zap = 'none', receiver = null) {
|
|
43
|
-
|
|
67
|
+
const signer = this.requireSigner();
|
|
68
|
+
const collateralReceiver = receiver ?? signer.address;
|
|
69
|
+
if (collateralReceiver.toLowerCase() === signer.address.toLowerCase() &&
|
|
70
|
+
this.readFreshUserCache("userDebt", "depositing as collateral") > 0n) {
|
|
44
71
|
throw new Error("Cannot deposit as collateral when there is outstanding debt");
|
|
45
72
|
}
|
|
46
73
|
return super.depositAsCollateral(amount, zap, receiver);
|
|
47
74
|
}
|
|
48
75
|
async postCollateral(amount) {
|
|
49
|
-
if (this.
|
|
76
|
+
if (this.readFreshUserCache("userDebt", "posting collateral") > 0n) {
|
|
50
77
|
throw new Error("Cannot post collateral when there is outstanding debt");
|
|
51
78
|
}
|
|
52
79
|
return super.postCollateral(amount);
|
|
@@ -62,6 +89,9 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
62
89
|
async borrow(amount, receiver = null) {
|
|
63
90
|
const signer = this.requireSigner();
|
|
64
91
|
receiver ??= signer.address;
|
|
92
|
+
if (this.readFreshUserCache("userCollateral", "borrowing") > 0n) {
|
|
93
|
+
throw new Error("Cannot borrow from a token that is currently posted as collateral.");
|
|
94
|
+
}
|
|
65
95
|
const assets = FormatConverter_1.default.decimalToBigInt(amount, this.asset.decimals);
|
|
66
96
|
const calldata = this.getCallData("borrow", [assets, receiver]);
|
|
67
97
|
return this.oracleRoute(calldata);
|
|
@@ -73,7 +103,9 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
73
103
|
async fetchUtilizationRateChange(assets, direction, inPercentage = true) {
|
|
74
104
|
const assets_as_bn = FormatConverter_1.default.decimalToBigInt(assets, this.asset.decimals);
|
|
75
105
|
const irm = await this.dynamicIRM();
|
|
76
|
-
const assets_held = direction == 'add'
|
|
106
|
+
const assets_held = direction == 'add'
|
|
107
|
+
? this.cache.liquidity + assets_as_bn
|
|
108
|
+
: assets_as_bn >= this.cache.liquidity ? 0n : this.cache.liquidity - assets_as_bn;
|
|
77
109
|
const newRate = await irm.utilizationRate(assets_held, this.cache.debt);
|
|
78
110
|
return inPercentage ? (0, decimal_js_1.default)(newRate).div(helpers_1.WAD) : newRate;
|
|
79
111
|
}
|
|
@@ -83,7 +115,7 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
83
115
|
}
|
|
84
116
|
async fetchBorrowRate() {
|
|
85
117
|
const irm = await this.dynamicIRM();
|
|
86
|
-
const assetsHeld = this.
|
|
118
|
+
const assetsHeld = await this.contract.assetsHeld();
|
|
87
119
|
const debt = await this.contract.marketOutstandingDebt();
|
|
88
120
|
const borrowRate = (await irm.borrowRate(assetsHeld, debt));
|
|
89
121
|
this.cache.borrowRate = borrowRate;
|
|
@@ -91,7 +123,7 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
91
123
|
}
|
|
92
124
|
async fetchPredictedBorrowRate() {
|
|
93
125
|
const irm = await this.dynamicIRM();
|
|
94
|
-
const assetsHeld = this.
|
|
126
|
+
const assetsHeld = await this.contract.assetsHeld();
|
|
95
127
|
const debt = await this.contract.marketOutstandingDebt();
|
|
96
128
|
const predictedBorrowRate = (await irm.predictedBorrowRate(assetsHeld, debt));
|
|
97
129
|
this.cache.predictedBorrowRate = predictedBorrowRate;
|
|
@@ -99,7 +131,7 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
99
131
|
}
|
|
100
132
|
async fetchUtilizationRate() {
|
|
101
133
|
const irm = await this.dynamicIRM();
|
|
102
|
-
const assetsHeld = this.
|
|
134
|
+
const assetsHeld = await this.contract.assetsHeld();
|
|
103
135
|
const debt = await this.contract.marketOutstandingDebt();
|
|
104
136
|
const utilizationRate = (await irm.utilizationRate(assetsHeld, debt));
|
|
105
137
|
this.cache.utilizationRate = utilizationRate;
|
|
@@ -107,7 +139,7 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
107
139
|
}
|
|
108
140
|
async fetchSupplyRate() {
|
|
109
141
|
const irm = await this.dynamicIRM();
|
|
110
|
-
const assetsHeld = this.
|
|
142
|
+
const assetsHeld = await this.contract.assetsHeld();
|
|
111
143
|
const debt = await this.contract.marketOutstandingDebt();
|
|
112
144
|
const fee = await this.fetchInterestFee();
|
|
113
145
|
const supplyRate = (await irm.supplyRate(assetsHeld, debt, fee));
|
|
@@ -115,17 +147,40 @@ class BorrowableCToken extends CToken_1.CToken {
|
|
|
115
147
|
return supplyRate;
|
|
116
148
|
}
|
|
117
149
|
async fetchLiquidity() {
|
|
118
|
-
const
|
|
119
|
-
const debt = await this.contract.marketOutstandingDebt();
|
|
120
|
-
const liquidity = assetsHeld - debt;
|
|
150
|
+
const liquidity = await this.contract.assetsHeld();
|
|
121
151
|
this.cache.liquidity = liquidity;
|
|
122
152
|
return liquidity;
|
|
123
153
|
}
|
|
154
|
+
async checkRepayApproval(assets) {
|
|
155
|
+
const asset = this.getAsset(true);
|
|
156
|
+
const owner = this.getAccountOrThrow();
|
|
157
|
+
const allowance = await asset.allowance(owner, this.address);
|
|
158
|
+
if (allowance >= assets) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
let tokenLabel = asset.symbol ?? asset.address;
|
|
162
|
+
if (asset.symbol == undefined) {
|
|
163
|
+
try {
|
|
164
|
+
tokenLabel = await asset.fetchSymbol();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
tokenLabel = asset.address;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Please approve the ${tokenLabel} token for ${this.symbol} repay`);
|
|
171
|
+
}
|
|
124
172
|
async repay(amount) {
|
|
125
173
|
const assets = FormatConverter_1.default.decimalToBigInt(amount, this.asset.decimals);
|
|
174
|
+
const repayAssets = assets === 0n
|
|
175
|
+
? await this.fetchDebtBalanceAtTimestamp(this.getBufferedRepayTimestamp(), false)
|
|
176
|
+
: assets;
|
|
177
|
+
await this.checkRepayApproval(repayAssets);
|
|
126
178
|
const calldata = this.getCallData("repay", [assets]);
|
|
127
179
|
return this.oracleRoute(calldata);
|
|
128
180
|
}
|
|
181
|
+
getBufferedRepayTimestamp() {
|
|
182
|
+
return BigInt(Math.floor(Date.now() / 1000)) + REPAY_DEBT_BUFFER_TIME;
|
|
183
|
+
}
|
|
129
184
|
async fetchInterestFee() {
|
|
130
185
|
return this.contract.interestFee();
|
|
131
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BorrowableCToken.js","sourceRoot":"","sources":["../../src/classes/BorrowableCToken.ts"],"names":[],"mappings":";;;;;;AAEA,qCAA+D;AAG/D,wCAA8F;AAC9F,0FAAkE;AAClE,gFAA+C;AAC/C,4DAAiC;AACjC,wEAAgD;
|
|
1
|
+
{"version":3,"file":"BorrowableCToken.js","sourceRoot":"","sources":["../../src/classes/BorrowableCToken.ts"],"names":[],"mappings":"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"}
|