@magicblock-labs/ephemeral-rollups-kit 0.8.8 → 0.10.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/lib/__test__/instructions.test.js +379 -0
- package/lib/__test__/instructions.test.js.map +1 -1
- package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.d.ts +38 -15
- package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.d.ts.map +1 -1
- package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.js +403 -44
- package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.js.map +1 -1
- package/lib/instructions/ephemeral-spl-token-program/index.d.ts +1 -0
- package/lib/instructions/ephemeral-spl-token-program/index.d.ts.map +1 -1
- package/lib/instructions/ephemeral-spl-token-program/index.js +1 -0
- package/lib/instructions/ephemeral-spl-token-program/index.js.map +1 -1
- package/lib/instructions/ephemeral-spl-token-program/transferQueue.d.ts +7 -0
- package/lib/instructions/ephemeral-spl-token-program/transferQueue.d.ts.map +1 -0
- package/lib/instructions/ephemeral-spl-token-program/transferQueue.js +126 -0
- package/lib/instructions/ephemeral-spl-token-program/transferQueue.js.map +1 -0
- package/lib/instructions/index.d.ts +1 -0
- package/lib/instructions/index.d.ts.map +1 -1
- package/lib/instructions/index.js +1 -0
- package/lib/instructions/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ephemeralAta.d.ts","sourceRoot":"","sources":["../../../src/instructions/ephemeral-spl-token-program/ephemeralAta.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,
|
|
1
|
+
{"version":3,"file":"ephemeralAta.d.ts","sourceRoot":"","sources":["../../../src/instructions/ephemeral-spl-token-program/ephemeralAta.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ exports.getGlobalVaultCodec = getGlobalVaultCodec;
|
|
|
10
10
|
exports.decodeGlobalVault = decodeGlobalVault;
|
|
11
11
|
exports.deriveEphemeralAta = deriveEphemeralAta;
|
|
12
12
|
exports.deriveVault = deriveVault;
|
|
13
|
+
exports.deriveRentPda = deriveRentPda;
|
|
13
14
|
exports.deriveVaultAta = deriveVaultAta;
|
|
14
15
|
exports.deriveShuttleEphemeralAta = deriveShuttleEphemeralAta;
|
|
15
16
|
exports.deriveShuttleAta = deriveShuttleAta;
|
|
@@ -17,10 +18,14 @@ exports.deriveShuttleWalletAta = deriveShuttleWalletAta;
|
|
|
17
18
|
exports.initEphemeralAtaIx = initEphemeralAtaIx;
|
|
18
19
|
exports.initVaultAtaIx = initVaultAtaIx;
|
|
19
20
|
exports.initVaultIx = initVaultIx;
|
|
21
|
+
exports.initRentPdaIx = initRentPdaIx;
|
|
20
22
|
exports.transferToVaultIx = transferToVaultIx;
|
|
21
23
|
exports.delegateIx = delegateIx;
|
|
22
24
|
exports.initShuttleEphemeralAtaIx = initShuttleEphemeralAtaIx;
|
|
23
25
|
exports.delegateShuttleEphemeralAtaIx = delegateShuttleEphemeralAtaIx;
|
|
26
|
+
exports.setupAndDelegateShuttleEphemeralAtaWithMergeIx = setupAndDelegateShuttleEphemeralAtaWithMergeIx;
|
|
27
|
+
exports.depositAndDelegateShuttleEphemeralAtaWithMergeAndPrivateTransferIx = depositAndDelegateShuttleEphemeralAtaWithMergeAndPrivateTransferIx;
|
|
28
|
+
exports.withdrawThroughDelegatedShuttleWithMergeIx = withdrawThroughDelegatedShuttleWithMergeIx;
|
|
24
29
|
exports.mergeShuttleIntoAtaIx = mergeShuttleIntoAtaIx;
|
|
25
30
|
exports.undelegateAndCloseShuttleEphemeralAtaIx = undelegateAndCloseShuttleEphemeralAtaIx;
|
|
26
31
|
exports.withdrawSplIx = withdrawSplIx;
|
|
@@ -30,13 +35,15 @@ exports.resetEataPermissionIx = resetEataPermissionIx;
|
|
|
30
35
|
exports.delegateEataPermissionIx = delegateEataPermissionIx;
|
|
31
36
|
exports.undelegateEataPermissionIx = undelegateEataPermissionIx;
|
|
32
37
|
exports.delegateSpl = delegateSpl;
|
|
33
|
-
exports.
|
|
34
|
-
exports.
|
|
38
|
+
exports.delegateSplWithPrivateTransfer = delegateSplWithPrivateTransfer;
|
|
39
|
+
exports.transferSpl = transferSpl;
|
|
40
|
+
exports.withdrawSpl = withdrawSpl;
|
|
35
41
|
const kit_1 = require("@solana/kit");
|
|
36
42
|
const system_1 = require("@solana-program/system");
|
|
37
43
|
const constants_1 = require("../../constants");
|
|
38
44
|
const pda_1 = require("../../pda");
|
|
39
|
-
const
|
|
45
|
+
const transferQueue_1 = require("./transferQueue");
|
|
46
|
+
const U64_ENCODER = (0, kit_1.getU64Encoder)();
|
|
40
47
|
const TOKEN_PROGRAM_ADDRESS = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
41
48
|
const ASSOCIATED_TOKEN_PROGRAM_ADDRESS = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
|
|
42
49
|
async function getAssociatedTokenAddressSync(mint, owner, allowOwnerOffCurve = false) {
|
|
@@ -51,6 +58,17 @@ async function getAssociatedTokenAddressSync(mint, owner, allowOwnerOffCurve = f
|
|
|
51
58
|
});
|
|
52
59
|
return ata;
|
|
53
60
|
}
|
|
61
|
+
function createTransferInstruction(source, destination, owner, amount) {
|
|
62
|
+
return {
|
|
63
|
+
accounts: [
|
|
64
|
+
{ address: source, role: kit_1.AccountRole.WRITABLE },
|
|
65
|
+
{ address: destination, role: kit_1.AccountRole.WRITABLE },
|
|
66
|
+
{ address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
|
|
67
|
+
],
|
|
68
|
+
data: encodeAmountInstructionData(3, amount),
|
|
69
|
+
programAddress: TOKEN_PROGRAM_ADDRESS,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
54
72
|
function getEphemeralAtaEncoder() {
|
|
55
73
|
return (0, kit_1.getStructEncoder)([
|
|
56
74
|
["owner", (0, kit_1.getAddressEncoder)()],
|
|
@@ -101,6 +119,13 @@ async function deriveVault(mint) {
|
|
|
101
119
|
});
|
|
102
120
|
return [vault, bump];
|
|
103
121
|
}
|
|
122
|
+
async function deriveRentPda() {
|
|
123
|
+
const [rentPda, bump] = await (0, kit_1.getProgramDerivedAddress)({
|
|
124
|
+
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
125
|
+
seeds: [new Uint8Array([114, 101, 110, 116])],
|
|
126
|
+
});
|
|
127
|
+
return [rentPda, bump];
|
|
128
|
+
}
|
|
104
129
|
async function deriveVaultAta(mint, vault) {
|
|
105
130
|
return getAssociatedTokenAddressSync(mint, vault, true);
|
|
106
131
|
}
|
|
@@ -164,12 +189,13 @@ function initVaultAtaIx(payer, vaultAta, vault, mint) {
|
|
|
164
189
|
programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
|
|
165
190
|
};
|
|
166
191
|
}
|
|
167
|
-
function initVaultIx(vault, mint, payer, bump, vaultAta) {
|
|
192
|
+
function initVaultIx(vault, mint, payer, bump, vaultEphemeralAta, vaultAta) {
|
|
168
193
|
return {
|
|
169
194
|
accounts: [
|
|
170
195
|
{ address: vault, role: kit_1.AccountRole.WRITABLE },
|
|
171
196
|
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
172
197
|
{ address: mint, role: kit_1.AccountRole.READONLY },
|
|
198
|
+
{ address: vaultEphemeralAta, role: kit_1.AccountRole.WRITABLE },
|
|
173
199
|
{ address: vaultAta, role: kit_1.AccountRole.WRITABLE },
|
|
174
200
|
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
175
201
|
{
|
|
@@ -182,6 +208,17 @@ function initVaultIx(vault, mint, payer, bump, vaultAta) {
|
|
|
182
208
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
183
209
|
};
|
|
184
210
|
}
|
|
211
|
+
function initRentPdaIx(payer, rentPda) {
|
|
212
|
+
return {
|
|
213
|
+
accounts: [
|
|
214
|
+
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
215
|
+
{ address: rentPda, role: kit_1.AccountRole.WRITABLE },
|
|
216
|
+
{ address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
217
|
+
],
|
|
218
|
+
data: new Uint8Array([23]),
|
|
219
|
+
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
185
222
|
function transferToVaultIx(ephemeralAta, vault, mint, sourceAta, vaultAta, owner, amount) {
|
|
186
223
|
return {
|
|
187
224
|
accounts: [
|
|
@@ -193,7 +230,7 @@ function transferToVaultIx(ephemeralAta, vault, mint, sourceAta, vaultAta, owner
|
|
|
193
230
|
{ address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
|
|
194
231
|
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
195
232
|
],
|
|
196
|
-
data:
|
|
233
|
+
data: encodeAmountInstructionData(2, amount),
|
|
197
234
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
198
235
|
};
|
|
199
236
|
}
|
|
@@ -292,6 +329,174 @@ async function delegateShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttle
|
|
|
292
329
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
293
330
|
};
|
|
294
331
|
}
|
|
332
|
+
async function setupAndDelegateShuttleEphemeralAtaWithMergeIx(payer, shuttleEphemeralAta, shuttleAta, owner, sourceAta, destinationAta, shuttleWalletAta, mint, shuttleId, bump, amount, validator) {
|
|
333
|
+
if (!Number.isInteger(shuttleId) ||
|
|
334
|
+
shuttleId < 0 ||
|
|
335
|
+
shuttleId > 4294967295) {
|
|
336
|
+
throw new Error("shuttleId must fit in u32");
|
|
337
|
+
}
|
|
338
|
+
const [rentPda] = await deriveRentPda();
|
|
339
|
+
const [vault] = await deriveVault(mint);
|
|
340
|
+
const vaultAta = await deriveVaultAta(mint, vault);
|
|
341
|
+
const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(shuttleAta, constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID);
|
|
342
|
+
const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(shuttleAta);
|
|
343
|
+
const delegationMetadata = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(shuttleAta);
|
|
344
|
+
const addressEncoder = (0, kit_1.getAddressEncoder)();
|
|
345
|
+
const data = new Uint8Array(validator ? 46 : 14);
|
|
346
|
+
const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
347
|
+
data[0] = 24;
|
|
348
|
+
dataView.setUint32(1, shuttleId, true);
|
|
349
|
+
data[5] = bump;
|
|
350
|
+
dataView.setBigUint64(6, amount, true);
|
|
351
|
+
if (validator) {
|
|
352
|
+
data.set(addressEncoder.encode(validator), 14);
|
|
353
|
+
}
|
|
354
|
+
return {
|
|
355
|
+
accounts: [
|
|
356
|
+
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
357
|
+
{ address: rentPda, role: kit_1.AccountRole.WRITABLE },
|
|
358
|
+
{ address: shuttleEphemeralAta, role: kit_1.AccountRole.WRITABLE },
|
|
359
|
+
{ address: shuttleAta, role: kit_1.AccountRole.WRITABLE },
|
|
360
|
+
{ address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
|
|
361
|
+
{ address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
|
|
362
|
+
{ address: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
363
|
+
{ address: delegateBuffer, role: kit_1.AccountRole.WRITABLE },
|
|
364
|
+
{ address: delegationRecord, role: kit_1.AccountRole.WRITABLE },
|
|
365
|
+
{ address: delegationMetadata, role: kit_1.AccountRole.WRITABLE },
|
|
366
|
+
{ address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
367
|
+
{
|
|
368
|
+
address: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
|
|
369
|
+
role: kit_1.AccountRole.READONLY,
|
|
370
|
+
},
|
|
371
|
+
{ address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
372
|
+
{ address: destinationAta, role: kit_1.AccountRole.WRITABLE },
|
|
373
|
+
{ address: mint, role: kit_1.AccountRole.READONLY },
|
|
374
|
+
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
375
|
+
{ address: vault, role: kit_1.AccountRole.READONLY },
|
|
376
|
+
{ address: sourceAta, role: kit_1.AccountRole.WRITABLE },
|
|
377
|
+
{ address: vaultAta, role: kit_1.AccountRole.WRITABLE },
|
|
378
|
+
],
|
|
379
|
+
data,
|
|
380
|
+
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
async function depositAndDelegateShuttleEphemeralAtaWithMergeAndPrivateTransferIx(payer, shuttleEphemeralAta, shuttleAta, owner, sourceAta, destinationAta, shuttleWalletAta, mint, shuttleId, bump, amount, minDelayMs, maxDelayMs, split, validator) {
|
|
384
|
+
if (!Number.isInteger(shuttleId) ||
|
|
385
|
+
shuttleId < 0 ||
|
|
386
|
+
shuttleId > 4294967295) {
|
|
387
|
+
throw new Error("shuttleId must fit in u32");
|
|
388
|
+
}
|
|
389
|
+
if (amount < 0n) {
|
|
390
|
+
throw new Error("amount must be non-negative");
|
|
391
|
+
}
|
|
392
|
+
if (minDelayMs < 0n || maxDelayMs < 0n) {
|
|
393
|
+
throw new Error("delay values must be non-negative");
|
|
394
|
+
}
|
|
395
|
+
if (maxDelayMs < minDelayMs) {
|
|
396
|
+
throw new Error("maxDelayMs must be greater than or equal to minDelayMs");
|
|
397
|
+
}
|
|
398
|
+
if (!Number.isInteger(split) || split <= 0 || split > 4294967295) {
|
|
399
|
+
throw new Error("split must fit in u32 and be positive");
|
|
400
|
+
}
|
|
401
|
+
const [rentPda] = await deriveRentPda();
|
|
402
|
+
const [vault] = await deriveVault(mint);
|
|
403
|
+
const vaultAta = await deriveVaultAta(mint, vault);
|
|
404
|
+
const [queue] = await (0, transferQueue_1.deriveTransferQueue)(mint);
|
|
405
|
+
const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(shuttleAta, constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID);
|
|
406
|
+
const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(shuttleAta);
|
|
407
|
+
const delegationMetadata = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(shuttleAta);
|
|
408
|
+
const addressEncoder = (0, kit_1.getAddressEncoder)();
|
|
409
|
+
const data = new Uint8Array(validator ? 66 : 34);
|
|
410
|
+
const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
411
|
+
data[0] = 25;
|
|
412
|
+
dataView.setUint32(1, shuttleId, true);
|
|
413
|
+
data[5] = bump;
|
|
414
|
+
dataView.setBigUint64(6, amount, true);
|
|
415
|
+
dataView.setBigUint64(14, minDelayMs, true);
|
|
416
|
+
dataView.setBigUint64(22, maxDelayMs, true);
|
|
417
|
+
dataView.setUint32(30, split, true);
|
|
418
|
+
if (validator) {
|
|
419
|
+
data.set(addressEncoder.encode(validator), 34);
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
accounts: [
|
|
423
|
+
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
424
|
+
{ address: rentPda, role: kit_1.AccountRole.WRITABLE },
|
|
425
|
+
{ address: shuttleEphemeralAta, role: kit_1.AccountRole.WRITABLE },
|
|
426
|
+
{ address: shuttleAta, role: kit_1.AccountRole.WRITABLE },
|
|
427
|
+
{ address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
|
|
428
|
+
{ address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
|
|
429
|
+
{ address: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
430
|
+
{ address: delegateBuffer, role: kit_1.AccountRole.WRITABLE },
|
|
431
|
+
{ address: delegationRecord, role: kit_1.AccountRole.WRITABLE },
|
|
432
|
+
{ address: delegationMetadata, role: kit_1.AccountRole.WRITABLE },
|
|
433
|
+
{ address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
434
|
+
{
|
|
435
|
+
address: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
|
|
436
|
+
role: kit_1.AccountRole.READONLY,
|
|
437
|
+
},
|
|
438
|
+
{ address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
439
|
+
{ address: destinationAta, role: kit_1.AccountRole.WRITABLE },
|
|
440
|
+
{ address: mint, role: kit_1.AccountRole.READONLY },
|
|
441
|
+
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
442
|
+
{ address: vault, role: kit_1.AccountRole.READONLY },
|
|
443
|
+
{ address: sourceAta, role: kit_1.AccountRole.WRITABLE },
|
|
444
|
+
{ address: vaultAta, role: kit_1.AccountRole.WRITABLE },
|
|
445
|
+
{ address: queue, role: kit_1.AccountRole.WRITABLE },
|
|
446
|
+
],
|
|
447
|
+
data,
|
|
448
|
+
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
async function withdrawThroughDelegatedShuttleWithMergeIx(payer, shuttleEphemeralAta, shuttleAta, owner, ownerAta, shuttleWalletAta, mint, shuttleId, bump, amount, validator) {
|
|
452
|
+
if (!Number.isInteger(shuttleId) ||
|
|
453
|
+
shuttleId < 0 ||
|
|
454
|
+
shuttleId > 4294967295) {
|
|
455
|
+
throw new Error("shuttleId must fit in u32");
|
|
456
|
+
}
|
|
457
|
+
if (amount < 0n) {
|
|
458
|
+
throw new Error("amount must be non-negative");
|
|
459
|
+
}
|
|
460
|
+
const [rentPda] = await deriveRentPda();
|
|
461
|
+
const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(shuttleAta, constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID);
|
|
462
|
+
const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(shuttleAta);
|
|
463
|
+
const delegationMetadata = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(shuttleAta);
|
|
464
|
+
const addressEncoder = (0, kit_1.getAddressEncoder)();
|
|
465
|
+
const data = new Uint8Array(validator ? 46 : 14);
|
|
466
|
+
const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
467
|
+
data[0] = 26;
|
|
468
|
+
dataView.setUint32(1, shuttleId, true);
|
|
469
|
+
data[5] = bump;
|
|
470
|
+
dataView.setBigUint64(6, amount, true);
|
|
471
|
+
if (validator) {
|
|
472
|
+
data.set(addressEncoder.encode(validator), 14);
|
|
473
|
+
}
|
|
474
|
+
return {
|
|
475
|
+
accounts: [
|
|
476
|
+
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
477
|
+
{ address: rentPda, role: kit_1.AccountRole.WRITABLE },
|
|
478
|
+
{ address: shuttleEphemeralAta, role: kit_1.AccountRole.WRITABLE },
|
|
479
|
+
{ address: shuttleAta, role: kit_1.AccountRole.WRITABLE },
|
|
480
|
+
{ address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
|
|
481
|
+
{ address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
|
|
482
|
+
{ address: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
483
|
+
{ address: delegateBuffer, role: kit_1.AccountRole.WRITABLE },
|
|
484
|
+
{ address: delegationRecord, role: kit_1.AccountRole.WRITABLE },
|
|
485
|
+
{ address: delegationMetadata, role: kit_1.AccountRole.WRITABLE },
|
|
486
|
+
{ address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
487
|
+
{
|
|
488
|
+
address: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
|
|
489
|
+
role: kit_1.AccountRole.READONLY,
|
|
490
|
+
},
|
|
491
|
+
{ address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
492
|
+
{ address: ownerAta, role: kit_1.AccountRole.WRITABLE },
|
|
493
|
+
{ address: mint, role: kit_1.AccountRole.READONLY },
|
|
494
|
+
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
495
|
+
],
|
|
496
|
+
data,
|
|
497
|
+
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
498
|
+
};
|
|
499
|
+
}
|
|
295
500
|
function mergeShuttleIntoAtaIx(owner, ownerAta, shuttleEphemeralAta, shuttleWalletAta, mint) {
|
|
296
501
|
return {
|
|
297
502
|
accounts: [
|
|
@@ -306,7 +511,14 @@ function mergeShuttleIntoAtaIx(owner, ownerAta, shuttleEphemeralAta, shuttleWall
|
|
|
306
511
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
307
512
|
};
|
|
308
513
|
}
|
|
309
|
-
function undelegateAndCloseShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta) {
|
|
514
|
+
function undelegateAndCloseShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta, escrowIndex) {
|
|
515
|
+
if (escrowIndex !== undefined &&
|
|
516
|
+
(!Number.isInteger(escrowIndex) || escrowIndex < 0 || escrowIndex > 0xff)) {
|
|
517
|
+
throw new Error("escrowIndex must fit in u8");
|
|
518
|
+
}
|
|
519
|
+
const data = escrowIndex === undefined
|
|
520
|
+
? new Uint8Array([14])
|
|
521
|
+
: new Uint8Array([14, escrowIndex]);
|
|
310
522
|
return {
|
|
311
523
|
accounts: [
|
|
312
524
|
{ address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
|
|
@@ -317,7 +529,7 @@ function undelegateAndCloseShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shu
|
|
|
317
529
|
{ address: constants_1.MAGIC_CONTEXT_ID, role: kit_1.AccountRole.WRITABLE },
|
|
318
530
|
{ address: constants_1.MAGIC_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
|
|
319
531
|
],
|
|
320
|
-
data
|
|
532
|
+
data,
|
|
321
533
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
322
534
|
};
|
|
323
535
|
}
|
|
@@ -336,7 +548,7 @@ async function withdrawSplIx(owner, mint, amount) {
|
|
|
336
548
|
{ address: userDestAta, role: kit_1.AccountRole.WRITABLE },
|
|
337
549
|
{ address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
|
|
338
550
|
],
|
|
339
|
-
data:
|
|
551
|
+
data: encodeAmountInstructionData(3, amount, vaultBump),
|
|
340
552
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
341
553
|
};
|
|
342
554
|
}
|
|
@@ -440,98 +652,245 @@ async function undelegateEataPermissionIx(owner, ephemeralAta) {
|
|
|
440
652
|
programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
|
|
441
653
|
};
|
|
442
654
|
}
|
|
443
|
-
|
|
655
|
+
function randomShuttleId() {
|
|
656
|
+
const cryptoObj = globalThis?.crypto;
|
|
657
|
+
if (cryptoObj?.getRandomValues !== undefined) {
|
|
658
|
+
const buf = new Uint32Array(1);
|
|
659
|
+
cryptoObj.getRandomValues(buf);
|
|
660
|
+
return buf[0];
|
|
661
|
+
}
|
|
662
|
+
return Math.floor(Math.random() * 4294967296);
|
|
663
|
+
}
|
|
664
|
+
async function buildDelegateSplInstructions(owner, mint, amount, opts) {
|
|
444
665
|
const payer = opts?.payer ?? owner;
|
|
445
666
|
const validator = opts?.validator;
|
|
446
667
|
const initIfMissing = opts?.initIfMissing ?? true;
|
|
447
668
|
const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
|
|
669
|
+
const isPrivate = opts?.private ?? false;
|
|
448
670
|
const instructions = [];
|
|
449
671
|
const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
|
|
450
672
|
const [vault, vaultBump] = await deriveVault(mint);
|
|
673
|
+
const [vaultEphemeralAta, vaultEataBump] = await deriveEphemeralAta(vault, mint);
|
|
451
674
|
const vaultAta = await deriveVaultAta(mint, vault);
|
|
452
675
|
const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
|
|
453
676
|
if (initIfMissing) {
|
|
454
677
|
instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
|
|
455
678
|
}
|
|
456
679
|
if (initVaultIfMissing) {
|
|
457
|
-
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint));
|
|
680
|
+
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultEphemeralAta, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint), await delegateIx(payer, vaultEphemeralAta, vaultEataBump, validator));
|
|
458
681
|
}
|
|
459
682
|
instructions.push(transferToVaultIx(ephemeralAta, vault, mint, ownerAta, vaultAta, owner, amount));
|
|
683
|
+
if (isPrivate) {
|
|
684
|
+
instructions.push(await createEataPermissionIx(ephemeralAta, payer, eataBump));
|
|
685
|
+
}
|
|
460
686
|
instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator));
|
|
461
687
|
return instructions;
|
|
462
688
|
}
|
|
463
|
-
async function
|
|
689
|
+
async function buildIdempotentDelegateSplInstructions(owner, mint, amount, opts) {
|
|
464
690
|
const payer = opts?.payer ?? owner;
|
|
465
691
|
const validator = opts?.validator;
|
|
692
|
+
const initIfMissing = opts?.initIfMissing ?? true;
|
|
466
693
|
const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
|
|
467
694
|
const initAtasIfMissing = opts?.initAtasIfMissing ?? false;
|
|
468
|
-
const
|
|
469
|
-
const cryptoObj = globalThis?.crypto;
|
|
470
|
-
if (cryptoObj?.getRandomValues !== undefined) {
|
|
471
|
-
const buf = new Uint32Array(1);
|
|
472
|
-
cryptoObj.getRandomValues(buf);
|
|
473
|
-
return buf[0];
|
|
474
|
-
}
|
|
475
|
-
return Math.floor(Math.random() * 4294967296);
|
|
476
|
-
};
|
|
695
|
+
const isPrivate = opts?.private ?? false;
|
|
477
696
|
const shuttleId = opts?.shuttleId ?? randomShuttleId();
|
|
478
697
|
const instructions = [];
|
|
479
698
|
const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
|
|
480
699
|
const [vault, vaultBump] = await deriveVault(mint);
|
|
700
|
+
const [vaultEphemeralAta, vaultEataBump] = await deriveEphemeralAta(vault, mint);
|
|
481
701
|
const vaultAta = await deriveVaultAta(mint, vault);
|
|
482
702
|
const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
|
|
483
703
|
const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(owner, mint, shuttleId);
|
|
484
704
|
const [shuttleAta, shuttleAtaBump] = await deriveShuttleAta(shuttleEphemeralAta, mint);
|
|
485
705
|
const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
|
|
486
706
|
if (initVaultIfMissing) {
|
|
487
|
-
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint));
|
|
707
|
+
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultEphemeralAta, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint), await delegateIx(payer, vaultEphemeralAta, vaultEataBump, validator));
|
|
488
708
|
}
|
|
489
709
|
if (initAtasIfMissing) {
|
|
490
|
-
instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint)
|
|
710
|
+
instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint));
|
|
711
|
+
}
|
|
712
|
+
if (initIfMissing) {
|
|
713
|
+
instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
|
|
491
714
|
}
|
|
492
|
-
|
|
715
|
+
if (isPrivate) {
|
|
716
|
+
instructions.push(await createEataPermissionIx(ephemeralAta, payer, eataBump));
|
|
717
|
+
}
|
|
718
|
+
instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator));
|
|
493
719
|
if (amount > 0n) {
|
|
494
|
-
instructions.push(
|
|
720
|
+
instructions.push(await setupAndDelegateShuttleEphemeralAtaWithMergeIx(payer, shuttleEphemeralAta, shuttleAta, owner, ownerAta, ownerAta, shuttleWalletAta, mint, shuttleId, shuttleBump, amount, validator));
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
instructions.push(initShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta, owner, mint, shuttleId, shuttleBump), await delegateShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleAtaBump, validator));
|
|
495
724
|
}
|
|
496
|
-
instructions.push(await delegateShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleAtaBump, validator));
|
|
497
725
|
return instructions;
|
|
498
726
|
}
|
|
499
|
-
async function
|
|
727
|
+
async function delegateSpl(owner, mint, amount, opts) {
|
|
728
|
+
if (opts?.idempotent === false) {
|
|
729
|
+
return buildDelegateSplInstructions(owner, mint, amount, opts);
|
|
730
|
+
}
|
|
731
|
+
return buildIdempotentDelegateSplInstructions(owner, mint, amount, opts);
|
|
732
|
+
}
|
|
733
|
+
async function delegateSplWithPrivateTransfer(owner, mint, amount, opts) {
|
|
500
734
|
const payer = opts?.payer ?? owner;
|
|
501
|
-
const validator = opts?.validator
|
|
735
|
+
const validator = opts?.validator;
|
|
502
736
|
const initIfMissing = opts?.initIfMissing ?? true;
|
|
503
737
|
const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
|
|
504
|
-
const
|
|
505
|
-
const
|
|
738
|
+
const initAtasIfMissing = opts?.initAtasIfMissing ?? false;
|
|
739
|
+
const initTransferQueueIfMissing = opts?.initTransferQueueIfMissing ?? false;
|
|
740
|
+
const shuttleId = opts?.shuttleId ?? randomShuttleId();
|
|
741
|
+
const minDelayMs = opts?.minDelayMs ?? 0n;
|
|
742
|
+
const maxDelayMs = opts?.maxDelayMs ?? minDelayMs;
|
|
743
|
+
const split = opts?.split ?? 1;
|
|
506
744
|
const instructions = [];
|
|
507
745
|
const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
|
|
508
746
|
const [vault, vaultBump] = await deriveVault(mint);
|
|
747
|
+
const [vaultEphemeralAta, vaultEataBump] = await deriveEphemeralAta(vault, mint);
|
|
509
748
|
const vaultAta = await deriveVaultAta(mint, vault);
|
|
749
|
+
const [queue] = await (0, transferQueue_1.deriveTransferQueue)(mint);
|
|
510
750
|
const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
|
|
751
|
+
const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(owner, mint, shuttleId);
|
|
752
|
+
const [shuttleAta] = await deriveShuttleAta(shuttleEphemeralAta, mint);
|
|
753
|
+
const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
|
|
754
|
+
if (initVaultIfMissing) {
|
|
755
|
+
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultEphemeralAta, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint), await delegateIx(payer, vaultEphemeralAta, vaultEataBump, validator));
|
|
756
|
+
}
|
|
757
|
+
if (initTransferQueueIfMissing) {
|
|
758
|
+
instructions.push((0, transferQueue_1.initTransferQueueIx)(payer, queue, mint));
|
|
759
|
+
}
|
|
760
|
+
if (initAtasIfMissing) {
|
|
761
|
+
instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint));
|
|
762
|
+
}
|
|
511
763
|
if (initIfMissing) {
|
|
512
764
|
instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
|
|
513
765
|
}
|
|
766
|
+
instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator), await depositAndDelegateShuttleEphemeralAtaWithMergeAndPrivateTransferIx(payer, shuttleEphemeralAta, shuttleAta, owner, ownerAta, ownerAta, shuttleWalletAta, mint, shuttleId, shuttleBump, amount, minDelayMs, maxDelayMs, split, validator));
|
|
767
|
+
return instructions;
|
|
768
|
+
}
|
|
769
|
+
async function transferSpl(from, to, mint, amount, opts) {
|
|
770
|
+
const payer = opts.payer ?? from;
|
|
771
|
+
const validator = opts.validator;
|
|
772
|
+
const initIfMissing = opts.initIfMissing ?? false;
|
|
773
|
+
const initAtasIfMissing = opts.initAtasIfMissing ?? false;
|
|
774
|
+
const initVaultIfMissing = opts.initVaultIfMissing ?? false;
|
|
775
|
+
const shuttleId = opts.shuttleId ?? randomShuttleId();
|
|
776
|
+
const minDelayMs = opts.privateTransfer?.minDelayMs ?? 0n;
|
|
777
|
+
const maxDelayMs = opts.privateTransfer?.maxDelayMs ?? minDelayMs;
|
|
778
|
+
const split = opts.privateTransfer?.split ?? 1;
|
|
779
|
+
const fromAta = await getAssociatedTokenAddressSync(mint, from);
|
|
780
|
+
const toAta = await getAssociatedTokenAddressSync(mint, to);
|
|
781
|
+
if (opts.fromBalance === "ephemeral") {
|
|
782
|
+
switch (opts.visibility) {
|
|
783
|
+
case "private":
|
|
784
|
+
if (opts.toBalance === "base") {
|
|
785
|
+
const [queue] = await (0, transferQueue_1.deriveTransferQueue)(mint);
|
|
786
|
+
const [vault] = await deriveVault(mint);
|
|
787
|
+
const vaultAta = await deriveVaultAta(mint, vault);
|
|
788
|
+
return [
|
|
789
|
+
(0, transferQueue_1.depositAndQueueTransferIx)(queue, vault, mint, fromAta, vaultAta, toAta, from, amount, minDelayMs, maxDelayMs, split),
|
|
790
|
+
];
|
|
791
|
+
}
|
|
792
|
+
if (opts.toBalance === "ephemeral") {
|
|
793
|
+
return [createTransferInstruction(fromAta, toAta, from, amount)];
|
|
794
|
+
}
|
|
795
|
+
break;
|
|
796
|
+
case "public":
|
|
797
|
+
if (opts.toBalance === "ephemeral") {
|
|
798
|
+
return [createTransferInstruction(fromAta, toAta, from, amount)];
|
|
799
|
+
}
|
|
800
|
+
break;
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
const instructions = [];
|
|
514
804
|
if (initVaultIfMissing) {
|
|
515
|
-
|
|
805
|
+
const [vault, vaultBump] = await deriveVault(mint);
|
|
806
|
+
const [vaultEphemeralAta, vaultEataBump] = await deriveEphemeralAta(vault, mint);
|
|
807
|
+
const vaultAta = await deriveVaultAta(mint, vault);
|
|
808
|
+
instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultEphemeralAta, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint), await delegateIx(payer, vaultEphemeralAta, vaultEataBump, validator));
|
|
516
809
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
810
|
+
if (opts.fromBalance === "base" && initAtasIfMissing) {
|
|
811
|
+
instructions.push(initVaultAtaIx(payer, fromAta, from, mint));
|
|
812
|
+
}
|
|
813
|
+
switch (opts.visibility) {
|
|
814
|
+
case "private":
|
|
815
|
+
if (opts.fromBalance === "base" && opts.toBalance === "base") {
|
|
816
|
+
if (initIfMissing) {
|
|
817
|
+
instructions.push(initVaultAtaIx(payer, toAta, to, mint));
|
|
818
|
+
}
|
|
819
|
+
const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(from, mint, shuttleId);
|
|
820
|
+
const [shuttleAta] = await deriveShuttleAta(shuttleEphemeralAta, mint);
|
|
821
|
+
const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
|
|
822
|
+
return [
|
|
823
|
+
...instructions,
|
|
824
|
+
await depositAndDelegateShuttleEphemeralAtaWithMergeAndPrivateTransferIx(payer, shuttleEphemeralAta, shuttleAta, from, fromAta, toAta, shuttleWalletAta, mint, shuttleId, shuttleBump, amount, minDelayMs, maxDelayMs, split, validator),
|
|
825
|
+
];
|
|
826
|
+
}
|
|
827
|
+
if (opts.fromBalance === "base" && opts.toBalance === "ephemeral") {
|
|
828
|
+
if (initIfMissing) {
|
|
829
|
+
const [toEphemeralAta, toEataBump] = await deriveEphemeralAta(to, mint);
|
|
830
|
+
instructions.push(initVaultAtaIx(payer, toAta, to, mint), initEphemeralAtaIx(toEphemeralAta, to, mint, payer, toEataBump), await delegateIx(payer, toEphemeralAta, toEataBump, validator));
|
|
831
|
+
}
|
|
832
|
+
const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(from, mint, shuttleId);
|
|
833
|
+
const [shuttleAta] = await deriveShuttleAta(shuttleEphemeralAta, mint);
|
|
834
|
+
const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
|
|
835
|
+
return [
|
|
836
|
+
...instructions,
|
|
837
|
+
await setupAndDelegateShuttleEphemeralAtaWithMergeIx(payer, shuttleEphemeralAta, shuttleAta, from, fromAta, toAta, shuttleWalletAta, mint, shuttleId, shuttleBump, amount, validator),
|
|
838
|
+
];
|
|
839
|
+
}
|
|
840
|
+
break;
|
|
841
|
+
case "public":
|
|
842
|
+
if (opts.fromBalance === "base" && opts.toBalance === "base") {
|
|
843
|
+
return [
|
|
844
|
+
...instructions,
|
|
845
|
+
createTransferInstruction(fromAta, toAta, from, amount),
|
|
846
|
+
];
|
|
847
|
+
}
|
|
848
|
+
break;
|
|
849
|
+
}
|
|
850
|
+
throw new Error(`transferSpl route not implemented: visibility=${opts.visibility}, fromBalance=${opts.fromBalance}, toBalance=${opts.toBalance}`);
|
|
851
|
+
}
|
|
852
|
+
async function buildIdempotentWithdrawSplInstructions(owner, mint, amount, opts) {
|
|
853
|
+
const payer = opts?.payer ?? owner;
|
|
854
|
+
const validator = opts?.validator;
|
|
855
|
+
const initIfMissing = opts?.initIfMissing ?? true;
|
|
856
|
+
const initAtasIfMissing = opts?.initAtasIfMissing ?? false;
|
|
857
|
+
const shuttleId = opts?.shuttleId ?? randomShuttleId();
|
|
858
|
+
const instructions = [];
|
|
859
|
+
const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
|
|
860
|
+
const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
|
|
861
|
+
const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(owner, mint, shuttleId);
|
|
862
|
+
const [shuttleAta] = await deriveShuttleAta(shuttleEphemeralAta, mint);
|
|
863
|
+
const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
|
|
864
|
+
if (initAtasIfMissing) {
|
|
865
|
+
instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint));
|
|
866
|
+
}
|
|
867
|
+
if (initIfMissing) {
|
|
868
|
+
instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
|
|
522
869
|
}
|
|
870
|
+
instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator), await withdrawThroughDelegatedShuttleWithMergeIx(payer, shuttleEphemeralAta, shuttleAta, owner, ownerAta, shuttleWalletAta, mint, shuttleId, shuttleBump, amount, validator));
|
|
523
871
|
return instructions;
|
|
524
872
|
}
|
|
525
|
-
function
|
|
526
|
-
if (
|
|
527
|
-
|
|
873
|
+
async function withdrawSpl(owner, mint, amount, opts) {
|
|
874
|
+
if (opts?.idempotent === false) {
|
|
875
|
+
const instructions = [];
|
|
876
|
+
if (opts?.initAtasIfMissing === true) {
|
|
877
|
+
const payer = opts.payer ?? owner;
|
|
878
|
+
const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
|
|
879
|
+
instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint));
|
|
880
|
+
}
|
|
881
|
+
instructions.push(await withdrawSplIx(owner, mint, amount));
|
|
882
|
+
return instructions;
|
|
528
883
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
884
|
+
return buildIdempotentWithdrawSplInstructions(owner, mint, amount, opts);
|
|
885
|
+
}
|
|
886
|
+
function encodeAmountInstructionData(discriminator, amount, ...suffix) {
|
|
887
|
+
const amountBytes = U64_ENCODER.encode(amount);
|
|
888
|
+
const data = new Uint8Array(1 + amountBytes.length + suffix.length);
|
|
889
|
+
data[0] = discriminator;
|
|
890
|
+
data.set(amountBytes, 1);
|
|
891
|
+
if (suffix.length > 0) {
|
|
892
|
+
data.set(suffix, 1 + amountBytes.length);
|
|
534
893
|
}
|
|
535
|
-
return
|
|
894
|
+
return data;
|
|
536
895
|
}
|
|
537
896
|
//# sourceMappingURL=ephemeralAta.js.map
|