@tbookdev/vault-sdk-sui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,478 @@
1
+ import { Transaction } from '@mysten/sui/transactions';
2
+ import { bcs } from '@mysten/sui/bcs';
3
+
4
+ // src/config.ts
5
+ var USDC_DECIMALS = 6;
6
+ var SHARE_DECIMALS = 6;
7
+ var CLOCK_OBJECT_ID = "0x6";
8
+ var DEFAULT_GAS_BUDGET = 1e8;
9
+ var VAULT_MODULE = "vault";
10
+ var VAULT_API_MODULE = "vault_api";
11
+ var BUILT_IN = {
12
+ "mainnet:rcusdp-sui": {
13
+ id: "rcusdp-sui",
14
+ network: "mainnet",
15
+ packageId: "0x785b8af4bc52d199eedf63f46dd647ea15211fb70300f2fcfdb29c2e96397767",
16
+ usdcType: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
17
+ rcusdpType: "0x4dea4916aa61f522aca69c4e7265b8e3bdd65d3947f4fb9aaa6d87e0dfac35fd::rcusdp::RCUSDP",
18
+ vaultObjectId: "0x43091ff2385069538025f44301e94ec7a7b09f3edb8a34e3fdb62d067fa5cd16",
19
+ pendingDepositsId: "0x5c25dc938ca4df3930fcf4a6c875bf25cbc304d366a7495b184ccae39dbbcca6",
20
+ pendingRedeemsId: "0xb3416a4433a943d6a440471b59cce7c8f9f555678e287fad8ef04694c1336fa7",
21
+ balancesId: "0xcf23ee797902955e1ce6e4c8af40797b14b3c9e9d47e6986f69686f4e09e81cb",
22
+ claimsId: "0x98fab28280c306af4d6b99feb79f913a3f1b95f936f4334534784b86925d8468",
23
+ userRecordsId: "0x3b8925ba0a3d60ad1ff477ed8312947c56c453070a530d630ce83a231531bc72",
24
+ vaultTypeConfigId: "0x759c0edd69aa0b35b7334830e61a98ccad5c9a84c6a16bfad0e67d64ad6314da",
25
+ depositSettlementStateId: "0x10fe37f728ddaac591d3b2242e2a1f52f695a990e7864519398ce2aa441e8332"
26
+ },
27
+ "testnet:rcusdp-sui": {
28
+ id: "rcusdp-sui",
29
+ network: "testnet",
30
+ packageId: "0xcf7293eba9307057793d0685e4c573b12a2c2928ab60028f1d8766f1d4879c1c",
31
+ usdcType: "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC",
32
+ rcusdpType: "0xebe1dce0342ac1c5d2cee823c5d9af6ea34ccca51cc95ecafcfe7b1a0dc64947::rcusdp::RCUSDP",
33
+ vaultObjectId: "0x8a4af424533e98ce4ca52449acc5721233a81a99665add2b839bd60e1632f4e7",
34
+ pendingDepositsId: "0x888f69e588e7426283d9a2dfac2ffac4233efce1fb05ced22cfa58cac375eabb",
35
+ pendingRedeemsId: "0x3dc596f41ac76dd680ebfff6a8f9a2601672a008234ef5e68cfe24d16cbfb147",
36
+ balancesId: "0xe157231444fd978a6e1e6f567eed9d643b803d59b5debbccb51d28e3f7ea4f6a",
37
+ claimsId: "0xe10230a23c1c0a76eb980840c983d3ac1a624373000a1517ff37b52dd890ebe7",
38
+ userRecordsId: "0xabeeefe767c3b89bc9eeb84ec52462f0b293b12976ceba004921261c6b646e75",
39
+ vaultTypeConfigId: "0x7982d6610aa9e024c442d7b947e399e2cf1cbdcb99aa6eb9eb65f6e6cb71701c",
40
+ depositSettlementStateId: "0x1fd6cbbaca9c366a81d25432e13320fbf48db50b86e03e4e9798f1ebc843243f"
41
+ }
42
+ };
43
+ function getSuiVaultConfig(vaultId, network) {
44
+ const cfg = BUILT_IN[`${network}:${vaultId}`];
45
+ if (!cfg) {
46
+ throw new SuiVaultError("UNKNOWN_VAULT", `No Sui vault config for ${network}:${vaultId}`);
47
+ }
48
+ return cfg;
49
+ }
50
+ function listSuiVaults(network) {
51
+ return Object.values(BUILT_IN).filter((c) => c.network === network);
52
+ }
53
+ var SuiVaultError = class extends Error {
54
+ constructor(code, message) {
55
+ super(message);
56
+ this.code = code;
57
+ this.name = "SuiVaultError";
58
+ }
59
+ };
60
+ function viewTarget(cfg, fn) {
61
+ return `${cfg.packageId}::${VAULT_MODULE}::${fn}`;
62
+ }
63
+ function parseU64(returnValue) {
64
+ if (!returnValue) return 0n;
65
+ const bytes = returnValue[0];
66
+ if (!bytes) return 0n;
67
+ return BigInt(bcs.u64().parse(Uint8Array.from(bytes)));
68
+ }
69
+ async function getUserPosition(client, cfg, address) {
70
+ const tx = new Transaction();
71
+ tx.moveCall({
72
+ target: viewTarget(cfg, "get_user_balance"),
73
+ typeArguments: [cfg.rcusdpType],
74
+ arguments: [tx.object(cfg.balancesId), tx.pure.address(address)]
75
+ });
76
+ tx.moveCall({
77
+ target: viewTarget(cfg, "get_user_pending_deposit"),
78
+ typeArguments: [cfg.usdcType],
79
+ arguments: [tx.object(cfg.pendingDepositsId), tx.pure.address(address)]
80
+ });
81
+ tx.moveCall({
82
+ target: viewTarget(cfg, "get_user_pending_redeem"),
83
+ typeArguments: [cfg.rcusdpType],
84
+ arguments: [tx.object(cfg.pendingRedeemsId), tx.pure.address(address)]
85
+ });
86
+ tx.moveCall({
87
+ target: viewTarget(cfg, "get_user_claimable"),
88
+ typeArguments: [cfg.usdcType],
89
+ arguments: [tx.object(cfg.claimsId), tx.pure.address(address)]
90
+ });
91
+ const result = await client.devInspectTransactionBlock({
92
+ transactionBlock: tx,
93
+ sender: address
94
+ });
95
+ if (result.error) {
96
+ throw new SuiVaultError("RPC_ERROR", `devInspect failed: ${result.error}`);
97
+ }
98
+ const r = result.results ?? [];
99
+ return {
100
+ shares: parseU64(r[0]?.returnValues?.[0]),
101
+ pendingDeposit: parseU64(r[1]?.returnValues?.[0]),
102
+ pendingRedeem: parseU64(r[2]?.returnValues?.[0]),
103
+ claimable: parseU64(r[3]?.returnValues?.[0])
104
+ };
105
+ }
106
+ async function getVaultState(client, cfg) {
107
+ const obj = await client.getObject({
108
+ id: cfg.vaultObjectId,
109
+ options: { showContent: true }
110
+ });
111
+ const content = obj.data?.content;
112
+ if (!content || content.dataType !== "moveObject") {
113
+ throw new SuiVaultError("RPC_ERROR", `Vault object ${cfg.vaultObjectId} not readable`);
114
+ }
115
+ const fields = content.fields;
116
+ return {
117
+ paused: Boolean(fields.paused),
118
+ totalShares: BigInt(fields.total_shares ?? 0),
119
+ sharePrice1e18: BigInt(fields.share_price ?? 0),
120
+ depositFeeBps: Number(fields.deposit_fee_bps ?? 0),
121
+ redeemFeeBps: Number(fields.redeem_fee_bps ?? 0),
122
+ raw: fields
123
+ };
124
+ }
125
+
126
+ // src/builders.ts
127
+ function vaultApiTarget(cfg, fn) {
128
+ return `${cfg.packageId}::${VAULT_API_MODULE}::${fn}`;
129
+ }
130
+ function typeArgs(cfg) {
131
+ return [cfg.usdcType, cfg.rcusdpType];
132
+ }
133
+ async function finalize(client, tx, sender, message) {
134
+ tx.setSender(sender);
135
+ tx.setGasBudget(DEFAULT_GAS_BUDGET);
136
+ const bytes = await tx.build({ client });
137
+ return { txBytesBase64: Buffer.from(bytes).toString("base64"), message };
138
+ }
139
+ async function prepareUsdcCoin(client, cfg, tx, owner, amount) {
140
+ const coins = await client.getCoins({ owner, coinType: cfg.usdcType });
141
+ if (!coins.data || coins.data.length === 0) {
142
+ throw new SuiVaultError("INSUFFICIENT_BALANCE", "No USDC coins found in wallet");
143
+ }
144
+ const total = coins.data.reduce((sum, c) => sum + BigInt(c.balance), 0n);
145
+ if (total < amount) {
146
+ throw new SuiVaultError(
147
+ "INSUFFICIENT_BALANCE",
148
+ `Insufficient USDC balance: have ${total}, need ${amount}`
149
+ );
150
+ }
151
+ const [first, ...rest] = coins.data;
152
+ if (rest.length > 0) {
153
+ tx.mergeCoins(
154
+ tx.object(first.coinObjectId),
155
+ rest.map((c) => tx.object(c.coinObjectId))
156
+ );
157
+ }
158
+ const [coin] = tx.splitCoins(tx.object(first.coinObjectId), [tx.pure.u64(amount)]);
159
+ return coin;
160
+ }
161
+ async function buildDepositTx(client, cfg, params) {
162
+ const tx = new Transaction();
163
+ const depositCoin = await prepareUsdcCoin(client, cfg, tx, params.sender, params.amount);
164
+ tx.moveCall({
165
+ target: vaultApiTarget(cfg, "deposit"),
166
+ typeArguments: typeArgs(cfg),
167
+ arguments: [
168
+ tx.object(cfg.vaultObjectId),
169
+ tx.object(cfg.vaultTypeConfigId),
170
+ tx.object(cfg.pendingDepositsId),
171
+ tx.object(cfg.userRecordsId),
172
+ tx.object(cfg.depositSettlementStateId),
173
+ depositCoin,
174
+ tx.object(CLOCK_OBJECT_ID)
175
+ ]
176
+ });
177
+ return finalize(client, tx, params.sender, `Deposit ${params.amount} raw USDC into ${cfg.id}`);
178
+ }
179
+ async function buildQueueRedeemTx(client, cfg, params) {
180
+ const tx = new Transaction();
181
+ tx.moveCall({
182
+ target: vaultApiTarget(cfg, "queue_redeem"),
183
+ typeArguments: typeArgs(cfg),
184
+ arguments: [
185
+ tx.object(cfg.vaultObjectId),
186
+ tx.object(cfg.vaultTypeConfigId),
187
+ tx.object(cfg.pendingRedeemsId),
188
+ tx.object(cfg.balancesId),
189
+ tx.object(cfg.userRecordsId),
190
+ tx.pure.u64(params.shares),
191
+ tx.object(CLOCK_OBJECT_ID)
192
+ ]
193
+ });
194
+ return finalize(client, tx, params.sender, `Queue redeem of ${params.shares} shares from ${cfg.id}`);
195
+ }
196
+ async function buildInstantRedeemTx(client, cfg, params) {
197
+ const tx = new Transaction();
198
+ tx.moveCall({
199
+ target: vaultApiTarget(cfg, "instant_redeem"),
200
+ typeArguments: typeArgs(cfg),
201
+ arguments: [
202
+ tx.object(cfg.vaultObjectId),
203
+ tx.object(cfg.vaultTypeConfigId),
204
+ tx.object(cfg.balancesId),
205
+ tx.object(cfg.userRecordsId),
206
+ tx.pure.u64(params.shares),
207
+ tx.object(CLOCK_OBJECT_ID)
208
+ ]
209
+ });
210
+ return finalize(
211
+ client,
212
+ tx,
213
+ params.sender,
214
+ `Instant redeem of ${params.shares} shares from ${cfg.id}`
215
+ );
216
+ }
217
+ async function buildCancelDepositTx(client, cfg, params) {
218
+ const tx = new Transaction();
219
+ tx.moveCall({
220
+ target: vaultApiTarget(cfg, "cancel_deposit_by_id"),
221
+ typeArguments: typeArgs(cfg),
222
+ arguments: [
223
+ tx.object(cfg.vaultObjectId),
224
+ tx.object(cfg.vaultTypeConfigId),
225
+ tx.object(cfg.pendingDepositsId),
226
+ tx.object(cfg.userRecordsId),
227
+ tx.pure.u64(BigInt(params.recordId)),
228
+ tx.object(CLOCK_OBJECT_ID)
229
+ ]
230
+ });
231
+ return finalize(client, tx, params.sender, `Cancel pending deposit record ${params.recordId}`);
232
+ }
233
+ async function buildTransferUsdcTx(client, cfg, params) {
234
+ const tx = new Transaction();
235
+ const coin = await prepareUsdcCoin(client, cfg, tx, params.sender, params.amount);
236
+ tx.transferObjects([coin], tx.pure.address(params.recipient));
237
+ return finalize(
238
+ client,
239
+ tx,
240
+ params.sender,
241
+ `Transfer ${params.amount} raw USDC to ${params.recipient}`
242
+ );
243
+ }
244
+ async function buildClaimTx(client, cfg, params) {
245
+ let amount = params.amount;
246
+ if (amount === void 0) {
247
+ const position = await getUserPosition(client, cfg, params.sender);
248
+ amount = position.claimable;
249
+ }
250
+ if (amount <= 0n) {
251
+ throw new SuiVaultError("NOTHING_CLAIMABLE", "Claimable balance is zero");
252
+ }
253
+ const tx = new Transaction();
254
+ tx.moveCall({
255
+ target: vaultApiTarget(cfg, "claim"),
256
+ typeArguments: typeArgs(cfg),
257
+ arguments: [
258
+ tx.object(cfg.vaultObjectId),
259
+ tx.object(cfg.vaultTypeConfigId),
260
+ tx.object(cfg.claimsId),
261
+ tx.object(cfg.userRecordsId),
262
+ tx.pure.u64(amount),
263
+ tx.object(CLOCK_OBJECT_ID)
264
+ ]
265
+ });
266
+ return finalize(client, tx, params.sender, `Claim ${amount} raw USDC from ${cfg.id}`);
267
+ }
268
+ var SUI_ACTION = {
269
+ DEPOSIT: 0,
270
+ REDEEM: 1,
271
+ CLAIM: 2,
272
+ INSTANT_REDEEM: 3,
273
+ WITHDRAW_RCUSDP: 4,
274
+ CANCEL_DEPOSIT: 5
275
+ };
276
+ var SUI_RECORD_STATUS = {
277
+ PENDING: 0,
278
+ COMPLETED: 1,
279
+ CANCELLED: 2
280
+ };
281
+ var UserRecordBcs = bcs.struct("UserRecord", {
282
+ record_id: bcs.u64(),
283
+ action: bcs.u8(),
284
+ amount: bcs.u64(),
285
+ fee: bcs.u64(),
286
+ shares: bcs.u64(),
287
+ status: bcs.u8(),
288
+ created_at: bcs.u64(),
289
+ settled_at: bcs.u64(),
290
+ related_record_id: bcs.u64()
291
+ });
292
+ async function getUserRecords(client, cfg, address) {
293
+ const tx = new Transaction();
294
+ tx.moveCall({
295
+ target: `${cfg.packageId}::${VAULT_MODULE}::get_all_user_records`,
296
+ arguments: [tx.object(cfg.userRecordsId), tx.pure.address(address)]
297
+ });
298
+ const result = await client.devInspectTransactionBlock({
299
+ transactionBlock: tx,
300
+ sender: address
301
+ });
302
+ if (result.error) {
303
+ throw new SuiVaultError("RPC_ERROR", `devInspect failed: ${result.error}`);
304
+ }
305
+ const returnValue = result.results?.[0]?.returnValues?.[0];
306
+ if (!returnValue) return [];
307
+ const [bytes] = returnValue;
308
+ const records = bcs.vector(UserRecordBcs).parse(Uint8Array.from(bytes));
309
+ return records.map((r) => ({
310
+ recordId: String(r.record_id),
311
+ action: Number(r.action),
312
+ amount: BigInt(r.amount),
313
+ fee: BigInt(r.fee),
314
+ shares: BigInt(r.shares),
315
+ status: Number(r.status),
316
+ createdAt: Number(r.created_at),
317
+ settledAt: Number(r.settled_at),
318
+ relatedRecordId: String(r.related_record_id)
319
+ })).sort((a, b) => b.createdAt - a.createdAt);
320
+ }
321
+ var BUILT_IN2 = {
322
+ // Testnet deployment from rwa-alpha-token/web/lib/config.ts (v1.3.3).
323
+ "testnet:xaua-sui": {
324
+ id: "xaua-sui",
325
+ network: "testnet",
326
+ packageId: "0x0c8af11021f74702b1eafec118cce725f46f459a9e35d6bb946758fda6727756",
327
+ vaultObjectId: "0x89844622d73ba1ec849b428617726647c7270e9916a28381ad678fdb51724dbc",
328
+ usdcType: "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC",
329
+ xauaType: "0x04f714d2d8c3817b0d961bf0c529bb767d8a81f6394a78ca0e012d8dd9b16b5f::xaua::XAUA"
330
+ }
331
+ // Mainnet lands with the issuer's publish (WS6 gates: audit, NAV SLA).
332
+ };
333
+ function getAlphaVaultConfig(vaultId, network) {
334
+ const cfg = BUILT_IN2[`${network}:${vaultId}`];
335
+ if (!cfg) {
336
+ throw new SuiVaultError("UNKNOWN_VAULT", `No AlphaVault config for ${network}:${vaultId}`);
337
+ }
338
+ return cfg;
339
+ }
340
+ var UserPositionBcs = bcs.struct("UserPosition", {
341
+ available_shares: bcs.u128(),
342
+ locked_shares: bcs.u128(),
343
+ claimable_usdc: bcs.u64(),
344
+ total_subscribed_usdc: bcs.u64(),
345
+ total_redeemed_shares: bcs.u128(),
346
+ total_claimed_usdc: bcs.u64()
347
+ });
348
+ function target(cfg, fn) {
349
+ return `${cfg.packageId}::alpha_vault::${fn}`;
350
+ }
351
+ function typeArgs2(cfg) {
352
+ return [cfg.usdcType, cfg.xauaType];
353
+ }
354
+ async function finalize2(client, tx, sender, message) {
355
+ tx.setSender(sender);
356
+ tx.setGasBudget(DEFAULT_GAS_BUDGET);
357
+ const bytes = await tx.build({ client });
358
+ return { txBytesBase64: Buffer.from(bytes).toString("base64"), message };
359
+ }
360
+ async function prepareUsdc(client, usdcType, tx, owner, amount) {
361
+ const coins = await client.getCoins({ owner, coinType: usdcType });
362
+ if (!coins.data || coins.data.length === 0) {
363
+ throw new SuiVaultError("INSUFFICIENT_BALANCE", "No USDC coins found in wallet");
364
+ }
365
+ const total = coins.data.reduce((sum, c) => sum + BigInt(c.balance), 0n);
366
+ if (total < amount) {
367
+ throw new SuiVaultError(
368
+ "INSUFFICIENT_BALANCE",
369
+ `Insufficient USDC balance: have ${total}, need ${amount}`
370
+ );
371
+ }
372
+ const [first, ...rest] = coins.data;
373
+ if (rest.length > 0) {
374
+ tx.mergeCoins(
375
+ tx.object(first.coinObjectId),
376
+ rest.map((c) => tx.object(c.coinObjectId))
377
+ );
378
+ }
379
+ const [coin] = tx.splitCoins(tx.object(first.coinObjectId), [tx.pure.u64(amount)]);
380
+ return coin;
381
+ }
382
+ async function buildSubscribeTx(client, cfg, params) {
383
+ const tx = new Transaction();
384
+ const usdc = await prepareUsdc(client, cfg.usdcType, tx, params.sender, params.amount);
385
+ tx.moveCall({
386
+ target: target(cfg, "subscribe"),
387
+ typeArguments: typeArgs2(cfg),
388
+ arguments: [tx.object(cfg.vaultObjectId), usdc, tx.object(CLOCK_OBJECT_ID)]
389
+ });
390
+ return finalize2(client, tx, params.sender, `Subscribe ${params.amount} raw USDC to ${cfg.id}`);
391
+ }
392
+ async function buildRequestRedemptionTx(client, cfg, params) {
393
+ const tx = new Transaction();
394
+ tx.moveCall({
395
+ target: target(cfg, "request_redemption"),
396
+ typeArguments: typeArgs2(cfg),
397
+ arguments: [
398
+ tx.object(cfg.vaultObjectId),
399
+ tx.pure.u128(params.shares),
400
+ tx.object(CLOCK_OBJECT_ID)
401
+ ]
402
+ });
403
+ return finalize2(
404
+ client,
405
+ tx,
406
+ params.sender,
407
+ `Request redemption of ${params.shares} XAUa shares from ${cfg.id}`
408
+ );
409
+ }
410
+ async function buildCancelRequestTx(client, cfg, params) {
411
+ const tx = new Transaction();
412
+ tx.moveCall({
413
+ target: target(cfg, params.kind === "subscription" ? "cancel_subscription" : "cancel_redemption"),
414
+ typeArguments: typeArgs2(cfg),
415
+ arguments: [
416
+ tx.object(cfg.vaultObjectId),
417
+ tx.pure.u64(BigInt(params.requestId)),
418
+ tx.object(CLOCK_OBJECT_ID)
419
+ ]
420
+ });
421
+ return finalize2(client, tx, params.sender, `Cancel ${params.kind} request ${params.requestId}`);
422
+ }
423
+ async function buildClaimUsdcTx(client, cfg, params) {
424
+ let amount = params.amount;
425
+ if (amount === void 0) {
426
+ const position = await getAlphaPosition(client, cfg, params.sender);
427
+ amount = position.claimableUsdc;
428
+ }
429
+ if (amount <= 0n) {
430
+ throw new SuiVaultError("NOTHING_CLAIMABLE", "Claimable balance is zero");
431
+ }
432
+ const tx = new Transaction();
433
+ tx.moveCall({
434
+ target: target(cfg, "claim_usdc"),
435
+ typeArguments: typeArgs2(cfg),
436
+ arguments: [tx.object(cfg.vaultObjectId), tx.pure.u64(amount), tx.object(CLOCK_OBJECT_ID)]
437
+ });
438
+ return finalize2(client, tx, params.sender, `Claim ${amount} raw USDC from ${cfg.id}`);
439
+ }
440
+ async function getAlphaPosition(client, cfg, address) {
441
+ const tx = new Transaction();
442
+ tx.moveCall({
443
+ target: target(cfg, "position"),
444
+ typeArguments: typeArgs2(cfg),
445
+ arguments: [tx.object(cfg.vaultObjectId), tx.pure.address(address)]
446
+ });
447
+ const result = await client.devInspectTransactionBlock({
448
+ transactionBlock: tx,
449
+ sender: address
450
+ });
451
+ if (result.error) {
452
+ throw new SuiVaultError("RPC_ERROR", `devInspect failed: ${result.error}`);
453
+ }
454
+ const returnValue = result.results?.[0]?.returnValues?.[0];
455
+ if (!returnValue) {
456
+ return {
457
+ availableShares: 0n,
458
+ lockedShares: 0n,
459
+ claimableUsdc: 0n,
460
+ totalSubscribedUsdc: 0n,
461
+ totalRedeemedShares: 0n,
462
+ totalClaimedUsdc: 0n
463
+ };
464
+ }
465
+ const parsed = UserPositionBcs.parse(Uint8Array.from(returnValue[0]));
466
+ return {
467
+ availableShares: BigInt(parsed.available_shares),
468
+ lockedShares: BigInt(parsed.locked_shares),
469
+ claimableUsdc: BigInt(parsed.claimable_usdc),
470
+ totalSubscribedUsdc: BigInt(parsed.total_subscribed_usdc),
471
+ totalRedeemedShares: BigInt(parsed.total_redeemed_shares),
472
+ totalClaimedUsdc: BigInt(parsed.total_claimed_usdc)
473
+ };
474
+ }
475
+
476
+ export { SHARE_DECIMALS, SUI_ACTION, SUI_RECORD_STATUS, SuiVaultError, USDC_DECIMALS, buildCancelDepositTx, buildCancelRequestTx, buildClaimTx, buildClaimUsdcTx, buildDepositTx, buildInstantRedeemTx, buildQueueRedeemTx, buildRequestRedemptionTx, buildSubscribeTx, buildTransferUsdcTx, getAlphaPosition, getAlphaVaultConfig, getSuiVaultConfig, getUserPosition, getUserRecords, getVaultState, listSuiVaults };
477
+ //# sourceMappingURL=index.js.map
478
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/queries.ts","../src/builders.ts","../src/records.ts","../src/alpha-vault.ts"],"names":["Transaction","bcs","BUILT_IN","typeArgs","finalize"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Sui vault registry — contract object ids per network.\n *\n * Source of truth: tokenized-asset-claim-portal deployments (mirrored in\n * tbook-vault-fe/lib/contracts.ts and verified against the Kotlin backend's\n * authoritative list). Object ids are stable across package upgrades on Sui;\n * PACKAGE_ID changes on upgrade — keep in sync with DEPLOYMENTS notes.\n */\n\nexport type SuiNetwork = \"mainnet\" | \"testnet\";\n\nexport interface SuiVaultConfig {\n /** Catalog vault id (matches the API catalog). */\n id: string;\n network: SuiNetwork;\n packageId: string;\n usdcType: string;\n rcusdpType: string;\n vaultObjectId: string;\n pendingDepositsId: string;\n pendingRedeemsId: string;\n balancesId: string;\n claimsId: string;\n userRecordsId: string;\n vaultTypeConfigId: string;\n depositSettlementStateId: string;\n}\n\nexport const USDC_DECIMALS = 6;\nexport const SHARE_DECIMALS = 6;\nexport const CLOCK_OBJECT_ID = \"0x6\";\n/** Fixed gas budget (0.1 SUI) so unsigned-tx builds skip dry-run estimation. */\nexport const DEFAULT_GAS_BUDGET = 100_000_000;\nexport const VAULT_MODULE = \"vault\";\nexport const VAULT_API_MODULE = \"vault_api\";\n\nconst BUILT_IN: Record<string, SuiVaultConfig> = {\n \"mainnet:rcusdp-sui\": {\n id: \"rcusdp-sui\",\n network: \"mainnet\",\n packageId: \"0x785b8af4bc52d199eedf63f46dd647ea15211fb70300f2fcfdb29c2e96397767\",\n usdcType: \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\",\n rcusdpType: \"0x4dea4916aa61f522aca69c4e7265b8e3bdd65d3947f4fb9aaa6d87e0dfac35fd::rcusdp::RCUSDP\",\n vaultObjectId: \"0x43091ff2385069538025f44301e94ec7a7b09f3edb8a34e3fdb62d067fa5cd16\",\n pendingDepositsId: \"0x5c25dc938ca4df3930fcf4a6c875bf25cbc304d366a7495b184ccae39dbbcca6\",\n pendingRedeemsId: \"0xb3416a4433a943d6a440471b59cce7c8f9f555678e287fad8ef04694c1336fa7\",\n balancesId: \"0xcf23ee797902955e1ce6e4c8af40797b14b3c9e9d47e6986f69686f4e09e81cb\",\n claimsId: \"0x98fab28280c306af4d6b99feb79f913a3f1b95f936f4334534784b86925d8468\",\n userRecordsId: \"0x3b8925ba0a3d60ad1ff477ed8312947c56c453070a530d630ce83a231531bc72\",\n vaultTypeConfigId: \"0x759c0edd69aa0b35b7334830e61a98ccad5c9a84c6a16bfad0e67d64ad6314da\",\n depositSettlementStateId:\n \"0x10fe37f728ddaac591d3b2242e2a1f52f695a990e7864519398ce2aa441e8332\",\n },\n \"testnet:rcusdp-sui\": {\n id: \"rcusdp-sui\",\n network: \"testnet\",\n packageId: \"0xcf7293eba9307057793d0685e4c573b12a2c2928ab60028f1d8766f1d4879c1c\",\n usdcType: \"0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC\",\n rcusdpType: \"0xebe1dce0342ac1c5d2cee823c5d9af6ea34ccca51cc95ecafcfe7b1a0dc64947::rcusdp::RCUSDP\",\n vaultObjectId: \"0x8a4af424533e98ce4ca52449acc5721233a81a99665add2b839bd60e1632f4e7\",\n pendingDepositsId: \"0x888f69e588e7426283d9a2dfac2ffac4233efce1fb05ced22cfa58cac375eabb\",\n pendingRedeemsId: \"0x3dc596f41ac76dd680ebfff6a8f9a2601672a008234ef5e68cfe24d16cbfb147\",\n balancesId: \"0xe157231444fd978a6e1e6f567eed9d643b803d59b5debbccb51d28e3f7ea4f6a\",\n claimsId: \"0xe10230a23c1c0a76eb980840c983d3ac1a624373000a1517ff37b52dd890ebe7\",\n userRecordsId: \"0xabeeefe767c3b89bc9eeb84ec52462f0b293b12976ceba004921261c6b646e75\",\n vaultTypeConfigId: \"0x7982d6610aa9e024c442d7b947e399e2cf1cbdcb99aa6eb9eb65f6e6cb71701c\",\n depositSettlementStateId:\n \"0x1fd6cbbaca9c366a81d25432e13320fbf48db50b86e03e4e9798f1ebc843243f\",\n },\n};\n\nexport function getSuiVaultConfig(vaultId: string, network: SuiNetwork): SuiVaultConfig {\n const cfg = BUILT_IN[`${network}:${vaultId}`];\n if (!cfg) {\n throw new SuiVaultError(\"UNKNOWN_VAULT\", `No Sui vault config for ${network}:${vaultId}`);\n }\n return cfg;\n}\n\nexport function listSuiVaults(network: SuiNetwork): SuiVaultConfig[] {\n return Object.values(BUILT_IN).filter((c) => c.network === network);\n}\n\nexport type SuiVaultErrorCode =\n | \"UNKNOWN_VAULT\"\n | \"INSUFFICIENT_BALANCE\"\n | \"NOTHING_CLAIMABLE\"\n | \"RPC_ERROR\";\n\nexport class SuiVaultError extends Error {\n constructor(\n readonly code: SuiVaultErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"SuiVaultError\";\n }\n}\n","/**\n * Read queries for the rcUSDP Sui vault.\n *\n * Position reads use a single devInspect batch over the vault module's view\n * functions (ported from tbook-vault-fe/hooks/use-vault-user.ts); vault\n * state reads the shared Vault object's fields.\n */\n\nimport type { SuiClient } from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { bcs } from \"@mysten/sui/bcs\";\nimport { SuiVaultError, VAULT_MODULE, type SuiVaultConfig } from \"./config.js\";\n\nexport interface SuiVaultPosition {\n /** Settled shares (1e6). */\n shares: bigint;\n /** USDC pending in the current deposit cycle (1e6). */\n pendingDeposit: bigint;\n /** Shares queued for redemption (1e6). */\n pendingRedeem: bigint;\n /** Settled USDC awaiting claim (1e6). */\n claimable: bigint;\n}\n\nexport interface SuiVaultState {\n paused: boolean;\n totalShares: bigint;\n sharePrice1e18: bigint;\n depositFeeBps: number;\n redeemFeeBps: number;\n raw: Record<string, unknown>;\n}\n\nfunction viewTarget(cfg: SuiVaultConfig, fn: string): `${string}::${string}::${string}` {\n return `${cfg.packageId}::${VAULT_MODULE}::${fn}`;\n}\n\nfunction parseU64(returnValue: unknown): bigint {\n if (!returnValue) return 0n;\n const bytes = (returnValue as [number[], string])[0];\n if (!bytes) return 0n;\n return BigInt(bcs.u64().parse(Uint8Array.from(bytes)));\n}\n\n/** Fetch a user's full position in one devInspect round-trip. */\nexport async function getUserPosition(\n client: SuiClient,\n cfg: SuiVaultConfig,\n address: string,\n): Promise<SuiVaultPosition> {\n const tx = new Transaction();\n\n tx.moveCall({\n target: viewTarget(cfg, \"get_user_balance\"),\n typeArguments: [cfg.rcusdpType],\n arguments: [tx.object(cfg.balancesId), tx.pure.address(address)],\n });\n tx.moveCall({\n target: viewTarget(cfg, \"get_user_pending_deposit\"),\n typeArguments: [cfg.usdcType],\n arguments: [tx.object(cfg.pendingDepositsId), tx.pure.address(address)],\n });\n tx.moveCall({\n target: viewTarget(cfg, \"get_user_pending_redeem\"),\n typeArguments: [cfg.rcusdpType],\n arguments: [tx.object(cfg.pendingRedeemsId), tx.pure.address(address)],\n });\n tx.moveCall({\n target: viewTarget(cfg, \"get_user_claimable\"),\n typeArguments: [cfg.usdcType],\n arguments: [tx.object(cfg.claimsId), tx.pure.address(address)],\n });\n\n const result = await client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: address,\n });\n\n if (result.error) {\n throw new SuiVaultError(\"RPC_ERROR\", `devInspect failed: ${result.error}`);\n }\n const r = result.results ?? [];\n return {\n shares: parseU64(r[0]?.returnValues?.[0]),\n pendingDeposit: parseU64(r[1]?.returnValues?.[0]),\n pendingRedeem: parseU64(r[2]?.returnValues?.[0]),\n claimable: parseU64(r[3]?.returnValues?.[0]),\n };\n}\n\n/** Read the shared Vault object's state fields. */\nexport async function getVaultState(\n client: SuiClient,\n cfg: SuiVaultConfig,\n): Promise<SuiVaultState> {\n const obj = await client.getObject({\n id: cfg.vaultObjectId,\n options: { showContent: true },\n });\n\n const content = obj.data?.content;\n if (!content || content.dataType !== \"moveObject\") {\n throw new SuiVaultError(\"RPC_ERROR\", `Vault object ${cfg.vaultObjectId} not readable`);\n }\n const fields = content.fields as Record<string, any>;\n\n return {\n paused: Boolean(fields.paused),\n totalShares: BigInt(fields.total_shares ?? 0),\n sharePrice1e18: BigInt(fields.share_price ?? 0),\n depositFeeBps: Number(fields.deposit_fee_bps ?? 0),\n redeemFeeBps: Number(fields.redeem_fee_bps ?? 0),\n raw: fields,\n };\n}\n","/**\n * Unsigned PTB builders for the rcUSDP Sui vault (vault_api module).\n *\n * Ported from tbook-vault-fe/hooks/use-vault-actions.ts, stripped of React\n * and signing — every builder returns base64 tx bytes for the caller's\n * wallet infrastructure (WaaS, multisig, CLI) to sign and submit.\n *\n * Gas: `tx.build()` selects gas coins owned by `sender`; the sender needs\n * SUI for gas. Sponsored transactions are a later iteration.\n */\n\nimport type { SuiClient } from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport {\n CLOCK_OBJECT_ID,\n DEFAULT_GAS_BUDGET,\n SuiVaultError,\n VAULT_API_MODULE,\n type SuiVaultConfig,\n} from \"./config.js\";\nimport { getUserPosition } from \"./queries.js\";\n\nexport interface SuiBuildResult {\n /** Unsigned transaction bytes, base64 — contract format `sui:tx-bytes-base64`. */\n txBytesBase64: string;\n /** Human-readable description of what the transaction does. */\n message: string;\n}\n\nfunction vaultApiTarget(cfg: SuiVaultConfig, fn: string): `${string}::${string}::${string}` {\n return `${cfg.packageId}::${VAULT_API_MODULE}::${fn}`;\n}\n\nfunction typeArgs(cfg: SuiVaultConfig): [string, string] {\n return [cfg.usdcType, cfg.rcusdpType];\n}\n\nasync function finalize(\n client: SuiClient,\n tx: Transaction,\n sender: string,\n message: string,\n): Promise<SuiBuildResult> {\n tx.setSender(sender);\n // Set an explicit gas budget so build() does NOT auto dry-run to estimate\n // it. We are producing an UNSIGNED tx for the caller to sign — build must\n // not fail just because the vault is momentarily in a settlement window\n // (E_DEPOSIT_SETTLEMENT_ACTIVE etc.); real validation happens at execution.\n tx.setGasBudget(DEFAULT_GAS_BUDGET);\n const bytes = await tx.build({ client });\n return { txBytesBase64: Buffer.from(bytes).toString(\"base64\"), message };\n}\n\n/**\n * Select USDC coins for `amount`: merge the user's USDC coins into the\n * first one if needed, then split the exact amount.\n * Throws INSUFFICIENT_BALANCE when the wallet holds less than `amount`.\n */\nasync function prepareUsdcCoin(\n client: SuiClient,\n cfg: SuiVaultConfig,\n tx: Transaction,\n owner: string,\n amount: bigint,\n) {\n const coins = await client.getCoins({ owner, coinType: cfg.usdcType });\n if (!coins.data || coins.data.length === 0) {\n throw new SuiVaultError(\"INSUFFICIENT_BALANCE\", \"No USDC coins found in wallet\");\n }\n const total = coins.data.reduce((sum, c) => sum + BigInt(c.balance), 0n);\n if (total < amount) {\n throw new SuiVaultError(\n \"INSUFFICIENT_BALANCE\",\n `Insufficient USDC balance: have ${total}, need ${amount}`,\n );\n }\n\n const [first, ...rest] = coins.data;\n if (rest.length > 0) {\n tx.mergeCoins(\n tx.object(first.coinObjectId),\n rest.map((c) => tx.object(c.coinObjectId)),\n );\n }\n const [coin] = tx.splitCoins(tx.object(first.coinObjectId), [tx.pure.u64(amount)]);\n return coin;\n}\n\n/** Deposit USDC into the vault (T+1 settlement). `amount` in raw units (1e6). */\nexport async function buildDepositTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; amount: bigint },\n): Promise<SuiBuildResult> {\n const tx = new Transaction();\n const depositCoin = await prepareUsdcCoin(client, cfg, tx, params.sender, params.amount);\n\n tx.moveCall({\n target: vaultApiTarget(cfg, \"deposit\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.object(cfg.vaultTypeConfigId),\n tx.object(cfg.pendingDepositsId),\n tx.object(cfg.userRecordsId),\n tx.object(cfg.depositSettlementStateId),\n depositCoin,\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n\n return finalize(client, tx, params.sender, `Deposit ${params.amount} raw USDC into ${cfg.id}`);\n}\n\n/** Queue a redemption for USDC (settles with the next cycle). `shares` raw (1e6). */\nexport async function buildQueueRedeemTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; shares: bigint },\n): Promise<SuiBuildResult> {\n const tx = new Transaction();\n tx.moveCall({\n target: vaultApiTarget(cfg, \"queue_redeem\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.object(cfg.vaultTypeConfigId),\n tx.object(cfg.pendingRedeemsId),\n tx.object(cfg.balancesId),\n tx.object(cfg.userRecordsId),\n tx.pure.u64(params.shares),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(client, tx, params.sender, `Queue redeem of ${params.shares} shares from ${cfg.id}`);\n}\n\n/** Instant redemption to USDC (immediate, higher fee). `shares` raw (1e6). */\nexport async function buildInstantRedeemTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; shares: bigint },\n): Promise<SuiBuildResult> {\n const tx = new Transaction();\n tx.moveCall({\n target: vaultApiTarget(cfg, \"instant_redeem\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.object(cfg.vaultTypeConfigId),\n tx.object(cfg.balancesId),\n tx.object(cfg.userRecordsId),\n tx.pure.u64(params.shares),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(\n client,\n tx,\n params.sender,\n `Instant redeem of ${params.shares} shares from ${cfg.id}`,\n );\n}\n\n/** Cancel a pending deposit by record id (only while its cycle is accepting). */\nexport async function buildCancelDepositTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; recordId: string | bigint },\n): Promise<SuiBuildResult> {\n const tx = new Transaction();\n tx.moveCall({\n target: vaultApiTarget(cfg, \"cancel_deposit_by_id\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.object(cfg.vaultTypeConfigId),\n tx.object(cfg.pendingDepositsId),\n tx.object(cfg.userRecordsId),\n tx.pure.u64(BigInt(params.recordId)),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(client, tx, params.sender, `Cancel pending deposit record ${params.recordId}`);\n}\n\n/**\n * Plain USDC transfer (treasury withdrawals to allowlisted addresses).\n * `amount` in raw units (1e6).\n */\nexport async function buildTransferUsdcTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; recipient: string; amount: bigint },\n): Promise<SuiBuildResult> {\n const tx = new Transaction();\n const coin = await prepareUsdcCoin(client, cfg, tx, params.sender, params.amount);\n tx.transferObjects([coin], tx.pure.address(params.recipient));\n return finalize(\n client,\n tx,\n params.sender,\n `Transfer ${params.amount} raw USDC to ${params.recipient}`,\n );\n}\n\n/**\n * Claim settled redemption proceeds. Claims the full claimable balance by\n * default (contract semantics: claim pays the account's own wallet).\n * Throws NOTHING_CLAIMABLE when the claimable balance is zero.\n */\nexport async function buildClaimTx(\n client: SuiClient,\n cfg: SuiVaultConfig,\n params: { sender: string; amount?: bigint },\n): Promise<SuiBuildResult> {\n let amount = params.amount;\n if (amount === undefined) {\n const position = await getUserPosition(client, cfg, params.sender);\n amount = position.claimable;\n }\n if (amount <= 0n) {\n throw new SuiVaultError(\"NOTHING_CLAIMABLE\", \"Claimable balance is zero\");\n }\n\n const tx = new Transaction();\n tx.moveCall({\n target: vaultApiTarget(cfg, \"claim\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.object(cfg.vaultTypeConfigId),\n tx.object(cfg.claimsId),\n tx.object(cfg.userRecordsId),\n tx.pure.u64(amount),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(client, tx, params.sender, `Claim ${amount} raw USDC from ${cfg.id}`);\n}\n","/**\n * Per-user record reads (UserRecords table) — devInspect over\n * vault::get_all_user_records, BCS layout ported from\n * tbook-vault-fe/hooks/use-transaction-history.ts.\n */\n\nimport type { SuiClient } from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { bcs } from \"@mysten/sui/bcs\";\nimport { SuiVaultError, VAULT_MODULE, type SuiVaultConfig } from \"./config.js\";\n\n/** Action codes from vault.move. */\nexport const SUI_ACTION = {\n DEPOSIT: 0,\n REDEEM: 1,\n CLAIM: 2,\n INSTANT_REDEEM: 3,\n WITHDRAW_RCUSDP: 4,\n CANCEL_DEPOSIT: 5,\n} as const;\n\n/** Record status codes from vault.move. */\nexport const SUI_RECORD_STATUS = {\n PENDING: 0,\n COMPLETED: 1,\n CANCELLED: 2,\n} as const;\n\nexport interface SuiUserRecord {\n recordId: string;\n action: number;\n /** Raw units (1e6). */\n amount: bigint;\n fee: bigint;\n shares: bigint;\n status: number;\n /** Unix ms. */\n createdAt: number;\n /** Unix ms; 0 while pending. */\n settledAt: number;\n relatedRecordId: string;\n}\n\nconst UserRecordBcs = bcs.struct(\"UserRecord\", {\n record_id: bcs.u64(),\n action: bcs.u8(),\n amount: bcs.u64(),\n fee: bcs.u64(),\n shares: bcs.u64(),\n status: bcs.u8(),\n created_at: bcs.u64(),\n settled_at: bcs.u64(),\n related_record_id: bcs.u64(),\n});\n\n/** Fetch all of a user's vault records, newest first. */\nexport async function getUserRecords(\n client: SuiClient,\n cfg: SuiVaultConfig,\n address: string,\n): Promise<SuiUserRecord[]> {\n const tx = new Transaction();\n tx.moveCall({\n target: `${cfg.packageId}::${VAULT_MODULE}::get_all_user_records`,\n arguments: [tx.object(cfg.userRecordsId), tx.pure.address(address)],\n });\n\n const result = await client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: address,\n });\n if (result.error) {\n throw new SuiVaultError(\"RPC_ERROR\", `devInspect failed: ${result.error}`);\n }\n\n const returnValue = result.results?.[0]?.returnValues?.[0];\n if (!returnValue) return [];\n const [bytes] = returnValue;\n\n const records = bcs.vector(UserRecordBcs).parse(Uint8Array.from(bytes));\n return records\n .map((r: any) => ({\n recordId: String(r.record_id),\n action: Number(r.action),\n amount: BigInt(r.amount),\n fee: BigInt(r.fee),\n shares: BigInt(r.shares),\n status: Number(r.status),\n createdAt: Number(r.created_at),\n settledAt: Number(r.settled_at),\n relatedRecordId: String(r.related_record_id),\n }))\n .sort((a, b) => b.createdAt - a.createdAt);\n}\n","/**\n * AlphaVault (XAUa tokenized gold) — Sui direct rail builders and reads.\n *\n * Contract: rwa-alpha-token `alpha_vault` module. Subscription/redemption\n * are request-based with T+3 issuer settlement; all user entries take the\n * single shared AlphaVault object + Clock. Wallets must be whitelisted by\n * the issuer before subscribing (contract `not_whitelisted` semantics).\n *\n * XAUA has 6 decimals (shares are u128 in the same scale); USDC is 1e6.\n */\n\nimport type { SuiClient } from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { bcs } from \"@mysten/sui/bcs\";\nimport { CLOCK_OBJECT_ID, DEFAULT_GAS_BUDGET, SuiVaultError } from \"./config.js\";\n\nexport interface AlphaVaultConfig {\n /** Catalog vault id (\"xaua-sui\"). */\n id: string;\n network: \"mainnet\" | \"testnet\";\n packageId: string;\n vaultObjectId: string;\n usdcType: string;\n xauaType: string;\n}\n\nconst BUILT_IN: Record<string, AlphaVaultConfig> = {\n // Testnet deployment from rwa-alpha-token/web/lib/config.ts (v1.3.3).\n \"testnet:xaua-sui\": {\n id: \"xaua-sui\",\n network: \"testnet\",\n packageId: \"0x0c8af11021f74702b1eafec118cce725f46f459a9e35d6bb946758fda6727756\",\n vaultObjectId: \"0x89844622d73ba1ec849b428617726647c7270e9916a28381ad678fdb51724dbc\",\n usdcType: \"0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC\",\n xauaType: \"0x04f714d2d8c3817b0d961bf0c529bb767d8a81f6394a78ca0e012d8dd9b16b5f::xaua::XAUA\",\n },\n // Mainnet lands with the issuer's publish (WS6 gates: audit, NAV SLA).\n};\n\nexport function getAlphaVaultConfig(\n vaultId: string,\n network: \"mainnet\" | \"testnet\",\n): AlphaVaultConfig {\n const cfg = BUILT_IN[`${network}:${vaultId}`];\n if (!cfg) {\n throw new SuiVaultError(\"UNKNOWN_VAULT\", `No AlphaVault config for ${network}:${vaultId}`);\n }\n return cfg;\n}\n\nexport interface AlphaPosition {\n /** XAUA shares free to redeem (1e6 scale, u128 on-chain). */\n availableShares: bigint;\n /** Shares locked in pending redemption requests. */\n lockedShares: bigint;\n /** Settled USDC awaiting claim (1e6). */\n claimableUsdc: bigint;\n totalSubscribedUsdc: bigint;\n totalRedeemedShares: bigint;\n totalClaimedUsdc: bigint;\n}\n\nconst UserPositionBcs = bcs.struct(\"UserPosition\", {\n available_shares: bcs.u128(),\n locked_shares: bcs.u128(),\n claimable_usdc: bcs.u64(),\n total_subscribed_usdc: bcs.u64(),\n total_redeemed_shares: bcs.u128(),\n total_claimed_usdc: bcs.u64(),\n});\n\nfunction target(cfg: AlphaVaultConfig, fn: string): `${string}::${string}::${string}` {\n return `${cfg.packageId}::alpha_vault::${fn}`;\n}\n\nfunction typeArgs(cfg: AlphaVaultConfig): [string, string] {\n return [cfg.usdcType, cfg.xauaType];\n}\n\ninterface BuildResult {\n txBytesBase64: string;\n message: string;\n}\n\nasync function finalize(\n client: SuiClient,\n tx: Transaction,\n sender: string,\n message: string,\n): Promise<BuildResult> {\n tx.setSender(sender);\n // Explicit gas budget — skip dry-run so unsigned-tx builds don't fail on\n // transient vault states (real validation happens at execution time).\n tx.setGasBudget(DEFAULT_GAS_BUDGET);\n const bytes = await tx.build({ client });\n return { txBytesBase64: Buffer.from(bytes).toString(\"base64\"), message };\n}\n\n/** Merge/split the sender's USDC for `amount`; throws INSUFFICIENT_BALANCE. */\nasync function prepareUsdc(\n client: SuiClient,\n usdcType: string,\n tx: Transaction,\n owner: string,\n amount: bigint,\n) {\n const coins = await client.getCoins({ owner, coinType: usdcType });\n if (!coins.data || coins.data.length === 0) {\n throw new SuiVaultError(\"INSUFFICIENT_BALANCE\", \"No USDC coins found in wallet\");\n }\n const total = coins.data.reduce((sum, c) => sum + BigInt(c.balance), 0n);\n if (total < amount) {\n throw new SuiVaultError(\n \"INSUFFICIENT_BALANCE\",\n `Insufficient USDC balance: have ${total}, need ${amount}`,\n );\n }\n const [first, ...rest] = coins.data;\n if (rest.length > 0) {\n tx.mergeCoins(\n tx.object(first.coinObjectId),\n rest.map((c) => tx.object(c.coinObjectId)),\n );\n }\n const [coin] = tx.splitCoins(tx.object(first.coinObjectId), [tx.pure.u64(amount)]);\n return coin;\n}\n\n/** Subscribe USDC for XAUa at the settlement cycle's NAV (T+3). */\nexport async function buildSubscribeTx(\n client: SuiClient,\n cfg: AlphaVaultConfig,\n params: { sender: string; amount: bigint },\n): Promise<BuildResult> {\n const tx = new Transaction();\n const usdc = await prepareUsdc(client, cfg.usdcType, tx, params.sender, params.amount);\n tx.moveCall({\n target: target(cfg, \"subscribe\"),\n typeArguments: typeArgs(cfg),\n arguments: [tx.object(cfg.vaultObjectId), usdc, tx.object(CLOCK_OBJECT_ID)],\n });\n return finalize(client, tx, params.sender, `Subscribe ${params.amount} raw USDC to ${cfg.id}`);\n}\n\n/** Queue a redemption of XAUa shares (T+3 issuer settlement). */\nexport async function buildRequestRedemptionTx(\n client: SuiClient,\n cfg: AlphaVaultConfig,\n params: { sender: string; shares: bigint },\n): Promise<BuildResult> {\n const tx = new Transaction();\n tx.moveCall({\n target: target(cfg, \"request_redemption\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.pure.u128(params.shares),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(\n client,\n tx,\n params.sender,\n `Request redemption of ${params.shares} XAUa shares from ${cfg.id}`,\n );\n}\n\n/** Cancel a pending subscription or redemption request by id. */\nexport async function buildCancelRequestTx(\n client: SuiClient,\n cfg: AlphaVaultConfig,\n params: { sender: string; requestId: string | bigint; kind: \"subscription\" | \"redemption\" },\n): Promise<BuildResult> {\n const tx = new Transaction();\n tx.moveCall({\n target: target(cfg, params.kind === \"subscription\" ? \"cancel_subscription\" : \"cancel_redemption\"),\n typeArguments: typeArgs(cfg),\n arguments: [\n tx.object(cfg.vaultObjectId),\n tx.pure.u64(BigInt(params.requestId)),\n tx.object(CLOCK_OBJECT_ID),\n ],\n });\n return finalize(client, tx, params.sender, `Cancel ${params.kind} request ${params.requestId}`);\n}\n\n/**\n * Claim settled redemption proceeds. Claims the full claimable balance by\n * default; throws NOTHING_CLAIMABLE when it is zero.\n */\nexport async function buildClaimUsdcTx(\n client: SuiClient,\n cfg: AlphaVaultConfig,\n params: { sender: string; amount?: bigint },\n): Promise<BuildResult> {\n let amount = params.amount;\n if (amount === undefined) {\n const position = await getAlphaPosition(client, cfg, params.sender);\n amount = position.claimableUsdc;\n }\n if (amount <= 0n) {\n throw new SuiVaultError(\"NOTHING_CLAIMABLE\", \"Claimable balance is zero\");\n }\n const tx = new Transaction();\n tx.moveCall({\n target: target(cfg, \"claim_usdc\"),\n typeArguments: typeArgs(cfg),\n arguments: [tx.object(cfg.vaultObjectId), tx.pure.u64(amount), tx.object(CLOCK_OBJECT_ID)],\n });\n return finalize(client, tx, params.sender, `Claim ${amount} raw USDC from ${cfg.id}`);\n}\n\n/** Read a user's AlphaVault position in one devInspect round-trip. */\nexport async function getAlphaPosition(\n client: SuiClient,\n cfg: AlphaVaultConfig,\n address: string,\n): Promise<AlphaPosition> {\n const tx = new Transaction();\n tx.moveCall({\n target: target(cfg, \"position\"),\n typeArguments: typeArgs(cfg),\n arguments: [tx.object(cfg.vaultObjectId), tx.pure.address(address)],\n });\n\n const result = await client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: address,\n });\n if (result.error) {\n throw new SuiVaultError(\"RPC_ERROR\", `devInspect failed: ${result.error}`);\n }\n\n const returnValue = result.results?.[0]?.returnValues?.[0];\n if (!returnValue) {\n return {\n availableShares: 0n,\n lockedShares: 0n,\n claimableUsdc: 0n,\n totalSubscribedUsdc: 0n,\n totalRedeemedShares: 0n,\n totalClaimedUsdc: 0n,\n };\n }\n\n const parsed: any = UserPositionBcs.parse(Uint8Array.from(returnValue[0]));\n return {\n availableShares: BigInt(parsed.available_shares),\n lockedShares: BigInt(parsed.locked_shares),\n claimableUsdc: BigInt(parsed.claimable_usdc),\n totalSubscribedUsdc: BigInt(parsed.total_subscribed_usdc),\n totalRedeemedShares: BigInt(parsed.total_redeemed_shares),\n totalClaimedUsdc: BigInt(parsed.total_claimed_usdc),\n };\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@tbookdev/vault-sdk-sui",
3
+ "version": "0.1.0",
4
+ "description": "TBook Vault Sui SDK — unsigned PTB builders and reads for the Sui direct rail (rcUSDP vault)",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "require": {
17
+ "types": "./dist/index.d.cts",
18
+ "default": "./dist/index.cjs"
19
+ }
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "registry": "https://registry.npmjs.org/"
29
+ },
30
+ "dependencies": {
31
+ "@mysten/sui": "^1.30.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^20.14.0",
35
+ "tsup": "^8.3.0",
36
+ "typescript": "^5.7.0",
37
+ "vitest": "^2.1.0"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/tbook-dev/vault-gateway-sdk.git",
42
+ "directory": "packages/vault-sdk-sui"
43
+ },
44
+ "scripts": {
45
+ "build": "tsup",
46
+ "dev": "tsup --watch",
47
+ "test": "vitest run",
48
+ "lint": "tsc --noEmit",
49
+ "clean": "rm -rf dist"
50
+ }
51
+ }