@magicblock-labs/ephemeral-rollups-kit 0.8.4 → 0.8.8

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.
Files changed (52) hide show
  1. package/README.md +7 -6
  2. package/lib/__test__/access-control.test.js +37 -0
  3. package/lib/__test__/access-control.test.js.map +1 -1
  4. package/lib/__test__/permission-program.test.js +16 -16
  5. package/lib/__test__/permission-program.test.js.map +1 -1
  6. package/lib/access-control/types/index.d.ts +1 -0
  7. package/lib/access-control/types/index.d.ts.map +1 -1
  8. package/lib/access-control/types/index.js +1 -0
  9. package/lib/access-control/types/index.js.map +1 -1
  10. package/lib/access-control/types/member.d.ts +2 -3
  11. package/lib/access-control/types/member.d.ts.map +1 -1
  12. package/lib/access-control/types/member.js.map +1 -1
  13. package/lib/access-control/types/membersArgs.d.ts +5 -8
  14. package/lib/access-control/types/membersArgs.d.ts.map +1 -1
  15. package/lib/access-control/types/membersArgs.js.map +1 -1
  16. package/lib/access-control/types/permission.d.ts +12 -0
  17. package/lib/access-control/types/permission.d.ts.map +1 -0
  18. package/lib/access-control/types/permission.js +27 -0
  19. package/lib/access-control/types/permission.js.map +1 -0
  20. package/lib/access-control/verify.d.ts +1 -0
  21. package/lib/access-control/verify.d.ts.map +1 -1
  22. package/lib/access-control/verify.js +94 -7
  23. package/lib/access-control/verify.js.map +1 -1
  24. package/lib/constants.d.ts +1 -0
  25. package/lib/constants.d.ts.map +1 -1
  26. package/lib/constants.js +2 -1
  27. package/lib/constants.js.map +1 -1
  28. package/lib/instructions/delegation-program/delegate.d.ts.map +1 -1
  29. package/lib/instructions/delegation-program/delegate.js +5 -2
  30. package/lib/instructions/delegation-program/delegate.js.map +1 -1
  31. package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.d.ts +62 -0
  32. package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.d.ts.map +1 -0
  33. package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.js +537 -0
  34. package/lib/instructions/ephemeral-spl-token-program/ephemeralAta.js.map +1 -0
  35. package/lib/instructions/ephemeral-spl-token-program/index.d.ts +2 -0
  36. package/lib/instructions/ephemeral-spl-token-program/index.d.ts.map +1 -0
  37. package/lib/instructions/ephemeral-spl-token-program/index.js +18 -0
  38. package/lib/instructions/ephemeral-spl-token-program/index.js.map +1 -0
  39. package/lib/instructions/permission-program/closePermission.js +3 -3
  40. package/lib/instructions/permission-program/closePermission.js.map +1 -1
  41. package/lib/instructions/permission-program/createPermission.d.ts +3 -6
  42. package/lib/instructions/permission-program/createPermission.d.ts.map +1 -1
  43. package/lib/instructions/permission-program/createPermission.js +8 -24
  44. package/lib/instructions/permission-program/createPermission.js.map +1 -1
  45. package/lib/instructions/permission-program/index.d.ts +2 -2
  46. package/lib/instructions/permission-program/index.d.ts.map +1 -1
  47. package/lib/instructions/permission-program/index.js.map +1 -1
  48. package/lib/instructions/permission-program/updatePermission.d.ts +3 -6
  49. package/lib/instructions/permission-program/updatePermission.d.ts.map +1 -1
  50. package/lib/instructions/permission-program/updatePermission.js +10 -29
  51. package/lib/instructions/permission-program/updatePermission.js.map +1 -1
  52. package/package.json +4 -3
@@ -6,6 +6,7 @@ const kit_1 = require("@solana/kit");
6
6
  const system_1 = require("@solana-program/system");
7
7
  const constants_1 = require("../../constants");
8
8
  const pda_1 = require("../../pda");
9
+ const DEFAULT_VALIDATOR = (0, kit_1.address)("MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57");
9
10
  async function createDelegateInstruction(accounts, args) {
10
11
  const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(accounts.delegatedAccount, accounts.ownerProgram);
11
12
  const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(accounts.delegatedAccount);
@@ -33,7 +34,9 @@ function serializeDelegateInstructionData(args) {
33
34
  const delegateInstructionDiscriminator = [0, 0, 0, 0, 0, 0, 0, 0];
34
35
  const commitFrequencyMs = args?.commitFrequencyMs ?? 0xffffffff;
35
36
  const seeds = args?.seeds ?? [];
36
- const validator = args?.validator;
37
+ const validator = args?.validator !== null && args?.validator !== undefined
38
+ ? args.validator
39
+ : DEFAULT_VALIDATOR;
37
40
  let offset = 0;
38
41
  const buffer = new ArrayBuffer(1024);
39
42
  const view = new DataView(buffer);
@@ -51,7 +54,7 @@ function serializeDelegateInstructionData(args) {
51
54
  seedBytes.set(seed);
52
55
  offset += seed.length;
53
56
  }
54
- if (validator) {
57
+ if (validator !== null) {
55
58
  view.setUint8(offset++, 1);
56
59
  const validatorBytes = new Uint8Array(buffer, offset, 32);
57
60
  const addressEncoder = (0, kit_1.getAddressEncoder)();
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/instructions/delegation-program/delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/instructions/delegation-program/delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { Address, Instruction, Encoder, Decoder, Codec, AccountInfoWithBase64EncodedData, AccountInfoBase } from "@solana/kit";
2
+ export interface EphemeralAta {
3
+ owner: Address;
4
+ mint: Address;
5
+ amount: bigint;
6
+ }
7
+ export declare function getEphemeralAtaEncoder(): Encoder<EphemeralAta>;
8
+ export declare function getEphemeralAtaDecoder(): Decoder<EphemeralAta>;
9
+ export declare function getEphemeralAtaCodec(): Codec<EphemeralAta>;
10
+ export declare function decodeEphemeralAta(account: AccountInfoBase & AccountInfoWithBase64EncodedData): EphemeralAta;
11
+ export interface GlobalVault {
12
+ mint: Address;
13
+ }
14
+ export declare function getGlobalVaultEncoder(): Encoder<GlobalVault>;
15
+ export declare function getGlobalVaultDecoder(): Decoder<GlobalVault>;
16
+ export declare function getGlobalVaultCodec(): Codec<GlobalVault>;
17
+ export declare function decodeGlobalVault(account: AccountInfoBase & AccountInfoWithBase64EncodedData): GlobalVault;
18
+ export declare function deriveEphemeralAta(owner: Address, mint: Address): Promise<[Address, number]>;
19
+ export declare function deriveVault(mint: Address): Promise<[Address, number]>;
20
+ export declare function deriveVaultAta(mint: Address, vault: Address): Promise<Address>;
21
+ export declare function deriveShuttleEphemeralAta(owner: Address, mint: Address, shuttleId: number): Promise<[Address, number]>;
22
+ export declare function deriveShuttleAta(shuttleEphemeralAta: Address, mint: Address): Promise<[Address, number]>;
23
+ export declare function deriveShuttleWalletAta(mint: Address, shuttleEphemeralAta: Address): Promise<Address>;
24
+ export declare function initEphemeralAtaIx(ephemeralAta: Address, owner: Address, mint: Address, payer: Address, bump: number): Instruction;
25
+ export declare function initVaultAtaIx(payer: Address, vaultAta: Address, vault: Address, mint: Address): Instruction;
26
+ export declare function initVaultIx(vault: Address, mint: Address, payer: Address, bump: number, vaultAta: Address): Instruction;
27
+ export declare function transferToVaultIx(ephemeralAta: Address, vault: Address, mint: Address, sourceAta: Address, vaultAta: Address, owner: Address, amount: bigint): Instruction;
28
+ export declare function delegateIx(payer: Address, ephemeralAta: Address, bump: number, validator?: Address): Promise<Instruction>;
29
+ export declare function initShuttleEphemeralAtaIx(payer: Address, shuttleEphemeralAta: Address, shuttleAta: Address, shuttleWalletAta: Address, owner: Address, mint: Address, shuttleId: number, bump: number): Instruction;
30
+ export declare function delegateShuttleEphemeralAtaIx(payer: Address, shuttleEphemeralAta: Address, shuttleAta: Address, bump: number, validator?: Address): Promise<Instruction>;
31
+ export declare function mergeShuttleIntoAtaIx(owner: Address, ownerAta: Address, shuttleEphemeralAta: Address, shuttleWalletAta: Address, mint: Address): Instruction;
32
+ export declare function undelegateAndCloseShuttleEphemeralAtaIx(payer: Address, shuttleEphemeralAta: Address, shuttleAta: Address, shuttleWalletAta: Address): Instruction;
33
+ export declare function withdrawSplIx(owner: Address, mint: Address, amount: bigint): Promise<Instruction>;
34
+ export declare function undelegateIx(owner: Address, mint: Address): Promise<Instruction>;
35
+ export declare function createEataPermissionIx(ephemeralAta: Address, payer: Address, bump: number, flags?: number): Promise<Instruction>;
36
+ export declare function resetEataPermissionIx(ephemeralAta: Address, payer: Address, bump: number, flags?: number): Promise<Instruction>;
37
+ export declare function delegateEataPermissionIx(payer: Address, ephemeralAta: Address, bump: number, validator: Address): Promise<Instruction>;
38
+ export declare function undelegateEataPermissionIx(owner: Address, ephemeralAta: Address): Promise<Instruction>;
39
+ export declare function delegateSpl(owner: Address, mint: Address, amount: bigint, opts?: {
40
+ payer?: Address;
41
+ validator?: Address;
42
+ initIfMissing?: boolean;
43
+ initVaultIfMissing?: boolean;
44
+ }): Promise<Instruction[]>;
45
+ export declare function delegateSplIdempotent(owner: Address, mint: Address, amount: bigint, opts?: {
46
+ payer?: Address;
47
+ validator?: Address;
48
+ initIfMissing?: boolean;
49
+ initVaultIfMissing?: boolean;
50
+ initAtasIfMissing?: boolean;
51
+ shuttleId?: number;
52
+ escrowIndex?: number;
53
+ }): Promise<Instruction[]>;
54
+ export declare function delegatePrivateSpl(owner: Address, mint: Address, amount: bigint, opts?: {
55
+ payer?: Address;
56
+ validator?: Address;
57
+ initIfMissing?: boolean;
58
+ initVaultIfMissing?: boolean;
59
+ permissionFlags?: number;
60
+ delegatePermission?: boolean;
61
+ }): Promise<Instruction[]>;
62
+ //# sourceMappingURL=ephemeralAta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ephemeralAta.d.ts","sourceRoot":"","sources":["../../../src/instructions/ephemeral-spl-token-program/ephemeralAta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,537 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEphemeralAtaEncoder = getEphemeralAtaEncoder;
4
+ exports.getEphemeralAtaDecoder = getEphemeralAtaDecoder;
5
+ exports.getEphemeralAtaCodec = getEphemeralAtaCodec;
6
+ exports.decodeEphemeralAta = decodeEphemeralAta;
7
+ exports.getGlobalVaultEncoder = getGlobalVaultEncoder;
8
+ exports.getGlobalVaultDecoder = getGlobalVaultDecoder;
9
+ exports.getGlobalVaultCodec = getGlobalVaultCodec;
10
+ exports.decodeGlobalVault = decodeGlobalVault;
11
+ exports.deriveEphemeralAta = deriveEphemeralAta;
12
+ exports.deriveVault = deriveVault;
13
+ exports.deriveVaultAta = deriveVaultAta;
14
+ exports.deriveShuttleEphemeralAta = deriveShuttleEphemeralAta;
15
+ exports.deriveShuttleAta = deriveShuttleAta;
16
+ exports.deriveShuttleWalletAta = deriveShuttleWalletAta;
17
+ exports.initEphemeralAtaIx = initEphemeralAtaIx;
18
+ exports.initVaultAtaIx = initVaultAtaIx;
19
+ exports.initVaultIx = initVaultIx;
20
+ exports.transferToVaultIx = transferToVaultIx;
21
+ exports.delegateIx = delegateIx;
22
+ exports.initShuttleEphemeralAtaIx = initShuttleEphemeralAtaIx;
23
+ exports.delegateShuttleEphemeralAtaIx = delegateShuttleEphemeralAtaIx;
24
+ exports.mergeShuttleIntoAtaIx = mergeShuttleIntoAtaIx;
25
+ exports.undelegateAndCloseShuttleEphemeralAtaIx = undelegateAndCloseShuttleEphemeralAtaIx;
26
+ exports.withdrawSplIx = withdrawSplIx;
27
+ exports.undelegateIx = undelegateIx;
28
+ exports.createEataPermissionIx = createEataPermissionIx;
29
+ exports.resetEataPermissionIx = resetEataPermissionIx;
30
+ exports.delegateEataPermissionIx = delegateEataPermissionIx;
31
+ exports.undelegateEataPermissionIx = undelegateEataPermissionIx;
32
+ exports.delegateSpl = delegateSpl;
33
+ exports.delegateSplIdempotent = delegateSplIdempotent;
34
+ exports.delegatePrivateSpl = delegatePrivateSpl;
35
+ const kit_1 = require("@solana/kit");
36
+ const system_1 = require("@solana-program/system");
37
+ const constants_1 = require("../../constants");
38
+ const pda_1 = require("../../pda");
39
+ const DEFAULT_PRIVATE_VALIDATOR = (0, kit_1.address)("FnE6VJT5QNZdedZPnCoLsARgBwoE6DeJNjBs2H1gySXA");
40
+ const TOKEN_PROGRAM_ADDRESS = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
41
+ const ASSOCIATED_TOKEN_PROGRAM_ADDRESS = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
42
+ async function getAssociatedTokenAddressSync(mint, owner, allowOwnerOffCurve = false) {
43
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
44
+ const [ata] = await (0, kit_1.getProgramDerivedAddress)({
45
+ programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
46
+ seeds: [
47
+ addressEncoder.encode(owner),
48
+ addressEncoder.encode(TOKEN_PROGRAM_ADDRESS),
49
+ addressEncoder.encode(mint),
50
+ ],
51
+ });
52
+ return ata;
53
+ }
54
+ function getEphemeralAtaEncoder() {
55
+ return (0, kit_1.getStructEncoder)([
56
+ ["owner", (0, kit_1.getAddressEncoder)()],
57
+ ["mint", (0, kit_1.getAddressEncoder)()],
58
+ ["amount", (0, kit_1.getU64Encoder)()],
59
+ ]);
60
+ }
61
+ function getEphemeralAtaDecoder() {
62
+ return (0, kit_1.getStructDecoder)([
63
+ ["owner", (0, kit_1.getAddressDecoder)()],
64
+ ["mint", (0, kit_1.getAddressDecoder)()],
65
+ ["amount", (0, kit_1.getU64Decoder)()],
66
+ ]);
67
+ }
68
+ function getEphemeralAtaCodec() {
69
+ return (0, kit_1.combineCodec)(getEphemeralAtaEncoder(), getEphemeralAtaDecoder());
70
+ }
71
+ function decodeEphemeralAta(account) {
72
+ const codec = getEphemeralAtaCodec();
73
+ return codec.decode(Buffer.from(account.data[0], "base64"));
74
+ }
75
+ function getGlobalVaultEncoder() {
76
+ return (0, kit_1.getStructEncoder)([["mint", (0, kit_1.getAddressEncoder)()]]);
77
+ }
78
+ function getGlobalVaultDecoder() {
79
+ return (0, kit_1.getStructDecoder)([["mint", (0, kit_1.getAddressDecoder)()]]);
80
+ }
81
+ function getGlobalVaultCodec() {
82
+ return (0, kit_1.combineCodec)(getGlobalVaultEncoder(), getGlobalVaultDecoder());
83
+ }
84
+ function decodeGlobalVault(account) {
85
+ const codec = getGlobalVaultCodec();
86
+ return codec.decode(Buffer.from(account.data[0], "base64"));
87
+ }
88
+ async function deriveEphemeralAta(owner, mint) {
89
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
90
+ const [ata, bump] = await (0, kit_1.getProgramDerivedAddress)({
91
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
92
+ seeds: [addressEncoder.encode(owner), addressEncoder.encode(mint)],
93
+ });
94
+ return [ata, bump];
95
+ }
96
+ async function deriveVault(mint) {
97
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
98
+ const [vault, bump] = await (0, kit_1.getProgramDerivedAddress)({
99
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
100
+ seeds: [addressEncoder.encode(mint)],
101
+ });
102
+ return [vault, bump];
103
+ }
104
+ async function deriveVaultAta(mint, vault) {
105
+ return getAssociatedTokenAddressSync(mint, vault, true);
106
+ }
107
+ async function deriveShuttleEphemeralAta(owner, mint, shuttleId) {
108
+ if (!Number.isInteger(shuttleId) ||
109
+ shuttleId < 0 ||
110
+ shuttleId > 4294967295) {
111
+ throw new Error("shuttleId must fit in u32");
112
+ }
113
+ const shuttleIdSeed = new Uint8Array(4);
114
+ new DataView(shuttleIdSeed.buffer).setUint32(0, shuttleId, true);
115
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
116
+ const [shuttle, bump] = await (0, kit_1.getProgramDerivedAddress)({
117
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
118
+ seeds: [
119
+ addressEncoder.encode(owner),
120
+ addressEncoder.encode(mint),
121
+ shuttleIdSeed,
122
+ ],
123
+ });
124
+ return [shuttle, bump];
125
+ }
126
+ async function deriveShuttleAta(shuttleEphemeralAta, mint) {
127
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
128
+ const [shuttleAta, bump] = await (0, kit_1.getProgramDerivedAddress)({
129
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
130
+ seeds: [
131
+ addressEncoder.encode(shuttleEphemeralAta),
132
+ addressEncoder.encode(mint),
133
+ ],
134
+ });
135
+ return [shuttleAta, bump];
136
+ }
137
+ async function deriveShuttleWalletAta(mint, shuttleEphemeralAta) {
138
+ return getAssociatedTokenAddressSync(mint, shuttleEphemeralAta, true);
139
+ }
140
+ function initEphemeralAtaIx(ephemeralAta, owner, mint, payer, bump) {
141
+ return {
142
+ accounts: [
143
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
144
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
145
+ { address: owner, role: kit_1.AccountRole.READONLY },
146
+ { address: mint, role: kit_1.AccountRole.READONLY },
147
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
148
+ ],
149
+ data: new Uint8Array([0, bump]),
150
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
151
+ };
152
+ }
153
+ function initVaultAtaIx(payer, vaultAta, vault, mint) {
154
+ return {
155
+ accounts: [
156
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
157
+ { address: vaultAta, role: kit_1.AccountRole.WRITABLE },
158
+ { address: vault, role: kit_1.AccountRole.READONLY },
159
+ { address: mint, role: kit_1.AccountRole.READONLY },
160
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
161
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
162
+ ],
163
+ data: new Uint8Array([1]),
164
+ programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
165
+ };
166
+ }
167
+ function initVaultIx(vault, mint, payer, bump, vaultAta) {
168
+ return {
169
+ accounts: [
170
+ { address: vault, role: kit_1.AccountRole.WRITABLE },
171
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
172
+ { address: mint, role: kit_1.AccountRole.READONLY },
173
+ { address: vaultAta, role: kit_1.AccountRole.WRITABLE },
174
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
175
+ {
176
+ address: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
177
+ role: kit_1.AccountRole.READONLY,
178
+ },
179
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
180
+ ],
181
+ data: new Uint8Array([1, bump]),
182
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
183
+ };
184
+ }
185
+ function transferToVaultIx(ephemeralAta, vault, mint, sourceAta, vaultAta, owner, amount) {
186
+ return {
187
+ accounts: [
188
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
189
+ { address: vault, role: kit_1.AccountRole.READONLY },
190
+ { address: mint, role: kit_1.AccountRole.READONLY },
191
+ { address: sourceAta, role: kit_1.AccountRole.WRITABLE },
192
+ { address: vaultAta, role: kit_1.AccountRole.WRITABLE },
193
+ { address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
194
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
195
+ ],
196
+ data: new Uint8Array([2, ...u64le(amount)]),
197
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
198
+ };
199
+ }
200
+ async function delegateIx(payer, ephemeralAta, bump, validator) {
201
+ const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(ephemeralAta, constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID);
202
+ const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(ephemeralAta);
203
+ const delegationMetadata = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(ephemeralAta);
204
+ const encoder = (0, kit_1.getAddressEncoder)();
205
+ let data;
206
+ if (validator) {
207
+ data = new Uint8Array(34);
208
+ data[0] = 4;
209
+ data[1] = bump;
210
+ const validatorBytes = encoder.encode(validator);
211
+ data.set(validatorBytes, 2);
212
+ }
213
+ else {
214
+ data = new Uint8Array(2);
215
+ data[0] = 4;
216
+ data[1] = bump;
217
+ }
218
+ return {
219
+ accounts: [
220
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
221
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
222
+ { address: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
223
+ { address: delegateBuffer, role: kit_1.AccountRole.WRITABLE },
224
+ { address: delegationRecord, role: kit_1.AccountRole.WRITABLE },
225
+ { address: delegationMetadata, role: kit_1.AccountRole.WRITABLE },
226
+ { address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
227
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
228
+ ],
229
+ data,
230
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
231
+ };
232
+ }
233
+ function initShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta, owner, mint, shuttleId, bump) {
234
+ if (!Number.isInteger(shuttleId) ||
235
+ shuttleId < 0 ||
236
+ shuttleId > 4294967295) {
237
+ throw new Error("shuttleId must fit in u32");
238
+ }
239
+ const data = new Uint8Array(6);
240
+ data[0] = 11;
241
+ new DataView(data.buffer).setUint32(1, shuttleId, true);
242
+ data[5] = bump;
243
+ return {
244
+ accounts: [
245
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
246
+ { address: shuttleEphemeralAta, role: kit_1.AccountRole.WRITABLE },
247
+ { address: shuttleAta, role: kit_1.AccountRole.WRITABLE },
248
+ { address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
249
+ { address: owner, role: kit_1.AccountRole.READONLY },
250
+ { address: mint, role: kit_1.AccountRole.READONLY },
251
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
252
+ {
253
+ address: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
254
+ role: kit_1.AccountRole.READONLY,
255
+ },
256
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
257
+ ],
258
+ data,
259
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
260
+ };
261
+ }
262
+ async function delegateShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, bump, validator) {
263
+ const delegateBuffer = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(shuttleAta, constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID);
264
+ const delegationRecord = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(shuttleAta);
265
+ const delegationMetadata = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(shuttleAta);
266
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
267
+ let data;
268
+ if (validator) {
269
+ data = new Uint8Array(34);
270
+ data[0] = 13;
271
+ data[1] = bump;
272
+ data.set(addressEncoder.encode(validator), 2);
273
+ }
274
+ else {
275
+ data = new Uint8Array(2);
276
+ data[0] = 13;
277
+ data[1] = bump;
278
+ }
279
+ return {
280
+ accounts: [
281
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
282
+ { address: shuttleEphemeralAta, role: kit_1.AccountRole.READONLY },
283
+ { address: shuttleAta, role: kit_1.AccountRole.WRITABLE },
284
+ { address: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
285
+ { address: delegateBuffer, role: kit_1.AccountRole.WRITABLE },
286
+ { address: delegationRecord, role: kit_1.AccountRole.WRITABLE },
287
+ { address: delegationMetadata, role: kit_1.AccountRole.WRITABLE },
288
+ { address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
289
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
290
+ ],
291
+ data,
292
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
293
+ };
294
+ }
295
+ function mergeShuttleIntoAtaIx(owner, ownerAta, shuttleEphemeralAta, shuttleWalletAta, mint) {
296
+ return {
297
+ accounts: [
298
+ { address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
299
+ { address: ownerAta, role: kit_1.AccountRole.WRITABLE },
300
+ { address: shuttleEphemeralAta, role: kit_1.AccountRole.READONLY },
301
+ { address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
302
+ { address: mint, role: kit_1.AccountRole.READONLY },
303
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
304
+ ],
305
+ data: new Uint8Array([15]),
306
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
307
+ };
308
+ }
309
+ function undelegateAndCloseShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta) {
310
+ return {
311
+ accounts: [
312
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
313
+ { address: shuttleEphemeralAta, role: kit_1.AccountRole.READONLY },
314
+ { address: shuttleAta, role: kit_1.AccountRole.READONLY },
315
+ { address: shuttleWalletAta, role: kit_1.AccountRole.WRITABLE },
316
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
317
+ { address: constants_1.MAGIC_CONTEXT_ID, role: kit_1.AccountRole.WRITABLE },
318
+ { address: constants_1.MAGIC_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
319
+ ],
320
+ data: new Uint8Array([14]),
321
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
322
+ };
323
+ }
324
+ async function withdrawSplIx(owner, mint, amount) {
325
+ const [ephemeralAta] = await deriveEphemeralAta(owner, mint);
326
+ const [vault, vaultBump] = await deriveVault(mint);
327
+ const vaultAta = await deriveVaultAta(mint, vault);
328
+ const userDestAta = await getAssociatedTokenAddressSync(mint, owner);
329
+ return {
330
+ accounts: [
331
+ { address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
332
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
333
+ { address: vault, role: kit_1.AccountRole.READONLY },
334
+ { address: mint, role: kit_1.AccountRole.READONLY },
335
+ { address: vaultAta, role: kit_1.AccountRole.WRITABLE },
336
+ { address: userDestAta, role: kit_1.AccountRole.WRITABLE },
337
+ { address: TOKEN_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
338
+ ],
339
+ data: new Uint8Array([3, ...u64le(amount), vaultBump]),
340
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
341
+ };
342
+ }
343
+ async function undelegateIx(owner, mint) {
344
+ const userAta = await getAssociatedTokenAddressSync(mint, owner);
345
+ const [ephemeralAta] = await deriveEphemeralAta(owner, mint);
346
+ return {
347
+ accounts: [
348
+ {
349
+ address: owner,
350
+ role: kit_1.AccountRole.READONLY_SIGNER,
351
+ },
352
+ {
353
+ address: userAta,
354
+ role: kit_1.AccountRole.WRITABLE,
355
+ },
356
+ {
357
+ address: ephemeralAta,
358
+ role: kit_1.AccountRole.READONLY,
359
+ },
360
+ {
361
+ address: constants_1.MAGIC_CONTEXT_ID,
362
+ role: kit_1.AccountRole.WRITABLE,
363
+ },
364
+ {
365
+ address: constants_1.MAGIC_PROGRAM_ID,
366
+ role: kit_1.AccountRole.READONLY,
367
+ },
368
+ ],
369
+ data: new Uint8Array([5]),
370
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
371
+ };
372
+ }
373
+ async function createEataPermissionIx(ephemeralAta, payer, bump, flags = 0) {
374
+ const permission = await (0, pda_1.permissionPdaFromAccount)(ephemeralAta);
375
+ return {
376
+ accounts: [
377
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
378
+ { address: permission, role: kit_1.AccountRole.WRITABLE },
379
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
380
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
381
+ { address: constants_1.PERMISSION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
382
+ ],
383
+ data: new Uint8Array([6, bump, flags]),
384
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
385
+ };
386
+ }
387
+ async function resetEataPermissionIx(ephemeralAta, payer, bump, flags = 0) {
388
+ const permission = await (0, pda_1.permissionPdaFromAccount)(ephemeralAta);
389
+ return {
390
+ accounts: [
391
+ { address: ephemeralAta, role: kit_1.AccountRole.READONLY },
392
+ { address: permission, role: kit_1.AccountRole.WRITABLE },
393
+ { address: payer, role: kit_1.AccountRole.READONLY_SIGNER },
394
+ { address: constants_1.PERMISSION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
395
+ ],
396
+ data: new Uint8Array([9, bump, flags]),
397
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
398
+ };
399
+ }
400
+ async function delegateEataPermissionIx(payer, ephemeralAta, bump, validator) {
401
+ const permission = await (0, pda_1.permissionPdaFromAccount)(ephemeralAta);
402
+ return {
403
+ accounts: [
404
+ { address: payer, role: kit_1.AccountRole.WRITABLE_SIGNER },
405
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
406
+ { address: constants_1.PERMISSION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
407
+ { address: permission, role: kit_1.AccountRole.WRITABLE },
408
+ { address: system_1.SYSTEM_PROGRAM_ADDRESS, role: kit_1.AccountRole.READONLY },
409
+ {
410
+ address: await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(permission, constants_1.PERMISSION_PROGRAM_ID),
411
+ role: kit_1.AccountRole.WRITABLE,
412
+ },
413
+ {
414
+ address: await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(permission),
415
+ role: kit_1.AccountRole.WRITABLE,
416
+ },
417
+ {
418
+ address: await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(permission),
419
+ role: kit_1.AccountRole.WRITABLE,
420
+ },
421
+ { address: constants_1.DELEGATION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
422
+ { address: validator, role: kit_1.AccountRole.READONLY },
423
+ ],
424
+ data: new Uint8Array([7, bump]),
425
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
426
+ };
427
+ }
428
+ async function undelegateEataPermissionIx(owner, ephemeralAta) {
429
+ const permission = await (0, pda_1.permissionPdaFromAccount)(ephemeralAta);
430
+ return {
431
+ accounts: [
432
+ { address: owner, role: kit_1.AccountRole.READONLY_SIGNER },
433
+ { address: ephemeralAta, role: kit_1.AccountRole.WRITABLE },
434
+ { address: permission, role: kit_1.AccountRole.WRITABLE },
435
+ { address: constants_1.PERMISSION_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
436
+ { address: constants_1.MAGIC_PROGRAM_ID, role: kit_1.AccountRole.READONLY },
437
+ { address: constants_1.MAGIC_CONTEXT_ID, role: kit_1.AccountRole.WRITABLE },
438
+ ],
439
+ data: new Uint8Array([8]),
440
+ programAddress: constants_1.EPHEMERAL_SPL_TOKEN_PROGRAM_ID,
441
+ };
442
+ }
443
+ async function delegateSpl(owner, mint, amount, opts) {
444
+ const payer = opts?.payer ?? owner;
445
+ const validator = opts?.validator;
446
+ const initIfMissing = opts?.initIfMissing ?? true;
447
+ const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
448
+ const instructions = [];
449
+ const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
450
+ const [vault, vaultBump] = await deriveVault(mint);
451
+ const vaultAta = await deriveVaultAta(mint, vault);
452
+ const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
453
+ if (initIfMissing) {
454
+ instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
455
+ }
456
+ if (initVaultIfMissing) {
457
+ instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint));
458
+ }
459
+ instructions.push(transferToVaultIx(ephemeralAta, vault, mint, ownerAta, vaultAta, owner, amount));
460
+ instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator));
461
+ return instructions;
462
+ }
463
+ async function delegateSplIdempotent(owner, mint, amount, opts) {
464
+ const payer = opts?.payer ?? owner;
465
+ const validator = opts?.validator;
466
+ const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
467
+ const initAtasIfMissing = opts?.initAtasIfMissing ?? false;
468
+ const randomShuttleId = () => {
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
+ };
477
+ const shuttleId = opts?.shuttleId ?? randomShuttleId();
478
+ const instructions = [];
479
+ const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
480
+ const [vault, vaultBump] = await deriveVault(mint);
481
+ const vaultAta = await deriveVaultAta(mint, vault);
482
+ const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
483
+ const [shuttleEphemeralAta, shuttleBump] = await deriveShuttleEphemeralAta(owner, mint, shuttleId);
484
+ const [shuttleAta, shuttleAtaBump] = await deriveShuttleAta(shuttleEphemeralAta, mint);
485
+ const shuttleWalletAta = await deriveShuttleWalletAta(mint, shuttleEphemeralAta);
486
+ if (initVaultIfMissing) {
487
+ instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint));
488
+ }
489
+ if (initAtasIfMissing) {
490
+ instructions.push(initVaultAtaIx(payer, ownerAta, owner, mint), initVaultAtaIx(payer, shuttleWalletAta, shuttleEphemeralAta, mint));
491
+ }
492
+ instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump), await createEataPermissionIx(ephemeralAta, payer, eataBump), await delegateIx(payer, ephemeralAta, eataBump, validator), initShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleWalletAta, owner, mint, shuttleId, shuttleBump));
493
+ if (amount > 0n) {
494
+ instructions.push(transferToVaultIx(shuttleAta, vault, mint, ownerAta, vaultAta, owner, amount));
495
+ }
496
+ instructions.push(await delegateShuttleEphemeralAtaIx(payer, shuttleEphemeralAta, shuttleAta, shuttleAtaBump, validator));
497
+ return instructions;
498
+ }
499
+ async function delegatePrivateSpl(owner, mint, amount, opts) {
500
+ const payer = opts?.payer ?? owner;
501
+ const validator = opts?.validator ?? DEFAULT_PRIVATE_VALIDATOR;
502
+ const initIfMissing = opts?.initIfMissing ?? true;
503
+ const initVaultIfMissing = opts?.initVaultIfMissing ?? false;
504
+ const permissionFlags = opts?.permissionFlags ?? 0;
505
+ const delegatePermission = opts?.delegatePermission ?? false;
506
+ const instructions = [];
507
+ const [ephemeralAta, eataBump] = await deriveEphemeralAta(owner, mint);
508
+ const [vault, vaultBump] = await deriveVault(mint);
509
+ const vaultAta = await deriveVaultAta(mint, vault);
510
+ const ownerAta = await getAssociatedTokenAddressSync(mint, owner);
511
+ if (initIfMissing) {
512
+ instructions.push(initEphemeralAtaIx(ephemeralAta, owner, mint, payer, eataBump));
513
+ }
514
+ if (initVaultIfMissing) {
515
+ instructions.push(initVaultIx(vault, mint, payer, vaultBump, vaultAta), initVaultAtaIx(payer, vaultAta, vault, mint));
516
+ }
517
+ instructions.push(transferToVaultIx(ephemeralAta, vault, mint, ownerAta, vaultAta, owner, amount));
518
+ instructions.push(await delegateIx(payer, ephemeralAta, eataBump, validator));
519
+ instructions.push(await createEataPermissionIx(ephemeralAta, payer, eataBump, permissionFlags));
520
+ if (delegatePermission) {
521
+ instructions.push(await delegateEataPermissionIx(payer, ephemeralAta, eataBump, validator));
522
+ }
523
+ return instructions;
524
+ }
525
+ function u64le(n) {
526
+ if (n < 0n || n > 0xffffffffffffffffn) {
527
+ throw new Error("amount out of range for u64");
528
+ }
529
+ const bytes = new Array(8).fill(0);
530
+ let x = n;
531
+ for (let i = 0; i < 8; i++) {
532
+ bytes[i] = Number(x & 0xffn);
533
+ x >>= 8n;
534
+ }
535
+ return bytes;
536
+ }
537
+ //# sourceMappingURL=ephemeralAta.js.map