defi-dash-sdk 0.1.4 → 0.1.5
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/esm/index.js +40 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/protocols/base-adapter.js +78 -0
- package/dist/esm/protocols/base-adapter.js.map +1 -0
- package/dist/esm/protocols/index.js +8 -0
- package/dist/esm/protocols/index.js.map +1 -0
- package/dist/esm/protocols/navi/adapter.js +393 -0
- package/dist/esm/protocols/navi/adapter.js.map +1 -0
- package/dist/{protocols/scallop.js → esm/protocols/scallop/adapter.js} +252 -95
- package/dist/esm/protocols/scallop/adapter.js.map +1 -0
- package/dist/{lib/scallop/flash-loan-client.js → esm/protocols/scallop/flash-loan.js} +63 -8
- package/dist/esm/protocols/scallop/flash-loan.js.map +1 -0
- package/dist/esm/protocols/scallop/index.js +6 -0
- package/dist/esm/protocols/scallop/index.js.map +1 -0
- package/dist/esm/protocols/scallop/types.js +67 -0
- package/dist/esm/protocols/scallop/types.js.map +1 -0
- package/dist/esm/protocols/suilend/adapter.js +464 -0
- package/dist/esm/protocols/suilend/adapter.js.map +1 -0
- package/dist/{lib → esm/protocols}/suilend/calculators.js +41 -51
- package/dist/esm/protocols/suilend/calculators.js.map +1 -0
- package/dist/esm/protocols/suilend/constants.js +159 -0
- package/dist/{lib/suilend/const.js.map → esm/protocols/suilend/constants.js.map} +1 -1
- package/dist/{lib/suilend/suilend.js → esm/protocols/suilend/types.js} +7 -13
- package/dist/esm/protocols/suilend/types.js.map +1 -0
- package/dist/esm/sdk.js +569 -0
- package/dist/esm/sdk.js.map +1 -0
- package/dist/esm/strategies/common.js +75 -0
- package/dist/esm/strategies/common.js.map +1 -0
- package/dist/esm/strategies/deleverage.js +218 -0
- package/dist/esm/strategies/deleverage.js.map +1 -0
- package/dist/esm/strategies/index.js +10 -0
- package/dist/esm/strategies/index.js.map +1 -0
- package/dist/esm/strategies/leverage-preview.js +117 -0
- package/dist/esm/strategies/leverage-preview.js.map +1 -0
- package/dist/esm/strategies/leverage-route.js +109 -0
- package/dist/esm/strategies/leverage-route.js.map +1 -0
- package/dist/esm/strategies/leverage.js +156 -0
- package/dist/esm/strategies/leverage.js.map +1 -0
- package/dist/esm/strategies/scallop-leverage.js +140 -0
- package/dist/esm/strategies/scallop-leverage.js.map +1 -0
- package/dist/esm/types/common.js +13 -0
- package/dist/esm/types/common.js.map +1 -0
- package/dist/esm/types/config.js +5 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/constants.js +128 -0
- package/dist/esm/types/constants.js.map +1 -0
- package/dist/esm/types/index.js +10 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/position.js +5 -0
- package/dist/esm/types/position.js.map +1 -0
- package/dist/esm/types/protocol.js +5 -0
- package/dist/esm/types/protocol.js.map +1 -0
- package/dist/esm/types/strategy.js +5 -0
- package/dist/esm/types/strategy.js.map +1 -0
- package/dist/esm/utils/calculations.js +33 -0
- package/dist/esm/utils/calculations.js.map +1 -0
- package/dist/esm/utils/coin.js +54 -0
- package/dist/esm/utils/coin.js.map +1 -0
- package/dist/esm/utils/errors.js +111 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/execution.js +106 -0
- package/dist/esm/utils/execution.js.map +1 -0
- package/dist/{lib → esm}/utils/format.js +2 -6
- package/dist/esm/utils/format.js.map +1 -0
- package/dist/esm/utils/gas.js +38 -0
- package/dist/esm/utils/gas.js.map +1 -0
- package/dist/esm/utils/index.js +13 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/{lib → esm}/utils/logger.js +17 -31
- package/dist/esm/utils/logger.js.map +1 -0
- package/package.json +11 -2
- package/dist/__tests__/deleverageEstimate.unit.test.d.ts +0 -10
- package/dist/__tests__/deleverageEstimate.unit.test.d.ts.map +0 -1
- package/dist/__tests__/deleverageEstimate.unit.test.js +0 -116
- package/dist/__tests__/deleverageEstimate.unit.test.js.map +0 -1
- package/dist/__tests__/findBestLeverageRoute.test.d.ts +0 -12
- package/dist/__tests__/findBestLeverageRoute.test.d.ts.map +0 -1
- package/dist/__tests__/findBestLeverageRoute.test.js +0 -177
- package/dist/__tests__/findBestLeverageRoute.test.js.map +0 -1
- package/dist/__tests__/getAssetApy.test.d.ts +0 -2
- package/dist/__tests__/getAssetApy.test.d.ts.map +0 -1
- package/dist/__tests__/getAssetApy.test.js +0 -133
- package/dist/__tests__/getAssetApy.test.js.map +0 -1
- package/dist/__tests__/getAssetRiskParams.test.d.ts +0 -11
- package/dist/__tests__/getAssetRiskParams.test.d.ts.map +0 -1
- package/dist/__tests__/getAssetRiskParams.test.js +0 -183
- package/dist/__tests__/getAssetRiskParams.test.js.map +0 -1
- package/dist/__tests__/internal.getAssetApy.test.d.ts +0 -2
- package/dist/__tests__/internal.getAssetApy.test.d.ts.map +0 -1
- package/dist/__tests__/internal.getAssetApy.test.js +0 -140
- package/dist/__tests__/internal.getAssetApy.test.js.map +0 -1
- package/dist/__tests__/internal.getAssetRiskParams.test.d.ts +0 -22
- package/dist/__tests__/internal.getAssetRiskParams.test.d.ts.map +0 -1
- package/dist/__tests__/internal.getAssetRiskParams.test.js +0 -194
- package/dist/__tests__/internal.getAssetRiskParams.test.js.map +0 -1
- package/dist/__tests__/internal.getPosition.test.d.ts +0 -22
- package/dist/__tests__/internal.getPosition.test.d.ts.map +0 -1
- package/dist/__tests__/internal.getPosition.test.js +0 -153
- package/dist/__tests__/internal.getPosition.test.js.map +0 -1
- package/dist/__tests__/leveragePreview.unit.test.d.ts +0 -10
- package/dist/__tests__/leveragePreview.unit.test.d.ts.map +0 -1
- package/dist/__tests__/leveragePreview.unit.test.js +0 -168
- package/dist/__tests__/leveragePreview.unit.test.js.map +0 -1
- package/dist/__tests__/leverageRoute.unit.test.d.ts +0 -10
- package/dist/__tests__/leverageRoute.unit.test.d.ts.map +0 -1
- package/dist/__tests__/leverageRoute.unit.test.js +0 -159
- package/dist/__tests__/leverageRoute.unit.test.js.map +0 -1
- package/dist/__tests__/previewLeverage.test.d.ts +0 -13
- package/dist/__tests__/previewLeverage.test.d.ts.map +0 -1
- package/dist/__tests__/previewLeverage.test.js +0 -217
- package/dist/__tests__/previewLeverage.test.js.map +0 -1
- package/dist/__tests__/sdk.bestRoute.test.d.ts +0 -22
- package/dist/__tests__/sdk.bestRoute.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.bestRoute.test.js +0 -186
- package/dist/__tests__/sdk.bestRoute.test.js.map +0 -1
- package/dist/__tests__/sdk.bestRoute.unit.test.d.ts +0 -16
- package/dist/__tests__/sdk.bestRoute.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.bestRoute.unit.test.js +0 -165
- package/dist/__tests__/sdk.bestRoute.unit.test.js.map +0 -1
- package/dist/__tests__/sdk.deleverage.test.d.ts +0 -21
- package/dist/__tests__/sdk.deleverage.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.deleverage.test.js +0 -130
- package/dist/__tests__/sdk.deleverage.test.js.map +0 -1
- package/dist/__tests__/sdk.deleverage.unit.test.d.ts +0 -21
- package/dist/__tests__/sdk.deleverage.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.deleverage.unit.test.js +0 -141
- package/dist/__tests__/sdk.deleverage.unit.test.js.map +0 -1
- package/dist/__tests__/sdk.leverage.test.d.ts +0 -19
- package/dist/__tests__/sdk.leverage.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.leverage.test.js +0 -188
- package/dist/__tests__/sdk.leverage.test.js.map +0 -1
- package/dist/__tests__/sdk.portfolio.test.d.ts +0 -17
- package/dist/__tests__/sdk.portfolio.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.portfolio.test.js +0 -162
- package/dist/__tests__/sdk.portfolio.test.js.map +0 -1
- package/dist/__tests__/sdk.position.test.d.ts +0 -16
- package/dist/__tests__/sdk.position.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.position.test.js +0 -193
- package/dist/__tests__/sdk.position.test.js.map +0 -1
- package/dist/__tests__/sdk.preview.test.d.ts +0 -23
- package/dist/__tests__/sdk.preview.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.preview.test.js +0 -226
- package/dist/__tests__/sdk.preview.test.js.map +0 -1
- package/dist/__tests__/sdk.preview.unit.test.d.ts +0 -18
- package/dist/__tests__/sdk.preview.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sdk.preview.unit.test.js +0 -175
- package/dist/__tests__/sdk.preview.unit.test.js.map +0 -1
- package/dist/__tests__/utils.normalizeCoinType.test.d.ts +0 -7
- package/dist/__tests__/utils.normalizeCoinType.test.d.ts.map +0 -1
- package/dist/__tests__/utils.normalizeCoinType.test.js +0 -42
- package/dist/__tests__/utils.normalizeCoinType.test.js.map +0 -1
- package/dist/lib/navi_calculations.d.ts +0 -76
- package/dist/lib/navi_calculations.d.ts.map +0 -1
- package/dist/lib/navi_calculations.js +0 -185
- package/dist/lib/navi_calculations.js.map +0 -1
- package/dist/lib/scallop/flash-loan-client.d.ts +0 -88
- package/dist/lib/scallop/flash-loan-client.d.ts.map +0 -1
- package/dist/lib/scallop/flash-loan-client.js.map +0 -1
- package/dist/lib/scallop/flash-loan.d.ts +0 -30
- package/dist/lib/scallop/flash-loan.d.ts.map +0 -1
- package/dist/lib/scallop/flash-loan.js +0 -61
- package/dist/lib/scallop/flash-loan.js.map +0 -1
- package/dist/lib/scallop/index.d.ts +0 -3
- package/dist/lib/scallop/index.d.ts.map +0 -1
- package/dist/lib/scallop/index.js +0 -7
- package/dist/lib/scallop/index.js.map +0 -1
- package/dist/lib/scallop/scallop-addresses.d.ts +0 -24
- package/dist/lib/scallop/scallop-addresses.d.ts.map +0 -1
- package/dist/lib/scallop/scallop-addresses.js +0 -67
- package/dist/lib/scallop/scallop-addresses.js.map +0 -1
- package/dist/lib/scallop/scallop-builder.d.ts +0 -96
- package/dist/lib/scallop/scallop-builder.d.ts.map +0 -1
- package/dist/lib/scallop/scallop-builder.js +0 -163
- package/dist/lib/scallop/scallop-builder.js.map +0 -1
- package/dist/lib/suilend/calculators.d.ts +0 -44
- package/dist/lib/suilend/calculators.d.ts.map +0 -1
- package/dist/lib/suilend/calculators.js.map +0 -1
- package/dist/lib/suilend/const.d.ts +0 -9
- package/dist/lib/suilend/const.d.ts.map +0 -1
- package/dist/lib/suilend/const.js +0 -164
- package/dist/lib/suilend/suilend.d.ts +0 -15
- package/dist/lib/suilend/suilend.d.ts.map +0 -1
- package/dist/lib/suilend/suilend.js.map +0 -1
- package/dist/lib/utils/coin.d.ts +0 -21
- package/dist/lib/utils/coin.d.ts.map +0 -1
- package/dist/lib/utils/coin.js +0 -50
- package/dist/lib/utils/coin.js.map +0 -1
- package/dist/lib/utils/format.d.ts +0 -24
- package/dist/lib/utils/format.d.ts.map +0 -1
- package/dist/lib/utils/format.js.map +0 -1
- package/dist/lib/utils/index.d.ts +0 -9
- package/dist/lib/utils/index.d.ts.map +0 -1
- package/dist/lib/utils/index.js +0 -25
- package/dist/lib/utils/index.js.map +0 -1
- package/dist/lib/utils/logger.d.ts +0 -30
- package/dist/lib/utils/logger.d.ts.map +0 -1
- package/dist/lib/utils/logger.js.map +0 -1
- package/dist/protocols/interface.d.ts +0 -129
- package/dist/protocols/interface.d.ts.map +0 -1
- package/dist/protocols/interface.js +0 -8
- package/dist/protocols/interface.js.map +0 -1
- package/dist/protocols/navi.d.ts +0 -34
- package/dist/protocols/navi.d.ts.map +0 -1
- package/dist/protocols/navi.js +0 -263
- package/dist/protocols/navi.js.map +0 -1
- package/dist/protocols/scallop.d.ts +0 -297
- package/dist/protocols/scallop.d.ts.map +0 -1
- package/dist/protocols/scallop.js.map +0 -1
- package/dist/protocols/suilend.d.ts +0 -29
- package/dist/protocols/suilend.d.ts.map +0 -1
- package/dist/protocols/suilend.js +0 -313
- package/dist/protocols/suilend.js.map +0 -1
- package/dist/types.d.ts +0 -188
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -22
- package/dist/types.js.map +0 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* DeFi Dash SDK - Scallop Protocol Adapter
|
|
4
3
|
*
|
|
@@ -12,53 +11,22 @@
|
|
|
12
11
|
* - Staked obligations are "locked" and cannot perform borrow/withdraw operations
|
|
13
12
|
* - This adapter automatically unstakes/restakes obligations when needed
|
|
14
13
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* Coin type mappings for Scallop
|
|
25
|
-
*
|
|
26
|
-
* Maps full coin types to Scallop's internal coin names.
|
|
27
|
-
* Required for operations like deposit, withdraw, borrow, repay.
|
|
28
|
-
*/
|
|
29
|
-
const COIN_TYPE_MAP = {
|
|
30
|
-
// Native SUI
|
|
31
|
-
"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI": "sui",
|
|
32
|
-
// Stablecoins
|
|
33
|
-
"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC": "usdc",
|
|
34
|
-
"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN": "wusdc",
|
|
35
|
-
"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN": "wusdt",
|
|
36
|
-
// Wrapped assets
|
|
37
|
-
"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN": "weth",
|
|
38
|
-
"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN": "wbtc",
|
|
39
|
-
// BTC variants
|
|
40
|
-
"0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b::btc::BTC": "xbtc",
|
|
41
|
-
"0x5d89b60f87e587b54e5f87886356b0af23ce41dff56e506c6a47e8125c965a9d::lbtc::LBTC": "lbtc",
|
|
42
|
-
// Protocol tokens
|
|
43
|
-
"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS": "cetus",
|
|
44
|
-
"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA": "sca",
|
|
45
|
-
"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP": "deep",
|
|
46
|
-
"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD": "fud",
|
|
47
|
-
// Liquid staking tokens
|
|
48
|
-
"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI": "afsui",
|
|
49
|
-
"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI": "hasui",
|
|
50
|
-
"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT": "vsui",
|
|
51
|
-
// Spring SUI
|
|
52
|
-
"0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI": "ssui",
|
|
53
|
-
};
|
|
54
|
-
exports.SCALLOP_COIN_TYPE_MAP = COIN_TYPE_MAP;
|
|
14
|
+
import { SUI_CLOCK_OBJECT_ID } from "@mysten/sui/utils";
|
|
15
|
+
import { Scallop } from "@scallop-io/sui-scallop-sdk";
|
|
16
|
+
import { USDC_COIN_TYPE, LendingProtocol, } from "../../types";
|
|
17
|
+
import { normalizeCoinType } from "../../utils";
|
|
18
|
+
import { getReserveByCoinType } from "../suilend/constants";
|
|
19
|
+
import { getTokenPrice } from "@7kprotocol/sdk-ts";
|
|
20
|
+
import { COIN_TYPE_MAP, SCALLOP_COIN_TYPE_MAP, } from "./types";
|
|
21
|
+
// Re-export for backwards compatibility
|
|
22
|
+
export { SCALLOP_COIN_TYPE_MAP };
|
|
55
23
|
/**
|
|
56
24
|
* Scallop lending protocol adapter
|
|
57
25
|
*
|
|
58
26
|
* Addresses are fetched dynamically from Scallop SDK at initialization,
|
|
59
27
|
* so they stay up-to-date when Scallop upgrades their contracts.
|
|
60
28
|
*/
|
|
61
|
-
class ScallopAdapter {
|
|
29
|
+
export class ScallopAdapter {
|
|
62
30
|
constructor() {
|
|
63
31
|
this.name = "scallop";
|
|
64
32
|
/**
|
|
@@ -84,13 +52,20 @@ class ScallopAdapter {
|
|
|
84
52
|
this.pendingObligationKey = null;
|
|
85
53
|
this.pendingHotPotato = null;
|
|
86
54
|
this.pendingUserAddress = null;
|
|
55
|
+
/**
|
|
56
|
+
* Track obligations that have been unstaked in the current PTB.
|
|
57
|
+
* Prevents duplicate unstake calls within the same transaction.
|
|
58
|
+
*/
|
|
59
|
+
this.unstakedObligationsInPTB = new Set();
|
|
87
60
|
}
|
|
88
61
|
async initialize(suiClient) {
|
|
89
62
|
this.suiClient = suiClient;
|
|
90
63
|
// Initialize Scallop SDK
|
|
91
|
-
this.scallop = new
|
|
64
|
+
this.scallop = new Scallop({ networkType: "mainnet" });
|
|
92
65
|
await this.scallop.init();
|
|
93
66
|
this.query = await this.scallop.createScallopQuery();
|
|
67
|
+
// Must call query.init() to populate internal whitelist Sets used by market queries
|
|
68
|
+
await this.query.init();
|
|
94
69
|
// Fetch addresses from SDK (always up-to-date with protocol upgrades)
|
|
95
70
|
const addresses = this.scallop.client.address.getAddresses();
|
|
96
71
|
if (!addresses) {
|
|
@@ -99,7 +74,7 @@ class ScallopAdapter {
|
|
|
99
74
|
this.populateAddresses(addresses);
|
|
100
75
|
// Build coin mappings
|
|
101
76
|
for (const [coinType, coinName] of Object.entries(COIN_TYPE_MAP)) {
|
|
102
|
-
const normalized =
|
|
77
|
+
const normalized = normalizeCoinType(coinType);
|
|
103
78
|
this.coinTypeToNameMap[normalized] = coinName;
|
|
104
79
|
this.coinNameToTypeMap[coinName] = normalized;
|
|
105
80
|
}
|
|
@@ -133,7 +108,6 @@ class ScallopAdapter {
|
|
|
133
108
|
subsTable: addresses.vesca.subsTable,
|
|
134
109
|
subsWhitelist: addresses.vesca.subsWhitelist,
|
|
135
110
|
};
|
|
136
|
-
console.log(`[ScallopAdapter] Loaded addresses - Core pkg: ${this.coreAddresses.protocolPkg.slice(0, 10)}..., BorrowIncentive pkg: ${this.borrowIncentiveAddresses.pkg.slice(0, 10)}...`);
|
|
137
111
|
}
|
|
138
112
|
/**
|
|
139
113
|
* Get current addresses (for external use/debugging)
|
|
@@ -152,7 +126,7 @@ class ScallopAdapter {
|
|
|
152
126
|
}
|
|
153
127
|
}
|
|
154
128
|
getCoinName(coinType) {
|
|
155
|
-
const normalized =
|
|
129
|
+
const normalized = normalizeCoinType(coinType);
|
|
156
130
|
const name = this.coinTypeToNameMap[normalized];
|
|
157
131
|
if (!name) {
|
|
158
132
|
throw new Error(`Unknown coin type for Scallop: ${coinType}`);
|
|
@@ -177,52 +151,61 @@ class ScallopAdapter {
|
|
|
177
151
|
const obligation = await this.query.queryObligation(obligations[0].id);
|
|
178
152
|
if (!obligation)
|
|
179
153
|
return null;
|
|
180
|
-
let collateral = null;
|
|
181
|
-
let debt = null;
|
|
182
154
|
const collaterals = obligation.collaterals || [];
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
const
|
|
155
|
+
const debtItems = obligation.debts || [];
|
|
156
|
+
// Build all supply positions
|
|
157
|
+
const supplies = await Promise.all(collaterals.map(async (col) => {
|
|
158
|
+
const rawCoinType = col.coinType || col.type?.name || "";
|
|
159
|
+
const coinType = normalizeCoinType(rawCoinType);
|
|
160
|
+
const reserve = getReserveByCoinType(coinType);
|
|
188
161
|
const decimals = reserve?.decimals || 9;
|
|
189
162
|
const amount = BigInt(col.amount || col.depositAmount || 0);
|
|
190
|
-
const price = await
|
|
191
|
-
|
|
163
|
+
const price = await getTokenPrice(coinType);
|
|
164
|
+
return {
|
|
192
165
|
amount,
|
|
193
166
|
symbol: reserve?.symbol || this.getCoinName(coinType).toUpperCase(),
|
|
194
167
|
coinType,
|
|
195
168
|
decimals,
|
|
196
169
|
valueUsd: (Number(amount) / Math.pow(10, decimals)) * price,
|
|
197
170
|
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const
|
|
202
|
-
const
|
|
171
|
+
}));
|
|
172
|
+
// Build all borrow positions
|
|
173
|
+
const allBorrows = await Promise.all(debtItems.map(async (d) => {
|
|
174
|
+
const rawCoinType = d.coinType || d.type?.name || "";
|
|
175
|
+
const coinType = normalizeCoinType(rawCoinType);
|
|
176
|
+
const reserve = getReserveByCoinType(coinType);
|
|
203
177
|
const decimals = reserve?.decimals || 6;
|
|
204
178
|
const amount = BigInt(d.amount || d.borrowAmount || 0);
|
|
205
|
-
const price = await
|
|
206
|
-
|
|
179
|
+
const price = await getTokenPrice(coinType);
|
|
180
|
+
return {
|
|
207
181
|
amount,
|
|
208
182
|
symbol: reserve?.symbol || "USDC",
|
|
209
183
|
coinType,
|
|
210
184
|
decimals,
|
|
211
185
|
valueUsd: (Number(amount) / Math.pow(10, decimals)) * price,
|
|
212
186
|
};
|
|
213
|
-
}
|
|
187
|
+
}));
|
|
188
|
+
// Primary = largest by USD value
|
|
189
|
+
const collateral = [...supplies].sort((a, b) => b.valueUsd - a.valueUsd)[0] ?? null;
|
|
214
190
|
if (!collateral)
|
|
215
191
|
return null;
|
|
192
|
+
const debt = allBorrows.length > 0
|
|
193
|
+
? [...allBorrows].sort((a, b) => b.valueUsd - a.valueUsd)[0]
|
|
194
|
+
: null;
|
|
195
|
+
const totalSupplyUsd = supplies.reduce((s, p) => s + p.valueUsd, 0);
|
|
196
|
+
const totalDebtUsd = allBorrows.reduce((s, p) => s + p.valueUsd, 0);
|
|
216
197
|
return {
|
|
217
198
|
collateral,
|
|
218
199
|
debt: debt || {
|
|
219
200
|
amount: 0n,
|
|
220
201
|
symbol: "USDC",
|
|
221
|
-
coinType:
|
|
202
|
+
coinType: USDC_COIN_TYPE,
|
|
222
203
|
decimals: 6,
|
|
223
204
|
valueUsd: 0,
|
|
224
205
|
},
|
|
225
|
-
|
|
206
|
+
supplies,
|
|
207
|
+
borrows: allBorrows,
|
|
208
|
+
netValueUsd: totalSupplyUsd - totalDebtUsd,
|
|
226
209
|
};
|
|
227
210
|
}
|
|
228
211
|
// ============================================================================
|
|
@@ -267,7 +250,7 @@ class ScallopAdapter {
|
|
|
267
250
|
*/
|
|
268
251
|
borrowFromObligation(tx, obligation, obligationKey, amount, coinType) {
|
|
269
252
|
const clockRef = tx.sharedObjectRef({
|
|
270
|
-
objectId:
|
|
253
|
+
objectId: SUI_CLOCK_OBJECT_ID,
|
|
271
254
|
mutable: false,
|
|
272
255
|
initialSharedVersion: "1",
|
|
273
256
|
});
|
|
@@ -292,7 +275,7 @@ class ScallopAdapter {
|
|
|
292
275
|
*/
|
|
293
276
|
repayDebt(tx, obligation, coin, coinType) {
|
|
294
277
|
const clockRef = tx.sharedObjectRef({
|
|
295
|
-
objectId:
|
|
278
|
+
objectId: SUI_CLOCK_OBJECT_ID,
|
|
296
279
|
mutable: false,
|
|
297
280
|
initialSharedVersion: "1",
|
|
298
281
|
});
|
|
@@ -316,10 +299,17 @@ class ScallopAdapter {
|
|
|
316
299
|
*
|
|
317
300
|
* This must be called before borrow or withdraw on a locked obligation.
|
|
318
301
|
* Error 770 (0x302) indicates the obligation is locked.
|
|
302
|
+
*
|
|
303
|
+
* This method tracks unstaked obligations to prevent duplicate unstake calls
|
|
304
|
+
* within the same PTB.
|
|
319
305
|
*/
|
|
320
306
|
unstakeObligation(tx, obligationId, obligationKeyId) {
|
|
307
|
+
// Skip if already unstaked in this PTB
|
|
308
|
+
if (this.unstakedObligationsInPTB.has(obligationId)) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
321
311
|
const clockRef = tx.sharedObjectRef({
|
|
322
|
-
objectId:
|
|
312
|
+
objectId: SUI_CLOCK_OBJECT_ID,
|
|
323
313
|
mutable: false,
|
|
324
314
|
initialSharedVersion: "1",
|
|
325
315
|
});
|
|
@@ -336,6 +326,8 @@ class ScallopAdapter {
|
|
|
336
326
|
clockRef,
|
|
337
327
|
],
|
|
338
328
|
});
|
|
329
|
+
// Mark as unstaked in this PTB
|
|
330
|
+
this.unstakedObligationsInPTB.add(obligationId);
|
|
339
331
|
}
|
|
340
332
|
/**
|
|
341
333
|
* Stake obligation to borrow incentive (locks it for rewards)
|
|
@@ -344,7 +336,7 @@ class ScallopAdapter {
|
|
|
344
336
|
*/
|
|
345
337
|
stakeObligation(tx, obligationId, obligationKeyId) {
|
|
346
338
|
const clockRef = tx.sharedObjectRef({
|
|
347
|
-
objectId:
|
|
339
|
+
objectId: SUI_CLOCK_OBJECT_ID,
|
|
348
340
|
mutable: false,
|
|
349
341
|
initialSharedVersion: "1",
|
|
350
342
|
});
|
|
@@ -381,12 +373,15 @@ class ScallopAdapter {
|
|
|
381
373
|
*
|
|
382
374
|
* Call this if a transaction fails after deposit() but before borrow()
|
|
383
375
|
* to reset the adapter state.
|
|
376
|
+
*
|
|
377
|
+
* Also clears the unstaked obligations tracking for the next PTB.
|
|
384
378
|
*/
|
|
385
379
|
clearPendingState() {
|
|
386
380
|
this.pendingObligation = null;
|
|
387
381
|
this.pendingObligationKey = null;
|
|
388
382
|
this.pendingHotPotato = null;
|
|
389
383
|
this.pendingUserAddress = null;
|
|
384
|
+
this.unstakedObligationsInPTB.clear();
|
|
390
385
|
}
|
|
391
386
|
/**
|
|
392
387
|
* Check if there's a pending obligation (for debugging)
|
|
@@ -399,7 +394,7 @@ class ScallopAdapter {
|
|
|
399
394
|
// ============================================================================
|
|
400
395
|
async deposit(tx, coin, coinType, userAddress) {
|
|
401
396
|
this.ensureInitialized();
|
|
402
|
-
const normalized =
|
|
397
|
+
const normalized = normalizeCoinType(coinType);
|
|
403
398
|
const obligations = await this.query.getObligations(userAddress);
|
|
404
399
|
if (obligations.length > 0) {
|
|
405
400
|
// Use existing obligation
|
|
@@ -433,7 +428,7 @@ class ScallopAdapter {
|
|
|
433
428
|
*/
|
|
434
429
|
async withdraw(tx, coinType, amount, userAddress) {
|
|
435
430
|
this.ensureInitialized();
|
|
436
|
-
const normalized =
|
|
431
|
+
const normalized = normalizeCoinType(coinType);
|
|
437
432
|
const obligations = await this.query.getObligations(userAddress);
|
|
438
433
|
if (obligations.length === 0) {
|
|
439
434
|
throw new Error("No obligation found for withdrawal");
|
|
@@ -447,7 +442,7 @@ class ScallopAdapter {
|
|
|
447
442
|
this.unstakeObligation(tx, obligationId, obligationKeyId);
|
|
448
443
|
}
|
|
449
444
|
const clockRef = tx.sharedObjectRef({
|
|
450
|
-
objectId:
|
|
445
|
+
objectId: SUI_CLOCK_OBJECT_ID,
|
|
451
446
|
mutable: false,
|
|
452
447
|
initialSharedVersion: "1",
|
|
453
448
|
});
|
|
@@ -481,7 +476,7 @@ class ScallopAdapter {
|
|
|
481
476
|
*/
|
|
482
477
|
async borrow(tx, coinType, amount, userAddress, _skipOracle) {
|
|
483
478
|
this.ensureInitialized();
|
|
484
|
-
const normalized =
|
|
479
|
+
const normalized = normalizeCoinType(coinType);
|
|
485
480
|
const obligations = await this.query.getObligations(userAddress);
|
|
486
481
|
// Check if we have a pending obligation from deposit in same transaction
|
|
487
482
|
if (obligations.length === 0 &&
|
|
@@ -517,8 +512,8 @@ class ScallopAdapter {
|
|
|
517
512
|
/**
|
|
518
513
|
* Repay debt to obligation
|
|
519
514
|
*
|
|
520
|
-
*
|
|
521
|
-
*
|
|
515
|
+
* IMPORTANT: Repay operations also require the obligation to be unlocked!
|
|
516
|
+
* This method automatically unstakes locked obligations before repaying.
|
|
522
517
|
*
|
|
523
518
|
* @param tx - Transaction to add calls to
|
|
524
519
|
* @param coinType - Type of coin to repay
|
|
@@ -527,17 +522,39 @@ class ScallopAdapter {
|
|
|
527
522
|
*/
|
|
528
523
|
async repay(tx, coinType, coin, userAddress) {
|
|
529
524
|
this.ensureInitialized();
|
|
530
|
-
const normalized =
|
|
525
|
+
const normalized = normalizeCoinType(coinType);
|
|
531
526
|
const obligations = await this.query.getObligations(userAddress);
|
|
532
527
|
if (obligations.length === 0) {
|
|
533
528
|
throw new Error("No obligation found for repayment");
|
|
534
529
|
}
|
|
535
|
-
const
|
|
530
|
+
const obligation = obligations[0];
|
|
531
|
+
const obligationId = obligation.id;
|
|
532
|
+
const obligationKeyId = obligation.keyId;
|
|
533
|
+
const isLocked = obligation.locked;
|
|
534
|
+
// Auto-unstake if obligation is locked (required for repay operations)
|
|
535
|
+
if (isLocked) {
|
|
536
|
+
this.unstakeObligation(tx, obligationId, obligationKeyId);
|
|
537
|
+
}
|
|
536
538
|
this.repayDebt(tx, tx.object(obligationId), coin, normalized);
|
|
537
539
|
}
|
|
538
|
-
async refreshOracles(
|
|
539
|
-
|
|
540
|
-
//
|
|
540
|
+
async refreshOracles(tx, coinTypes, _userAddress) {
|
|
541
|
+
this.ensureInitialized();
|
|
542
|
+
// Convert coinTypes to Scallop coin names
|
|
543
|
+
const coinNames = coinTypes
|
|
544
|
+
.map((ct) => {
|
|
545
|
+
const normalized = normalizeCoinType(ct);
|
|
546
|
+
return this.coinTypeToNameMap[normalized];
|
|
547
|
+
})
|
|
548
|
+
.filter(Boolean);
|
|
549
|
+
if (coinNames.length === 0)
|
|
550
|
+
return;
|
|
551
|
+
// Create Scallop builder and inject existing Transaction into its txBlock.
|
|
552
|
+
// This makes updateAssetPricesQuick() append oracle refresh commands
|
|
553
|
+
// directly into the provided PTB.
|
|
554
|
+
const builder = await this.scallop.createScallopBuilder();
|
|
555
|
+
const scallopTx = builder.createTxBlock();
|
|
556
|
+
scallopTx.txBlock = tx;
|
|
557
|
+
await scallopTx.updateAssetPricesQuick(coinNames);
|
|
541
558
|
}
|
|
542
559
|
/**
|
|
543
560
|
* Get all obligations for a user with their locked status
|
|
@@ -570,11 +587,11 @@ class ScallopAdapter {
|
|
|
570
587
|
return null;
|
|
571
588
|
const oblData = obligationData;
|
|
572
589
|
const collaterals = (oblData.collaterals || []).map((col) => ({
|
|
573
|
-
coinType:
|
|
590
|
+
coinType: normalizeCoinType(col.coinType || col.type?.name || ""),
|
|
574
591
|
amount: String(col.amount || col.depositAmount || 0),
|
|
575
592
|
}));
|
|
576
593
|
const debts = (oblData.debts || []).map((d) => ({
|
|
577
|
-
coinType:
|
|
594
|
+
coinType: normalizeCoinType(d.coinType || d.type?.name || ""),
|
|
578
595
|
amount: String(d.amount || d.borrowAmount || 0),
|
|
579
596
|
}));
|
|
580
597
|
return {
|
|
@@ -586,7 +603,7 @@ class ScallopAdapter {
|
|
|
586
603
|
async getAccountPortfolio(address) {
|
|
587
604
|
this.ensureInitialized();
|
|
588
605
|
const emptyPortfolio = {
|
|
589
|
-
protocol:
|
|
606
|
+
protocol: LendingProtocol.Scallop,
|
|
590
607
|
address,
|
|
591
608
|
healthFactor: Infinity,
|
|
592
609
|
netValueUsd: 0,
|
|
@@ -607,15 +624,15 @@ class ScallopAdapter {
|
|
|
607
624
|
const collaterals = oblData.collaterals || [];
|
|
608
625
|
const debts = oblData.debts || [];
|
|
609
626
|
for (const col of collaterals) {
|
|
610
|
-
const coinType =
|
|
611
|
-
const reserve =
|
|
627
|
+
const coinType = normalizeCoinType(col.coinType || col.type?.name || "");
|
|
628
|
+
const reserve = getReserveByCoinType(coinType);
|
|
612
629
|
const decimals = reserve?.decimals || 9;
|
|
613
630
|
const amount = Number(col.amount || col.depositAmount || 0) / Math.pow(10, decimals);
|
|
614
|
-
const price = await
|
|
631
|
+
const price = await getTokenPrice(coinType);
|
|
615
632
|
const valueUsd = amount * price;
|
|
616
633
|
totalCollateralUsd += valueUsd;
|
|
617
634
|
positions.push({
|
|
618
|
-
protocol:
|
|
635
|
+
protocol: LendingProtocol.Scallop,
|
|
619
636
|
coinType,
|
|
620
637
|
symbol: reserve?.symbol || "UNKNOWN",
|
|
621
638
|
side: "supply",
|
|
@@ -625,15 +642,15 @@ class ScallopAdapter {
|
|
|
625
642
|
});
|
|
626
643
|
}
|
|
627
644
|
for (const d of debts) {
|
|
628
|
-
const coinType =
|
|
629
|
-
const reserve =
|
|
645
|
+
const coinType = normalizeCoinType(d.coinType || d.type?.name || "");
|
|
646
|
+
const reserve = getReserveByCoinType(coinType);
|
|
630
647
|
const decimals = reserve?.decimals || 6;
|
|
631
648
|
const amount = Number(d.amount || d.borrowAmount || 0) / Math.pow(10, decimals);
|
|
632
|
-
const price = await
|
|
649
|
+
const price = await getTokenPrice(coinType);
|
|
633
650
|
const valueUsd = amount * price;
|
|
634
651
|
totalDebtUsd += valueUsd;
|
|
635
652
|
positions.push({
|
|
636
|
-
protocol:
|
|
653
|
+
protocol: LendingProtocol.Scallop,
|
|
637
654
|
coinType,
|
|
638
655
|
symbol: reserve?.symbol || "USDC",
|
|
639
656
|
side: "borrow",
|
|
@@ -643,7 +660,7 @@ class ScallopAdapter {
|
|
|
643
660
|
});
|
|
644
661
|
}
|
|
645
662
|
return {
|
|
646
|
-
protocol:
|
|
663
|
+
protocol: LendingProtocol.Scallop,
|
|
647
664
|
address,
|
|
648
665
|
healthFactor: totalDebtUsd > 0 ? totalCollateralUsd / totalDebtUsd : Infinity,
|
|
649
666
|
netValueUsd: totalCollateralUsd - totalDebtUsd,
|
|
@@ -662,7 +679,7 @@ class ScallopAdapter {
|
|
|
662
679
|
* @returns Scallop coin name (e.g., "sui") or undefined if not found
|
|
663
680
|
*/
|
|
664
681
|
getCoinNameFromType(coinType) {
|
|
665
|
-
const normalized =
|
|
682
|
+
const normalized = normalizeCoinType(coinType);
|
|
666
683
|
return this.coinTypeToNameMap[normalized];
|
|
667
684
|
}
|
|
668
685
|
/**
|
|
@@ -767,6 +784,146 @@ class ScallopAdapter {
|
|
|
767
784
|
this.ensureInitialized();
|
|
768
785
|
return this.suiClient;
|
|
769
786
|
}
|
|
787
|
+
/**
|
|
788
|
+
* Get asset risk parameters for leverage calculations
|
|
789
|
+
*
|
|
790
|
+
* Queries on-chain risk_models table directly from the Scallop Market object,
|
|
791
|
+
* bypassing the SDK's buggy queryMarket() (isLayerZeroAsset crash).
|
|
792
|
+
*
|
|
793
|
+
* On-chain layout:
|
|
794
|
+
* Market → risk_models (Table) → [TypeName key] → RiskModel
|
|
795
|
+
* RiskModel fields are FixedPoint32 (u64 / 2^32 → 0-1 decimal)
|
|
796
|
+
*/
|
|
797
|
+
async getAssetRiskParams(coinType) {
|
|
798
|
+
this.ensureInitialized();
|
|
799
|
+
const FALLBACK = {
|
|
800
|
+
ltv: 0.5,
|
|
801
|
+
liquidationThreshold: 0.6,
|
|
802
|
+
liquidationBonus: 0.05,
|
|
803
|
+
maxMultiplier: 2.0,
|
|
804
|
+
};
|
|
805
|
+
const normalized = normalizeCoinType(coinType);
|
|
806
|
+
try {
|
|
807
|
+
// Step 1: Get risk_models table ID from Market object
|
|
808
|
+
const marketObj = await this.suiClient.getObject({
|
|
809
|
+
id: this.coreAddresses.market,
|
|
810
|
+
options: { showContent: true },
|
|
811
|
+
});
|
|
812
|
+
const marketFields = marketObj.data?.content?.fields;
|
|
813
|
+
const riskModelTableId = marketFields?.risk_models?.fields?.table?.fields?.id?.id;
|
|
814
|
+
if (!riskModelTableId)
|
|
815
|
+
return FALLBACK;
|
|
816
|
+
// Step 2: Query risk model for the coin type
|
|
817
|
+
// Dynamic field key: coin type without "0x" prefix
|
|
818
|
+
const coinTypeKey = normalized.startsWith("0x")
|
|
819
|
+
? normalized.slice(2)
|
|
820
|
+
: normalized;
|
|
821
|
+
const resp = await this.suiClient.getDynamicFieldObject({
|
|
822
|
+
parentId: riskModelTableId,
|
|
823
|
+
name: {
|
|
824
|
+
type: "0x1::type_name::TypeName",
|
|
825
|
+
value: { name: coinTypeKey },
|
|
826
|
+
},
|
|
827
|
+
});
|
|
828
|
+
const rm = resp.data?.content?.fields?.value?.fields;
|
|
829
|
+
if (!rm)
|
|
830
|
+
return FALLBACK;
|
|
831
|
+
// Step 3: Parse FixedPoint32 values (u64 / 2^32)
|
|
832
|
+
const DIVISOR = 2 ** 32;
|
|
833
|
+
const ltv = Number(rm.collateral_factor?.fields?.value) / DIVISOR;
|
|
834
|
+
const liquidationThreshold = Number(rm.liquidation_factor?.fields?.value) / DIVISOR;
|
|
835
|
+
const liquidationBonus = Number(rm.liquidation_discount?.fields?.value) / DIVISOR;
|
|
836
|
+
if (isNaN(ltv) || ltv <= 0 || ltv >= 1)
|
|
837
|
+
return FALLBACK;
|
|
838
|
+
const maxMultiplier = 1 / (1 - ltv);
|
|
839
|
+
return {
|
|
840
|
+
ltv,
|
|
841
|
+
liquidationThreshold,
|
|
842
|
+
liquidationBonus,
|
|
843
|
+
maxMultiplier,
|
|
844
|
+
};
|
|
845
|
+
}
|
|
846
|
+
catch {
|
|
847
|
+
return FALLBACK;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
/**
|
|
851
|
+
* Get current supply/borrow APY for an asset.
|
|
852
|
+
*
|
|
853
|
+
* Uses Scallop's queryMarket() which returns pool data including:
|
|
854
|
+
* - supplyApr / supplyApy: computed from the interest rate model
|
|
855
|
+
* - borrowApr / borrowApy: current borrow rate
|
|
856
|
+
* - spool reward APY is included when available from query
|
|
857
|
+
*/
|
|
858
|
+
async getAssetApy(coinType) {
|
|
859
|
+
this.ensureInitialized();
|
|
860
|
+
const normalized = normalizeCoinType(coinType);
|
|
861
|
+
const coinName = this.coinTypeToNameMap[normalized];
|
|
862
|
+
if (!coinName) {
|
|
863
|
+
throw new Error(`Scallop: coin type not found in mapping: ${normalized}`);
|
|
864
|
+
}
|
|
865
|
+
try {
|
|
866
|
+
// Bypass an SDK bug in isLayerZeroAsset by calling the indexer directly.
|
|
867
|
+
// query.indexer.getMarketPool fetches from Scallop REST API (/api/market/migrate)
|
|
868
|
+
// without going through the broken ScallopUtils code path.
|
|
869
|
+
const pool = await this.query.indexer.getMarketPool(coinName);
|
|
870
|
+
if (!pool) {
|
|
871
|
+
throw new Error(`Scallop: market pool not found for ${coinName}`);
|
|
872
|
+
}
|
|
873
|
+
// Scallop SDK calculates these from the interest rate model + utilization
|
|
874
|
+
// Values are 0-1 decimals already (e.g., 0.05 = 5%)
|
|
875
|
+
// pool.borrowApy from the indexer is the base (gross) borrow rate.
|
|
876
|
+
const supplyApy = pool.supplyApy ?? 0;
|
|
877
|
+
const grossBorrowApy = pool.borrowApy ?? 0;
|
|
878
|
+
// Spool supply reward APY if available
|
|
879
|
+
const rewardApy = pool.rewardApy ?? 0;
|
|
880
|
+
// Borrow incentive rewards (sSUI, sSCA, ...) reduce the effective borrow cost.
|
|
881
|
+
// The REST API returns pool.rewards[] where each entry has rewardApr (0-1 decimal).
|
|
882
|
+
// The SDK getBorrowIncentivePool() has an internal bug, so we fetch directly from
|
|
883
|
+
// the Scallop REST API as a reliable fallback.
|
|
884
|
+
let borrowRewardApy = 0;
|
|
885
|
+
try {
|
|
886
|
+
let rewards = [];
|
|
887
|
+
// Try SDK indexer first
|
|
888
|
+
try {
|
|
889
|
+
const borrowIncentivePool = await this.query.indexer.getBorrowIncentivePool(coinName);
|
|
890
|
+
rewards =
|
|
891
|
+
borrowIncentivePool?.rewards ??
|
|
892
|
+
Object.values(borrowIncentivePool?.points ?? {});
|
|
893
|
+
}
|
|
894
|
+
catch {
|
|
895
|
+
// SDK failed — fall through to REST API fetch
|
|
896
|
+
}
|
|
897
|
+
// Fallback: fetch REST API directly (handles SDK getBorrowIncentivePools bug)
|
|
898
|
+
if (rewards.length === 0) {
|
|
899
|
+
const resp = await fetch("https://sdk.api.scallop.io/api/borrowIncentivePools/migrate");
|
|
900
|
+
if (resp.ok) {
|
|
901
|
+
const data = await resp.json();
|
|
902
|
+
const pool = Object.values(data).find((p) => p?.coinName === coinName);
|
|
903
|
+
rewards = pool?.rewards ?? [];
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
for (const reward of rewards) {
|
|
907
|
+
if (reward && typeof reward.rewardApr === "number") {
|
|
908
|
+
borrowRewardApy += reward.rewardApr;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
catch {
|
|
913
|
+
// borrow incentive data unavailable — use 0
|
|
914
|
+
}
|
|
915
|
+
return {
|
|
916
|
+
supplyApy,
|
|
917
|
+
rewardApy,
|
|
918
|
+
totalSupplyApy: supplyApy + rewardApy,
|
|
919
|
+
// Net borrow cost: gross APR minus borrow incentive rebates
|
|
920
|
+
borrowApy: Math.max(0, grossBorrowApy - borrowRewardApy),
|
|
921
|
+
borrowRewardApy,
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
catch (err) {
|
|
925
|
+
throw new Error(`Scallop: failed to get APY for ${coinName}: ${err}`);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
770
928
|
}
|
|
771
|
-
|
|
772
|
-
//# sourceMappingURL=scallop.js.map
|
|
929
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/protocols/scallop/adapter.ts"],"names":[],"mappings":"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"}
|