@naviprotocol/lending 1.4.4-beta.1 → 1.4.4-beta.10
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/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +778 -765
- package/dist/index.esm.js.map +1 -1
- package/dist/market.d.ts +1 -1
- package/dist/market.d.ts.map +1 -1
- package/dist/pool.d.ts.map +1 -1
- package/dist/reward.d.ts.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { Transaction as
|
|
2
|
-
import { bcs as m, toHex as
|
|
3
|
-
import { SuiClient as
|
|
4
|
-
import
|
|
5
|
-
import { normalizeStructTag as
|
|
6
|
-
import { SuiPriceServiceConnection as
|
|
1
|
+
import { Transaction as F } from "@mysten/sui/transactions";
|
|
2
|
+
import { bcs as m, toHex as ce, fromHex as se } from "@mysten/bcs";
|
|
3
|
+
import { SuiClient as le, getFullnodeUrl as ue } from "@mysten/sui/client";
|
|
4
|
+
import pe from "lodash.camelcase";
|
|
5
|
+
import { normalizeStructTag as de } from "@mysten/sui/utils";
|
|
6
|
+
import { SuiPriceServiceConnection as Q, SuiPythClient as me } from "@pythnetwork/pyth-sui-js";
|
|
7
7
|
import p from "bignumber.js";
|
|
8
8
|
import { bcs as C } from "@mysten/sui/bcs";
|
|
9
|
-
const
|
|
9
|
+
const K = m.bytes(32).transform({
|
|
10
10
|
// To change the input type, you need to provide a type definition for the input
|
|
11
|
-
input: (e) =>
|
|
12
|
-
output: (e) =>
|
|
13
|
-
}),
|
|
11
|
+
input: (e) => se(e),
|
|
12
|
+
output: (e) => ce(e)
|
|
13
|
+
}), Ge = m.struct("IncentiveAPYInfo", {
|
|
14
14
|
/** Asset identifier */
|
|
15
15
|
asset_id: m.u8(),
|
|
16
16
|
/** Annual Percentage Yield as a 256-bit integer */
|
|
17
17
|
apy: m.u256(),
|
|
18
18
|
/** List of supported coin types for this incentive */
|
|
19
19
|
coin_types: m.vector(m.string())
|
|
20
|
-
}),
|
|
20
|
+
}), fe = m.struct("IncentivePoolInfo", {
|
|
21
21
|
/** Unique pool identifier */
|
|
22
|
-
pool_id:
|
|
22
|
+
pool_id: K,
|
|
23
23
|
/** Address holding the incentive funds */
|
|
24
|
-
funds:
|
|
24
|
+
funds: K,
|
|
25
25
|
/** Current phase of the incentive program */
|
|
26
26
|
phase: m.u64(),
|
|
27
27
|
/** Timestamp when the incentive started */
|
|
@@ -44,12 +44,12 @@ const z = m.bytes(32).transform({
|
|
|
44
44
|
available: m.u256(),
|
|
45
45
|
/** Total amount of incentives */
|
|
46
46
|
total: m.u256()
|
|
47
|
-
}),
|
|
47
|
+
}), ze = m.struct("IncentivePoolInfoByPhase", {
|
|
48
48
|
/** Phase number */
|
|
49
49
|
phase: m.u64(),
|
|
50
50
|
/** List of incentive pools in this phase */
|
|
51
|
-
pools: m.vector(
|
|
52
|
-
}),
|
|
51
|
+
pools: m.vector(fe)
|
|
52
|
+
}), Ke = m.struct("OracleInfo", {
|
|
53
53
|
/** Oracle identifier */
|
|
54
54
|
oracle_id: m.u8(),
|
|
55
55
|
/** Current price as a 256-bit integer */
|
|
@@ -58,7 +58,7 @@ const z = m.bytes(32).transform({
|
|
|
58
58
|
decimals: m.u8(),
|
|
59
59
|
/** Whether the oracle data is valid */
|
|
60
60
|
valid: m.bool()
|
|
61
|
-
}),
|
|
61
|
+
}), Ye = m.struct("FlashLoanAssetConfig", {
|
|
62
62
|
/** Unique identifier for the flash loan asset */
|
|
63
63
|
id: m.string(),
|
|
64
64
|
/** Asset identifier */
|
|
@@ -75,7 +75,7 @@ const z = m.bytes(32).transform({
|
|
|
75
75
|
max: m.u64(),
|
|
76
76
|
/** Minimum flash loan amount */
|
|
77
77
|
min: m.u64()
|
|
78
|
-
}),
|
|
78
|
+
}), Je = m.struct("ReserveDataInfo", {
|
|
79
79
|
/** Reserve identifier */
|
|
80
80
|
id: m.u8(),
|
|
81
81
|
/** Oracle identifier for price feeds */
|
|
@@ -122,208 +122,210 @@ const z = m.bytes(32).transform({
|
|
|
122
122
|
liquidation_bonus: m.u256(),
|
|
123
123
|
/** Liquidation threshold */
|
|
124
124
|
liquidation_threshold: m.u256()
|
|
125
|
-
}),
|
|
125
|
+
}), ye = m.struct("UserStateInfo", {
|
|
126
126
|
/** Asset identifier */
|
|
127
127
|
asset_id: m.u8(),
|
|
128
128
|
/** User's current borrow balance */
|
|
129
129
|
borrow_balance: m.u256(),
|
|
130
130
|
/** User's current supply balance */
|
|
131
131
|
supply_balance: m.u256()
|
|
132
|
-
}),
|
|
133
|
-
version:
|
|
134
|
-
},
|
|
132
|
+
}), ge = "1.4.4-beta.10", V = {
|
|
133
|
+
version: ge
|
|
134
|
+
}, he = V.version, ve = () => {
|
|
135
135
|
if (typeof process < "u" && process.versions && process.versions.node)
|
|
136
136
|
try {
|
|
137
|
-
const e = require("os"),
|
|
138
|
-
return `Node.js ${
|
|
137
|
+
const e = require("os"), r = process.version, o = e.type(), n = e.arch();
|
|
138
|
+
return `Node.js ${r.startsWith("v") ? r.substring(1) : r}; ${o}/${n}`;
|
|
139
139
|
} catch {
|
|
140
140
|
return `Node.js ${process.version}; OS/Unknown (Error)`;
|
|
141
141
|
}
|
|
142
142
|
return "Node/Unknown";
|
|
143
|
-
},
|
|
143
|
+
}, we = () => {
|
|
144
144
|
let e = "";
|
|
145
|
-
return typeof process < "u" && process.versions && process.versions.node && (e = `lending/${
|
|
146
|
-
},
|
|
145
|
+
return typeof process < "u" && process.versions && process.versions.node && (e = `lending/${he} (${ve()})`), e;
|
|
146
|
+
}, Y = we(), S = new le({
|
|
147
147
|
url: ue("mainnet")
|
|
148
148
|
});
|
|
149
|
-
function
|
|
150
|
-
const
|
|
151
|
-
return e.forEach((o,
|
|
152
|
-
const t =
|
|
149
|
+
function X(e) {
|
|
150
|
+
const r = [];
|
|
151
|
+
return e.forEach((o, n) => {
|
|
152
|
+
const t = n === e.length - 1;
|
|
153
153
|
if (typeof o == "object" && o !== null && t) {
|
|
154
|
-
const { client: a, disableCache:
|
|
155
|
-
|
|
154
|
+
const { client: a, disableCache: s, cacheTime: i, ...c } = o;
|
|
155
|
+
r.push(c);
|
|
156
156
|
} else
|
|
157
|
-
|
|
158
|
-
}), JSON.stringify(
|
|
157
|
+
r.push(o);
|
|
158
|
+
}), JSON.stringify(r);
|
|
159
159
|
}
|
|
160
160
|
function B(e) {
|
|
161
|
-
const
|
|
161
|
+
const r = {};
|
|
162
162
|
return (...o) => {
|
|
163
|
-
const
|
|
164
|
-
return n
|
|
165
|
-
delete n
|
|
166
|
-
})), n
|
|
163
|
+
const n = X(o);
|
|
164
|
+
return r[n] || (r[n] = e(...o).finally(() => {
|
|
165
|
+
delete r[n];
|
|
166
|
+
})), r[n];
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
169
|
function P(e) {
|
|
170
|
-
let
|
|
170
|
+
let r = {};
|
|
171
171
|
return (...o) => {
|
|
172
|
-
const
|
|
173
|
-
return !
|
|
174
|
-
data:
|
|
172
|
+
const n = o[o.length - 1], t = X(o), a = r[t];
|
|
173
|
+
return !n?.disableCache && typeof a?.data < "u" && (typeof n?.cacheTime > "u" || n.cacheTime > Date.now() - a.cacheAt) ? Promise.resolve(a.data) : e(...o).then((s) => (r[t] = {
|
|
174
|
+
data: s,
|
|
175
175
|
cacheAt: Date.now()
|
|
176
|
-
},
|
|
176
|
+
}, s));
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
|
-
function
|
|
180
|
-
return Array.isArray(e) ? e.map((
|
|
181
|
-
(
|
|
182
|
-
...
|
|
183
|
-
[
|
|
179
|
+
function H(e) {
|
|
180
|
+
return Array.isArray(e) ? e.map((r) => H(r)) : e != null && typeof e == "object" ? Object.keys(e).reduce(
|
|
181
|
+
(r, o) => ({
|
|
182
|
+
...r,
|
|
183
|
+
[pe(o)]: H(e[o])
|
|
184
184
|
}),
|
|
185
185
|
{}
|
|
186
186
|
) : e;
|
|
187
187
|
}
|
|
188
|
-
function h(e,
|
|
189
|
-
return typeof e == "object" ? e :
|
|
188
|
+
function h(e, r) {
|
|
189
|
+
return typeof e == "object" ? e : r(e);
|
|
190
190
|
}
|
|
191
|
-
function
|
|
192
|
-
return typeof
|
|
191
|
+
function be(e, r) {
|
|
192
|
+
return typeof r == "string" ? e.object(r) : typeof r == "object" && r.$kind ? r : e.object(r.contract.pool);
|
|
193
193
|
}
|
|
194
|
-
function
|
|
194
|
+
function W(e, r, o) {
|
|
195
195
|
if (e.results && e.results.length > 0) {
|
|
196
196
|
if (e.results[0].returnValues && e.results[0].returnValues.length > 0)
|
|
197
|
-
return e.results[0].returnValues.map((
|
|
197
|
+
return e.results[0].returnValues.map((n, t) => (r[t] || r[0]).parse(Uint8Array.from(n[0])));
|
|
198
198
|
} else if (e.error)
|
|
199
199
|
return console.log(`Get an error, msg: ${e.error}`), [];
|
|
200
200
|
return [];
|
|
201
201
|
}
|
|
202
|
-
function
|
|
203
|
-
return
|
|
202
|
+
function b(e) {
|
|
203
|
+
return de(e);
|
|
204
204
|
}
|
|
205
|
-
function
|
|
206
|
-
const
|
|
207
|
-
return
|
|
205
|
+
function x(e) {
|
|
206
|
+
const r = (e || 0) / Math.pow(10, 27);
|
|
207
|
+
return r > Math.pow(10, 5) ? 1 / 0 : r;
|
|
208
208
|
}
|
|
209
|
-
new
|
|
209
|
+
new Q("https://hermes.pyth.network", {
|
|
210
210
|
timeout: 2e4
|
|
211
211
|
});
|
|
212
|
-
const
|
|
213
|
-
if (!Number(e) || !Number(
|
|
214
|
-
const o = new p(1).shiftedBy(1 *
|
|
215
|
-
return new p(e).multipliedBy(new p(
|
|
216
|
-
}, M =
|
|
217
|
-
"User-Agent":
|
|
212
|
+
const ke = 27, J = (e, r) => {
|
|
213
|
+
if (!Number(e) || !Number(r)) return new p(0);
|
|
214
|
+
const o = new p(1).shiftedBy(1 * ke), n = o.multipliedBy(new p(0.5));
|
|
215
|
+
return new p(e).multipliedBy(new p(r)).plus(n).dividedBy(o).integerValue(p.ROUND_DOWN);
|
|
216
|
+
}, M = Y ? {
|
|
217
|
+
"User-Agent": Y
|
|
218
218
|
} : {};
|
|
219
|
-
function
|
|
219
|
+
function G(e, r = "uniqueId") {
|
|
220
220
|
return e.reduce(
|
|
221
|
-
(o,
|
|
221
|
+
(o, n) => (o[n[r]] = n, o),
|
|
222
222
|
{}
|
|
223
223
|
);
|
|
224
224
|
}
|
|
225
|
-
function
|
|
225
|
+
function Z(e, r = "uniqueId") {
|
|
226
226
|
return e.reduce(
|
|
227
|
-
(o,
|
|
227
|
+
(o, n) => (o[n[r]] = n, o),
|
|
228
228
|
{}
|
|
229
229
|
);
|
|
230
230
|
}
|
|
231
|
-
function
|
|
232
|
-
const o = e.emodes.find((t) => t.emodeId ===
|
|
231
|
+
function L(e, r) {
|
|
232
|
+
const o = e.emodes.find((t) => t.emodeId === r.emodeId);
|
|
233
233
|
if (!o)
|
|
234
234
|
throw new Error("EMode not found in pool");
|
|
235
|
-
const
|
|
235
|
+
const n = o.assets.find((t) => t.assetId === e.id);
|
|
236
236
|
return {
|
|
237
237
|
...e,
|
|
238
238
|
emode: {
|
|
239
|
-
...
|
|
239
|
+
...n,
|
|
240
240
|
emodeId: o.emodeId
|
|
241
241
|
},
|
|
242
242
|
isEMode: !0
|
|
243
243
|
};
|
|
244
244
|
}
|
|
245
|
-
function
|
|
246
|
-
const [
|
|
247
|
-
return !
|
|
248
|
-
marketKey:
|
|
245
|
+
function _e(e) {
|
|
246
|
+
const [r, o] = e.split("-");
|
|
247
|
+
return !r || !o ? null : {
|
|
248
|
+
marketKey: r,
|
|
249
249
|
poolId: parseInt(o)
|
|
250
250
|
};
|
|
251
251
|
}
|
|
252
252
|
function T() {
|
|
253
253
|
return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
|
254
254
|
}
|
|
255
|
-
var
|
|
256
|
-
const
|
|
255
|
+
var R = /* @__PURE__ */ ((e) => (e[e.Supply = 1] = "Supply", e[e.Withdraw = 2] = "Withdraw", e[e.Borrow = 3] = "Borrow", e[e.Repay = 4] = "Repay", e))(R || {});
|
|
256
|
+
const q = P(
|
|
257
257
|
B(
|
|
258
258
|
async (e) => {
|
|
259
|
-
const
|
|
259
|
+
const r = (e?.markets || [E.main]).map((t) => j(t)), o = `https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env || "prod"}&sdk=${V.version}&market=${r.map(
|
|
260
260
|
(t) => t.key
|
|
261
|
-
)}`,
|
|
262
|
-
return
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
return t.market ===
|
|
266
|
-
}).filter((f) => !!f.assets.find((
|
|
267
|
-
t.emodes =
|
|
268
|
-
const i = p(t.totalSupplyAmount).div(Math.pow(10, 9)).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(),
|
|
261
|
+
)}`, n = await fetch(o, { headers: M }).then((t) => t.json());
|
|
262
|
+
return n.data.forEach((t) => {
|
|
263
|
+
const s = n.meta.emodes.filter((f) => {
|
|
264
|
+
const k = j(f.marketId);
|
|
265
|
+
return t.market === k.key && f.isActive;
|
|
266
|
+
}).filter((f) => !!f.assets.find((k) => k.assetId === t.id));
|
|
267
|
+
t.emodes = s;
|
|
268
|
+
const i = p(t.totalSupplyAmount).div(Math.pow(10, 9)).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(), c = p(t.borrowedAmount).shiftedBy(-9).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(), l = p(i).multipliedBy(t.oracle.price).toString(), d = p(c).multipliedBy(t.oracle.price).toString(), y = p(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(), v = p.max(
|
|
269
269
|
p(t.borrowedAmount),
|
|
270
270
|
p(t.validBorrowAmount)
|
|
271
|
-
).shiftedBy(-9).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(), g = p(y).multipliedBy(t.oracle.price).toString(),
|
|
272
|
-
t.poolSupplyAmount = i, t.poolBorrowAmount =
|
|
273
|
-
}),
|
|
271
|
+
).shiftedBy(-9).decimalPlaces(t.token.decimals, p.ROUND_DOWN).toString(), g = p(y).multipliedBy(t.oracle.price).toString(), u = p(v).multipliedBy(t.oracle.price).toString();
|
|
272
|
+
t.poolSupplyAmount = i, t.poolBorrowAmount = c, t.poolSupplyValue = l, t.poolBorrowValue = d, t.poolSupplyCapAmount = y, t.poolBorrowCapAmount = v, t.poolSupplyCapValue = g, t.poolBorrowCapValue = u;
|
|
273
|
+
}), n.data;
|
|
274
274
|
}
|
|
275
275
|
)
|
|
276
276
|
);
|
|
277
|
-
async function A(e,
|
|
278
|
-
let o =
|
|
277
|
+
async function A(e, r) {
|
|
278
|
+
let o = r?.market;
|
|
279
279
|
if (typeof e == "string") {
|
|
280
|
-
const a =
|
|
280
|
+
const a = _e(e);
|
|
281
281
|
a && (o = a.marketKey, e = a.poolId);
|
|
282
282
|
}
|
|
283
|
-
const
|
|
284
|
-
...
|
|
285
|
-
markets: [o ||
|
|
286
|
-
cacheTime:
|
|
283
|
+
const n = await q({
|
|
284
|
+
...r,
|
|
285
|
+
markets: [o || U],
|
|
286
|
+
cacheTime: w
|
|
287
287
|
});
|
|
288
288
|
if (typeof e == "object")
|
|
289
289
|
return e;
|
|
290
|
-
const t =
|
|
290
|
+
const t = n.find((a) => typeof e == "string" ? b(a.suiCoinType) === b(e) : typeof e == "number" ? a.id === e : !1);
|
|
291
291
|
if (!t)
|
|
292
292
|
throw new Error("Pool not found");
|
|
293
293
|
return t.isDeprecated && console.log(`The lending pool for coinType ${t.suiCoinType} is going to be deprecated.`), t;
|
|
294
294
|
}
|
|
295
|
-
const
|
|
295
|
+
const Ze = P(
|
|
296
296
|
B(async (e) => {
|
|
297
|
-
const
|
|
298
|
-
return (await fetch(
|
|
297
|
+
const r = `https://open-api.naviprotocol.io/api/navi/stats?sdk=${V.version}`;
|
|
298
|
+
return (await fetch(r, { headers: M }).then((n) => n.json())).data;
|
|
299
299
|
})
|
|
300
|
-
),
|
|
300
|
+
), Qe = P(
|
|
301
301
|
B(
|
|
302
302
|
async (e) => {
|
|
303
|
-
const
|
|
304
|
-
return await fetch(
|
|
303
|
+
const r = `https://open-api.naviprotocol.io/api/navi/fee?sdk=${V.version}`;
|
|
304
|
+
return await fetch(r, { headers: M }).then((n) => n.json());
|
|
305
305
|
}
|
|
306
306
|
)
|
|
307
307
|
);
|
|
308
|
-
async function
|
|
308
|
+
async function Ce(e, r, o, n) {
|
|
309
309
|
const t = await _({
|
|
310
|
-
...
|
|
311
|
-
cacheTime:
|
|
312
|
-
}), a = await A(
|
|
313
|
-
|
|
310
|
+
...n,
|
|
311
|
+
cacheTime: w
|
|
312
|
+
}), a = await A(r, n);
|
|
313
|
+
n?.market;
|
|
314
|
+
const s = n?.env || "prod";
|
|
315
|
+
if (a?.deprecatedAt && Date.now() > a.deprecatedAt)
|
|
314
316
|
throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);
|
|
315
|
-
const
|
|
316
|
-
if (
|
|
317
|
-
if (!
|
|
317
|
+
const i = typeof o == "object" && o.$kind === "GasCoin";
|
|
318
|
+
if (b(a.suiCoinType) === b("0x2::sui::SUI") && i) {
|
|
319
|
+
if (!n?.amount)
|
|
318
320
|
throw new Error("Amount is required for sui coin");
|
|
319
|
-
o = e.splitCoins(o, [
|
|
321
|
+
o = e.splitCoins(o, [n.amount]);
|
|
320
322
|
}
|
|
321
|
-
let
|
|
322
|
-
return typeof
|
|
323
|
+
let c;
|
|
324
|
+
return typeof n?.amount < "u" ? c = h(n.amount, e.pure.u64) : c = e.moveCall({
|
|
323
325
|
target: "0x2::coin::value",
|
|
324
326
|
arguments: [h(o, e.object)],
|
|
325
327
|
typeArguments: [a.suiCoinType]
|
|
326
|
-
}),
|
|
328
|
+
}), n?.accountCap ? e.moveCall({
|
|
327
329
|
target: `${t.package}::incentive_v3::deposit_with_account_cap`,
|
|
328
330
|
arguments: [
|
|
329
331
|
e.object("0x06"),
|
|
@@ -333,7 +335,7 @@ async function _e(e, n, o, r) {
|
|
|
333
335
|
h(o, e.object),
|
|
334
336
|
e.object(t.incentiveV2),
|
|
335
337
|
e.object(t.incentiveV3),
|
|
336
|
-
h(
|
|
338
|
+
h(n.accountCap, e.object)
|
|
337
339
|
],
|
|
338
340
|
typeArguments: [a.suiCoinType]
|
|
339
341
|
}) : e.moveCall({
|
|
@@ -344,25 +346,25 @@ async function _e(e, n, o, r) {
|
|
|
344
346
|
e.object(a.contract.pool),
|
|
345
347
|
e.pure.u8(a.id),
|
|
346
348
|
h(o, e.object),
|
|
347
|
-
|
|
349
|
+
c,
|
|
348
350
|
e.object(t.incentiveV2),
|
|
349
351
|
e.object(t.incentiveV3)
|
|
350
352
|
],
|
|
351
353
|
typeArguments: [a.suiCoinType]
|
|
352
|
-
}), t.version === 2 && a.token.symbol === "SUI" && e.moveCall({
|
|
354
|
+
}), t.version === 2 && a.token.symbol === "SUI" && s === "prod" && e.moveCall({
|
|
353
355
|
target: `${t.package}::pool::refresh_stake`,
|
|
354
356
|
arguments: [e.object(a.contract.pool), e.object("0x05")]
|
|
355
357
|
}), e;
|
|
356
358
|
}
|
|
357
|
-
async function
|
|
359
|
+
async function Xe(e, r, o, n) {
|
|
358
360
|
const t = await _({
|
|
359
|
-
...
|
|
360
|
-
cacheTime:
|
|
361
|
-
}), a = await A(
|
|
361
|
+
...n,
|
|
362
|
+
cacheTime: w
|
|
363
|
+
}), a = await A(r, n), s = h(o, e.pure.u64);
|
|
362
364
|
let i;
|
|
363
365
|
if (t.version === 1)
|
|
364
|
-
if (
|
|
365
|
-
const [
|
|
366
|
+
if (n?.accountCap) {
|
|
367
|
+
const [l] = e.moveCall({
|
|
366
368
|
target: `${t.package}::incentive_v3::withdraw_with_account_cap`,
|
|
367
369
|
arguments: [
|
|
368
370
|
e.object("0x06"),
|
|
@@ -370,16 +372,16 @@ async function Qe(e, n, o, r) {
|
|
|
370
372
|
e.object(t.storage),
|
|
371
373
|
e.object(a.contract.pool),
|
|
372
374
|
e.pure.u8(a.id),
|
|
373
|
-
|
|
375
|
+
s,
|
|
374
376
|
e.object(t.incentiveV2),
|
|
375
377
|
e.object(t.incentiveV3),
|
|
376
|
-
h(
|
|
378
|
+
h(n.accountCap, e.object)
|
|
377
379
|
],
|
|
378
380
|
typeArguments: [a.suiCoinType]
|
|
379
381
|
});
|
|
380
|
-
i =
|
|
382
|
+
i = l;
|
|
381
383
|
} else {
|
|
382
|
-
const [
|
|
384
|
+
const [l] = e.moveCall({
|
|
383
385
|
target: `${t.package}::incentive_v3::withdraw`,
|
|
384
386
|
arguments: [
|
|
385
387
|
e.object("0x06"),
|
|
@@ -387,16 +389,16 @@ async function Qe(e, n, o, r) {
|
|
|
387
389
|
e.object(t.storage),
|
|
388
390
|
e.object(a.contract.pool),
|
|
389
391
|
e.pure.u8(a.id),
|
|
390
|
-
|
|
392
|
+
s,
|
|
391
393
|
e.object(t.incentiveV2),
|
|
392
394
|
e.object(t.incentiveV3)
|
|
393
395
|
],
|
|
394
396
|
typeArguments: [a.suiCoinType]
|
|
395
397
|
});
|
|
396
|
-
i =
|
|
398
|
+
i = l;
|
|
397
399
|
}
|
|
398
|
-
else if (
|
|
399
|
-
const [
|
|
400
|
+
else if (n?.accountCap) {
|
|
401
|
+
const [l] = e.moveCall({
|
|
400
402
|
target: `${t.package}::incentive_v3::withdraw_with_account_cap_v2`,
|
|
401
403
|
arguments: [
|
|
402
404
|
e.object("0x06"),
|
|
@@ -404,17 +406,17 @@ async function Qe(e, n, o, r) {
|
|
|
404
406
|
e.object(t.storage),
|
|
405
407
|
e.object(a.contract.pool),
|
|
406
408
|
e.pure.u8(a.id),
|
|
407
|
-
|
|
409
|
+
s,
|
|
408
410
|
e.object(t.incentiveV2),
|
|
409
411
|
e.object(t.incentiveV3),
|
|
410
|
-
h(
|
|
412
|
+
h(n.accountCap, e.object),
|
|
411
413
|
e.object("0x05")
|
|
412
414
|
],
|
|
413
415
|
typeArguments: [a.suiCoinType]
|
|
414
416
|
});
|
|
415
|
-
i =
|
|
417
|
+
i = l;
|
|
416
418
|
} else {
|
|
417
|
-
const [
|
|
419
|
+
const [l] = e.moveCall({
|
|
418
420
|
target: `${t.package}::incentive_v3::withdraw_v2`,
|
|
419
421
|
arguments: [
|
|
420
422
|
e.object("0x06"),
|
|
@@ -422,14 +424,14 @@ async function Qe(e, n, o, r) {
|
|
|
422
424
|
e.object(t.storage),
|
|
423
425
|
e.object(a.contract.pool),
|
|
424
426
|
e.pure.u8(a.id),
|
|
425
|
-
|
|
427
|
+
s,
|
|
426
428
|
e.object(t.incentiveV2),
|
|
427
429
|
e.object(t.incentiveV3),
|
|
428
430
|
e.object("0x05")
|
|
429
431
|
],
|
|
430
432
|
typeArguments: [a.suiCoinType]
|
|
431
433
|
});
|
|
432
|
-
i =
|
|
434
|
+
i = l;
|
|
433
435
|
}
|
|
434
436
|
return e.moveCall({
|
|
435
437
|
target: "0x2::coin::from_balance",
|
|
@@ -437,18 +439,18 @@ async function Qe(e, n, o, r) {
|
|
|
437
439
|
typeArguments: [a.suiCoinType]
|
|
438
440
|
});
|
|
439
441
|
}
|
|
440
|
-
async function
|
|
442
|
+
async function xe(e, r, o, n) {
|
|
441
443
|
const t = await _({
|
|
442
|
-
...
|
|
443
|
-
cacheTime:
|
|
444
|
-
}), a = await A(
|
|
444
|
+
...n,
|
|
445
|
+
cacheTime: w
|
|
446
|
+
}), a = await A(r, n);
|
|
445
447
|
if (a?.deprecatedAt && Date.now() > a.deprecatedAt)
|
|
446
448
|
throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);
|
|
447
|
-
const
|
|
449
|
+
const s = h(o, e.pure.u64);
|
|
448
450
|
let i;
|
|
449
451
|
if (t.version === 1)
|
|
450
|
-
if (
|
|
451
|
-
const [
|
|
452
|
+
if (n?.accountCap) {
|
|
453
|
+
const [l] = e.moveCall({
|
|
452
454
|
target: `${t.package}::incentive_v3::borrow_with_account_cap`,
|
|
453
455
|
arguments: [
|
|
454
456
|
e.object("0x06"),
|
|
@@ -456,16 +458,16 @@ async function Xe(e, n, o, r) {
|
|
|
456
458
|
e.object(t.storage),
|
|
457
459
|
e.object(a.contract.pool),
|
|
458
460
|
e.pure.u8(a.id),
|
|
459
|
-
|
|
461
|
+
s,
|
|
460
462
|
e.object(t.incentiveV2),
|
|
461
463
|
e.object(t.incentiveV3),
|
|
462
|
-
h(
|
|
464
|
+
h(n.accountCap, e.object)
|
|
463
465
|
],
|
|
464
466
|
typeArguments: [a.suiCoinType]
|
|
465
467
|
});
|
|
466
|
-
i =
|
|
468
|
+
i = l;
|
|
467
469
|
} else {
|
|
468
|
-
const [
|
|
470
|
+
const [l] = e.moveCall({
|
|
469
471
|
target: `${t.package}::incentive_v3::borrow`,
|
|
470
472
|
arguments: [
|
|
471
473
|
e.object("0x06"),
|
|
@@ -473,16 +475,16 @@ async function Xe(e, n, o, r) {
|
|
|
473
475
|
e.object(t.storage),
|
|
474
476
|
e.object(a.contract.pool),
|
|
475
477
|
e.pure.u8(a.id),
|
|
476
|
-
|
|
478
|
+
s,
|
|
477
479
|
e.object(t.incentiveV2),
|
|
478
480
|
e.object(t.incentiveV3)
|
|
479
481
|
],
|
|
480
482
|
typeArguments: [a.suiCoinType]
|
|
481
483
|
});
|
|
482
|
-
i =
|
|
484
|
+
i = l;
|
|
483
485
|
}
|
|
484
|
-
else if (
|
|
485
|
-
const [
|
|
486
|
+
else if (n?.accountCap) {
|
|
487
|
+
const [l] = e.moveCall({
|
|
486
488
|
target: `${t.package}::incentive_v3::borrow_with_account_cap_v2`,
|
|
487
489
|
arguments: [
|
|
488
490
|
e.object("0x06"),
|
|
@@ -490,17 +492,17 @@ async function Xe(e, n, o, r) {
|
|
|
490
492
|
e.object(t.storage),
|
|
491
493
|
e.object(a.contract.pool),
|
|
492
494
|
e.pure.u8(a.id),
|
|
493
|
-
|
|
495
|
+
s,
|
|
494
496
|
e.object(t.incentiveV2),
|
|
495
497
|
e.object(t.incentiveV3),
|
|
496
|
-
h(
|
|
498
|
+
h(n.accountCap, e.object),
|
|
497
499
|
e.object("0x05")
|
|
498
500
|
],
|
|
499
501
|
typeArguments: [a.suiCoinType]
|
|
500
502
|
});
|
|
501
|
-
i =
|
|
503
|
+
i = l;
|
|
502
504
|
} else {
|
|
503
|
-
const [
|
|
505
|
+
const [l] = e.moveCall({
|
|
504
506
|
target: `${t.package}::incentive_v3::borrow_v2`,
|
|
505
507
|
arguments: [
|
|
506
508
|
e.object("0x06"),
|
|
@@ -508,14 +510,14 @@ async function Xe(e, n, o, r) {
|
|
|
508
510
|
e.object(t.storage),
|
|
509
511
|
e.object(a.contract.pool),
|
|
510
512
|
e.pure.u8(a.id),
|
|
511
|
-
|
|
513
|
+
s,
|
|
512
514
|
e.object(t.incentiveV2),
|
|
513
515
|
e.object(t.incentiveV3),
|
|
514
516
|
e.object("0x05")
|
|
515
517
|
],
|
|
516
518
|
typeArguments: [a.suiCoinType]
|
|
517
519
|
});
|
|
518
|
-
i =
|
|
520
|
+
i = l;
|
|
519
521
|
}
|
|
520
522
|
return e.moveCall({
|
|
521
523
|
target: "0x2::coin::from_balance",
|
|
@@ -523,23 +525,23 @@ async function Xe(e, n, o, r) {
|
|
|
523
525
|
typeArguments: [a.suiCoinType]
|
|
524
526
|
});
|
|
525
527
|
}
|
|
526
|
-
async function
|
|
528
|
+
async function et(e, r, o, n) {
|
|
527
529
|
const t = await _({
|
|
528
|
-
...
|
|
529
|
-
cacheTime:
|
|
530
|
-
}), a = await A(
|
|
531
|
-
if (
|
|
532
|
-
if (!
|
|
530
|
+
...n,
|
|
531
|
+
cacheTime: w
|
|
532
|
+
}), a = await A(r, n), s = typeof o == "object" && o.$kind === "GasCoin";
|
|
533
|
+
if (b(a.suiCoinType) === b("0x2::sui::SUI") && s) {
|
|
534
|
+
if (!n?.amount)
|
|
533
535
|
throw new Error("Amount is required for sui coin");
|
|
534
|
-
o = e.splitCoins(o, [
|
|
536
|
+
o = e.splitCoins(o, [n.amount]);
|
|
535
537
|
}
|
|
536
538
|
let i;
|
|
537
|
-
if (typeof
|
|
539
|
+
if (typeof n?.amount < "u" ? i = h(n.amount, e.pure.u64) : i = e.moveCall({
|
|
538
540
|
target: "0x2::coin::value",
|
|
539
541
|
arguments: [h(o, e.object)],
|
|
540
542
|
typeArguments: [a.suiCoinType]
|
|
541
|
-
}),
|
|
542
|
-
const [
|
|
543
|
+
}), n?.accountCap) {
|
|
544
|
+
const [c] = e.moveCall({
|
|
543
545
|
target: `${t.package}::incentive_v3::repay_with_account_cap`,
|
|
544
546
|
arguments: [
|
|
545
547
|
e.object("0x06"),
|
|
@@ -550,13 +552,13 @@ async function xe(e, n, o, r) {
|
|
|
550
552
|
h(o, e.object),
|
|
551
553
|
e.object(t.incentiveV2),
|
|
552
554
|
e.object(t.incentiveV3),
|
|
553
|
-
h(
|
|
555
|
+
h(n.accountCap, e.object)
|
|
554
556
|
],
|
|
555
557
|
typeArguments: [a.suiCoinType]
|
|
556
558
|
});
|
|
557
559
|
return e.moveCall({
|
|
558
560
|
target: "0x2::coin::from_balance",
|
|
559
|
-
arguments: [
|
|
561
|
+
arguments: [c],
|
|
560
562
|
typeArguments: [a.suiCoinType]
|
|
561
563
|
});
|
|
562
564
|
} else
|
|
@@ -576,41 +578,41 @@ async function xe(e, n, o, r) {
|
|
|
576
578
|
typeArguments: [a.suiCoinType]
|
|
577
579
|
}), e;
|
|
578
580
|
}
|
|
579
|
-
const
|
|
581
|
+
const tt = P(
|
|
580
582
|
B(
|
|
581
583
|
async (e) => {
|
|
582
|
-
const
|
|
584
|
+
const r = await _({
|
|
583
585
|
...e
|
|
584
586
|
});
|
|
585
587
|
if (e?.address && typeof e?.asset < "u")
|
|
586
588
|
try {
|
|
587
|
-
const t = await A(e.asset, e), a = e?.client ??
|
|
588
|
-
|
|
589
|
-
target: `${
|
|
589
|
+
const t = await A(e.asset, e), a = e?.client ?? S, s = new F();
|
|
590
|
+
s.moveCall({
|
|
591
|
+
target: `${r.package}::incentive_v3::get_borrow_fee_v2`,
|
|
590
592
|
arguments: [
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
593
|
+
s.object(r.incentiveV3),
|
|
594
|
+
s.pure.address(e.address),
|
|
595
|
+
s.pure.u8(t.id),
|
|
596
|
+
s.pure.u64(1e4)
|
|
595
597
|
],
|
|
596
598
|
typeArguments: []
|
|
597
599
|
});
|
|
598
600
|
const i = await a.devInspectTransactionBlock({
|
|
599
|
-
transactionBlock:
|
|
601
|
+
transactionBlock: s,
|
|
600
602
|
sender: e.address
|
|
601
|
-
}),
|
|
602
|
-
return (Number(
|
|
603
|
+
}), c = W(i, [C.u64()]);
|
|
604
|
+
return (Number(c[0]) || 0) / 100;
|
|
603
605
|
} catch (t) {
|
|
604
606
|
console.error(t);
|
|
605
607
|
}
|
|
606
|
-
const
|
|
607
|
-
id:
|
|
608
|
+
const n = (await S.getObject({
|
|
609
|
+
id: r.incentiveV3,
|
|
608
610
|
options: { showType: !0, showOwner: !0, showContent: !0 }
|
|
609
611
|
})).data.content.fields.borrow_fee_rate;
|
|
610
|
-
return Number(
|
|
612
|
+
return Number(n) / 100;
|
|
611
613
|
}
|
|
612
614
|
)
|
|
613
|
-
),
|
|
615
|
+
), U = "main", E = {
|
|
614
616
|
main: {
|
|
615
617
|
id: 0,
|
|
616
618
|
key: "main",
|
|
@@ -621,60 +623,65 @@ const et = P(
|
|
|
621
623
|
key: "ember",
|
|
622
624
|
name: "Ember Market"
|
|
623
625
|
},
|
|
624
|
-
|
|
626
|
+
// 'sui-eco': {
|
|
627
|
+
// id: 2,
|
|
628
|
+
// key: 'sui-eco',
|
|
629
|
+
// name: 'Sui Eco Market'
|
|
630
|
+
// },
|
|
631
|
+
rwa: {
|
|
625
632
|
id: 2,
|
|
626
|
-
key: "
|
|
627
|
-
name: "
|
|
633
|
+
key: "rwa",
|
|
634
|
+
name: "Matrixdock Market"
|
|
628
635
|
}
|
|
629
636
|
};
|
|
630
|
-
class
|
|
631
|
-
constructor(
|
|
637
|
+
class je {
|
|
638
|
+
constructor(r, o) {
|
|
632
639
|
this.poolMap = {}, this.emodeMap = {}, this.pools = [], this.emodes = [], this.emodePools = [], this.emodeBorrowablePools = [], this.emodeSupplyablePools = [], this._overview = {
|
|
633
640
|
marketTotalSupplyValue: "0",
|
|
634
641
|
marketTotalBorrowValue: "0"
|
|
635
|
-
}, this.config = j(
|
|
642
|
+
}, this.config = j(r), this.initPools(o);
|
|
636
643
|
}
|
|
637
644
|
get overview() {
|
|
638
645
|
return this._overview;
|
|
639
646
|
}
|
|
640
|
-
initPools(
|
|
641
|
-
const o =
|
|
642
|
-
let
|
|
643
|
-
|
|
644
|
-
if (!this.checkMarket(
|
|
645
|
-
console.warn(`Pool is not in market ${this.config.name}`,
|
|
647
|
+
initPools(r) {
|
|
648
|
+
const o = G(this.pools), n = Z(this.emodes), t = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set();
|
|
649
|
+
let s = p(0), i = p(0);
|
|
650
|
+
r.forEach((c) => {
|
|
651
|
+
if (!this.checkMarket(c.market)) {
|
|
652
|
+
console.warn(`Pool is not in market ${this.config.name}`, c);
|
|
646
653
|
return;
|
|
647
654
|
}
|
|
648
|
-
o[
|
|
649
|
-
|
|
655
|
+
o[c.uniqueId] || this.pools.push(c), c?.emodes?.forEach((d) => {
|
|
656
|
+
n[d.uniqueId] || this.emodes.push(d), d.assets.forEach((y) => {
|
|
650
657
|
y.isDebt && d.assets.find(
|
|
651
|
-
(g) => g.isCollateral && g.ltv > 0 && g.assetId !==
|
|
652
|
-
) && t.add(
|
|
658
|
+
(g) => g.isCollateral && g.ltv > 0 && g.assetId !== c.id
|
|
659
|
+
) && t.add(c.uniqueId), y.isCollateral && d.assets.find((g) => g.isDebt && g.assetId !== c.id) && a.add(c.uniqueId);
|
|
653
660
|
});
|
|
654
|
-
}), i = i.plus(
|
|
655
|
-
}), this.poolMap =
|
|
656
|
-
const
|
|
657
|
-
this.emodePools.push(...
|
|
661
|
+
}), i = i.plus(c.poolBorrowValue), s = s.plus(c.poolSupplyValue);
|
|
662
|
+
}), this.poolMap = G(this.pools, "id"), this.emodeMap = Z(this.emodes, "emodeId"), this.emodes.forEach((c) => {
|
|
663
|
+
const l = this.getEModePools(c.emodeId);
|
|
664
|
+
this.emodePools.push(...l);
|
|
658
665
|
}), this._overview = {
|
|
659
|
-
marketTotalSupplyValue:
|
|
666
|
+
marketTotalSupplyValue: s.toString(),
|
|
660
667
|
marketTotalBorrowValue: i.toString()
|
|
661
|
-
}, this.emodeBorrowablePools = this.pools.filter((
|
|
668
|
+
}, this.emodeBorrowablePools = this.pools.filter((c) => t.has(c.uniqueId)), this.emodeSupplyablePools = this.pools.filter((c) => a.has(c.uniqueId));
|
|
662
669
|
}
|
|
663
|
-
getEMode(
|
|
664
|
-
return this.emodeMap[
|
|
670
|
+
getEMode(r) {
|
|
671
|
+
return this.emodeMap[r] || null;
|
|
665
672
|
}
|
|
666
|
-
getEModeRelatePools(
|
|
667
|
-
const { collateral:
|
|
668
|
-
return
|
|
669
|
-
typeof a == "number" && a !== i.emodeId || i.assets.forEach((
|
|
670
|
-
typeof
|
|
673
|
+
getEModeRelatePools(r, o) {
|
|
674
|
+
const { collateral: n, debt: t, emodeId: a } = o || {}, s = [];
|
|
675
|
+
return r.emodes.forEach((i) => {
|
|
676
|
+
typeof a == "number" && a !== i.emodeId || i.assets.forEach((c) => {
|
|
677
|
+
typeof n == "boolean" && n && c.isCollateral && c.assetId === r.id && s.push(this.poolMap[c.assetId]), typeof t == "boolean" && t && c.isDebt && c.assetId === r.id && s.push(this.poolMap[c.assetId]);
|
|
671
678
|
});
|
|
672
|
-
}),
|
|
679
|
+
}), s;
|
|
673
680
|
}
|
|
674
|
-
getEModePools(
|
|
675
|
-
const o = this.getEMode(
|
|
681
|
+
getEModePools(r) {
|
|
682
|
+
const o = this.getEMode(r);
|
|
676
683
|
return o ? o.assets.map((t) => t.assetId).map((t) => this.poolMap[t]).filter((t) => !!t).map((t) => {
|
|
677
|
-
const a = o.assets.find((
|
|
684
|
+
const a = o.assets.find((s) => s.assetId === t.id);
|
|
678
685
|
return {
|
|
679
686
|
...t,
|
|
680
687
|
emode: {
|
|
@@ -685,285 +692,285 @@ class Ce {
|
|
|
685
692
|
};
|
|
686
693
|
}) : [];
|
|
687
694
|
}
|
|
688
|
-
checkMarket(
|
|
695
|
+
checkMarket(r) {
|
|
689
696
|
let o = !1;
|
|
690
|
-
return typeof
|
|
697
|
+
return typeof r == "number" && r === this.config.id && (o = !0), typeof r == "string" && r === this.config.key && (o = !0), typeof r == "object" && r.id === this.config.id && (o = !0), o;
|
|
691
698
|
}
|
|
692
699
|
}
|
|
693
700
|
const j = (e) => {
|
|
694
|
-
const o = Object.values(E).find((
|
|
701
|
+
const o = Object.values(E).find((n) => typeof e == "number" ? n.id === e : typeof e == "string" ? n.key === e : n.id === e.id);
|
|
695
702
|
if (!o)
|
|
696
703
|
throw new Error("Market not found");
|
|
697
704
|
return o;
|
|
698
|
-
},
|
|
705
|
+
}, Ie = P(
|
|
699
706
|
B(
|
|
700
|
-
async (e,
|
|
701
|
-
const o = await
|
|
707
|
+
async (e, r) => {
|
|
708
|
+
const o = await q({
|
|
702
709
|
cacheTime: 6e4,
|
|
703
|
-
...
|
|
710
|
+
...r,
|
|
704
711
|
markets: e
|
|
705
712
|
});
|
|
706
|
-
return e.map((
|
|
707
|
-
const t = j(
|
|
708
|
-
return new
|
|
713
|
+
return e.map((n) => {
|
|
714
|
+
const t = j(n), a = o.filter((s) => s.market === t.key);
|
|
715
|
+
return new je(n, a);
|
|
709
716
|
});
|
|
710
717
|
}
|
|
711
718
|
)
|
|
712
|
-
),
|
|
719
|
+
), ot = P(
|
|
713
720
|
B(
|
|
714
|
-
async (e,
|
|
721
|
+
async (e, r) => (await Ie([e], r))[0]
|
|
715
722
|
)
|
|
716
723
|
), _ = P(
|
|
717
724
|
B(
|
|
718
725
|
async (e) => {
|
|
719
|
-
const
|
|
726
|
+
const r = j(e?.market || U), o = `https://open-api.naviprotocol.io/api/navi/config?env=${e?.env || "prod"}&sdk=${V.version}&market=${r.key}`;
|
|
720
727
|
return (await fetch(o, { headers: M }).then((t) => t.json())).data;
|
|
721
728
|
}
|
|
722
729
|
)
|
|
723
|
-
),
|
|
724
|
-
async function
|
|
730
|
+
), w = 1e3 * 60 * 5;
|
|
731
|
+
async function Te(e, r) {
|
|
725
732
|
const o = await _({
|
|
726
|
-
cacheTime:
|
|
727
|
-
...
|
|
733
|
+
cacheTime: w,
|
|
734
|
+
...r
|
|
728
735
|
});
|
|
729
736
|
return e.moveCall({
|
|
730
737
|
target: `${o.package}::lending::create_account`,
|
|
731
738
|
arguments: []
|
|
732
739
|
});
|
|
733
740
|
}
|
|
734
|
-
async function
|
|
735
|
-
const
|
|
736
|
-
cacheTime:
|
|
741
|
+
async function Be(e, r, o) {
|
|
742
|
+
const n = await _({
|
|
743
|
+
cacheTime: w,
|
|
737
744
|
...o
|
|
738
745
|
});
|
|
739
746
|
return e.moveCall({
|
|
740
|
-
target: `${
|
|
741
|
-
arguments: [
|
|
747
|
+
target: `${n.package}::account::account_owner`,
|
|
748
|
+
arguments: [r]
|
|
742
749
|
});
|
|
743
750
|
}
|
|
744
|
-
async function
|
|
745
|
-
const
|
|
751
|
+
async function Ae(e, r, o) {
|
|
752
|
+
const n = await _({
|
|
746
753
|
...o,
|
|
747
|
-
cacheTime:
|
|
754
|
+
cacheTime: w
|
|
748
755
|
});
|
|
749
756
|
return o?.accountCap ? e.moveCall({
|
|
750
|
-
target: `${
|
|
757
|
+
target: `${n.package}::lending::enter_emode_with_account_cap`,
|
|
751
758
|
arguments: [
|
|
752
|
-
e.object(
|
|
753
|
-
h(
|
|
759
|
+
e.object(n.storage),
|
|
760
|
+
h(r, e.pure.u64),
|
|
754
761
|
h(o.accountCap, e.object)
|
|
755
762
|
]
|
|
756
763
|
}) : e.moveCall({
|
|
757
|
-
target: `${
|
|
758
|
-
arguments: [e.object(
|
|
764
|
+
target: `${n.package}::lending::enter_emode`,
|
|
765
|
+
arguments: [e.object(n.storage), h(r, e.pure.u64)]
|
|
759
766
|
}), e;
|
|
760
767
|
}
|
|
761
|
-
async function
|
|
768
|
+
async function rt(e, r) {
|
|
762
769
|
const o = await _({
|
|
763
|
-
...
|
|
764
|
-
cacheTime:
|
|
770
|
+
...r,
|
|
771
|
+
cacheTime: w
|
|
765
772
|
});
|
|
766
|
-
return
|
|
773
|
+
return r?.accountCap ? e.moveCall({
|
|
767
774
|
target: `${o.package}::lending::exit_emode_with_account_cap`,
|
|
768
|
-
arguments: [e.object(o.storage), h(
|
|
775
|
+
arguments: [e.object(o.storage), h(r.accountCap, e.object)]
|
|
769
776
|
}) : e.moveCall({
|
|
770
777
|
target: `${o.package}::lending::exit_emode`,
|
|
771
778
|
arguments: [e.object(o.storage)]
|
|
772
779
|
}), e;
|
|
773
780
|
}
|
|
774
|
-
async function nt(e,
|
|
775
|
-
const
|
|
776
|
-
cacheTime:
|
|
781
|
+
async function nt(e, r, o) {
|
|
782
|
+
const n = await _({
|
|
783
|
+
cacheTime: w,
|
|
777
784
|
...o
|
|
778
|
-
}), t = await
|
|
779
|
-
await
|
|
785
|
+
}), t = await Te(e, o);
|
|
786
|
+
await Ae(e, r, {
|
|
780
787
|
...o,
|
|
781
788
|
accountCap: t
|
|
782
789
|
});
|
|
783
|
-
const a = await j(o?.market ||
|
|
790
|
+
const a = await j(o?.market || U), s = await Be(e, t, o);
|
|
784
791
|
return e.moveCall({
|
|
785
|
-
target: `${
|
|
792
|
+
target: `${n.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,
|
|
786
793
|
arguments: [
|
|
787
|
-
e.object(
|
|
788
|
-
|
|
794
|
+
e.object(n.emode.contract.registryObject),
|
|
795
|
+
s,
|
|
789
796
|
h(a.id, e.pure.u64),
|
|
790
|
-
h(
|
|
797
|
+
h(r, e.pure.u64)
|
|
791
798
|
]
|
|
792
799
|
}), t;
|
|
793
800
|
}
|
|
794
|
-
const
|
|
801
|
+
const ee = P(
|
|
795
802
|
B(
|
|
796
|
-
async (e,
|
|
803
|
+
async (e, r) => {
|
|
797
804
|
const o = await _({
|
|
798
|
-
cacheTime:
|
|
799
|
-
...
|
|
800
|
-
}),
|
|
801
|
-
|
|
805
|
+
cacheTime: w,
|
|
806
|
+
...r
|
|
807
|
+
}), n = new F(), t = r?.client ?? S;
|
|
808
|
+
n.moveCall({
|
|
802
809
|
target: `${o.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,
|
|
803
|
-
arguments: [
|
|
810
|
+
arguments: [n.object(o.emode.contract.registryObject), n.pure.address(e)]
|
|
804
811
|
});
|
|
805
|
-
const
|
|
806
|
-
transactionBlock:
|
|
812
|
+
const s = (await t.devInspectTransactionBlock({
|
|
813
|
+
transactionBlock: n,
|
|
807
814
|
sender: e
|
|
808
|
-
})).results[0].returnValues, i = C.vector(C.u64()).parse(Uint8Array.from(
|
|
815
|
+
})).results[0].returnValues, i = C.vector(C.u64()).parse(Uint8Array.from(s[0][0])), c = C.vector(C.u64()).parse(Uint8Array.from(s[1][0])), l = C.vector(C.Address).parse(Uint8Array.from(s[2][0]));
|
|
809
816
|
return i.map((d, y) => ({
|
|
810
817
|
marketId: Number(d),
|
|
811
|
-
emodeId: Number(
|
|
812
|
-
accountCap:
|
|
818
|
+
emodeId: Number(c[y]),
|
|
819
|
+
accountCap: l[y].toString()
|
|
813
820
|
}));
|
|
814
821
|
}
|
|
815
822
|
)
|
|
816
823
|
);
|
|
817
|
-
function
|
|
824
|
+
function at(e) {
|
|
818
825
|
return `${j(e.marketId).key}-${e.emodeId}`;
|
|
819
826
|
}
|
|
820
|
-
function
|
|
821
|
-
const
|
|
827
|
+
function it(e, r, o) {
|
|
828
|
+
const n = typeof o?.balance == "number", t = n ? o.balance : 0;
|
|
822
829
|
let a = 0;
|
|
823
|
-
const
|
|
830
|
+
const s = [];
|
|
824
831
|
let i = "";
|
|
825
|
-
if (
|
|
826
|
-
if (!(
|
|
827
|
-
if (i || (i =
|
|
832
|
+
if (r.sort((c, l) => Number(l.balance) - Number(c.balance)).forEach((c) => {
|
|
833
|
+
if (!(n && a >= t) && Number(c.balance) !== 0) {
|
|
834
|
+
if (i || (i = c.coinType), i !== c.coinType)
|
|
828
835
|
throw new Error("All coins must be of the same type");
|
|
829
|
-
a += Number(
|
|
836
|
+
a += Number(c.balance), s.push(c.coinObjectId);
|
|
830
837
|
}
|
|
831
|
-
}),
|
|
838
|
+
}), s.length === 0)
|
|
832
839
|
throw new Error("No coins to merge");
|
|
833
|
-
if (
|
|
840
|
+
if (n && a < t)
|
|
834
841
|
throw new Error(
|
|
835
842
|
`Balance is less than the specified balance: ${a} < ${t}`
|
|
836
843
|
);
|
|
837
|
-
return
|
|
844
|
+
return b(i) === b("0x2::sui::SUI") && o?.useGasCoin ? n ? e.splitCoins(e.gas, [e.pure.u64(t)]) : e.gas : (s.length === 1 ? e.object(s[0]) : e.mergeCoins(s[0], s.slice(1)), n ? e.splitCoins(s[0], [e.pure.u64(t)]) : s[0]);
|
|
838
845
|
}
|
|
839
|
-
async function
|
|
846
|
+
async function te(e, r, o, n, t, a, s) {
|
|
840
847
|
const i = await _({
|
|
841
|
-
...
|
|
842
|
-
cacheTime:
|
|
843
|
-
}),
|
|
848
|
+
...s,
|
|
849
|
+
cacheTime: w
|
|
850
|
+
}), c = await A(o, s);
|
|
844
851
|
return e.moveCall({
|
|
845
852
|
target: `${i.uiGetter}::calculator_unchecked::dynamic_health_factor`,
|
|
846
853
|
arguments: [
|
|
847
854
|
e.object("0x06"),
|
|
848
855
|
e.object(i.storage),
|
|
849
856
|
e.object(i.oracle.priceOracle),
|
|
850
|
-
|
|
851
|
-
h(
|
|
852
|
-
h(
|
|
853
|
-
h(
|
|
857
|
+
be(e, c),
|
|
858
|
+
h(r, e.pure.address),
|
|
859
|
+
h(c.id, e.pure.u8),
|
|
860
|
+
h(n, e.pure.u64),
|
|
854
861
|
h(t, e.pure.u64),
|
|
855
862
|
h(a, e.pure.bool)
|
|
856
863
|
],
|
|
857
|
-
typeArguments: [
|
|
864
|
+
typeArguments: [c.suiCoinType]
|
|
858
865
|
});
|
|
859
866
|
}
|
|
860
|
-
async function
|
|
861
|
-
return
|
|
867
|
+
async function Pe(e, r, o) {
|
|
868
|
+
return te(e, r, 0, 0, 0, !1, o);
|
|
862
869
|
}
|
|
863
|
-
async function
|
|
864
|
-
const
|
|
870
|
+
async function oe(e, r, o) {
|
|
871
|
+
const n = new F(), t = o?.client ?? S, a = await q({
|
|
865
872
|
...o,
|
|
866
873
|
markets: Object.values(E)
|
|
867
|
-
}),
|
|
868
|
-
for (let d of
|
|
874
|
+
}), s = G(a);
|
|
875
|
+
for (let d of r) {
|
|
869
876
|
const y = await _({
|
|
870
877
|
...o,
|
|
871
|
-
cacheTime:
|
|
878
|
+
cacheTime: w,
|
|
872
879
|
market: d.market
|
|
873
880
|
});
|
|
874
|
-
|
|
881
|
+
n.moveCall({
|
|
875
882
|
target: `${y.uiGetter}::getter_unchecked::get_user_state`,
|
|
876
|
-
arguments: [
|
|
883
|
+
arguments: [n.object(y.storage), n.pure.address(d.address)]
|
|
877
884
|
});
|
|
878
885
|
}
|
|
879
|
-
const
|
|
880
|
-
transactionBlock:
|
|
886
|
+
const c = ((await t.devInspectTransactionBlock({
|
|
887
|
+
transactionBlock: n,
|
|
881
888
|
sender: e
|
|
882
|
-
})).results || []).map((d) => d.returnValues?.map((y) => C.vector(
|
|
883
|
-
return
|
|
884
|
-
const v =
|
|
885
|
-
d.forEach((
|
|
886
|
-
if (
|
|
889
|
+
})).results || []).map((d) => d.returnValues?.map((y) => C.vector(ye).parse(Uint8Array.from(y[0])))[0] || []), l = [];
|
|
890
|
+
return c.forEach((d, y) => {
|
|
891
|
+
const v = r[y], g = j(v.market);
|
|
892
|
+
d.forEach((u) => {
|
|
893
|
+
if (u.supply_balance === "0" && u.borrow_balance === "0" && (v.emodeId === void 0 || !o?.includeZeroBalanceEmodePositions))
|
|
887
894
|
return;
|
|
888
|
-
const f =
|
|
895
|
+
const f = s[`${g.key}-${u.asset_id}`];
|
|
889
896
|
if (!f)
|
|
890
897
|
return;
|
|
891
|
-
const
|
|
892
|
-
|
|
898
|
+
const k = J(
|
|
899
|
+
u.supply_balance,
|
|
893
900
|
f.currentSupplyIndex
|
|
894
|
-
).toString(), I =
|
|
895
|
-
|
|
901
|
+
).toString(), I = J(
|
|
902
|
+
u.borrow_balance,
|
|
896
903
|
f.currentBorrowIndex
|
|
897
904
|
).toString();
|
|
898
|
-
|
|
899
|
-
supplyBalance:
|
|
905
|
+
l.push({
|
|
906
|
+
supplyBalance: k,
|
|
900
907
|
borrowBalance: I,
|
|
901
|
-
assetId:
|
|
908
|
+
assetId: u.asset_id,
|
|
902
909
|
market: g.key,
|
|
903
910
|
pool: f,
|
|
904
911
|
emodeId: v.emodeId
|
|
905
912
|
});
|
|
906
913
|
});
|
|
907
|
-
}),
|
|
914
|
+
}), l;
|
|
908
915
|
}
|
|
909
|
-
const
|
|
910
|
-
async (e,
|
|
911
|
-
const
|
|
916
|
+
const ct = P(
|
|
917
|
+
async (e, r) => {
|
|
918
|
+
const n = (r?.markets || Object.keys(E)).map((t) => j(t)).map((t) => ({
|
|
912
919
|
address: e,
|
|
913
920
|
market: t.key
|
|
914
921
|
}));
|
|
915
|
-
return await
|
|
922
|
+
return await oe(e, n, r);
|
|
916
923
|
}
|
|
917
924
|
);
|
|
918
|
-
async function
|
|
919
|
-
const o =
|
|
920
|
-
await
|
|
925
|
+
async function st(e, r) {
|
|
926
|
+
const o = r?.client ?? S, n = new F();
|
|
927
|
+
await Pe(n, e, r);
|
|
921
928
|
const t = await o.devInspectTransactionBlock({
|
|
922
|
-
transactionBlock:
|
|
929
|
+
transactionBlock: n,
|
|
923
930
|
sender: e
|
|
924
|
-
}), a =
|
|
925
|
-
return
|
|
931
|
+
}), a = W(t, [C.u256()]);
|
|
932
|
+
return x(Number(a[0]) || 0);
|
|
926
933
|
}
|
|
927
|
-
async function
|
|
928
|
-
const t =
|
|
929
|
-
let
|
|
930
|
-
const
|
|
934
|
+
async function lt(e, r, o, n) {
|
|
935
|
+
const t = n?.client ?? S, a = new F();
|
|
936
|
+
let s = 0, i = 0;
|
|
937
|
+
const c = await A(r, n);
|
|
931
938
|
if (o.forEach((v) => {
|
|
932
|
-
v.type ===
|
|
933
|
-
}),
|
|
939
|
+
v.type === R.Supply ? s += v.amount : v.type === R.Withdraw ? s -= v.amount : v.type === R.Borrow ? i += v.amount : v.type === R.Repay && (i -= v.amount);
|
|
940
|
+
}), s * i < 0)
|
|
934
941
|
throw new Error("Invalid operations");
|
|
935
|
-
const
|
|
936
|
-
await
|
|
942
|
+
const l = s > 0 || i > 0;
|
|
943
|
+
await te(
|
|
937
944
|
a,
|
|
938
945
|
e,
|
|
939
|
-
|
|
940
|
-
Math.abs(
|
|
946
|
+
c,
|
|
947
|
+
Math.abs(s),
|
|
941
948
|
Math.abs(i),
|
|
942
|
-
|
|
943
|
-
|
|
949
|
+
l,
|
|
950
|
+
n
|
|
944
951
|
);
|
|
945
952
|
const d = await t.devInspectTransactionBlock({
|
|
946
953
|
transactionBlock: a,
|
|
947
954
|
sender: e
|
|
948
|
-
}), y =
|
|
949
|
-
return
|
|
955
|
+
}), y = W(d, [C.u256()]);
|
|
956
|
+
return x(Number(y[0]) || 0);
|
|
950
957
|
}
|
|
951
958
|
const ut = B(
|
|
952
|
-
async (e,
|
|
959
|
+
async (e, r) => {
|
|
953
960
|
const o = new URLSearchParams();
|
|
954
|
-
|
|
955
|
-
const
|
|
956
|
-
return (await fetch(
|
|
961
|
+
r?.cursor && o.set("cursor", r.cursor), o.set("userAddress", e);
|
|
962
|
+
const n = `https://open-api.naviprotocol.io/api/navi/user/transactions?${o.toString()}&sdk=${V.version}`;
|
|
963
|
+
return (await fetch(n, { headers: M }).then((a) => a.json())).data;
|
|
957
964
|
}
|
|
958
965
|
);
|
|
959
|
-
async function
|
|
966
|
+
async function pt(e, r) {
|
|
960
967
|
let o = null;
|
|
961
|
-
const
|
|
968
|
+
const n = [], t = r?.client ?? S;
|
|
962
969
|
do {
|
|
963
970
|
let a;
|
|
964
|
-
if (
|
|
971
|
+
if (r?.coinType ? a = await t.getCoins({
|
|
965
972
|
owner: e,
|
|
966
|
-
coinType:
|
|
973
|
+
coinType: r?.coinType,
|
|
967
974
|
cursor: o,
|
|
968
975
|
limit: 100
|
|
969
976
|
}) : a = await t.getAllCoins({
|
|
@@ -972,53 +979,53 @@ async function lt(e, n) {
|
|
|
972
979
|
limit: 100
|
|
973
980
|
}), !a.data || !a.data.length)
|
|
974
981
|
break;
|
|
975
|
-
|
|
982
|
+
n.push(...a.data), o = a.nextCursor;
|
|
976
983
|
} while (o);
|
|
977
|
-
return
|
|
984
|
+
return n;
|
|
978
985
|
}
|
|
979
|
-
const
|
|
980
|
-
async (e,
|
|
981
|
-
const o = [],
|
|
986
|
+
const $e = P(
|
|
987
|
+
async (e, r) => {
|
|
988
|
+
const o = [], n = (r?.markets || Object.keys(E)).map((i) => j(i));
|
|
982
989
|
let t = [];
|
|
983
990
|
try {
|
|
984
|
-
t = await
|
|
991
|
+
t = await ee(e, r);
|
|
985
992
|
} catch (i) {
|
|
986
993
|
console.error(i);
|
|
987
994
|
}
|
|
988
|
-
const a =
|
|
995
|
+
const a = n.map((i) => ({
|
|
989
996
|
address: e,
|
|
990
997
|
market: i.key
|
|
991
998
|
})).concat(
|
|
992
|
-
t.filter((i) => !!
|
|
999
|
+
t.filter((i) => !!n.find((c) => c.id === i.marketId)).map((i) => ({
|
|
993
1000
|
address: i.accountCap,
|
|
994
1001
|
market: j(i.marketId).key,
|
|
995
1002
|
emodeId: i.emodeId
|
|
996
1003
|
}))
|
|
997
1004
|
);
|
|
998
|
-
return (await
|
|
999
|
-
const
|
|
1005
|
+
return (await oe(e, a, r)).forEach((i) => {
|
|
1006
|
+
const c = typeof i.emodeId == "number" ? t.find((l) => {
|
|
1000
1007
|
const d = j(i.market);
|
|
1001
|
-
return
|
|
1008
|
+
return l.emodeId === i.emodeId && l.marketId === d.id;
|
|
1002
1009
|
}) : void 0;
|
|
1003
|
-
if (
|
|
1004
|
-
if (!i.pool.emodes.find((d) => d.emodeId ===
|
|
1010
|
+
if (c) {
|
|
1011
|
+
if (!i.pool.emodes.find((d) => d.emodeId === c.emodeId))
|
|
1005
1012
|
return;
|
|
1006
1013
|
if (p(i.supplyBalance).gte(0)) {
|
|
1007
|
-
const d = p(i.supplyBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN), y =
|
|
1014
|
+
const d = p(i.supplyBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN), y = L(i.pool, c);
|
|
1008
1015
|
if (d.gt(0) || y.emode.isCollateral)
|
|
1009
1016
|
try {
|
|
1010
1017
|
o.push({
|
|
1011
|
-
id: `${i.pool.uniqueId}_${
|
|
1018
|
+
id: `${i.pool.uniqueId}_${c.emodeId}_navi-lending-emode-supply-${T()}`,
|
|
1012
1019
|
wallet: e,
|
|
1013
1020
|
protocol: "navi",
|
|
1014
1021
|
market: i.market,
|
|
1015
1022
|
type: "navi-lending-emode-supply",
|
|
1016
1023
|
"navi-lending-emode-supply": {
|
|
1017
1024
|
amount: d.toString(),
|
|
1018
|
-
pool:
|
|
1025
|
+
pool: L(i.pool, c),
|
|
1019
1026
|
token: i.pool.token,
|
|
1020
1027
|
valueUSD: d.multipliedBy(i.pool.oracle.price).toString(),
|
|
1021
|
-
emodeCap:
|
|
1028
|
+
emodeCap: c
|
|
1022
1029
|
}
|
|
1023
1030
|
});
|
|
1024
1031
|
} catch (v) {
|
|
@@ -1026,21 +1033,21 @@ const Pe = P(
|
|
|
1026
1033
|
}
|
|
1027
1034
|
}
|
|
1028
1035
|
if (p(i.borrowBalance).gte(0)) {
|
|
1029
|
-
const d = p(i.borrowBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN), y =
|
|
1036
|
+
const d = p(i.borrowBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN), y = L(i.pool, c);
|
|
1030
1037
|
if (d.gt(0) || y.emode.isDebt)
|
|
1031
1038
|
try {
|
|
1032
1039
|
o.push({
|
|
1033
|
-
id: `${i.pool.uniqueId}_${
|
|
1040
|
+
id: `${i.pool.uniqueId}_${c.emodeId}_navi-lending-emode-borrow-${T()}`,
|
|
1034
1041
|
wallet: e,
|
|
1035
1042
|
protocol: "navi",
|
|
1036
1043
|
market: i.market,
|
|
1037
1044
|
type: "navi-lending-emode-borrow",
|
|
1038
1045
|
"navi-lending-emode-borrow": {
|
|
1039
1046
|
amount: d.toString(),
|
|
1040
|
-
pool:
|
|
1047
|
+
pool: L(i.pool, c),
|
|
1041
1048
|
token: i.pool.token,
|
|
1042
1049
|
valueUSD: d.multipliedBy(i.pool.oracle.price).toString(),
|
|
1043
|
-
emodeCap:
|
|
1050
|
+
emodeCap: c
|
|
1044
1051
|
}
|
|
1045
1052
|
});
|
|
1046
1053
|
} catch (v) {
|
|
@@ -1049,7 +1056,7 @@ const Pe = P(
|
|
|
1049
1056
|
}
|
|
1050
1057
|
} else {
|
|
1051
1058
|
if (p(i.supplyBalance).gt(0)) {
|
|
1052
|
-
const
|
|
1059
|
+
const l = p(i.supplyBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN);
|
|
1053
1060
|
o.push({
|
|
1054
1061
|
id: `${i.pool.uniqueId}_navi-lending-supply-${T()}`,
|
|
1055
1062
|
wallet: e,
|
|
@@ -1057,15 +1064,15 @@ const Pe = P(
|
|
|
1057
1064
|
type: "navi-lending-supply",
|
|
1058
1065
|
market: i.market,
|
|
1059
1066
|
"navi-lending-supply": {
|
|
1060
|
-
amount:
|
|
1067
|
+
amount: l.toString(),
|
|
1061
1068
|
pool: i.pool,
|
|
1062
1069
|
token: i.pool.token,
|
|
1063
|
-
valueUSD:
|
|
1070
|
+
valueUSD: l.multipliedBy(i.pool.oracle.price).toString()
|
|
1064
1071
|
}
|
|
1065
1072
|
});
|
|
1066
1073
|
}
|
|
1067
1074
|
if (p(i.borrowBalance).gt(0)) {
|
|
1068
|
-
const
|
|
1075
|
+
const l = p(i.borrowBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals, p.ROUND_DOWN);
|
|
1069
1076
|
o.push({
|
|
1070
1077
|
id: `${i.pool.uniqueId}_navi-lending-borrow-${T()}`,
|
|
1071
1078
|
wallet: e,
|
|
@@ -1073,10 +1080,10 @@ const Pe = P(
|
|
|
1073
1080
|
market: i.market,
|
|
1074
1081
|
type: "navi-lending-borrow",
|
|
1075
1082
|
"navi-lending-borrow": {
|
|
1076
|
-
amount:
|
|
1083
|
+
amount: l.toString(),
|
|
1077
1084
|
pool: i.pool,
|
|
1078
1085
|
token: i.pool.token,
|
|
1079
|
-
valueUSD:
|
|
1086
|
+
valueUSD: l.multipliedBy(i.pool.oracle.price).toString()
|
|
1080
1087
|
}
|
|
1081
1088
|
});
|
|
1082
1089
|
}
|
|
@@ -1084,8 +1091,8 @@ const Pe = P(
|
|
|
1084
1091
|
}), o;
|
|
1085
1092
|
}
|
|
1086
1093
|
);
|
|
1087
|
-
class
|
|
1088
|
-
constructor(
|
|
1094
|
+
class N {
|
|
1095
|
+
constructor(r, o) {
|
|
1089
1096
|
this._positions = [], this._priceMap = {}, this._overview = {
|
|
1090
1097
|
hf: 1 / 0,
|
|
1091
1098
|
netVaule: "0",
|
|
@@ -1098,7 +1105,7 @@ class O {
|
|
|
1098
1105
|
maxLoanToVaule: "0",
|
|
1099
1106
|
supply: {},
|
|
1100
1107
|
borrow: {}
|
|
1101
|
-
}, this._priceMap = o || {}, this.positions =
|
|
1108
|
+
}, this._priceMap = o || {}, this.positions = r;
|
|
1102
1109
|
}
|
|
1103
1110
|
get positions() {
|
|
1104
1111
|
return this._positions;
|
|
@@ -1109,33 +1116,33 @@ class O {
|
|
|
1109
1116
|
get priceMap() {
|
|
1110
1117
|
return this._priceMap;
|
|
1111
1118
|
}
|
|
1112
|
-
set positions(
|
|
1113
|
-
this._positions =
|
|
1119
|
+
set positions(r) {
|
|
1120
|
+
this._positions = r, this._overview = this.getPositionsOverview(r);
|
|
1114
1121
|
}
|
|
1115
|
-
updatePriceMap(
|
|
1116
|
-
return this._priceMap =
|
|
1122
|
+
updatePriceMap(r) {
|
|
1123
|
+
return this._priceMap = r, this._overview = this.getPositionsOverview(this._positions), this;
|
|
1117
1124
|
}
|
|
1118
|
-
getPrice(
|
|
1119
|
-
const o =
|
|
1125
|
+
getPrice(r) {
|
|
1126
|
+
const o = b(r.suiCoinType);
|
|
1120
1127
|
if (this._priceMap[o] !== void 0)
|
|
1121
1128
|
return this._priceMap[o].toString();
|
|
1122
|
-
const
|
|
1123
|
-
return this._priceMap[
|
|
1129
|
+
const n = r.suiCoinType;
|
|
1130
|
+
return this._priceMap[n] !== void 0 ? this._priceMap[n].toString() : r.oracle.price;
|
|
1124
1131
|
}
|
|
1125
|
-
filterPositionsByPool(
|
|
1126
|
-
const
|
|
1127
|
-
return new
|
|
1132
|
+
filterPositionsByPool(r) {
|
|
1133
|
+
const n = !!r.isEMode ? ["navi-lending-emode-supply", "navi-lending-emode-borrow"] : ["navi-lending-supply", "navi-lending-borrow"];
|
|
1134
|
+
return new N(
|
|
1128
1135
|
this.positions.filter((t) => {
|
|
1129
1136
|
const a = t[t.type];
|
|
1130
|
-
return
|
|
1137
|
+
return n.includes(t.type) && a.pool.uniqueId === r.uniqueId;
|
|
1131
1138
|
}),
|
|
1132
1139
|
this._priceMap
|
|
1133
1140
|
);
|
|
1134
1141
|
}
|
|
1135
|
-
deposit(
|
|
1136
|
-
const
|
|
1142
|
+
deposit(r, o) {
|
|
1143
|
+
const n = !!r.isEMode, t = this.getPrice(r);
|
|
1137
1144
|
let a;
|
|
1138
|
-
return
|
|
1145
|
+
return n ? a = {
|
|
1139
1146
|
id: T(),
|
|
1140
1147
|
wallet: "",
|
|
1141
1148
|
protocol: "navi",
|
|
@@ -1144,8 +1151,8 @@ class O {
|
|
|
1144
1151
|
"navi-lending-emode-supply": {
|
|
1145
1152
|
amount: o.toString(),
|
|
1146
1153
|
valueUSD: p(o).multipliedBy(t).toString(),
|
|
1147
|
-
token:
|
|
1148
|
-
pool:
|
|
1154
|
+
token: r.token,
|
|
1155
|
+
pool: r,
|
|
1149
1156
|
emodeCap: {}
|
|
1150
1157
|
}
|
|
1151
1158
|
} : a = {
|
|
@@ -1157,15 +1164,15 @@ class O {
|
|
|
1157
1164
|
"navi-lending-supply": {
|
|
1158
1165
|
amount: o.toString(),
|
|
1159
1166
|
valueUSD: p(o).multipliedBy(t).toString(),
|
|
1160
|
-
token:
|
|
1161
|
-
pool:
|
|
1167
|
+
token: r.token,
|
|
1168
|
+
pool: r
|
|
1162
1169
|
}
|
|
1163
|
-
}, new
|
|
1170
|
+
}, new N([...this.positions, a], this._priceMap);
|
|
1164
1171
|
}
|
|
1165
|
-
withdraw(
|
|
1166
|
-
const
|
|
1172
|
+
withdraw(r, o) {
|
|
1173
|
+
const n = !!r.isEMode, t = this.getPrice(r);
|
|
1167
1174
|
let a;
|
|
1168
|
-
return
|
|
1175
|
+
return n ? a = {
|
|
1169
1176
|
id: T(),
|
|
1170
1177
|
wallet: "",
|
|
1171
1178
|
protocol: "navi",
|
|
@@ -1174,8 +1181,8 @@ class O {
|
|
|
1174
1181
|
"navi-lending-emode-supply": {
|
|
1175
1182
|
amount: (-o).toString(),
|
|
1176
1183
|
valueUSD: p(-o).multipliedBy(t).toString(),
|
|
1177
|
-
token:
|
|
1178
|
-
pool:
|
|
1184
|
+
token: r.token,
|
|
1185
|
+
pool: r,
|
|
1179
1186
|
emodeCap: {}
|
|
1180
1187
|
}
|
|
1181
1188
|
} : a = {
|
|
@@ -1187,15 +1194,15 @@ class O {
|
|
|
1187
1194
|
"navi-lending-supply": {
|
|
1188
1195
|
amount: (-o).toString(),
|
|
1189
1196
|
valueUSD: p(-o).multipliedBy(t).toString(),
|
|
1190
|
-
token:
|
|
1191
|
-
pool:
|
|
1197
|
+
token: r.token,
|
|
1198
|
+
pool: r
|
|
1192
1199
|
}
|
|
1193
|
-
}, new
|
|
1200
|
+
}, new N([...this.positions, a], this._priceMap);
|
|
1194
1201
|
}
|
|
1195
|
-
borrow(
|
|
1196
|
-
const
|
|
1202
|
+
borrow(r, o) {
|
|
1203
|
+
const n = !!r.isEMode, t = this.getPrice(r);
|
|
1197
1204
|
let a;
|
|
1198
|
-
return
|
|
1205
|
+
return n ? a = {
|
|
1199
1206
|
id: T(),
|
|
1200
1207
|
wallet: "",
|
|
1201
1208
|
protocol: "navi",
|
|
@@ -1204,8 +1211,8 @@ class O {
|
|
|
1204
1211
|
"navi-lending-emode-borrow": {
|
|
1205
1212
|
amount: o.toString(),
|
|
1206
1213
|
valueUSD: p(o).multipliedBy(t).toString(),
|
|
1207
|
-
token:
|
|
1208
|
-
pool:
|
|
1214
|
+
token: r.token,
|
|
1215
|
+
pool: r,
|
|
1209
1216
|
emodeCap: {}
|
|
1210
1217
|
}
|
|
1211
1218
|
} : a = {
|
|
@@ -1217,15 +1224,15 @@ class O {
|
|
|
1217
1224
|
"navi-lending-borrow": {
|
|
1218
1225
|
amount: o.toString(),
|
|
1219
1226
|
valueUSD: p(o).multipliedBy(t).toString(),
|
|
1220
|
-
token:
|
|
1221
|
-
pool:
|
|
1227
|
+
token: r.token,
|
|
1228
|
+
pool: r
|
|
1222
1229
|
}
|
|
1223
|
-
}, new
|
|
1230
|
+
}, new N([...this.positions, a], this._priceMap);
|
|
1224
1231
|
}
|
|
1225
|
-
repay(
|
|
1226
|
-
const
|
|
1232
|
+
repay(r, o) {
|
|
1233
|
+
const n = !!r.isEMode, t = this.getPrice(r);
|
|
1227
1234
|
let a;
|
|
1228
|
-
return
|
|
1235
|
+
return n ? a = {
|
|
1229
1236
|
id: T(),
|
|
1230
1237
|
wallet: "",
|
|
1231
1238
|
protocol: "navi",
|
|
@@ -1234,8 +1241,8 @@ class O {
|
|
|
1234
1241
|
"navi-lending-emode-borrow": {
|
|
1235
1242
|
amount: (-o).toString(),
|
|
1236
1243
|
valueUSD: p(-o).multipliedBy(t).toString(),
|
|
1237
|
-
token:
|
|
1238
|
-
pool:
|
|
1244
|
+
token: r.token,
|
|
1245
|
+
pool: r,
|
|
1239
1246
|
emodeCap: {}
|
|
1240
1247
|
}
|
|
1241
1248
|
} : a = {
|
|
@@ -1247,84 +1254,84 @@ class O {
|
|
|
1247
1254
|
"navi-lending-borrow": {
|
|
1248
1255
|
amount: (-o).toString(),
|
|
1249
1256
|
valueUSD: p(-o).multipliedBy(t).toString(),
|
|
1250
|
-
token:
|
|
1251
|
-
pool:
|
|
1257
|
+
token: r.token,
|
|
1258
|
+
pool: r
|
|
1252
1259
|
}
|
|
1253
|
-
}, new
|
|
1260
|
+
}, new N([...this.positions, a], this._priceMap);
|
|
1254
1261
|
}
|
|
1255
|
-
resolveValueUSD(
|
|
1256
|
-
return Object.keys(this._priceMap).length > 0 ? p(
|
|
1262
|
+
resolveValueUSD(r) {
|
|
1263
|
+
return Object.keys(this._priceMap).length > 0 ? p(r.amount).multipliedBy(this.getPrice(r.pool)).toString() : r.valueUSD;
|
|
1257
1264
|
}
|
|
1258
|
-
getPositionsOverview(
|
|
1259
|
-
const o = {},
|
|
1260
|
-
let t = new p(0), a = new p(0),
|
|
1261
|
-
|
|
1265
|
+
getPositionsOverview(r) {
|
|
1266
|
+
const o = {}, n = {};
|
|
1267
|
+
let t = new p(0), a = new p(0), s = new p(0), i = new p(0), c = new p(0), l = new p(0);
|
|
1268
|
+
r.forEach((g) => {
|
|
1262
1269
|
if (g.type === "navi-lending-supply") {
|
|
1263
|
-
const
|
|
1264
|
-
t = t.plus(f),
|
|
1265
|
-
new p(f).multipliedBy(
|
|
1266
|
-
),
|
|
1267
|
-
new p(f).multipliedBy(
|
|
1270
|
+
const u = g["navi-lending-supply"], f = this.resolveValueUSD(u);
|
|
1271
|
+
t = t.plus(f), c = c.plus(
|
|
1272
|
+
new p(f).multipliedBy(u.pool.liquidationFactor.threshold)
|
|
1273
|
+
), l = l.plus(
|
|
1274
|
+
new p(f).multipliedBy(u.pool.ltvValue)
|
|
1268
1275
|
);
|
|
1269
1276
|
} else if (g.type === "navi-lending-borrow") {
|
|
1270
|
-
const
|
|
1271
|
-
a = a.plus(this.resolveValueUSD(
|
|
1277
|
+
const u = g["navi-lending-borrow"];
|
|
1278
|
+
a = a.plus(this.resolveValueUSD(u));
|
|
1272
1279
|
} else if (g.type === "navi-lending-emode-supply") {
|
|
1273
|
-
const
|
|
1280
|
+
const u = g["navi-lending-emode-supply"], f = this.resolveValueUSD(u);
|
|
1274
1281
|
t = t.plus(f);
|
|
1275
|
-
const
|
|
1276
|
-
|
|
1277
|
-
new p(f).multipliedBy(
|
|
1278
|
-
),
|
|
1279
|
-
new p(f).multipliedBy(
|
|
1282
|
+
const k = u.pool.emode;
|
|
1283
|
+
c = c.plus(
|
|
1284
|
+
new p(f).multipliedBy(k.lt)
|
|
1285
|
+
), l = l.plus(
|
|
1286
|
+
new p(f).multipliedBy(k.ltv)
|
|
1280
1287
|
);
|
|
1281
1288
|
} else if (g.type === "navi-lending-emode-borrow") {
|
|
1282
|
-
const
|
|
1283
|
-
a = a.plus(this.resolveValueUSD(
|
|
1289
|
+
const u = g["navi-lending-emode-borrow"];
|
|
1290
|
+
a = a.plus(this.resolveValueUSD(u));
|
|
1284
1291
|
}
|
|
1285
|
-
}), a = p.max(a, 0), t = p.max(t, 0),
|
|
1292
|
+
}), a = p.max(a, 0), t = p.max(t, 0), c = p.max(c, 0), l = p.max(l, 0), r.forEach((g) => {
|
|
1286
1293
|
if (g.type === "navi-lending-supply") {
|
|
1287
|
-
const
|
|
1288
|
-
t.gt(0) && (
|
|
1289
|
-
new p(f).dividedBy(t).multipliedBy(new p(
|
|
1290
|
-
)), o[
|
|
1294
|
+
const u = g["navi-lending-supply"], f = this.resolveValueUSD(u), k = u.pool.supplyIncentiveApyInfo.apy;
|
|
1295
|
+
t.gt(0) && (s = s.plus(
|
|
1296
|
+
new p(f).dividedBy(t).multipliedBy(new p(k).dividedBy(100))
|
|
1297
|
+
)), o[u.pool.suiCoinType] = p(o[u.pool.suiCoinType] || 0).plus(u.amount).toString();
|
|
1291
1298
|
} else if (g.type === "navi-lending-borrow") {
|
|
1292
|
-
const
|
|
1299
|
+
const u = g["navi-lending-borrow"], f = this.resolveValueUSD(u), k = u.pool.borrowIncentiveApyInfo.apy;
|
|
1293
1300
|
a.gt(0) && (i = i.plus(
|
|
1294
|
-
new p(f).dividedBy(a).multipliedBy(new p(
|
|
1295
|
-
)),
|
|
1301
|
+
new p(f).dividedBy(a).multipliedBy(new p(k).dividedBy(100))
|
|
1302
|
+
)), n[u.pool.suiCoinType] = p(n[u.pool.suiCoinType] || 0).plus(u.amount).toString();
|
|
1296
1303
|
} else if (g.type === "navi-lending-emode-supply") {
|
|
1297
|
-
const
|
|
1298
|
-
t.gt(0) && (
|
|
1299
|
-
new p(f).dividedBy(t).multipliedBy(new p(
|
|
1300
|
-
)), o[
|
|
1304
|
+
const u = g["navi-lending-emode-supply"], f = this.resolveValueUSD(u), k = u.pool.supplyIncentiveApyInfo.apy;
|
|
1305
|
+
t.gt(0) && (s = s.plus(
|
|
1306
|
+
new p(f).dividedBy(t).multipliedBy(new p(k).dividedBy(100))
|
|
1307
|
+
)), o[u.pool.suiCoinType] = p(o[u.pool.suiCoinType] || 0).plus(u.amount).toString();
|
|
1301
1308
|
} else if (g.type === "navi-lending-emode-borrow") {
|
|
1302
|
-
const
|
|
1309
|
+
const u = g["navi-lending-emode-borrow"], f = this.resolveValueUSD(u), k = u.pool.borrowIncentiveApyInfo.apy;
|
|
1303
1310
|
a.gt(0) && (i = i.plus(
|
|
1304
|
-
new p(f).dividedBy(a).multipliedBy(new p(
|
|
1305
|
-
)),
|
|
1311
|
+
new p(f).dividedBy(a).multipliedBy(new p(k).dividedBy(100))
|
|
1312
|
+
)), n[u.pool.suiCoinType] = p(n[u.pool.suiCoinType] || 0).plus(u.amount).toString();
|
|
1306
1313
|
}
|
|
1307
1314
|
});
|
|
1308
|
-
const d = t.minus(a), y = t.minus(a).eq(0) ? new p(0) : t.multipliedBy(
|
|
1315
|
+
const d = t.minus(a), y = t.minus(a).eq(0) ? new p(0) : t.multipliedBy(s).minus(a.multipliedBy(i)).div(t.minus(a));
|
|
1309
1316
|
return {
|
|
1310
|
-
hf: a.toNumber() !== 0 ?
|
|
1317
|
+
hf: a.toNumber() !== 0 ? c.dividedBy(a).toNumber() : 1 / 0,
|
|
1311
1318
|
netVaule: d.toString(),
|
|
1312
1319
|
netWorthApr: y.toString(),
|
|
1313
1320
|
totalSupplyValue: t.toString(),
|
|
1314
1321
|
totalBorrowValue: a.toString(),
|
|
1315
|
-
totalsupplyApy:
|
|
1322
|
+
totalsupplyApy: s.toString(),
|
|
1316
1323
|
totalBorrowApy: i.toString(),
|
|
1317
|
-
maxLiquidationValue:
|
|
1318
|
-
maxLoanToVaule:
|
|
1324
|
+
maxLiquidationValue: c.toString(),
|
|
1325
|
+
maxLoanToVaule: l.toString(),
|
|
1319
1326
|
supply: o,
|
|
1320
|
-
borrow:
|
|
1327
|
+
borrow: n
|
|
1321
1328
|
};
|
|
1322
1329
|
}
|
|
1323
1330
|
}
|
|
1324
|
-
async function
|
|
1331
|
+
async function dt(e, r, o, n) {
|
|
1325
1332
|
const t = await _({
|
|
1326
|
-
...
|
|
1327
|
-
cacheTime:
|
|
1333
|
+
...n,
|
|
1334
|
+
cacheTime: w
|
|
1328
1335
|
});
|
|
1329
1336
|
t.limter && e.moveCall({
|
|
1330
1337
|
target: `${t.limter}::navi_adaptor::verify_navi_position_healthy`,
|
|
@@ -1332,61 +1339,61 @@ async function pt(e, n, o, r) {
|
|
|
1332
1339
|
e.object("0x06"),
|
|
1333
1340
|
e.object(t.storage),
|
|
1334
1341
|
e.object(t.priceOracle),
|
|
1335
|
-
h(
|
|
1342
|
+
h(r, e.pure.address),
|
|
1336
1343
|
e.pure.u256(new p(o).shiftedBy(27).toNumber())
|
|
1337
1344
|
]
|
|
1338
1345
|
});
|
|
1339
1346
|
}
|
|
1340
|
-
const
|
|
1347
|
+
const re = new Q("https://hermes.pyth.network", {
|
|
1341
1348
|
timeout: 1e4
|
|
1342
1349
|
});
|
|
1343
|
-
async function
|
|
1350
|
+
async function mt(e) {
|
|
1344
1351
|
try {
|
|
1345
|
-
const
|
|
1346
|
-
if (!o) return
|
|
1347
|
-
const
|
|
1352
|
+
const r = [], o = await re.getLatestPriceFeeds(e);
|
|
1353
|
+
if (!o) return r;
|
|
1354
|
+
const n = Math.floor((/* @__PURE__ */ new Date()).valueOf() / 1e3);
|
|
1348
1355
|
for (const t of o) {
|
|
1349
1356
|
const a = t.getPriceUnchecked();
|
|
1350
|
-
if (a.publishTime >
|
|
1357
|
+
if (a.publishTime > n) {
|
|
1351
1358
|
console.warn(
|
|
1352
|
-
`pyth price feed is invalid, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${
|
|
1359
|
+
`pyth price feed is invalid, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${n}`
|
|
1353
1360
|
);
|
|
1354
1361
|
continue;
|
|
1355
1362
|
}
|
|
1356
|
-
|
|
1357
|
-
`stale price feed, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${
|
|
1358
|
-
),
|
|
1363
|
+
n - t.getPriceUnchecked().publishTime > 30 && (console.info(
|
|
1364
|
+
`stale price feed, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${n}`
|
|
1365
|
+
), r.push(t.id));
|
|
1359
1366
|
}
|
|
1360
|
-
return
|
|
1361
|
-
} catch (
|
|
1362
|
-
throw new Error(`failed to get pyth stale price feed id, msg: ${
|
|
1367
|
+
return r;
|
|
1368
|
+
} catch (r) {
|
|
1369
|
+
throw new Error(`failed to get pyth stale price feed id, msg: ${r.message}`);
|
|
1363
1370
|
}
|
|
1364
1371
|
}
|
|
1365
|
-
async function
|
|
1372
|
+
async function Se(e, r) {
|
|
1366
1373
|
try {
|
|
1367
|
-
const o = [],
|
|
1374
|
+
const o = [], n = r?.client ?? S, t = e.map((s) => s.priceInfoObject), a = await n.multiGetObjects({
|
|
1368
1375
|
ids: Array.from(new Set(t)),
|
|
1369
1376
|
options: { showContent: !0 }
|
|
1370
1377
|
});
|
|
1371
|
-
for (const
|
|
1372
|
-
const i =
|
|
1378
|
+
for (const s of a) {
|
|
1379
|
+
const i = s.data;
|
|
1373
1380
|
if (!i || !i.content || i.content.dataType !== "moveObject") {
|
|
1374
1381
|
console.warn(`fetched object ${i?.objectId} datatype should be moveObject`);
|
|
1375
1382
|
continue;
|
|
1376
1383
|
}
|
|
1377
|
-
const
|
|
1378
|
-
if (!
|
|
1384
|
+
const c = e.find((u) => u.priceInfoObject == i.objectId);
|
|
1385
|
+
if (!c) {
|
|
1379
1386
|
console.warn(`unable to find pyth info from array, priceInfoObject: ${i.objectId}`);
|
|
1380
1387
|
continue;
|
|
1381
1388
|
}
|
|
1382
|
-
const
|
|
1389
|
+
const l = i.content.fields.price_info.fields.price_feed.fields.price.fields, { magnitude: d, negative: y } = l.price.fields, v = l.conf, g = l.timestamp;
|
|
1383
1390
|
o.push({
|
|
1384
|
-
priceFeedId:
|
|
1385
|
-
priceInfoObject:
|
|
1391
|
+
priceFeedId: c.priceFeedId,
|
|
1392
|
+
priceInfoObject: c.priceInfoObject,
|
|
1386
1393
|
price: y ? "-" + d : d,
|
|
1387
1394
|
conf: v,
|
|
1388
1395
|
publishTime: Number(g),
|
|
1389
|
-
expiration:
|
|
1396
|
+
expiration: c.expiration
|
|
1390
1397
|
});
|
|
1391
1398
|
}
|
|
1392
1399
|
return o;
|
|
@@ -1395,20 +1402,20 @@ async function $e(e, n) {
|
|
|
1395
1402
|
return;
|
|
1396
1403
|
}
|
|
1397
1404
|
}
|
|
1398
|
-
async function
|
|
1405
|
+
async function Ve(e, r) {
|
|
1399
1406
|
try {
|
|
1400
|
-
const o = [],
|
|
1401
|
-
if (!
|
|
1407
|
+
const o = [], n = await Se(e, r);
|
|
1408
|
+
if (!n) return o;
|
|
1402
1409
|
const t = Math.floor((/* @__PURE__ */ new Date()).valueOf() / 1e3);
|
|
1403
|
-
for (const a of
|
|
1410
|
+
for (const a of n) {
|
|
1404
1411
|
if (a.publishTime > t) {
|
|
1405
1412
|
console.warn(
|
|
1406
1413
|
`pyth price feed is invalid, id: ${a.priceFeedId}, publish time: ${a.publishTime}, current timestamp: ${t}`
|
|
1407
1414
|
);
|
|
1408
1415
|
continue;
|
|
1409
1416
|
}
|
|
1410
|
-
const
|
|
1411
|
-
t - a.publishTime >
|
|
1417
|
+
const s = a.expiration || 60;
|
|
1418
|
+
t - a.publishTime > s && (console.info(
|
|
1412
1419
|
`stale price feed, id: ${a.priceFeedId}, publish time: ${a.publishTime}, current timestamp: ${t}`
|
|
1413
1420
|
), o.push(a.priceFeedId));
|
|
1414
1421
|
}
|
|
@@ -1417,51 +1424,51 @@ async function Se(e, n) {
|
|
|
1417
1424
|
throw new Error(`failed to get pyth stale price feed id, msg: ${o.message}`);
|
|
1418
1425
|
}
|
|
1419
1426
|
}
|
|
1420
|
-
async function
|
|
1421
|
-
const
|
|
1427
|
+
async function Me(e, r, o) {
|
|
1428
|
+
const n = o?.client ?? S, t = await _({
|
|
1422
1429
|
...o,
|
|
1423
|
-
cacheTime:
|
|
1430
|
+
cacheTime: w
|
|
1424
1431
|
});
|
|
1425
1432
|
try {
|
|
1426
|
-
const a = await
|
|
1427
|
-
return await new
|
|
1428
|
-
|
|
1433
|
+
const a = await re.getPriceFeedsUpdateData(r);
|
|
1434
|
+
return await new me(
|
|
1435
|
+
n,
|
|
1429
1436
|
t.oracle.pythStateId,
|
|
1430
1437
|
t.oracle.wormholeStateId
|
|
1431
|
-
).updatePriceFeeds(e, a,
|
|
1438
|
+
).updatePriceFeeds(e, a, r);
|
|
1432
1439
|
} catch (a) {
|
|
1433
1440
|
throw new Error(`failed to update pyth price feeds, msg: ${a.message}`);
|
|
1434
1441
|
}
|
|
1435
1442
|
}
|
|
1436
|
-
async function
|
|
1437
|
-
const
|
|
1443
|
+
async function Ee(e, r, o) {
|
|
1444
|
+
const n = await _({
|
|
1438
1445
|
...o,
|
|
1439
|
-
cacheTime:
|
|
1446
|
+
cacheTime: w
|
|
1440
1447
|
});
|
|
1441
1448
|
if (o?.updatePythPriceFeeds) {
|
|
1442
|
-
const t =
|
|
1449
|
+
const t = r.filter((a) => !!a.pythPriceFeedId && !!a.pythPriceInfoObject).map((a) => ({
|
|
1443
1450
|
priceFeedId: a.pythPriceFeedId,
|
|
1444
1451
|
priceInfoObject: a.pythPriceInfoObject,
|
|
1445
1452
|
expiration: 30
|
|
1446
1453
|
}));
|
|
1447
1454
|
try {
|
|
1448
|
-
const a = await
|
|
1449
|
-
a.length > 0 && await
|
|
1455
|
+
const a = await Ve(t, o);
|
|
1456
|
+
a.length > 0 && await Me(e, a, o);
|
|
1450
1457
|
} catch {
|
|
1451
1458
|
console.error("Failed to update Pyth price feeds");
|
|
1452
1459
|
}
|
|
1453
1460
|
}
|
|
1454
|
-
for (const t of
|
|
1461
|
+
for (const t of r)
|
|
1455
1462
|
o?.env === "dev" ? e.moveCall({
|
|
1456
|
-
target: `${
|
|
1463
|
+
target: `${n.oracle.packageId}::oracle_pro::update_single_price`,
|
|
1457
1464
|
arguments: [
|
|
1458
1465
|
e.object("0x6"),
|
|
1459
1466
|
// Clock object
|
|
1460
|
-
e.object(
|
|
1467
|
+
e.object(n.oracle.oracleConfig),
|
|
1461
1468
|
// Oracle configuration
|
|
1462
|
-
e.object(
|
|
1469
|
+
e.object(n.oracle.priceOracle),
|
|
1463
1470
|
// Price oracle contract
|
|
1464
|
-
e.object(
|
|
1471
|
+
e.object(n.oracle.supraOracleHolder),
|
|
1465
1472
|
// Supra oracle holder
|
|
1466
1473
|
e.object(t.pythPriceInfoObject),
|
|
1467
1474
|
// Pyth price info object
|
|
@@ -1469,19 +1476,19 @@ async function Me(e, n, o) {
|
|
|
1469
1476
|
// Price feed ID
|
|
1470
1477
|
]
|
|
1471
1478
|
}) : e.moveCall({
|
|
1472
|
-
target: `${
|
|
1479
|
+
target: `${n.oracle.packageId}::oracle_pro::update_single_price_v2`,
|
|
1473
1480
|
arguments: [
|
|
1474
1481
|
e.object("0x6"),
|
|
1475
1482
|
// Clock object
|
|
1476
|
-
e.object(
|
|
1483
|
+
e.object(n.oracle.oracleConfig),
|
|
1477
1484
|
// Oracle configuration
|
|
1478
|
-
e.object(
|
|
1485
|
+
e.object(n.oracle.priceOracle),
|
|
1479
1486
|
// Price oracle contract
|
|
1480
|
-
e.object(
|
|
1487
|
+
e.object(n.oracle.supraOracleHolder),
|
|
1481
1488
|
// Supra oracle holder
|
|
1482
1489
|
e.object(t.pythPriceInfoObject),
|
|
1483
1490
|
// Pyth price info object
|
|
1484
|
-
e.object(
|
|
1491
|
+
e.object(n.oracle.switchboardAggregator),
|
|
1485
1492
|
e.pure.address(t.feedId)
|
|
1486
1493
|
// Price feed ID
|
|
1487
1494
|
]
|
|
@@ -1491,11 +1498,11 @@ async function Me(e, n, o) {
|
|
|
1491
1498
|
async function ne(e) {
|
|
1492
1499
|
return (await _({
|
|
1493
1500
|
...e,
|
|
1494
|
-
cacheTime:
|
|
1501
|
+
cacheTime: w
|
|
1495
1502
|
})).oracle.feeds;
|
|
1496
1503
|
}
|
|
1497
|
-
function
|
|
1498
|
-
return e.filter((o) => !!(
|
|
1504
|
+
function De(e, r) {
|
|
1505
|
+
return e.filter((o) => !!(r?.lendingState && r.lendingState.find((t) => o.oracleId === t.pool.oracleId) || r?.lendingPositions && r.lendingPositions.find((t) => {
|
|
1499
1506
|
if (![
|
|
1500
1507
|
"navi-lending-supply",
|
|
1501
1508
|
"navi-lending-borrow",
|
|
@@ -1503,63 +1510,63 @@ function Ee(e, n) {
|
|
|
1503
1510
|
"navi-lending-emode-borrow"
|
|
1504
1511
|
].includes(t.type))
|
|
1505
1512
|
return !1;
|
|
1506
|
-
const
|
|
1507
|
-
return o.oracleId ===
|
|
1508
|
-
}) ||
|
|
1513
|
+
const s = t[t.type]?.pool;
|
|
1514
|
+
return o.oracleId === s?.oracleId;
|
|
1515
|
+
}) || r?.pools && r.pools.find((t) => o.oracleId === t.oracleId)));
|
|
1509
1516
|
}
|
|
1510
|
-
async function
|
|
1517
|
+
async function ft(e, r, o, n) {
|
|
1511
1518
|
try {
|
|
1512
1519
|
const t = await ne({
|
|
1513
|
-
...
|
|
1520
|
+
...n
|
|
1514
1521
|
}), a = [];
|
|
1515
|
-
o.forEach((
|
|
1516
|
-
a.includes(
|
|
1522
|
+
o.forEach((l) => {
|
|
1523
|
+
a.includes(l.market) || a.push(l.market);
|
|
1517
1524
|
});
|
|
1518
|
-
const
|
|
1519
|
-
...
|
|
1525
|
+
const s = await $e(r, {
|
|
1526
|
+
...n,
|
|
1520
1527
|
markets: a
|
|
1521
|
-
}), i =
|
|
1522
|
-
lendingPositions:
|
|
1528
|
+
}), i = De(t, {
|
|
1529
|
+
lendingPositions: s,
|
|
1523
1530
|
pools: o
|
|
1524
1531
|
});
|
|
1525
|
-
return await
|
|
1532
|
+
return await Ee(e, i, {
|
|
1526
1533
|
updatePythPriceFeeds: !0,
|
|
1527
|
-
...
|
|
1534
|
+
...n
|
|
1528
1535
|
});
|
|
1529
1536
|
} catch (t) {
|
|
1530
|
-
if (
|
|
1537
|
+
if (n?.throws)
|
|
1531
1538
|
throw t;
|
|
1532
1539
|
return console.error(t), e;
|
|
1533
1540
|
}
|
|
1534
1541
|
}
|
|
1535
|
-
const
|
|
1542
|
+
const z = P(
|
|
1536
1543
|
B(
|
|
1537
1544
|
async (e) => {
|
|
1538
|
-
const
|
|
1539
|
-
return Object.keys(o.data).map((
|
|
1540
|
-
...o.data[
|
|
1541
|
-
coinType:
|
|
1545
|
+
const r = `https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env || "prod"}&sdk=${V.version}&market=${e?.market || U}`, o = await fetch(r, { headers: M }).then((n) => n.json());
|
|
1546
|
+
return Object.keys(o.data).map((n) => ({
|
|
1547
|
+
...o.data[n],
|
|
1548
|
+
coinType: n
|
|
1542
1549
|
}));
|
|
1543
1550
|
}
|
|
1544
1551
|
)
|
|
1545
1552
|
);
|
|
1546
|
-
async function
|
|
1547
|
-
return (await
|
|
1553
|
+
async function yt(e, r) {
|
|
1554
|
+
return (await z(r)).find((n) => typeof e == "string" ? b(n.coinType) === b(e) : typeof e == "number" ? n.assetId === e : n.assetId === e.id) || null;
|
|
1548
1555
|
}
|
|
1549
|
-
async function
|
|
1556
|
+
async function gt(e, r, o, n) {
|
|
1550
1557
|
const t = await _({
|
|
1551
|
-
...
|
|
1552
|
-
cacheTime:
|
|
1553
|
-
}), a = await A(
|
|
1554
|
-
if (!(await
|
|
1555
|
-
...
|
|
1556
|
-
cacheTime:
|
|
1558
|
+
...n,
|
|
1559
|
+
cacheTime: w
|
|
1560
|
+
}), a = await A(r, n);
|
|
1561
|
+
if (!(await z({
|
|
1562
|
+
...n,
|
|
1563
|
+
cacheTime: w
|
|
1557
1564
|
})).some(
|
|
1558
|
-
(
|
|
1565
|
+
(c) => b(c.coinType) === b(a.suiCoinType)
|
|
1559
1566
|
))
|
|
1560
1567
|
throw new Error("Pool does not support flashloan");
|
|
1561
1568
|
if (t.version === 1) {
|
|
1562
|
-
const [
|
|
1569
|
+
const [c, l] = e.moveCall({
|
|
1563
1570
|
target: `${t.package}::lending::flash_loan_with_ctx`,
|
|
1564
1571
|
arguments: [
|
|
1565
1572
|
e.object(t.flashloanConfig),
|
|
@@ -1568,9 +1575,9 @@ async function yt(e, n, o, r) {
|
|
|
1568
1575
|
],
|
|
1569
1576
|
typeArguments: [a.suiCoinType]
|
|
1570
1577
|
});
|
|
1571
|
-
return [
|
|
1578
|
+
return [c, l];
|
|
1572
1579
|
} else {
|
|
1573
|
-
const [
|
|
1580
|
+
const [c, l] = e.moveCall({
|
|
1574
1581
|
target: `${t.package}::lending::flash_loan_with_ctx_v2`,
|
|
1575
1582
|
arguments: [
|
|
1576
1583
|
e.object(t.flashloanConfig),
|
|
@@ -1580,39 +1587,39 @@ async function yt(e, n, o, r) {
|
|
|
1580
1587
|
],
|
|
1581
1588
|
typeArguments: [a.suiCoinType]
|
|
1582
1589
|
});
|
|
1583
|
-
return [
|
|
1590
|
+
return [c, l];
|
|
1584
1591
|
}
|
|
1585
1592
|
}
|
|
1586
|
-
async function
|
|
1593
|
+
async function ht(e, r, o, n, t) {
|
|
1587
1594
|
const a = await _({
|
|
1588
1595
|
...t,
|
|
1589
|
-
cacheTime:
|
|
1590
|
-
}),
|
|
1591
|
-
if (!(await
|
|
1596
|
+
cacheTime: w
|
|
1597
|
+
}), s = await A(r, t);
|
|
1598
|
+
if (!(await z({
|
|
1592
1599
|
...t,
|
|
1593
|
-
cacheTime:
|
|
1600
|
+
cacheTime: w
|
|
1594
1601
|
})).some(
|
|
1595
|
-
(d) =>
|
|
1602
|
+
(d) => b(d.coinType) === b(s.suiCoinType)
|
|
1596
1603
|
))
|
|
1597
1604
|
throw new Error("Pool does not support flashloan");
|
|
1598
|
-
const [
|
|
1605
|
+
const [l] = e.moveCall({
|
|
1599
1606
|
target: `${a.package}::lending::flash_repay_with_ctx`,
|
|
1600
1607
|
arguments: [
|
|
1601
1608
|
e.object("0x06"),
|
|
1602
1609
|
e.object(a.storage),
|
|
1603
|
-
e.object(
|
|
1610
|
+
e.object(s.contract.pool),
|
|
1604
1611
|
h(o, e.object),
|
|
1605
|
-
h(
|
|
1612
|
+
h(n, e.object)
|
|
1606
1613
|
],
|
|
1607
|
-
typeArguments: [
|
|
1614
|
+
typeArguments: [s.suiCoinType]
|
|
1608
1615
|
});
|
|
1609
|
-
return [
|
|
1616
|
+
return [l];
|
|
1610
1617
|
}
|
|
1611
|
-
async function
|
|
1612
|
-
const
|
|
1618
|
+
async function vt(e, r, o, n, t, a) {
|
|
1619
|
+
const s = {
|
|
1613
1620
|
...a,
|
|
1614
|
-
cacheTime:
|
|
1615
|
-
}, i = await _(
|
|
1621
|
+
cacheTime: w
|
|
1622
|
+
}, i = await _(s), c = await A(r, s), l = await A(n, s);
|
|
1616
1623
|
if (i.version === 1) {
|
|
1617
1624
|
const [d, y] = e.moveCall({
|
|
1618
1625
|
target: `${i.package}::incentive_v3::liquidation`,
|
|
@@ -1623,15 +1630,15 @@ async function ht(e, n, o, r, t, a) {
|
|
|
1623
1630
|
// Price oracle for asset pricing
|
|
1624
1631
|
e.object(i.storage),
|
|
1625
1632
|
// Protocol storage
|
|
1626
|
-
e.pure.u8(
|
|
1633
|
+
e.pure.u8(c.id),
|
|
1627
1634
|
// Pay asset ID
|
|
1628
|
-
e.object(
|
|
1635
|
+
e.object(c.contract.pool),
|
|
1629
1636
|
// Pay asset pool contract
|
|
1630
1637
|
h(o, e.object),
|
|
1631
1638
|
// Debt repayment amount
|
|
1632
|
-
e.pure.u8(
|
|
1639
|
+
e.pure.u8(l.id),
|
|
1633
1640
|
// Collateral asset ID
|
|
1634
|
-
e.object(
|
|
1641
|
+
e.object(l.contract.pool),
|
|
1635
1642
|
// Collateral asset pool contract
|
|
1636
1643
|
h(t, e.pure.address),
|
|
1637
1644
|
// Borrower address
|
|
@@ -1640,7 +1647,7 @@ async function ht(e, n, o, r, t, a) {
|
|
|
1640
1647
|
e.object(i.incentiveV3)
|
|
1641
1648
|
// Incentive V3 contract
|
|
1642
1649
|
],
|
|
1643
|
-
typeArguments: [
|
|
1650
|
+
typeArguments: [c.suiCoinType, l.suiCoinType]
|
|
1644
1651
|
});
|
|
1645
1652
|
return [d, y];
|
|
1646
1653
|
} else {
|
|
@@ -1653,15 +1660,15 @@ async function ht(e, n, o, r, t, a) {
|
|
|
1653
1660
|
// Price oracle for asset pricing
|
|
1654
1661
|
e.object(i.storage),
|
|
1655
1662
|
// Protocol storage
|
|
1656
|
-
e.pure.u8(
|
|
1663
|
+
e.pure.u8(c.id),
|
|
1657
1664
|
// Pay asset ID
|
|
1658
|
-
e.object(
|
|
1665
|
+
e.object(c.contract.pool),
|
|
1659
1666
|
// Pay asset pool contract
|
|
1660
1667
|
h(o, e.object),
|
|
1661
1668
|
// Debt repayment amount
|
|
1662
|
-
e.pure.u8(
|
|
1669
|
+
e.pure.u8(l.id),
|
|
1663
1670
|
// Collateral asset ID
|
|
1664
|
-
e.object(
|
|
1671
|
+
e.object(l.contract.pool),
|
|
1665
1672
|
// Collateral asset pool contract
|
|
1666
1673
|
h(t, e.pure.address),
|
|
1667
1674
|
// Borrower address
|
|
@@ -1672,21 +1679,21 @@ async function ht(e, n, o, r, t, a) {
|
|
|
1672
1679
|
e.object("0x05")
|
|
1673
1680
|
// SuiSystemState object
|
|
1674
1681
|
],
|
|
1675
|
-
typeArguments: [
|
|
1682
|
+
typeArguments: [c.suiCoinType, l.suiCoinType]
|
|
1676
1683
|
});
|
|
1677
1684
|
return [d, y];
|
|
1678
1685
|
}
|
|
1679
1686
|
}
|
|
1680
|
-
async function
|
|
1681
|
-
const
|
|
1687
|
+
async function Ue(e, r, o) {
|
|
1688
|
+
const n = o?.client ?? S, t = new F(), a = await q({
|
|
1682
1689
|
...o,
|
|
1683
1690
|
markets: Object.values(E),
|
|
1684
|
-
cacheTime:
|
|
1685
|
-
}),
|
|
1686
|
-
for (let d of
|
|
1691
|
+
cacheTime: w
|
|
1692
|
+
}), s = await ne(o);
|
|
1693
|
+
for (let d of r) {
|
|
1687
1694
|
const y = await _({
|
|
1688
1695
|
...o,
|
|
1689
|
-
cacheTime:
|
|
1696
|
+
cacheTime: w,
|
|
1690
1697
|
market: d.market
|
|
1691
1698
|
});
|
|
1692
1699
|
t.moveCall({
|
|
@@ -1703,13 +1710,13 @@ async function De(e, n, o) {
|
|
|
1703
1710
|
]
|
|
1704
1711
|
});
|
|
1705
1712
|
}
|
|
1706
|
-
const i = await
|
|
1713
|
+
const i = await n.devInspectTransactionBlock({
|
|
1707
1714
|
transactionBlock: t,
|
|
1708
1715
|
sender: e
|
|
1709
|
-
}),
|
|
1716
|
+
}), c = [];
|
|
1710
1717
|
i?.results?.forEach((d) => {
|
|
1711
|
-
|
|
1712
|
-
|
|
1718
|
+
c.push(
|
|
1719
|
+
W(
|
|
1713
1720
|
{
|
|
1714
1721
|
results: [d]
|
|
1715
1722
|
},
|
|
@@ -1728,24 +1735,24 @@ async function De(e, n, o) {
|
|
|
1728
1735
|
)
|
|
1729
1736
|
);
|
|
1730
1737
|
});
|
|
1731
|
-
const
|
|
1732
|
-
return
|
|
1733
|
-
const v =
|
|
1738
|
+
const l = [];
|
|
1739
|
+
return c.forEach((d, y) => {
|
|
1740
|
+
const v = r[y];
|
|
1734
1741
|
if (d.length === 5 && Array.isArray(d[0])) {
|
|
1735
1742
|
const g = d[0].length;
|
|
1736
|
-
for (let
|
|
1737
|
-
const f =
|
|
1738
|
-
(I) =>
|
|
1739
|
-
),
|
|
1740
|
-
(I) =>
|
|
1743
|
+
for (let u = 0; u < g; u++) {
|
|
1744
|
+
const f = s.find(
|
|
1745
|
+
(I) => b(I.coinType) === b(d[1][u])
|
|
1746
|
+
), k = a.find(
|
|
1747
|
+
(I) => b(I.coinType) === b(d[0][u]) && I.market === v.market
|
|
1741
1748
|
);
|
|
1742
|
-
!f || !
|
|
1743
|
-
assetId:
|
|
1744
|
-
assetCoinType:
|
|
1745
|
-
rewardCoinType:
|
|
1746
|
-
option: Number(d[2][
|
|
1747
|
-
userClaimableReward: Number(d[4][
|
|
1748
|
-
ruleIds: Array.isArray(d[3][
|
|
1749
|
+
!f || !k || l.push({
|
|
1750
|
+
assetId: k.id,
|
|
1751
|
+
assetCoinType: b(d[0][u]),
|
|
1752
|
+
rewardCoinType: b(d[1][u]),
|
|
1753
|
+
option: Number(d[2][u]),
|
|
1754
|
+
userClaimableReward: Number(d[4][u]) / Math.pow(10, f.priceDecimal),
|
|
1755
|
+
ruleIds: Array.isArray(d[3][u]) ? d[3][u] : [d[3][u]],
|
|
1749
1756
|
market: v.market,
|
|
1750
1757
|
owner: v.owner,
|
|
1751
1758
|
address: v.address,
|
|
@@ -1753,13 +1760,13 @@ async function De(e, n, o) {
|
|
|
1753
1760
|
});
|
|
1754
1761
|
}
|
|
1755
1762
|
}
|
|
1756
|
-
}),
|
|
1763
|
+
}), l;
|
|
1757
1764
|
}
|
|
1758
|
-
async function
|
|
1759
|
-
const o = (
|
|
1760
|
-
let
|
|
1765
|
+
async function wt(e, r) {
|
|
1766
|
+
const o = (r?.markets || [E.main]).map((a) => j(a));
|
|
1767
|
+
let n = [];
|
|
1761
1768
|
try {
|
|
1762
|
-
|
|
1769
|
+
n = await ee(e, r);
|
|
1763
1770
|
} catch (a) {
|
|
1764
1771
|
console.error(a);
|
|
1765
1772
|
}
|
|
@@ -1768,225 +1775,231 @@ async function vt(e, n) {
|
|
|
1768
1775
|
owner: e,
|
|
1769
1776
|
market: a.key
|
|
1770
1777
|
})).concat(
|
|
1771
|
-
|
|
1772
|
-
const
|
|
1778
|
+
n.filter((a) => !!o.find((s) => s.id === a.marketId)).map((a) => {
|
|
1779
|
+
const s = j(a.marketId);
|
|
1773
1780
|
return {
|
|
1774
1781
|
address: a.accountCap,
|
|
1775
1782
|
owner: e,
|
|
1776
|
-
market:
|
|
1783
|
+
market: s.key,
|
|
1777
1784
|
emodeId: a.emodeId
|
|
1778
1785
|
};
|
|
1779
1786
|
})
|
|
1780
1787
|
);
|
|
1781
|
-
return await
|
|
1788
|
+
return await Ue(e, t, r);
|
|
1782
1789
|
}
|
|
1783
|
-
function
|
|
1784
|
-
const
|
|
1785
|
-
e.forEach((
|
|
1786
|
-
const t =
|
|
1787
|
-
|
|
1790
|
+
function bt(e) {
|
|
1791
|
+
const r = /* @__PURE__ */ new Map();
|
|
1792
|
+
e.forEach((n) => {
|
|
1793
|
+
const t = n.assetId, a = n.option, s = `${t}-${a}-${n.rewardCoinType}-${n.market}`;
|
|
1794
|
+
r.has(s) ? r.get(s).total += n.userClaimableReward : r.set(s, {
|
|
1788
1795
|
assetId: t,
|
|
1789
1796
|
rewardType: a,
|
|
1790
|
-
coinType:
|
|
1791
|
-
total: Number(
|
|
1792
|
-
market:
|
|
1797
|
+
coinType: n.rewardCoinType,
|
|
1798
|
+
total: Number(n.userClaimableReward),
|
|
1799
|
+
market: n.market
|
|
1793
1800
|
});
|
|
1794
1801
|
});
|
|
1795
1802
|
const o = /* @__PURE__ */ new Map();
|
|
1796
|
-
for (const { assetId:
|
|
1797
|
-
const
|
|
1798
|
-
o.has(
|
|
1799
|
-
const
|
|
1800
|
-
|
|
1803
|
+
for (const { assetId: n, rewardType: t, coinType: a, total: s, market: i } of r.values()) {
|
|
1804
|
+
const c = `${n}-${t}-${i}`;
|
|
1805
|
+
o.has(c) || o.set(c, { assetId: n, rewardType: t, market: i, rewards: /* @__PURE__ */ new Map() });
|
|
1806
|
+
const l = o.get(c);
|
|
1807
|
+
l.rewards.set(a, (l.rewards.get(a) || 0) + s);
|
|
1801
1808
|
}
|
|
1802
|
-
return Array.from(o.values()).map((
|
|
1803
|
-
assetId:
|
|
1804
|
-
rewardType:
|
|
1805
|
-
market:
|
|
1806
|
-
rewards: Array.from(
|
|
1809
|
+
return Array.from(o.values()).map((n) => ({
|
|
1810
|
+
assetId: n.assetId,
|
|
1811
|
+
rewardType: n.rewardType,
|
|
1812
|
+
market: n.market,
|
|
1813
|
+
rewards: Array.from(n.rewards.entries()).map(([t, a]) => ({
|
|
1807
1814
|
coinType: t,
|
|
1808
1815
|
available: a.toFixed(6)
|
|
1809
1816
|
}))
|
|
1810
1817
|
}));
|
|
1811
1818
|
}
|
|
1812
|
-
const
|
|
1813
|
-
async (e,
|
|
1814
|
-
const o = `https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${
|
|
1819
|
+
const kt = B(
|
|
1820
|
+
async (e, r) => {
|
|
1821
|
+
const o = `https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${V.version}&market=${r?.market || U}`;
|
|
1815
1822
|
return (await fetch(o, { headers: M }).then((t) => t.json())).data;
|
|
1816
1823
|
}
|
|
1817
|
-
),
|
|
1818
|
-
async (e,
|
|
1819
|
-
const o = `https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${
|
|
1820
|
-
return
|
|
1821
|
-
data:
|
|
1824
|
+
), _t = B(
|
|
1825
|
+
async (e, r) => {
|
|
1826
|
+
const o = `https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${r?.page || 1}&pageSize=${r?.size || 400}&sdk=${V.version}&market=${r?.market || U}`, n = await fetch(o, { headers: M }).then((t) => t.json());
|
|
1827
|
+
return H({
|
|
1828
|
+
data: n.data.rewards
|
|
1822
1829
|
});
|
|
1823
1830
|
}
|
|
1824
1831
|
);
|
|
1825
|
-
async function
|
|
1826
|
-
const
|
|
1832
|
+
async function Ct(e, r, o) {
|
|
1833
|
+
const n = await q({
|
|
1827
1834
|
...o,
|
|
1828
1835
|
markets: Object.values(E),
|
|
1829
|
-
cacheTime:
|
|
1836
|
+
cacheTime: w
|
|
1830
1837
|
}), t = /* @__PURE__ */ new Map();
|
|
1831
|
-
for (const
|
|
1832
|
-
const { rewardCoinType: i, ruleIds:
|
|
1833
|
-
for (const
|
|
1838
|
+
for (const s of r) {
|
|
1839
|
+
const { rewardCoinType: i, ruleIds: c, market: l, owner: d, address: y, emodeId: v } = s, g = `${i}___${y}__${l}`;
|
|
1840
|
+
for (const u of c) {
|
|
1834
1841
|
t.has(g) || t.set(g, {
|
|
1835
1842
|
assetIds: [],
|
|
1836
1843
|
ruleIds: [],
|
|
1837
1844
|
amount: 0,
|
|
1838
|
-
market:
|
|
1845
|
+
market: l,
|
|
1839
1846
|
owner: d,
|
|
1840
1847
|
address: y,
|
|
1841
1848
|
isEMode: typeof v < "u"
|
|
1842
1849
|
});
|
|
1843
1850
|
const f = t.get(g);
|
|
1844
|
-
f.assetIds.push(
|
|
1851
|
+
f.assetIds.push(s.assetCoinType.replace("0x", "")), f.ruleIds.push(u), f.amount += s.userClaimableReward;
|
|
1845
1852
|
}
|
|
1846
1853
|
}
|
|
1847
1854
|
const a = [];
|
|
1848
1855
|
for (const [
|
|
1849
|
-
|
|
1850
|
-
{ assetIds: i, ruleIds:
|
|
1856
|
+
s,
|
|
1857
|
+
{ assetIds: i, ruleIds: c, amount: l, market: d, owner: y, address: v, isEMode: g }
|
|
1851
1858
|
] of t) {
|
|
1852
|
-
const
|
|
1859
|
+
const u = await _({
|
|
1853
1860
|
...o,
|
|
1854
|
-
cacheTime:
|
|
1861
|
+
cacheTime: w,
|
|
1855
1862
|
market: d
|
|
1856
|
-
}), f =
|
|
1857
|
-
|
|
1863
|
+
}), f = s.split("___")[0], k = n.filter(
|
|
1864
|
+
($) => b($.suiCoinType) === b(f)
|
|
1865
|
+
);
|
|
1866
|
+
k.sort(($, D) => $.market === d ? -1 : 1);
|
|
1867
|
+
const I = k[0], O = u.rewardFunds[b(f)];
|
|
1868
|
+
if (!O)
|
|
1858
1869
|
throw new Error(`No matching rewardFund found for reward coin: ${f} ${d}`);
|
|
1859
|
-
const I = w.contract.rewardFundId;
|
|
1860
1870
|
if (o?.accountCap && !o.customCoinReceive)
|
|
1861
1871
|
throw new Error("customCoinReceive is required when accountCap is provided");
|
|
1862
1872
|
if (o?.customCoinReceive) {
|
|
1863
|
-
let
|
|
1864
|
-
o.accountCap ?
|
|
1865
|
-
target: `${
|
|
1873
|
+
let $;
|
|
1874
|
+
o.accountCap ? $ = e.moveCall({
|
|
1875
|
+
target: `${u.package}::incentive_v3::claim_reward_with_account_cap`,
|
|
1866
1876
|
arguments: [
|
|
1867
1877
|
e.object("0x06"),
|
|
1868
1878
|
// Clock object
|
|
1869
|
-
e.object(
|
|
1879
|
+
e.object(u.incentiveV3),
|
|
1870
1880
|
// Incentive V3 contract
|
|
1871
|
-
e.object(
|
|
1881
|
+
e.object(u.storage),
|
|
1872
1882
|
// Protocol storage
|
|
1873
|
-
e.object(
|
|
1883
|
+
e.object(O),
|
|
1874
1884
|
// Reward fund
|
|
1875
1885
|
e.pure.vector("string", i),
|
|
1876
1886
|
// Asset IDs
|
|
1877
|
-
e.pure.vector("address",
|
|
1887
|
+
e.pure.vector("address", c),
|
|
1878
1888
|
// Rule IDs
|
|
1879
1889
|
h(o.accountCap, e.object)
|
|
1880
1890
|
// Account capability
|
|
1881
1891
|
],
|
|
1882
1892
|
typeArguments: [f]
|
|
1883
|
-
}) : g ?
|
|
1884
|
-
target: `${
|
|
1893
|
+
}) : g ? $ = e.moveCall({
|
|
1894
|
+
target: `${u.package}::incentive_v3::claim_reward_with_account_cap`,
|
|
1885
1895
|
arguments: [
|
|
1886
1896
|
e.object("0x06"),
|
|
1887
1897
|
// Clock object
|
|
1888
|
-
e.object(
|
|
1898
|
+
e.object(u.incentiveV3),
|
|
1889
1899
|
// Incentive V3 contract
|
|
1890
|
-
e.object(
|
|
1900
|
+
e.object(u.storage),
|
|
1891
1901
|
// Protocol storage
|
|
1892
|
-
e.object(
|
|
1902
|
+
e.object(O),
|
|
1893
1903
|
// Reward fund
|
|
1894
1904
|
e.pure.vector("string", i),
|
|
1895
1905
|
// Asset IDs
|
|
1896
|
-
e.pure.vector("address",
|
|
1906
|
+
e.pure.vector("address", c),
|
|
1897
1907
|
// Rule IDs
|
|
1898
1908
|
h(v, e.object)
|
|
1899
1909
|
// Account capability
|
|
1900
1910
|
],
|
|
1901
1911
|
typeArguments: [f]
|
|
1902
|
-
}) :
|
|
1903
|
-
target: `${
|
|
1912
|
+
}) : $ = e.moveCall({
|
|
1913
|
+
target: `${u.package}::incentive_v3::claim_reward`,
|
|
1904
1914
|
arguments: [
|
|
1905
1915
|
e.object("0x06"),
|
|
1906
1916
|
// Clock object
|
|
1907
|
-
e.object(
|
|
1917
|
+
e.object(u.incentiveV3),
|
|
1908
1918
|
// Incentive V3 contract
|
|
1909
|
-
e.object(
|
|
1919
|
+
e.object(u.storage),
|
|
1910
1920
|
// Protocol storage
|
|
1911
|
-
e.object(
|
|
1921
|
+
e.object(O),
|
|
1912
1922
|
// Reward fund
|
|
1913
1923
|
e.pure.vector("string", i),
|
|
1914
1924
|
// Asset IDs
|
|
1915
|
-
e.pure.vector("address",
|
|
1925
|
+
e.pure.vector("address", c)
|
|
1916
1926
|
// Rule IDs
|
|
1917
1927
|
],
|
|
1918
1928
|
typeArguments: [f]
|
|
1919
1929
|
});
|
|
1920
|
-
const [
|
|
1930
|
+
const [D] = e.moveCall({
|
|
1921
1931
|
target: "0x2::coin::from_balance",
|
|
1922
|
-
arguments: [
|
|
1932
|
+
arguments: [$],
|
|
1923
1933
|
typeArguments: [f]
|
|
1924
1934
|
});
|
|
1925
1935
|
if (o?.customCoinReceive.type === "transfer") {
|
|
1926
1936
|
if (!o.customCoinReceive.transfer)
|
|
1927
1937
|
throw new Error("customCoinReceive.transfer is required");
|
|
1928
1938
|
e.transferObjects(
|
|
1929
|
-
[
|
|
1939
|
+
[D],
|
|
1930
1940
|
h(o.customCoinReceive.transfer, e.pure.address)
|
|
1931
1941
|
);
|
|
1932
1942
|
}
|
|
1933
1943
|
if (o?.customCoinReceive.type === "depositNAVI") {
|
|
1934
|
-
const
|
|
1935
|
-
|
|
1936
|
-
[
|
|
1944
|
+
const ae = p(I.totalSupplyAmount).shiftedBy(-9), ie = p(I.supplyCapCeiling).shiftedBy(-27);
|
|
1945
|
+
ae.plus(l).isGreaterThan(ie) && o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress ? e.transferObjects(
|
|
1946
|
+
[D],
|
|
1937
1947
|
e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)
|
|
1938
|
-
) : await
|
|
1948
|
+
) : await Ce(e, I, D, {
|
|
1949
|
+
...o,
|
|
1950
|
+
market: I.market
|
|
1951
|
+
});
|
|
1939
1952
|
} else
|
|
1940
1953
|
a.push({
|
|
1941
|
-
coin:
|
|
1942
|
-
identifier:
|
|
1954
|
+
coin: D,
|
|
1955
|
+
identifier: I,
|
|
1943
1956
|
owner: y,
|
|
1944
1957
|
isEMode: g
|
|
1945
1958
|
});
|
|
1946
1959
|
} else if (o?.accountCap || g) {
|
|
1947
|
-
const
|
|
1948
|
-
target: `${
|
|
1960
|
+
const $ = e.moveCall({
|
|
1961
|
+
target: `${u.package}::incentive_v3::claim_reward_with_account_cap`,
|
|
1949
1962
|
arguments: [
|
|
1950
1963
|
e.object("0x06"),
|
|
1951
1964
|
// Clock object
|
|
1952
|
-
e.object(
|
|
1965
|
+
e.object(u.incentiveV3),
|
|
1953
1966
|
// Incentive V3 contract
|
|
1954
|
-
e.object(
|
|
1967
|
+
e.object(u.storage),
|
|
1955
1968
|
// Protocol storage
|
|
1956
|
-
e.object(
|
|
1969
|
+
e.object(O),
|
|
1957
1970
|
// Reward fund
|
|
1958
1971
|
e.pure.vector("string", i),
|
|
1959
1972
|
// Asset IDs
|
|
1960
|
-
e.pure.vector("address",
|
|
1973
|
+
e.pure.vector("address", c),
|
|
1961
1974
|
// Rule IDs
|
|
1962
1975
|
h(o?.accountCap || v, e.object)
|
|
1963
1976
|
// Account capability
|
|
1964
1977
|
],
|
|
1965
1978
|
typeArguments: [f]
|
|
1966
|
-
}), [
|
|
1979
|
+
}), [D] = e.moveCall({
|
|
1967
1980
|
target: "0x2::coin::from_balance",
|
|
1968
|
-
arguments: [
|
|
1981
|
+
arguments: [$],
|
|
1969
1982
|
typeArguments: [f]
|
|
1970
1983
|
});
|
|
1971
1984
|
e.transferObjects(
|
|
1972
|
-
[
|
|
1985
|
+
[D],
|
|
1973
1986
|
h(o?.accountCap || y, e.pure.address)
|
|
1974
1987
|
);
|
|
1975
1988
|
} else
|
|
1976
1989
|
e.moveCall({
|
|
1977
|
-
target: `${
|
|
1990
|
+
target: `${u.package}::incentive_v3::claim_reward_entry`,
|
|
1978
1991
|
arguments: [
|
|
1979
1992
|
e.object("0x06"),
|
|
1980
1993
|
// Clock object
|
|
1981
|
-
e.object(
|
|
1994
|
+
e.object(u.incentiveV3),
|
|
1982
1995
|
// Incentive V3 contract
|
|
1983
|
-
e.object(
|
|
1996
|
+
e.object(u.storage),
|
|
1984
1997
|
// Protocol storage
|
|
1985
|
-
e.object(
|
|
1998
|
+
e.object(O),
|
|
1986
1999
|
// Reward fund
|
|
1987
2000
|
e.pure.vector("string", i),
|
|
1988
2001
|
// Asset IDs
|
|
1989
|
-
e.pure.vector("address",
|
|
2002
|
+
e.pure.vector("address", c)
|
|
1990
2003
|
// Rule IDs
|
|
1991
2004
|
],
|
|
1992
2005
|
typeArguments: [f]
|
|
@@ -1995,71 +2008,71 @@ async function _t(e, n, o) {
|
|
|
1995
2008
|
return a;
|
|
1996
2009
|
}
|
|
1997
2010
|
export {
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2011
|
+
K as Address,
|
|
2012
|
+
w as DEFAULT_CACHE_TIME,
|
|
2013
|
+
U as DEFAULT_MARKET_IDENTITY,
|
|
2014
|
+
Ye as FlashLoanAssetConfig,
|
|
2015
|
+
Ge as IncentiveAPYInfo,
|
|
2016
|
+
fe as IncentivePoolInfo,
|
|
2017
|
+
ze as IncentivePoolInfoByPhase,
|
|
2005
2018
|
E as MARKETS,
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2019
|
+
je as Market,
|
|
2020
|
+
Ke as OracleInfo,
|
|
2021
|
+
R as PoolOperator,
|
|
2022
|
+
Je as ReserveDataInfo,
|
|
2023
|
+
N as UserPositions,
|
|
2024
|
+
ye as UserStateInfo,
|
|
2025
|
+
xe as borrowCoinPTB,
|
|
2026
|
+
Ct as claimLendingRewardsPTB,
|
|
2027
|
+
Te as createAccountCapPTB,
|
|
2015
2028
|
nt as createEModeCapPTB,
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2029
|
+
Ce as depositCoinPTB,
|
|
2030
|
+
at as emodeIdentityId,
|
|
2031
|
+
Ae as enterEModePTB,
|
|
2032
|
+
rt as exitEModePTB,
|
|
2033
|
+
De as filterPriceFeeds,
|
|
2034
|
+
gt as flashloanPTB,
|
|
2035
|
+
Be as getAccountCapOwnerPTB,
|
|
2036
|
+
z as getAllFlashLoanAssets,
|
|
2037
|
+
tt as getBorrowFee,
|
|
2038
|
+
pt as getCoins,
|
|
2026
2039
|
_ as getConfig,
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2040
|
+
Qe as getFees,
|
|
2041
|
+
yt as getFlashLoanAsset,
|
|
2042
|
+
st as getHealthFactor,
|
|
2043
|
+
Pe as getHealthFactorPTB,
|
|
2044
|
+
$e as getLendingPositions,
|
|
2045
|
+
ct as getLendingState,
|
|
2046
|
+
ot as getMarket,
|
|
2034
2047
|
j as getMarketConfig,
|
|
2035
|
-
|
|
2048
|
+
Ie as getMarkets,
|
|
2036
2049
|
A as getPool,
|
|
2037
|
-
|
|
2050
|
+
q as getPools,
|
|
2038
2051
|
ne as getPriceFeeds,
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2052
|
+
mt as getPythStalePriceFeedId,
|
|
2053
|
+
Ve as getPythStalePriceFeedIdV2,
|
|
2054
|
+
lt as getSimulatedHealthFactor,
|
|
2055
|
+
te as getSimulatedHealthFactorPTB,
|
|
2056
|
+
Ze as getStats,
|
|
2044
2057
|
ut as getTransactions,
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2058
|
+
wt as getUserAvailableLendingRewards,
|
|
2059
|
+
_t as getUserClaimedRewardHistory,
|
|
2060
|
+
ee as getUserEModeCaps,
|
|
2061
|
+
kt as getUserTotalClaimedReward,
|
|
2062
|
+
vt as liquidatePTB,
|
|
2063
|
+
it as mergeCoinsPTB,
|
|
2064
|
+
b as normalizeCoinType,
|
|
2065
|
+
_e as parsePoolUID,
|
|
2053
2066
|
h as parseTxValue,
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2067
|
+
et as repayCoinPTB,
|
|
2068
|
+
ht as repayFlashLoanPTB,
|
|
2069
|
+
bt as summaryLendingRewards,
|
|
2070
|
+
ft as updateOraclePriceBeforeUserOperationPTB,
|
|
2071
|
+
Ee as updateOraclePricesPTB,
|
|
2072
|
+
Me as updatePythPriceFeeds,
|
|
2073
|
+
dt as verifyHealthFactorPTB,
|
|
2061
2074
|
P as withCache,
|
|
2062
2075
|
B as withSingleton,
|
|
2063
|
-
|
|
2076
|
+
Xe as withdrawCoinPTB
|
|
2064
2077
|
};
|
|
2065
2078
|
//# sourceMappingURL=index.esm.js.map
|