@naviprotocol/lending 2.0.6 → 2.0.7
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/account-cap.d.ts +1 -1
- package/dist/account-cap.js +26 -0
- package/dist/account-cap.js.map +1 -0
- package/dist/account.d.ts +2 -2
- package/dist/account.js +655 -0
- package/dist/account.js.map +1 -0
- package/dist/bcs.js +137 -0
- package/dist/bcs.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -0
- package/dist/emode.d.ts +1 -1
- package/dist/emode.js +90 -0
- package/dist/emode.js.map +1 -0
- package/dist/flashloan.d.ts +1 -1
- package/dist/flashloan.js +94 -0
- package/dist/flashloan.js.map +1 -0
- package/dist/index.d.ts +17 -17
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/liquidate.d.ts +1 -1
- package/dist/liquidate.js +76 -0
- package/dist/liquidate.js.map +1 -0
- package/dist/market.d.ts +1 -1
- package/dist/market.js +121 -0
- package/dist/market.js.map +1 -0
- package/dist/oracle.d.ts +1 -1
- package/dist/oracle.js +204 -0
- package/dist/oracle.js.map +1 -0
- package/dist/package.json.js +8 -0
- package/dist/package.json.js.map +1 -0
- package/dist/pool.d.ts +1 -1
- package/dist/pool.js +391 -0
- package/dist/pool.js.map +1 -0
- package/dist/pyth.d.ts +1 -1
- package/dist/pyth.js +305 -0
- package/dist/pyth.js.map +1 -0
- package/dist/reward.d.ts +1 -1
- package/dist/reward.js +343 -0
- package/dist/reward.js.map +1 -0
- package/dist/services.js +52 -0
- package/dist/services.js.map +1 -0
- package/dist/sui.d.ts +1 -1
- package/dist/sui.js +121 -0
- package/dist/sui.js.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/ua.js +16 -0
- package/dist/ua.js.map +1 -0
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +227 -0
- package/dist/utils.js.map +1 -0
- package/package.json +5 -5
- package/dist/index.esm.js +0 -2749
- package/dist/index.esm.js.map +0 -1
package/dist/pyth.js
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { bcs as d } from "@mysten/sui/bcs";
|
|
2
|
+
import { SUI_CLOCK_OBJECT_ID as p } from "@mysten/sui/utils";
|
|
3
|
+
const b = 16 * 1024;
|
|
4
|
+
function u(a) {
|
|
5
|
+
return a.replace(/^0x/i, "");
|
|
6
|
+
}
|
|
7
|
+
function h(a) {
|
|
8
|
+
const e = u(a), t = new Uint8Array(e.length / 2);
|
|
9
|
+
for (let r = 0; r < t.length; r += 1)
|
|
10
|
+
t[r] = parseInt(e.slice(r * 2, r * 2 + 2), 16);
|
|
11
|
+
return t;
|
|
12
|
+
}
|
|
13
|
+
function g(a, e) {
|
|
14
|
+
return (a[e] << 8) + a[e + 1];
|
|
15
|
+
}
|
|
16
|
+
function f(a) {
|
|
17
|
+
return d.vector(d.U8).serialize(Array.from(a), {
|
|
18
|
+
maxSize: b
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function y(a, e) {
|
|
22
|
+
return {
|
|
23
|
+
type: a,
|
|
24
|
+
bcs: e
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function m(a) {
|
|
28
|
+
return d.vector(d.U8).serialize(Array.from(new TextEncoder().encode(a))).toBytes();
|
|
29
|
+
}
|
|
30
|
+
function I(a) {
|
|
31
|
+
return d.struct("PriceIdentifier", {
|
|
32
|
+
bytes: d.vector(d.U8)
|
|
33
|
+
}).serialize({
|
|
34
|
+
bytes: Array.from(a)
|
|
35
|
+
}).toBytes();
|
|
36
|
+
}
|
|
37
|
+
function j(a) {
|
|
38
|
+
const e = [];
|
|
39
|
+
let t = 0, r = 0;
|
|
40
|
+
for (let i = 0; i < a.length; i += 1) {
|
|
41
|
+
const o = a[i];
|
|
42
|
+
o === "<" ? t += 1 : o === ">" ? t -= 1 : o === "," && t === 0 && (e.push(a.slice(r, i).trim()), r = i + 1);
|
|
43
|
+
}
|
|
44
|
+
return e.push(a.slice(r).trim()), e;
|
|
45
|
+
}
|
|
46
|
+
function w(a) {
|
|
47
|
+
const t = a.indexOf("::table::Table"), r = a.indexOf("<", t), i = a.lastIndexOf(">"), o = "::price_identifier::PriceIdentifier";
|
|
48
|
+
if (t < 0 || r < 0 || i <= r)
|
|
49
|
+
throw new Error(`Unexpected Pyth price table type: ${a}`);
|
|
50
|
+
const [c, n] = j(a.slice(r + 1, i));
|
|
51
|
+
if (!c?.endsWith(o) || !n?.endsWith("::object::ID"))
|
|
52
|
+
throw new Error(`Unexpected Pyth price table type arguments: ${a}`);
|
|
53
|
+
return c.slice(0, -o.length);
|
|
54
|
+
}
|
|
55
|
+
function v(a) {
|
|
56
|
+
return Uint8Array.from(atob(a), (e) => e.charCodeAt(0));
|
|
57
|
+
}
|
|
58
|
+
class F {
|
|
59
|
+
constructor(e, t) {
|
|
60
|
+
this.endpoint = e.replace(/\/$/, ""), this.timeout = t?.timeout ?? 1e4;
|
|
61
|
+
}
|
|
62
|
+
async getLatestPriceFeeds(e) {
|
|
63
|
+
return (await this.get("/api/latest_price_feeds", e)).map((r) => ({
|
|
64
|
+
id: r.id,
|
|
65
|
+
getPriceUnchecked: () => ({
|
|
66
|
+
price: r.price.price,
|
|
67
|
+
conf: r.price.conf,
|
|
68
|
+
expo: r.price.expo,
|
|
69
|
+
publishTime: r.price.publish_time
|
|
70
|
+
})
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
async getPriceFeedsUpdateData(e) {
|
|
74
|
+
const t = await this.get(
|
|
75
|
+
"/v2/updates/price/latest",
|
|
76
|
+
e,
|
|
77
|
+
{
|
|
78
|
+
encoding: "base64",
|
|
79
|
+
parsed: "false"
|
|
80
|
+
}
|
|
81
|
+
), r = t.binary?.encoding, i = t.binary?.data ?? [];
|
|
82
|
+
if (r && r !== "base64")
|
|
83
|
+
throw new Error(`Unsupported Hermes price update encoding: ${r}`);
|
|
84
|
+
if (i.length === 0)
|
|
85
|
+
throw new Error("Hermes price update response did not include binary update data");
|
|
86
|
+
return i.map(v);
|
|
87
|
+
}
|
|
88
|
+
async get(e, t, r) {
|
|
89
|
+
const i = new AbortController(), o = setTimeout(() => i.abort(), this.timeout), c = new URL(`${this.endpoint}${e}`);
|
|
90
|
+
for (const [n, s] of Object.entries(r ?? {}))
|
|
91
|
+
c.searchParams.set(n, s);
|
|
92
|
+
for (const n of t)
|
|
93
|
+
c.searchParams.append("ids[]", u(n));
|
|
94
|
+
try {
|
|
95
|
+
const n = await fetch(c, {
|
|
96
|
+
signal: i.signal
|
|
97
|
+
});
|
|
98
|
+
if (!n.ok)
|
|
99
|
+
throw new Error(`Hermes request failed: ${n.status} ${n.statusText}`);
|
|
100
|
+
return await n.json();
|
|
101
|
+
} finally {
|
|
102
|
+
clearTimeout(o);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
class _ {
|
|
107
|
+
constructor(e, t, r) {
|
|
108
|
+
this.provider = e, this.pythStateId = t, this.wormholeStateId = r, this.priceFeedObjectIdCache = /* @__PURE__ */ new Map();
|
|
109
|
+
}
|
|
110
|
+
getCoreProvider() {
|
|
111
|
+
const e = this.provider.core;
|
|
112
|
+
return e && typeof e.getObject == "function" && typeof e.getDynamicObjectField == "function" && typeof e.getDynamicField == "function" ? e : null;
|
|
113
|
+
}
|
|
114
|
+
async getMoveObjectJson(e) {
|
|
115
|
+
const t = this.getCoreProvider();
|
|
116
|
+
if (t) {
|
|
117
|
+
const i = await t.getObject({
|
|
118
|
+
objectId: e,
|
|
119
|
+
include: { json: !0 }
|
|
120
|
+
});
|
|
121
|
+
return i.object ? {
|
|
122
|
+
objectId: i.object.objectId,
|
|
123
|
+
type: i.object.type,
|
|
124
|
+
fields: i.object.json
|
|
125
|
+
} : null;
|
|
126
|
+
}
|
|
127
|
+
if (!this.provider.getObject)
|
|
128
|
+
throw new Error("Sui Pyth provider does not support getObject");
|
|
129
|
+
const r = await this.provider.getObject({
|
|
130
|
+
id: e,
|
|
131
|
+
options: { showContent: !0 }
|
|
132
|
+
});
|
|
133
|
+
return !r.data || !r.data.content || r.data.content.dataType !== "moveObject" ? null : {
|
|
134
|
+
objectId: r.data.objectId,
|
|
135
|
+
type: r.data.type,
|
|
136
|
+
fields: r.data.content.fields
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
async getDynamicMoveObjectJson(e, t) {
|
|
140
|
+
const r = this.getCoreProvider();
|
|
141
|
+
if (r) {
|
|
142
|
+
const o = await r.getDynamicObjectField({
|
|
143
|
+
parentId: e,
|
|
144
|
+
name: t,
|
|
145
|
+
include: { json: !0 }
|
|
146
|
+
});
|
|
147
|
+
return o.object ? {
|
|
148
|
+
objectId: o.object.objectId,
|
|
149
|
+
type: o.object.type,
|
|
150
|
+
fields: o.object.json
|
|
151
|
+
} : null;
|
|
152
|
+
}
|
|
153
|
+
if (!this.provider.getDynamicFieldObject)
|
|
154
|
+
throw new Error("Sui Pyth provider does not support getDynamicFieldObject");
|
|
155
|
+
const i = await this.provider.getDynamicFieldObject({
|
|
156
|
+
parentId: e,
|
|
157
|
+
name: t
|
|
158
|
+
});
|
|
159
|
+
return i.data ? i.data.content ? i.data.content.dataType !== "moveObject" ? null : {
|
|
160
|
+
objectId: i.data.objectId,
|
|
161
|
+
type: i.data.type,
|
|
162
|
+
fields: i.data.content.fields
|
|
163
|
+
} : {
|
|
164
|
+
objectId: i.data.objectId,
|
|
165
|
+
type: i.data.type,
|
|
166
|
+
fields: void 0
|
|
167
|
+
} : null;
|
|
168
|
+
}
|
|
169
|
+
async updatePriceFeeds(e, t, r) {
|
|
170
|
+
const i = await this.getPythPackageId(), o = await this.verifyVaasAndGetHotPotato(e, t, i), c = await this.getBaseUpdateFee(), n = e.splitCoins(
|
|
171
|
+
e.gas,
|
|
172
|
+
r.map(() => e.pure.u64(c))
|
|
173
|
+
);
|
|
174
|
+
return this.executePriceFeedUpdates(e, i, r, o, n);
|
|
175
|
+
}
|
|
176
|
+
async getBaseUpdateFee() {
|
|
177
|
+
if (this.baseUpdateFee === void 0) {
|
|
178
|
+
const e = await this.getMoveObjectJson(this.pythStateId);
|
|
179
|
+
if (!e?.fields)
|
|
180
|
+
throw new Error("Unable to fetch pyth state object");
|
|
181
|
+
this.baseUpdateFee = Number(e.fields.base_update_fee);
|
|
182
|
+
}
|
|
183
|
+
return this.baseUpdateFee;
|
|
184
|
+
}
|
|
185
|
+
async getPackageId(e) {
|
|
186
|
+
const t = await this.getMoveObjectJson(e);
|
|
187
|
+
if (t?.fields) {
|
|
188
|
+
const r = t.fields;
|
|
189
|
+
if ("upgrade_cap" in r) {
|
|
190
|
+
const i = r.upgrade_cap, o = i?.package ?? i?.fields?.package;
|
|
191
|
+
if (o)
|
|
192
|
+
return o;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
throw new Error(`Cannot fetch package id for object ${e}`);
|
|
196
|
+
}
|
|
197
|
+
async verifyVaas(e, t) {
|
|
198
|
+
const r = await this.getWormholePackageId();
|
|
199
|
+
return e.map((i) => {
|
|
200
|
+
const [o] = t.moveCall({
|
|
201
|
+
target: `${r}::vaa::parse_and_verify`,
|
|
202
|
+
arguments: [
|
|
203
|
+
t.object(this.wormholeStateId),
|
|
204
|
+
t.pure(f(i)),
|
|
205
|
+
t.object(p)
|
|
206
|
+
]
|
|
207
|
+
});
|
|
208
|
+
return o;
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
async verifyVaasAndGetHotPotato(e, t, r) {
|
|
212
|
+
if (t.length > 1)
|
|
213
|
+
throw new Error(
|
|
214
|
+
"SDK does not support sending multiple accumulator messages in a single transaction"
|
|
215
|
+
);
|
|
216
|
+
const i = this.extractVaaBytesFromAccumulatorMessage(t[0]), [o] = await this.verifyVaas([i], e), [c] = e.moveCall({
|
|
217
|
+
target: `${r}::pyth::create_authenticated_price_infos_using_accumulator`,
|
|
218
|
+
arguments: [
|
|
219
|
+
e.object(this.pythStateId),
|
|
220
|
+
e.pure(f(t[0])),
|
|
221
|
+
o,
|
|
222
|
+
e.object(p)
|
|
223
|
+
]
|
|
224
|
+
});
|
|
225
|
+
return c;
|
|
226
|
+
}
|
|
227
|
+
async executePriceFeedUpdates(e, t, r, i, o) {
|
|
228
|
+
const c = [];
|
|
229
|
+
for (const [n, s] of r.entries()) {
|
|
230
|
+
const l = await this.getPriceFeedObjectId(s);
|
|
231
|
+
if (!l)
|
|
232
|
+
throw new Error(`Price feed ${s} not found, please create it first`);
|
|
233
|
+
c.push(l), [i] = e.moveCall({
|
|
234
|
+
target: `${t}::pyth::update_single_price_feed`,
|
|
235
|
+
arguments: [
|
|
236
|
+
e.object(this.pythStateId),
|
|
237
|
+
i,
|
|
238
|
+
e.object(l),
|
|
239
|
+
o[n],
|
|
240
|
+
e.object(p)
|
|
241
|
+
]
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
return e.moveCall({
|
|
245
|
+
target: `${t}::hot_potato_vector::destroy`,
|
|
246
|
+
arguments: [i],
|
|
247
|
+
typeArguments: [`${t}::price_info::PriceInfo`]
|
|
248
|
+
}), c;
|
|
249
|
+
}
|
|
250
|
+
async getWormholePackageId() {
|
|
251
|
+
return this.wormholePackageId || (this.wormholePackageId = await this.getPackageId(this.wormholeStateId)), this.wormholePackageId;
|
|
252
|
+
}
|
|
253
|
+
async getPythPackageId() {
|
|
254
|
+
return this.pythPackageId || (this.pythPackageId = await this.getPackageId(this.pythStateId)), this.pythPackageId;
|
|
255
|
+
}
|
|
256
|
+
async getPriceFeedObjectId(e) {
|
|
257
|
+
const t = u(e);
|
|
258
|
+
if (!this.priceFeedObjectIdCache.has(t)) {
|
|
259
|
+
const { id: r, fieldType: i } = await this.getPriceTableInfo(), o = `${i}::price_identifier::PriceIdentifier`, c = this.getCoreProvider();
|
|
260
|
+
if (c) {
|
|
261
|
+
const { dynamicField: n } = await c.getDynamicField({
|
|
262
|
+
parentId: r,
|
|
263
|
+
name: y(o, I(h(t)))
|
|
264
|
+
}), s = n?.value?.bcs;
|
|
265
|
+
this.priceFeedObjectIdCache.set(
|
|
266
|
+
t,
|
|
267
|
+
s && s.length === 32 ? d.Address.parse(Uint8Array.from(s)) : void 0
|
|
268
|
+
);
|
|
269
|
+
} else {
|
|
270
|
+
const n = await this.getDynamicMoveObjectJson(r, {
|
|
271
|
+
type: o,
|
|
272
|
+
value: {
|
|
273
|
+
bytes: Array.from(h(t))
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
n?.fields ? this.priceFeedObjectIdCache.set(t, n.fields.value) : this.priceFeedObjectIdCache.set(t, void 0);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return this.priceFeedObjectIdCache.get(t);
|
|
280
|
+
}
|
|
281
|
+
async getPriceTableInfo() {
|
|
282
|
+
if (!this.priceTableInfo) {
|
|
283
|
+
const e = this.getCoreProvider() ? y("vector<u8>", m("price_info")) : {
|
|
284
|
+
type: "vector<u8>",
|
|
285
|
+
value: "price_info"
|
|
286
|
+
}, t = await this.getDynamicMoveObjectJson(this.pythStateId, e);
|
|
287
|
+
if (!t?.type)
|
|
288
|
+
throw new Error("Price Table not found, contract may not be initialized");
|
|
289
|
+
this.priceTableInfo = {
|
|
290
|
+
id: t.objectId,
|
|
291
|
+
fieldType: w(t.type)
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
return this.priceTableInfo;
|
|
295
|
+
}
|
|
296
|
+
extractVaaBytesFromAccumulatorMessage(e) {
|
|
297
|
+
const r = 7 + e[6] + 1, i = g(e, r), o = r + 2;
|
|
298
|
+
return e.subarray(o, o + i);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
export {
|
|
302
|
+
F as SuiPriceServiceConnection,
|
|
303
|
+
_ as SuiPythClient
|
|
304
|
+
};
|
|
305
|
+
//# sourceMappingURL=pyth.js.map
|
package/dist/pyth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pyth.js","sources":["../src/pyth.ts"],"sourcesContent":["import type { NaviSuiClient } from './sui'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { bcs } from '@mysten/sui/bcs'\nimport { SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils'\n\ntype HermesPrice = {\n price: string\n conf: string\n expo: number\n publish_time: number\n}\n\ntype HermesPriceFeedResponse = {\n id: string\n price: HermesPrice\n}\n\ntype HermesPriceUpdateResponse = {\n binary?: {\n encoding?: string\n data?: string[]\n }\n}\n\ntype PriceFeed = {\n id: string\n getPriceUnchecked(): {\n price: string\n conf: string\n expo: number\n publishTime: number\n }\n}\n\ntype CoreDynamicFieldName = {\n type: string\n bcs: Uint8Array\n}\n\ntype SuiPythProvider = Partial<Pick<NaviSuiClient, 'getObject' | 'getDynamicFieldObject'>> & {\n core?: unknown\n}\n\ntype SuiPythCoreProvider = {\n getObject(options: {\n objectId: string\n include?: { json?: boolean; content?: boolean }\n }): Promise<{\n object?: { objectId: string; type?: string; json?: Record<string, unknown> | null }\n }>\n getDynamicObjectField(options: {\n parentId: string\n name: CoreDynamicFieldName\n include?: { json?: boolean; content?: boolean }\n }): Promise<{\n object?: { objectId: string; type?: string; json?: Record<string, unknown> | null }\n }>\n getDynamicField(options: { parentId: string; name: CoreDynamicFieldName }): Promise<{\n dynamicField?: { value?: { type?: string; bcs?: Uint8Array } }\n }>\n}\n\nconst MAX_ARGUMENT_SIZE = 16 * 1024\n\nfunction normalizePriceId(priceId: string) {\n return priceId.replace(/^0x/i, '')\n}\n\nfunction hexToBytes(hex: string) {\n const normalized = normalizePriceId(hex)\n const bytes = new Uint8Array(normalized.length / 2)\n for (let i = 0; i < bytes.length; i += 1) {\n bytes[i] = parseInt(normalized.slice(i * 2, i * 2 + 2), 16)\n }\n return bytes\n}\n\nfunction readUint16BE(bytes: Uint8Array, offset: number) {\n return (bytes[offset] << 8) + bytes[offset + 1]\n}\n\nfunction toPureBytes(bytes: Uint8Array) {\n return bcs.vector(bcs.U8).serialize(Array.from(bytes), {\n maxSize: MAX_ARGUMENT_SIZE\n })\n}\n\nfunction toDynamicFieldName(type: string, bytes: Uint8Array): CoreDynamicFieldName {\n return {\n type,\n bcs: bytes\n }\n}\n\nfunction encodeVectorU8(value: string) {\n return bcs\n .vector(bcs.U8)\n .serialize(Array.from(new TextEncoder().encode(value)))\n .toBytes()\n}\n\nfunction encodePriceIdentifier(bytes: Uint8Array) {\n return bcs\n .struct('PriceIdentifier', {\n bytes: bcs.vector(bcs.U8)\n })\n .serialize({\n bytes: Array.from(bytes)\n })\n .toBytes()\n}\n\nfunction splitTopLevelTypeArgs(args: string) {\n const parts: string[] = []\n let depth = 0\n let start = 0\n\n for (let index = 0; index < args.length; index += 1) {\n const char = args[index]\n if (char === '<') {\n depth += 1\n } else if (char === '>') {\n depth -= 1\n } else if (char === ',' && depth === 0) {\n parts.push(args.slice(start, index).trim())\n start = index + 1\n }\n }\n\n parts.push(args.slice(start).trim())\n return parts\n}\n\nfunction getPythPackageIdFromPriceTableType(type: string) {\n const tablePrefix = '::table::Table'\n const tableIndex = type.indexOf(tablePrefix)\n const argsStart = type.indexOf('<', tableIndex)\n const argsEnd = type.lastIndexOf('>')\n const priceIdentifierSuffix = '::price_identifier::PriceIdentifier'\n\n if (tableIndex < 0 || argsStart < 0 || argsEnd <= argsStart) {\n throw new Error(`Unexpected Pyth price table type: ${type}`)\n }\n\n const [keyType, valueType] = splitTopLevelTypeArgs(type.slice(argsStart + 1, argsEnd))\n if (!keyType?.endsWith(priceIdentifierSuffix) || !valueType?.endsWith('::object::ID')) {\n throw new Error(`Unexpected Pyth price table type arguments: ${type}`)\n }\n\n return keyType.slice(0, -priceIdentifierSuffix.length)\n}\n\nfunction base64ToBytes(value: string) {\n return Uint8Array.from(atob(value), (char) => char.charCodeAt(0))\n}\n\nexport class SuiPriceServiceConnection {\n private readonly endpoint: string\n private readonly timeout: number\n\n constructor(endpoint: string, options?: { timeout?: number }) {\n this.endpoint = endpoint.replace(/\\/$/, '')\n this.timeout = options?.timeout ?? 10000\n }\n\n async getLatestPriceFeeds(priceIds: string[]): Promise<PriceFeed[] | undefined> {\n const data = await this.get<HermesPriceFeedResponse[]>('/api/latest_price_feeds', priceIds)\n return data.map((feed) => ({\n id: feed.id,\n getPriceUnchecked: () => ({\n price: feed.price.price,\n conf: feed.price.conf,\n expo: feed.price.expo,\n publishTime: feed.price.publish_time\n })\n }))\n }\n\n async getPriceFeedsUpdateData(priceIds: string[]): Promise<Uint8Array[]> {\n const response = await this.get<HermesPriceUpdateResponse>(\n '/v2/updates/price/latest',\n priceIds,\n {\n encoding: 'base64',\n parsed: 'false'\n }\n )\n const encoding = response.binary?.encoding\n const data = response.binary?.data ?? []\n\n if (encoding && encoding !== 'base64') {\n throw new Error(`Unsupported Hermes price update encoding: ${encoding}`)\n }\n\n if (data.length === 0) {\n throw new Error('Hermes price update response did not include binary update data')\n }\n\n return data.map(base64ToBytes)\n }\n\n private async get<T>(\n pathname: string,\n priceIds: string[],\n searchParams?: Record<string, string>\n ): Promise<T> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), this.timeout)\n const url = new URL(`${this.endpoint}${pathname}`)\n\n for (const [key, value] of Object.entries(searchParams ?? {})) {\n url.searchParams.set(key, value)\n }\n\n for (const priceId of priceIds) {\n url.searchParams.append('ids[]', normalizePriceId(priceId))\n }\n\n try {\n const res = await fetch(url, {\n signal: controller.signal\n })\n if (!res.ok) {\n throw new Error(`Hermes request failed: ${res.status} ${res.statusText}`)\n }\n return (await res.json()) as T\n } finally {\n clearTimeout(timeout)\n }\n }\n}\n\nexport class SuiPythClient {\n private pythPackageId?: string\n private wormholePackageId?: string\n private priceTableInfo?: {\n id: string\n fieldType: string\n }\n private readonly priceFeedObjectIdCache = new Map<string, string | undefined>()\n private baseUpdateFee?: number\n\n constructor(\n private readonly provider: SuiPythProvider,\n private readonly pythStateId: string,\n private readonly wormholeStateId: string\n ) {}\n\n private getCoreProvider(): SuiPythCoreProvider | null {\n const core = this.provider.core as Partial<SuiPythCoreProvider> | undefined\n if (\n core &&\n typeof core.getObject === 'function' &&\n typeof core.getDynamicObjectField === 'function' &&\n typeof core.getDynamicField === 'function'\n ) {\n return core as SuiPythCoreProvider\n }\n return null\n }\n\n private async getMoveObjectJson(objectId: string) {\n const core = this.getCoreProvider()\n if (core) {\n const result = await core.getObject({\n objectId,\n include: { json: true }\n })\n if (!result.object) {\n return null\n }\n return {\n objectId: result.object.objectId,\n type: result.object.type,\n fields: result.object.json\n }\n }\n\n if (!this.provider.getObject) {\n throw new Error('Sui Pyth provider does not support getObject')\n }\n const result = await this.provider.getObject({\n id: objectId,\n options: { showContent: true }\n })\n if (!result.data || !result.data.content || result.data.content.dataType !== 'moveObject') {\n return null\n }\n return {\n objectId: result.data.objectId,\n type: result.data.type,\n fields: result.data.content.fields as Record<string, unknown>\n }\n }\n\n private async getDynamicMoveObjectJson(parentId: string, name: CoreDynamicFieldName | any) {\n const core = this.getCoreProvider()\n if (core) {\n const result = await core.getDynamicObjectField({\n parentId,\n name,\n include: { json: true }\n })\n if (!result.object) {\n return null\n }\n return {\n objectId: result.object.objectId,\n type: result.object.type,\n fields: result.object.json\n }\n }\n\n if (!this.provider.getDynamicFieldObject) {\n throw new Error('Sui Pyth provider does not support getDynamicFieldObject')\n }\n const result = await this.provider.getDynamicFieldObject({\n parentId,\n name\n })\n if (!result.data) {\n return null\n }\n if (!result.data.content) {\n return {\n objectId: result.data.objectId,\n type: result.data.type,\n fields: undefined\n }\n }\n if (result.data.content.dataType !== 'moveObject') {\n return null\n }\n return {\n objectId: result.data.objectId,\n type: result.data.type,\n fields: result.data.content.fields as Record<string, unknown>\n }\n }\n\n async updatePriceFeeds(tx: Transaction, updates: Uint8Array[], feedIds: string[]) {\n const packageId = await this.getPythPackageId()\n const priceUpdatesHotPotato = await this.verifyVaasAndGetHotPotato(tx, updates, packageId)\n const baseUpdateFee = await this.getBaseUpdateFee()\n const coins = tx.splitCoins(\n tx.gas,\n feedIds.map(() => tx.pure.u64(baseUpdateFee))\n )\n return this.executePriceFeedUpdates(tx, packageId, feedIds, priceUpdatesHotPotato, coins)\n }\n\n private async getBaseUpdateFee() {\n if (this.baseUpdateFee === undefined) {\n const result = await this.getMoveObjectJson(this.pythStateId)\n if (!result?.fields) {\n throw new Error('Unable to fetch pyth state object')\n }\n this.baseUpdateFee = Number((result.fields as any).base_update_fee)\n }\n return this.baseUpdateFee\n }\n\n private async getPackageId(objectId: string) {\n const result = await this.getMoveObjectJson(objectId)\n if (result?.fields) {\n const fields = result.fields as any\n if ('upgrade_cap' in fields) {\n // Sui v2 Core (gRPC) returns flat json (upgrade_cap.package) while legacy\n // JSON-RPC nests it (upgrade_cap.fields.package). Support both; otherwise\n // the Core path cannot resolve the packageId and getPythPackageId /\n // getWormholePackageId throw, breaking Pyth price feed updates entirely.\n const upgradeCap = fields.upgrade_cap\n const packageId = upgradeCap?.package ?? upgradeCap?.fields?.package\n if (packageId) {\n return packageId as string\n }\n }\n }\n throw new Error(`Cannot fetch package id for object ${objectId}`)\n }\n\n private async verifyVaas(vaas: Uint8Array[], tx: Transaction) {\n const wormholePackageId = await this.getWormholePackageId()\n return vaas.map((vaa) => {\n const [verifiedVaa] = tx.moveCall({\n target: `${wormholePackageId}::vaa::parse_and_verify`,\n arguments: [\n tx.object(this.wormholeStateId),\n tx.pure(toPureBytes(vaa)),\n tx.object(SUI_CLOCK_OBJECT_ID)\n ]\n })\n return verifiedVaa\n })\n }\n\n private async verifyVaasAndGetHotPotato(\n tx: Transaction,\n updates: Uint8Array[],\n packageId: string\n ) {\n if (updates.length > 1) {\n throw new Error(\n 'SDK does not support sending multiple accumulator messages in a single transaction'\n )\n }\n const vaa = this.extractVaaBytesFromAccumulatorMessage(updates[0])\n const [verifiedVaa] = await this.verifyVaas([vaa], tx)\n const [priceUpdatesHotPotato] = tx.moveCall({\n target: `${packageId}::pyth::create_authenticated_price_infos_using_accumulator`,\n arguments: [\n tx.object(this.pythStateId),\n tx.pure(toPureBytes(updates[0])),\n verifiedVaa,\n tx.object(SUI_CLOCK_OBJECT_ID)\n ]\n })\n return priceUpdatesHotPotato\n }\n\n private async executePriceFeedUpdates(\n tx: Transaction,\n packageId: string,\n feedIds: string[],\n priceUpdatesHotPotato: any,\n coins: any[]\n ) {\n const priceInfoObjects: string[] = []\n for (const [coinId, feedId] of feedIds.entries()) {\n const priceInfoObjectId = await this.getPriceFeedObjectId(feedId)\n if (!priceInfoObjectId) {\n throw new Error(`Price feed ${feedId} not found, please create it first`)\n }\n priceInfoObjects.push(priceInfoObjectId)\n ;[priceUpdatesHotPotato] = tx.moveCall({\n target: `${packageId}::pyth::update_single_price_feed`,\n arguments: [\n tx.object(this.pythStateId),\n priceUpdatesHotPotato,\n tx.object(priceInfoObjectId),\n coins[coinId],\n tx.object(SUI_CLOCK_OBJECT_ID)\n ]\n })\n }\n tx.moveCall({\n target: `${packageId}::hot_potato_vector::destroy`,\n arguments: [priceUpdatesHotPotato],\n typeArguments: [`${packageId}::price_info::PriceInfo`]\n })\n return priceInfoObjects\n }\n\n private async getWormholePackageId() {\n if (!this.wormholePackageId) {\n this.wormholePackageId = await this.getPackageId(this.wormholeStateId)\n }\n return this.wormholePackageId\n }\n\n private async getPythPackageId() {\n if (!this.pythPackageId) {\n this.pythPackageId = await this.getPackageId(this.pythStateId)\n }\n return this.pythPackageId\n }\n\n private async getPriceFeedObjectId(feedId: string) {\n const normalizedFeedId = normalizePriceId(feedId)\n if (!this.priceFeedObjectIdCache.has(normalizedFeedId)) {\n const { id: tableId, fieldType } = await this.getPriceTableInfo()\n const nameType = `${fieldType}::price_identifier::PriceIdentifier`\n\n const core = this.getCoreProvider()\n if (core) {\n // Pyth's price table stores entries as plain dynamic fields\n // (0x2::dynamic_field::Field<PriceIdentifier, ID>). getDynamicObjectField\n // must not be used here: it derives the child id from\n // Wrapper<PriceIdentifier> and resolves to an object that does not exist\n // on chain, aborting every Pyth price feed update.\n const { dynamicField } = await core.getDynamicField({\n parentId: tableId,\n name: toDynamicFieldName(nameType, encodePriceIdentifier(hexToBytes(normalizedFeedId)))\n })\n const valueBcs = dynamicField?.value?.bcs\n this.priceFeedObjectIdCache.set(\n normalizedFeedId,\n valueBcs && valueBcs.length === 32\n ? bcs.Address.parse(Uint8Array.from(valueBcs))\n : undefined\n )\n } else {\n const result = await this.getDynamicMoveObjectJson(tableId, {\n type: nameType,\n value: {\n bytes: Array.from(hexToBytes(normalizedFeedId))\n }\n })\n if (!result?.fields) {\n this.priceFeedObjectIdCache.set(normalizedFeedId, undefined)\n } else {\n this.priceFeedObjectIdCache.set(normalizedFeedId, (result.fields as any).value)\n }\n }\n }\n return this.priceFeedObjectIdCache.get(normalizedFeedId)\n }\n\n private async getPriceTableInfo() {\n if (!this.priceTableInfo) {\n const fieldName = this.getCoreProvider()\n ? toDynamicFieldName('vector<u8>', encodeVectorU8('price_info'))\n : {\n type: 'vector<u8>',\n value: 'price_info'\n }\n const result = await this.getDynamicMoveObjectJson(this.pythStateId, fieldName)\n if (!result?.type) {\n throw new Error('Price Table not found, contract may not be initialized')\n }\n this.priceTableInfo = {\n id: result.objectId,\n fieldType: getPythPackageIdFromPriceTableType(result.type)\n }\n }\n return this.priceTableInfo\n }\n\n private extractVaaBytesFromAccumulatorMessage(accumulatorMessage: Uint8Array) {\n const trailingPayloadSize = accumulatorMessage[6]\n const vaaSizeOffset = 7 + trailingPayloadSize + 1\n const vaaSize = readUint16BE(accumulatorMessage, vaaSizeOffset)\n const vaaOffset = vaaSizeOffset + 2\n return accumulatorMessage.subarray(vaaOffset, vaaOffset + vaaSize)\n }\n}\n"],"names":["MAX_ARGUMENT_SIZE","normalizePriceId","priceId","hexToBytes","hex","normalized","bytes","i","readUint16BE","offset","toPureBytes","bcs","toDynamicFieldName","type","encodeVectorU8","value","encodePriceIdentifier","splitTopLevelTypeArgs","args","parts","depth","start","index","char","getPythPackageIdFromPriceTableType","tableIndex","argsStart","argsEnd","priceIdentifierSuffix","keyType","valueType","base64ToBytes","SuiPriceServiceConnection","endpoint","options","priceIds","feed","response","encoding","data","pathname","searchParams","controller","timeout","url","key","res","SuiPythClient","provider","pythStateId","wormholeStateId","core","objectId","result","parentId","name","tx","updates","feedIds","packageId","priceUpdatesHotPotato","baseUpdateFee","coins","fields","upgradeCap","vaas","wormholePackageId","vaa","verifiedVaa","SUI_CLOCK_OBJECT_ID","priceInfoObjects","coinId","feedId","priceInfoObjectId","normalizedFeedId","tableId","fieldType","nameType","dynamicField","valueBcs","fieldName","accumulatorMessage","vaaSizeOffset","vaaSize","vaaOffset"],"mappings":"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"}
|
package/dist/reward.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SuiClientOption, EnvOption, LendingRewardSummary, LendingReward, HistoryClaimedReward, LendingClaimedReward, TransactionResult, AccountCapOption, AccountCap, MarketOption, MarketsOption, ServiceOption } from './types';
|
|
1
|
+
import { SuiClientOption, EnvOption, LendingRewardSummary, LendingReward, HistoryClaimedReward, LendingClaimedReward, TransactionResult, AccountCapOption, AccountCap, MarketOption, MarketsOption, ServiceOption } from './types.js';
|
|
2
2
|
import { Transaction } from '@mysten/sui/transactions';
|
|
3
3
|
|
|
4
4
|
/**
|