defi-dash-sdk 0.1.3 → 0.1.4
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/LICENSE +7 -0
- package/README.md +199 -97
- package/dist/__tests__/deleverageEstimate.unit.test.d.ts +10 -0
- package/dist/__tests__/deleverageEstimate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/deleverageEstimate.unit.test.js +116 -0
- package/dist/__tests__/deleverageEstimate.unit.test.js.map +1 -0
- package/dist/__tests__/findBestLeverageRoute.test.d.ts +12 -0
- package/dist/__tests__/findBestLeverageRoute.test.d.ts.map +1 -0
- package/dist/__tests__/findBestLeverageRoute.test.js +177 -0
- package/dist/__tests__/findBestLeverageRoute.test.js.map +1 -0
- package/dist/__tests__/getAssetApy.test.d.ts +2 -0
- package/dist/__tests__/getAssetApy.test.d.ts.map +1 -0
- package/dist/__tests__/getAssetApy.test.js +133 -0
- package/dist/__tests__/getAssetApy.test.js.map +1 -0
- package/dist/__tests__/getAssetRiskParams.test.d.ts +11 -0
- package/dist/__tests__/getAssetRiskParams.test.d.ts.map +1 -0
- package/dist/__tests__/getAssetRiskParams.test.js +183 -0
- package/dist/__tests__/getAssetRiskParams.test.js.map +1 -0
- package/dist/__tests__/internal.getAssetApy.test.d.ts +2 -0
- package/dist/__tests__/internal.getAssetApy.test.d.ts.map +1 -0
- package/dist/__tests__/internal.getAssetApy.test.js +140 -0
- package/dist/__tests__/internal.getAssetApy.test.js.map +1 -0
- package/dist/__tests__/internal.getAssetRiskParams.test.d.ts +22 -0
- package/dist/__tests__/internal.getAssetRiskParams.test.d.ts.map +1 -0
- package/dist/__tests__/internal.getAssetRiskParams.test.js +194 -0
- package/dist/__tests__/internal.getAssetRiskParams.test.js.map +1 -0
- package/dist/__tests__/internal.getPosition.test.d.ts +22 -0
- package/dist/__tests__/internal.getPosition.test.d.ts.map +1 -0
- package/dist/__tests__/internal.getPosition.test.js +153 -0
- package/dist/__tests__/internal.getPosition.test.js.map +1 -0
- package/dist/__tests__/leveragePreview.unit.test.d.ts +10 -0
- package/dist/__tests__/leveragePreview.unit.test.d.ts.map +1 -0
- package/dist/__tests__/leveragePreview.unit.test.js +168 -0
- package/dist/__tests__/leveragePreview.unit.test.js.map +1 -0
- package/dist/__tests__/leverageRoute.unit.test.d.ts +10 -0
- package/dist/__tests__/leverageRoute.unit.test.d.ts.map +1 -0
- package/dist/__tests__/leverageRoute.unit.test.js +159 -0
- package/dist/__tests__/leverageRoute.unit.test.js.map +1 -0
- package/dist/__tests__/previewLeverage.test.d.ts +13 -0
- package/dist/__tests__/previewLeverage.test.d.ts.map +1 -0
- package/dist/__tests__/previewLeverage.test.js +217 -0
- package/dist/__tests__/previewLeverage.test.js.map +1 -0
- package/dist/__tests__/sdk.bestRoute.test.d.ts +22 -0
- package/dist/__tests__/sdk.bestRoute.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.bestRoute.test.js +186 -0
- package/dist/__tests__/sdk.bestRoute.test.js.map +1 -0
- package/dist/__tests__/sdk.bestRoute.unit.test.d.ts +16 -0
- package/dist/__tests__/sdk.bestRoute.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.bestRoute.unit.test.js +165 -0
- package/dist/__tests__/sdk.bestRoute.unit.test.js.map +1 -0
- package/dist/__tests__/sdk.deleverage.test.d.ts +21 -0
- package/dist/__tests__/sdk.deleverage.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.deleverage.test.js +130 -0
- package/dist/__tests__/sdk.deleverage.test.js.map +1 -0
- package/dist/__tests__/sdk.deleverage.unit.test.d.ts +21 -0
- package/dist/__tests__/sdk.deleverage.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.deleverage.unit.test.js +141 -0
- package/dist/__tests__/sdk.deleverage.unit.test.js.map +1 -0
- package/dist/__tests__/sdk.leverage.test.d.ts +19 -0
- package/dist/__tests__/sdk.leverage.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.leverage.test.js +188 -0
- package/dist/__tests__/sdk.leverage.test.js.map +1 -0
- package/dist/__tests__/sdk.portfolio.test.d.ts +17 -0
- package/dist/__tests__/sdk.portfolio.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.portfolio.test.js +162 -0
- package/dist/__tests__/sdk.portfolio.test.js.map +1 -0
- package/dist/__tests__/sdk.position.test.d.ts +16 -0
- package/dist/__tests__/sdk.position.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.position.test.js +193 -0
- package/dist/__tests__/sdk.position.test.js.map +1 -0
- package/dist/__tests__/sdk.preview.test.d.ts +23 -0
- package/dist/__tests__/sdk.preview.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.preview.test.js +226 -0
- package/dist/__tests__/sdk.preview.test.js.map +1 -0
- package/dist/__tests__/sdk.preview.unit.test.d.ts +18 -0
- package/dist/__tests__/sdk.preview.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.preview.unit.test.js +175 -0
- package/dist/__tests__/sdk.preview.unit.test.js.map +1 -0
- package/dist/__tests__/utils.normalizeCoinType.test.d.ts +7 -0
- package/dist/__tests__/utils.normalizeCoinType.test.d.ts.map +1 -0
- package/dist/__tests__/utils.normalizeCoinType.test.js +42 -0
- package/dist/__tests__/utils.normalizeCoinType.test.js.map +1 -0
- package/dist/index.d.ts +19 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -40
- package/dist/index.js.map +1 -1
- package/dist/protocols/base-adapter.d.ts +42 -75
- package/dist/protocols/base-adapter.d.ts.map +1 -1
- package/dist/protocols/base-adapter.js +34 -77
- package/dist/protocols/base-adapter.js.map +1 -1
- package/dist/protocols/navi/adapter.d.ts +22 -2
- package/dist/protocols/navi/adapter.d.ts.map +1 -1
- package/dist/protocols/navi/adapter.js +145 -11
- package/dist/protocols/navi/adapter.js.map +1 -1
- package/dist/protocols/scallop/adapter.d.ts +26 -6
- package/dist/protocols/scallop/adapter.d.ts.map +1 -1
- package/dist/protocols/scallop/adapter.js +206 -43
- package/dist/protocols/scallop/adapter.js.map +1 -1
- package/dist/protocols/scallop/flash-loan.d.ts +18 -3
- package/dist/protocols/scallop/flash-loan.d.ts.map +1 -1
- package/dist/protocols/scallop/flash-loan.js +79 -20
- package/dist/protocols/scallop/flash-loan.js.map +1 -1
- package/dist/protocols/scallop/types.d.ts.map +1 -1
- package/dist/protocols/scallop/types.js +4 -1
- package/dist/protocols/scallop/types.js.map +1 -1
- package/dist/protocols/suilend/adapter.d.ts +19 -1
- package/dist/protocols/suilend/adapter.d.ts.map +1 -1
- package/dist/protocols/suilend/adapter.js +196 -51
- package/dist/protocols/suilend/adapter.js.map +1 -1
- package/dist/sdk.d.ts +107 -148
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +171 -523
- package/dist/sdk.js.map +1 -1
- package/dist/strategies/common.d.ts +42 -0
- package/dist/strategies/common.d.ts.map +1 -0
- package/dist/strategies/common.js +81 -0
- package/dist/strategies/common.js.map +1 -0
- package/dist/strategies/deleverage.d.ts.map +1 -1
- package/dist/strategies/deleverage.js +44 -62
- package/dist/strategies/deleverage.js.map +1 -1
- package/dist/strategies/index.d.ts +9 -1
- package/dist/strategies/index.d.ts.map +1 -1
- package/dist/strategies/index.js +11 -2
- package/dist/strategies/index.js.map +1 -1
- package/dist/strategies/leverage-preview.d.ts +27 -0
- package/dist/strategies/leverage-preview.d.ts.map +1 -0
- package/dist/strategies/leverage-preview.js +120 -0
- package/dist/strategies/leverage-preview.js.map +1 -0
- package/dist/strategies/leverage-route.d.ts +29 -0
- package/dist/strategies/leverage-route.d.ts.map +1 -0
- package/dist/strategies/leverage-route.js +112 -0
- package/dist/strategies/leverage-route.js.map +1 -0
- package/dist/strategies/leverage.d.ts +4 -44
- package/dist/strategies/leverage.d.ts.map +1 -1
- package/dist/strategies/leverage.js +43 -112
- package/dist/strategies/leverage.js.map +1 -1
- package/dist/strategies/scallop-leverage.d.ts +34 -0
- package/dist/strategies/scallop-leverage.d.ts.map +1 -0
- package/dist/strategies/scallop-leverage.js +143 -0
- package/dist/strategies/scallop-leverage.js.map +1 -0
- package/dist/types/config.d.ts +0 -7
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/constants.js +9 -1
- package/dist/types/constants.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/position.d.ts +7 -3
- package/dist/types/position.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +101 -0
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +82 -38
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/calculations.d.ts +10 -137
- package/dist/utils/calculations.d.ts.map +1 -1
- package/dist/utils/calculations.js +11 -162
- package/dist/utils/calculations.js.map +1 -1
- package/dist/utils/coin.d.ts +16 -7
- package/dist/utils/coin.d.ts.map +1 -1
- package/dist/utils/coin.js +32 -25
- package/dist/utils/coin.js.map +1 -1
- package/dist/utils/errors.d.ts +0 -18
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +2 -40
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/execution.d.ts +38 -0
- package/dist/utils/execution.d.ts.map +1 -0
- package/dist/utils/execution.js +110 -0
- package/dist/utils/execution.js.map +1 -0
- package/dist/utils/gas.d.ts +0 -37
- package/dist/utils/gas.d.ts.map +1 -1
- package/dist/utils/gas.js +2 -60
- package/dist/utils/gas.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +15 -45
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SDK Method: sdk.previewLeverage() [Unit]
|
|
4
|
+
*
|
|
5
|
+
* Tests previewLeverage() with mocked dependencies. No mainnet RPC.
|
|
6
|
+
*
|
|
7
|
+
* Mocked internal dependencies:
|
|
8
|
+
* - protocol.getAssetRiskParams() → returns { ltv: 0.75, maxMultiplier: 4.0 }
|
|
9
|
+
* - protocol.getAssetApy() → returns mock supply/borrow APY
|
|
10
|
+
* - ScallopFlashLoanClient → returns 0% fee
|
|
11
|
+
* - 7k Protocol swap quote → returns mock swap output
|
|
12
|
+
* - getTokenPrice() → returns $3.50
|
|
13
|
+
*
|
|
14
|
+
* Integration test counterpart: sdk.preview.test.ts
|
|
15
|
+
*
|
|
16
|
+
* Run: npx vitest run src/__tests__/sdk.preview.unit.test.ts
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
const vitest_1 = require("vitest");
|
|
20
|
+
const leverage_preview_1 = require("../strategies/leverage-preview");
|
|
21
|
+
const types_1 = require("../types");
|
|
22
|
+
// ── Mock helpers ─────────────────────────────────────────────────────────────
|
|
23
|
+
function createMockDeps(overrides = {}) {
|
|
24
|
+
const mockProtocol = {
|
|
25
|
+
name: "mock",
|
|
26
|
+
consumesRepaymentCoin: false,
|
|
27
|
+
getAssetRiskParams: vitest_1.vi.fn().mockResolvedValue({
|
|
28
|
+
ltv: 0.75,
|
|
29
|
+
liquidationThreshold: 0.80,
|
|
30
|
+
liquidationBonus: 0.05,
|
|
31
|
+
maxMultiplier: 4.0,
|
|
32
|
+
}),
|
|
33
|
+
getAssetApy: vitest_1.vi.fn().mockImplementation(async (coinType) => {
|
|
34
|
+
if (coinType === types_1.COIN_TYPES.USDC) {
|
|
35
|
+
return {
|
|
36
|
+
supplyApy: 0.03,
|
|
37
|
+
rewardApy: 0,
|
|
38
|
+
totalSupplyApy: 0.03,
|
|
39
|
+
borrowApy: 0.05,
|
|
40
|
+
borrowRewardApy: 0.01,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
supplyApy: 0.02,
|
|
45
|
+
rewardApy: 0.01,
|
|
46
|
+
totalSupplyApy: 0.03,
|
|
47
|
+
borrowApy: 0,
|
|
48
|
+
borrowRewardApy: 0,
|
|
49
|
+
};
|
|
50
|
+
}),
|
|
51
|
+
initialize: vitest_1.vi.fn(),
|
|
52
|
+
getPosition: vitest_1.vi.fn(),
|
|
53
|
+
deposit: vitest_1.vi.fn(),
|
|
54
|
+
withdraw: vitest_1.vi.fn(),
|
|
55
|
+
borrow: vitest_1.vi.fn(),
|
|
56
|
+
repay: vitest_1.vi.fn(),
|
|
57
|
+
refreshOracles: vitest_1.vi.fn(),
|
|
58
|
+
getAccountPortfolio: vitest_1.vi.fn(),
|
|
59
|
+
};
|
|
60
|
+
const mockSwapClient = {
|
|
61
|
+
quote: vitest_1.vi.fn().mockResolvedValue([
|
|
62
|
+
{ amountOut: "4500000000", amountIn: "100000000", route: [] }, // 4.5 SUI for $100
|
|
63
|
+
]),
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
protocol: mockProtocol,
|
|
67
|
+
swapClient: mockSwapClient,
|
|
68
|
+
suiClient: {},
|
|
69
|
+
...overrides,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Mock external dependencies
|
|
73
|
+
vitest_1.vi.mock("@7kprotocol/sdk-ts", () => ({
|
|
74
|
+
MetaAg: vitest_1.vi.fn(),
|
|
75
|
+
getTokenPrice: vitest_1.vi.fn().mockResolvedValue(3.5), // SUI at $3.50
|
|
76
|
+
}));
|
|
77
|
+
vitest_1.vi.mock("../protocols/scallop/flash-loan", () => ({
|
|
78
|
+
ScallopFlashLoanClient: {
|
|
79
|
+
fetchFlashLoanFeeRate: vitest_1.vi.fn().mockResolvedValue(0), // 0% flash loan fee
|
|
80
|
+
calculateFee: vitest_1.vi.fn().mockReturnValue(0n),
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
vitest_1.vi.mock("../utils/coin", async (importOriginal) => {
|
|
84
|
+
const actual = await importOriginal();
|
|
85
|
+
return {
|
|
86
|
+
...actual,
|
|
87
|
+
getDecimals: vitest_1.vi.fn().mockReturnValue(9),
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
// ── Tests ────────────────────────────────────────────────────────────────────
|
|
91
|
+
(0, vitest_1.describe)("previewLeverage (unit)", () => {
|
|
92
|
+
(0, vitest_1.it)("calculates correct position metrics for 2x leverage", async () => {
|
|
93
|
+
const deps = createMockDeps();
|
|
94
|
+
const result = await (0, leverage_preview_1.previewLeverage)({
|
|
95
|
+
coinType: types_1.COIN_TYPES.SUI,
|
|
96
|
+
depositValueUsd: 100,
|
|
97
|
+
multiplier: 2.0,
|
|
98
|
+
}, deps);
|
|
99
|
+
// Basic sanity
|
|
100
|
+
(0, vitest_1.expect)(result.initialEquityUsd).toBeGreaterThan(0);
|
|
101
|
+
(0, vitest_1.expect)(result.totalPositionUsd).toBeCloseTo(result.initialEquityUsd * 2.0, 0);
|
|
102
|
+
(0, vitest_1.expect)(result.debtUsd).toBeGreaterThan(0);
|
|
103
|
+
(0, vitest_1.expect)(result.flashLoanUsdc).toBeGreaterThan(0n);
|
|
104
|
+
// Risk params from mock
|
|
105
|
+
(0, vitest_1.expect)(result.assetLtv).toBe(0.75);
|
|
106
|
+
(0, vitest_1.expect)(result.maxMultiplier).toBe(4.0);
|
|
107
|
+
(0, vitest_1.expect)(result.liquidationThreshold).toBe(0.80);
|
|
108
|
+
// LTV should be reasonable
|
|
109
|
+
(0, vitest_1.expect)(result.ltvPercent).toBeGreaterThan(0);
|
|
110
|
+
(0, vitest_1.expect)(result.ltvPercent).toBeLessThan(100);
|
|
111
|
+
// Liquidation price should be positive and below current price
|
|
112
|
+
(0, vitest_1.expect)(result.liquidationPrice).toBeGreaterThan(0);
|
|
113
|
+
(0, vitest_1.expect)(result.priceDropBuffer).toBeGreaterThan(0);
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.it)("flash loan amount scales with multiplier", async () => {
|
|
116
|
+
const deps = createMockDeps();
|
|
117
|
+
const preview2x = await (0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 2.0 }, deps);
|
|
118
|
+
const preview3x = await (0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 3.0 }, deps);
|
|
119
|
+
// 3x needs 2x the flash loan of 2x (since flashLoanUsd = equity * (mult - 1))
|
|
120
|
+
const flashLoan2x = Number(preview2x.flashLoanUsdc);
|
|
121
|
+
const flashLoan3x = Number(preview3x.flashLoanUsdc);
|
|
122
|
+
(0, vitest_1.expect)(flashLoan3x / flashLoan2x).toBeCloseTo(2.0, 1);
|
|
123
|
+
});
|
|
124
|
+
(0, vitest_1.it)("APY breakdown is computed correctly", async () => {
|
|
125
|
+
const deps = createMockDeps();
|
|
126
|
+
const result = await (0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 2.0 }, deps);
|
|
127
|
+
// Supply APY from mock
|
|
128
|
+
(0, vitest_1.expect)(result.supplyApyBreakdown.base).toBe(0.02);
|
|
129
|
+
(0, vitest_1.expect)(result.supplyApyBreakdown.reward).toBe(0.01);
|
|
130
|
+
(0, vitest_1.expect)(result.supplyApyBreakdown.total).toBe(0.03);
|
|
131
|
+
// Borrow APY from mock
|
|
132
|
+
(0, vitest_1.expect)(result.borrowApyBreakdown.net).toBe(0.05);
|
|
133
|
+
(0, vitest_1.expect)(result.borrowApyBreakdown.rebate).toBe(0.01);
|
|
134
|
+
// Net APY = (position * supplyApy - debt * borrowApy) / equity
|
|
135
|
+
const expectedNetApy = (result.totalPositionUsd * result.supplyApyBreakdown.total -
|
|
136
|
+
result.debtUsd * result.borrowApyBreakdown.net) /
|
|
137
|
+
result.initialEquityUsd;
|
|
138
|
+
(0, vitest_1.expect)(result.netApy).toBeCloseTo(expectedNetApy, 5);
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.it)("throws on multiplier exceeding max", async () => {
|
|
141
|
+
const deps = createMockDeps();
|
|
142
|
+
await (0, vitest_1.expect)((0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 5.0 }, deps)).rejects.toThrow("exceeds protocol max");
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)("throws if neither depositAmount nor depositValueUsd provided", async () => {
|
|
145
|
+
const deps = createMockDeps();
|
|
146
|
+
await (0, vitest_1.expect)((0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, multiplier: 2.0 }, deps)).rejects.toThrow("Either depositAmount or depositValueUsd");
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.it)("throws if both depositAmount and depositValueUsd provided", async () => {
|
|
149
|
+
const deps = createMockDeps();
|
|
150
|
+
await (0, vitest_1.expect)((0, leverage_preview_1.previewLeverage)({
|
|
151
|
+
coinType: types_1.COIN_TYPES.SUI,
|
|
152
|
+
depositAmount: "10",
|
|
153
|
+
depositValueUsd: 100,
|
|
154
|
+
multiplier: 2.0,
|
|
155
|
+
}, deps)).rejects.toThrow("Cannot provide both");
|
|
156
|
+
});
|
|
157
|
+
(0, vitest_1.it)("throws on swap quote failure", async () => {
|
|
158
|
+
const deps = createMockDeps({
|
|
159
|
+
swapClient: {
|
|
160
|
+
quote: vitest_1.vi.fn().mockRejectedValue(new Error("Quote failed")),
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
await (0, vitest_1.expect)((0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 2.0 }, deps)).rejects.toThrow("Quote failed");
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.it)("calculates swap slippage from quote", async () => {
|
|
166
|
+
// Mock a swap that returns slightly less than theoretical (0.5% slippage)
|
|
167
|
+
const deps = createMockDeps();
|
|
168
|
+
const result = await (0, leverage_preview_1.previewLeverage)({ coinType: types_1.COIN_TYPES.SUI, depositValueUsd: 100, multiplier: 2.0 }, deps);
|
|
169
|
+
// With the mock returning 4.5 SUI, slippage should be calculable
|
|
170
|
+
(0, vitest_1.expect)(result.swapSlippagePct).toBeGreaterThanOrEqual(0);
|
|
171
|
+
// effectiveMultiplier should differ from requested due to slippage
|
|
172
|
+
(0, vitest_1.expect)(result.effectiveMultiplier).toBeGreaterThan(1);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=sdk.preview.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.preview.unit.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.preview.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.normalizeCoinType.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.normalizeCoinType.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unit tests for normalizeCoinType utility function
|
|
4
|
+
*
|
|
5
|
+
* Migrated from scripts/tests/test_normalize_coin_type.ts
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const vitest_1 = require("vitest");
|
|
9
|
+
const coin_1 = require("../utils/coin");
|
|
10
|
+
const errors_1 = require("../utils/errors");
|
|
11
|
+
const constants_1 = require("../types/constants");
|
|
12
|
+
(0, vitest_1.describe)("normalizeCoinType", () => {
|
|
13
|
+
(0, vitest_1.it)("pads short SUI address to 64 chars", () => {
|
|
14
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)("0x2::sui::SUI")).toBe("0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI");
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)("keeps full SUI address unchanged", () => {
|
|
17
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(constants_1.COIN_TYPES.SUI)).toBe(constants_1.COIN_TYPES.SUI);
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)("keeps full LBTC address unchanged", () => {
|
|
20
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(constants_1.COIN_TYPES.LBTC)).toBe(constants_1.COIN_TYPES.LBTC);
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)("keeps already-normalized LBTC unchanged", () => {
|
|
23
|
+
const normalized = "0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040::lbtc::LBTC";
|
|
24
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(normalized)).toBe(normalized);
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)("keeps full XBTC address unchanged", () => {
|
|
27
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(constants_1.COIN_TYPES.XBTC)).toBe(constants_1.COIN_TYPES.XBTC);
|
|
28
|
+
});
|
|
29
|
+
(0, vitest_1.it)("keeps full USDC address unchanged", () => {
|
|
30
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(constants_1.COIN_TYPES.USDC)).toBe(constants_1.COIN_TYPES.USDC);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)("keeps full ETH address unchanged", () => {
|
|
33
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)(constants_1.COIN_TYPES.ETH)).toBe(constants_1.COIN_TYPES.ETH);
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.it)("throws InvalidCoinTypeError on invalid format", () => {
|
|
36
|
+
(0, vitest_1.expect)(() => (0, coin_1.normalizeCoinType)("invalid")).toThrow(errors_1.InvalidCoinTypeError);
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)("pads short hex address", () => {
|
|
39
|
+
(0, vitest_1.expect)((0, coin_1.normalizeCoinType)("0xabc::module::Type")).toBe("0x0000000000000000000000000000000000000000000000000000000000000abc::module::Type");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=utils.normalizeCoinType.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.normalizeCoinType.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.normalizeCoinType.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAEH,mCAA8C;AAC9C,wCAAkD;AAClD,4CAAuD;AACvD,kDAAgD;AAEhD,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAC7C,8EAA8E,CAC/E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,sBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,sBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,UAAU,GACd,gFAAgF,CAAC;QACnF,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,sBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,sBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,sBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,wBAAiB,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,6BAAoB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,IAAA,eAAM,EAAC,IAAA,wBAAiB,EAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CACnD,kFAAkF,CACnF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,23 +10,31 @@
|
|
|
10
10
|
* ```typescript
|
|
11
11
|
* import { DefiDashSDK, LendingProtocol } from 'defi-dash-sdk';
|
|
12
12
|
*
|
|
13
|
-
* const sdk =
|
|
14
|
-
* await sdk.initialize(suiClient, keypair);
|
|
13
|
+
* const sdk = await DefiDashSDK.create(suiClient, keypair);
|
|
15
14
|
*
|
|
16
|
-
* //
|
|
17
|
-
* const
|
|
15
|
+
* // Build leverage transaction
|
|
16
|
+
* const tx = new Transaction();
|
|
17
|
+
* tx.setSender(address);
|
|
18
|
+
* await sdk.buildLeverageTransaction(tx, {
|
|
18
19
|
* protocol: LendingProtocol.Suilend,
|
|
19
20
|
* depositAsset: 'LBTC',
|
|
20
21
|
* depositAmount: '0.001',
|
|
21
22
|
* multiplier: 2.0,
|
|
22
|
-
* dryRun: true
|
|
23
23
|
* });
|
|
24
|
+
*
|
|
25
|
+
* // Node.js: execute via SDK
|
|
26
|
+
* const result = await sdk.execute(tx);
|
|
27
|
+
*
|
|
28
|
+
* // Browser: execute via wallet adapter
|
|
29
|
+
* await signAndExecute({ transaction: tx });
|
|
24
30
|
* ```
|
|
25
31
|
*/
|
|
26
|
-
export { DefiDashSDK } from
|
|
27
|
-
export { LendingProtocol,
|
|
28
|
-
export {
|
|
29
|
-
export
|
|
30
|
-
export {
|
|
31
|
-
export {
|
|
32
|
+
export { DefiDashSDK } from './sdk';
|
|
33
|
+
export { LendingProtocol, USDC_COIN_TYPE, SUI_COIN_TYPE, COIN_TYPES, } from './types';
|
|
34
|
+
export type { StrategyResult, LeveragePreview, FindBestRouteParams, LeverageRoute, LeverageRouteResult, } from './types';
|
|
35
|
+
export type { AssetPosition, PositionInfo, Position, AccountPortfolio, MarketAsset, } from './types';
|
|
36
|
+
export type { SDKOptions, BrowserLeverageParams, BrowserDeleverageParams, } from './types';
|
|
37
|
+
export { formatUnits, parseUnits } from './utils/format';
|
|
38
|
+
export { normalizeCoinType } from './utils/coin';
|
|
39
|
+
export { DefiDashError, SDKNotInitializedError, InvalidParameterError, InvalidCoinTypeError, } from './utils/errors';
|
|
32
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,UAAU,EACV,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,61 +11,45 @@
|
|
|
11
11
|
* ```typescript
|
|
12
12
|
* import { DefiDashSDK, LendingProtocol } from 'defi-dash-sdk';
|
|
13
13
|
*
|
|
14
|
-
* const sdk =
|
|
15
|
-
* await sdk.initialize(suiClient, keypair);
|
|
14
|
+
* const sdk = await DefiDashSDK.create(suiClient, keypair);
|
|
16
15
|
*
|
|
17
|
-
* //
|
|
18
|
-
* const
|
|
16
|
+
* // Build leverage transaction
|
|
17
|
+
* const tx = new Transaction();
|
|
18
|
+
* tx.setSender(address);
|
|
19
|
+
* await sdk.buildLeverageTransaction(tx, {
|
|
19
20
|
* protocol: LendingProtocol.Suilend,
|
|
20
21
|
* depositAsset: 'LBTC',
|
|
21
22
|
* depositAmount: '0.001',
|
|
22
23
|
* multiplier: 2.0,
|
|
23
|
-
* dryRun: true
|
|
24
24
|
* });
|
|
25
|
+
*
|
|
26
|
+
* // Node.js: execute via SDK
|
|
27
|
+
* const result = await sdk.execute(tx);
|
|
28
|
+
*
|
|
29
|
+
* // Browser: execute via wallet adapter
|
|
30
|
+
* await signAndExecute({ transaction: tx });
|
|
25
31
|
* ```
|
|
26
32
|
*/
|
|
27
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
28
|
-
if (k2 === undefined) k2 = k;
|
|
29
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
30
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
31
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
32
|
-
}
|
|
33
|
-
Object.defineProperty(o, k2, desc);
|
|
34
|
-
}) : (function(o, m, k, k2) {
|
|
35
|
-
if (k2 === undefined) k2 = k;
|
|
36
|
-
o[k2] = m[k];
|
|
37
|
-
}));
|
|
38
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
39
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
40
|
-
};
|
|
41
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.
|
|
34
|
+
exports.InvalidCoinTypeError = exports.InvalidParameterError = exports.SDKNotInitializedError = exports.DefiDashError = exports.normalizeCoinType = exports.parseUnits = exports.formatUnits = exports.COIN_TYPES = exports.SUI_COIN_TYPE = exports.USDC_COIN_TYPE = exports.LendingProtocol = exports.DefiDashSDK = void 0;
|
|
43
35
|
// Main SDK
|
|
44
36
|
var sdk_1 = require("./sdk");
|
|
45
37
|
Object.defineProperty(exports, "DefiDashSDK", { enumerable: true, get: function () { return sdk_1.DefiDashSDK; } });
|
|
46
|
-
//
|
|
38
|
+
// Enums & Constants
|
|
47
39
|
var types_1 = require("./types");
|
|
48
|
-
// Enums
|
|
49
40
|
Object.defineProperty(exports, "LendingProtocol", { enumerable: true, get: function () { return types_1.LendingProtocol; } });
|
|
50
|
-
// Constants
|
|
51
41
|
Object.defineProperty(exports, "USDC_COIN_TYPE", { enumerable: true, get: function () { return types_1.USDC_COIN_TYPE; } });
|
|
52
42
|
Object.defineProperty(exports, "SUI_COIN_TYPE", { enumerable: true, get: function () { return types_1.SUI_COIN_TYPE; } });
|
|
53
|
-
Object.defineProperty(exports, "DEFAULT_7K_PARTNER", { enumerable: true, get: function () { return types_1.DEFAULT_7K_PARTNER; } });
|
|
54
43
|
Object.defineProperty(exports, "COIN_TYPES", { enumerable: true, get: function () { return types_1.COIN_TYPES; } });
|
|
55
|
-
//
|
|
56
|
-
var
|
|
57
|
-
Object.defineProperty(exports, "
|
|
58
|
-
Object.defineProperty(exports, "
|
|
59
|
-
|
|
60
|
-
Object.defineProperty(exports, "
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
Object.defineProperty(exports, "
|
|
66
|
-
// Protocol-specific data
|
|
67
|
-
var constants_1 = require("./protocols/suilend/constants");
|
|
68
|
-
Object.defineProperty(exports, "SUILEND_RESERVES", { enumerable: true, get: function () { return constants_1.SUILEND_RESERVES; } });
|
|
69
|
-
Object.defineProperty(exports, "getReserveByCoinType", { enumerable: true, get: function () { return constants_1.getReserveByCoinType; } });
|
|
70
|
-
Object.defineProperty(exports, "getReserveBySymbol", { enumerable: true, get: function () { return constants_1.getReserveBySymbol; } });
|
|
44
|
+
// Utilities (frontend-facing only)
|
|
45
|
+
var format_1 = require("./utils/format");
|
|
46
|
+
Object.defineProperty(exports, "formatUnits", { enumerable: true, get: function () { return format_1.formatUnits; } });
|
|
47
|
+
Object.defineProperty(exports, "parseUnits", { enumerable: true, get: function () { return format_1.parseUnits; } });
|
|
48
|
+
var coin_1 = require("./utils/coin");
|
|
49
|
+
Object.defineProperty(exports, "normalizeCoinType", { enumerable: true, get: function () { return coin_1.normalizeCoinType; } });
|
|
50
|
+
var errors_1 = require("./utils/errors");
|
|
51
|
+
Object.defineProperty(exports, "DefiDashError", { enumerable: true, get: function () { return errors_1.DefiDashError; } });
|
|
52
|
+
Object.defineProperty(exports, "SDKNotInitializedError", { enumerable: true, get: function () { return errors_1.SDKNotInitializedError; } });
|
|
53
|
+
Object.defineProperty(exports, "InvalidParameterError", { enumerable: true, get: function () { return errors_1.InvalidParameterError; } });
|
|
54
|
+
Object.defineProperty(exports, "InvalidCoinTypeError", { enumerable: true, get: function () { return errors_1.InvalidCoinTypeError; } });
|
|
71
55
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAEH,WAAW;AACX,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AAEpB,oBAAoB;AACpB,iCAKiB;AAJf,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AACd,sGAAA,aAAa,OAAA;AACb,mGAAA,UAAU,OAAA;AA4BZ,mCAAmC;AACnC,yCAAyD;AAAhD,qGAAA,WAAW,OAAA;AAAE,oGAAA,UAAU,OAAA;AAChC,qCAAiD;AAAxC,yGAAA,iBAAiB,OAAA;AAC1B,yCAKwB;AAJtB,uGAAA,aAAa,OAAA;AACb,gHAAA,sBAAsB,OAAA;AACtB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA"}
|
|
@@ -1,105 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Base Protocol Adapter
|
|
3
3
|
*
|
|
4
|
-
* Abstract base class
|
|
5
|
-
*
|
|
4
|
+
* Abstract base class for all lending protocol adapters.
|
|
5
|
+
* Implements ILendingProtocol to enforce compile-time method checks.
|
|
6
|
+
*
|
|
7
|
+
* Any class extending this MUST implement all abstract methods,
|
|
8
|
+
* otherwise TypeScript will produce a build error:
|
|
9
|
+
* "Non-abstract class 'XxxAdapter' does not implement inherited abstract member 'methodName'"
|
|
10
|
+
*
|
|
11
|
+
* This is the TypeScript equivalent of Go's interface compliance pattern:
|
|
12
|
+
* var _ ILendingProtocol = (*MyAdapter)(nil)
|
|
6
13
|
*/
|
|
7
14
|
import { SuiClient } from "@mysten/sui/client";
|
|
8
|
-
import {
|
|
15
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
16
|
+
import { ILendingProtocol, PositionInfo, AssetRiskParams, AssetApy, AccountPortfolio } from "../types";
|
|
9
17
|
/**
|
|
10
|
-
* Abstract base class for protocol adapters
|
|
18
|
+
* Abstract base class for protocol adapters.
|
|
11
19
|
*
|
|
12
|
-
* Provides common
|
|
13
|
-
*
|
|
14
|
-
* - Coin type normalization
|
|
15
|
-
* - Initialization tracking
|
|
20
|
+
* Provides common utilities (SuiClient management, coin normalization).
|
|
21
|
+
* All ILendingProtocol methods are declared abstract — subclasses MUST implement them.
|
|
16
22
|
*
|
|
17
23
|
* @example
|
|
18
24
|
* ```typescript
|
|
19
|
-
* class
|
|
20
|
-
* readonly name = "
|
|
25
|
+
* export class NewProtocolAdapter extends BaseProtocolAdapter {
|
|
26
|
+
* readonly name = "new-protocol";
|
|
21
27
|
* readonly consumesRepaymentCoin = false;
|
|
22
28
|
*
|
|
23
|
-
* async initialize(
|
|
24
|
-
* await super.initialize(
|
|
25
|
-
* //
|
|
29
|
+
* async initialize(suiClient: SuiClient): Promise<void> {
|
|
30
|
+
* await super.initialize(suiClient);
|
|
31
|
+
* // protocol-specific init
|
|
26
32
|
* }
|
|
27
33
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* }
|
|
34
|
+
* // All abstract methods must be implemented:
|
|
35
|
+
* async getPosition(userAddress: string) { ... }
|
|
36
|
+
* async deposit(tx, coin, coinType, userAddress) { ... }
|
|
37
|
+
* async withdraw(tx, coinType, amount, userAddress) { ... }
|
|
38
|
+
* async borrow(tx, coinType, amount, userAddress) { ... }
|
|
39
|
+
* async repay(tx, coinType, coin, userAddress) { ... }
|
|
40
|
+
* async refreshOracles(tx, coinTypes, userAddress) { ... }
|
|
41
|
+
* async getAccountPortfolio(address) { ... }
|
|
42
|
+
* async getAssetRiskParams(coinType) { ... }
|
|
43
|
+
* async getAssetApy(coinType) { ... }
|
|
32
44
|
* }
|
|
33
45
|
* ```
|
|
34
46
|
*/
|
|
35
|
-
export declare abstract class BaseProtocolAdapter implements
|
|
36
|
-
/**
|
|
37
|
-
* Sui client instance
|
|
38
|
-
* Available after initialization
|
|
39
|
-
*/
|
|
47
|
+
export declare abstract class BaseProtocolAdapter implements ILendingProtocol {
|
|
40
48
|
protected suiClient: SuiClient;
|
|
41
|
-
/**
|
|
42
|
-
* Initialization status
|
|
43
|
-
*/
|
|
44
49
|
protected initialized: boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Protocol name (must be implemented by subclass)
|
|
47
|
-
*/
|
|
48
50
|
abstract readonly name: string;
|
|
49
|
-
/**
|
|
50
|
-
* Whether protocol consumes repayment coin entirely
|
|
51
|
-
* (must be implemented by subclass)
|
|
52
|
-
*/
|
|
53
51
|
abstract readonly consumesRepaymentCoin: boolean;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
abstract getPosition(userAddress: string): Promise<PositionInfo | null>;
|
|
53
|
+
abstract deposit(tx: Transaction, coin: any, coinType: string, userAddress: string): Promise<void>;
|
|
54
|
+
abstract withdraw(tx: Transaction, coinType: string, amount: string, userAddress: string): Promise<any>;
|
|
55
|
+
abstract borrow(tx: Transaction, coinType: string, amount: string, userAddress: string, skipOracle?: boolean): Promise<any>;
|
|
56
|
+
abstract repay(tx: Transaction, coinType: string, coin: any, userAddress: string): Promise<void>;
|
|
57
|
+
abstract refreshOracles(tx: Transaction, coinTypes: string[], userAddress: string): Promise<void>;
|
|
58
|
+
abstract getAccountPortfolio(address: string): Promise<AccountPortfolio>;
|
|
59
|
+
abstract getAssetRiskParams(coinType: string): Promise<AssetRiskParams>;
|
|
60
|
+
abstract getAssetApy(coinType: string): Promise<AssetApy>;
|
|
59
61
|
initialize(suiClient: SuiClient): Promise<void>;
|
|
60
62
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* @throws Error if not initialized
|
|
63
|
+
* Optional: clear pending state between transactions.
|
|
64
|
+
* Override in subclass if needed (e.g., Scallop obligation tracking).
|
|
64
65
|
*/
|
|
66
|
+
clearPendingState(): void;
|
|
65
67
|
protected ensureInitialized(): void;
|
|
66
|
-
/**
|
|
67
|
-
* Normalize coin type to standard format
|
|
68
|
-
*
|
|
69
|
-
* Utility method for consistent coin type handling.
|
|
70
|
-
*
|
|
71
|
-
* @param coinType - Raw coin type string
|
|
72
|
-
* @returns Normalized coin type with padded address
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* const normalized = this.normalizeCoin("0x2::sui::SUI");
|
|
77
|
-
* // "0x0000...0002::sui::SUI"
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
68
|
protected normalizeCoin(coinType: string): string;
|
|
81
|
-
/**
|
|
82
|
-
* Get object by ID with error handling
|
|
83
|
-
*
|
|
84
|
-
* @param objectId - Object ID to fetch
|
|
85
|
-
* @returns Object data or null if not found
|
|
86
|
-
*/
|
|
87
|
-
protected getObject(objectId: string): Promise<any>;
|
|
88
|
-
/**
|
|
89
|
-
* Format amount from raw units to human-readable
|
|
90
|
-
*
|
|
91
|
-
* @param amount - Raw amount (bigint)
|
|
92
|
-
* @param decimals - Token decimals
|
|
93
|
-
* @returns Human-readable number
|
|
94
|
-
*/
|
|
95
69
|
protected formatAmount(amount: bigint, decimals: number): number;
|
|
96
|
-
/**
|
|
97
|
-
* Parse amount from human-readable to raw units
|
|
98
|
-
*
|
|
99
|
-
* @param amount - Human-readable amount (number or string)
|
|
100
|
-
* @param decimals - Token decimals
|
|
101
|
-
* @returns Raw amount as bigint
|
|
102
|
-
*/
|
|
103
70
|
protected parseAmount(amount: number | string, decimals: number): bigint;
|
|
104
71
|
}
|
|
105
72
|
//# sourceMappingURL=base-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/protocols/base-adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/protocols/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,mBAAoB,YAAW,gBAAgB;IACnE,SAAS,CAAC,SAAS,EAAG,SAAS,CAAC;IAChC,SAAS,CAAC,WAAW,UAAS;IAI9B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAIjD,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAEvE,QAAQ,CAAC,OAAO,CACd,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,QAAQ,CACf,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC;IAEf,QAAQ,CAAC,MAAM,CACb,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAAC,GAAG,CAAC;IAEf,QAAQ,CAAC,KAAK,CACZ,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,cAAc,CACrB,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAExE,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAEvE,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInD,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAMzB,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjD,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIhE,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIzE"}
|