@solana/transactions 2.0.0-experimental.f07dced → 2.0.0-experimental.f27be12

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 (53) hide show
  1. package/dist/index.browser.cjs +229 -113
  2. package/dist/index.browser.cjs.map +1 -1
  3. package/dist/index.browser.js +223 -115
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.development.js +282 -163
  6. package/dist/index.development.js.map +1 -1
  7. package/dist/index.native.js +225 -115
  8. package/dist/index.native.js.map +1 -1
  9. package/dist/index.node.cjs +229 -113
  10. package/dist/index.node.cjs.map +1 -1
  11. package/dist/index.node.js +223 -115
  12. package/dist/index.node.js.map +1 -1
  13. package/dist/index.production.min.js +16 -8
  14. package/dist/types/accounts.d.ts +2 -2
  15. package/dist/types/accounts.d.ts.map +1 -0
  16. package/dist/types/blockhash.d.ts +6 -1
  17. package/dist/types/blockhash.d.ts.map +1 -0
  18. package/dist/types/compile-address-table-lookups.d.ts +1 -1
  19. package/dist/types/compile-address-table-lookups.d.ts.map +1 -0
  20. package/dist/types/compile-header.d.ts.map +1 -0
  21. package/dist/types/compile-instructions.d.ts +1 -1
  22. package/dist/types/compile-instructions.d.ts.map +1 -0
  23. package/dist/types/compile-lifetime-token.d.ts.map +1 -0
  24. package/dist/types/compile-static-accounts.d.ts +1 -1
  25. package/dist/types/compile-static-accounts.d.ts.map +1 -0
  26. package/dist/types/compile-transaction.d.ts.map +1 -0
  27. package/dist/types/create-transaction.d.ts.map +1 -0
  28. package/dist/types/durable-nonce.d.ts +20 -7
  29. package/dist/types/durable-nonce.d.ts.map +1 -0
  30. package/dist/types/fee-payer.d.ts +3 -2
  31. package/dist/types/fee-payer.d.ts.map +1 -0
  32. package/dist/types/index.d.ts +1 -0
  33. package/dist/types/index.d.ts.map +1 -0
  34. package/dist/types/instructions.d.ts.map +1 -0
  35. package/dist/types/message.d.ts.map +1 -0
  36. package/dist/types/serializers/address-table-lookup.d.ts.map +1 -0
  37. package/dist/types/serializers/header.d.ts.map +1 -0
  38. package/dist/types/serializers/index.d.ts +2 -0
  39. package/dist/types/serializers/index.d.ts.map +1 -0
  40. package/dist/types/serializers/instruction.d.ts.map +1 -0
  41. package/dist/types/serializers/message.d.ts.map +1 -0
  42. package/dist/types/serializers/transaction-version.d.ts.map +1 -0
  43. package/dist/types/serializers/transaction.d.ts.map +1 -0
  44. package/dist/types/serializers/unimplemented.d.ts.map +1 -0
  45. package/dist/types/signatures.d.ts +13 -6
  46. package/dist/types/signatures.d.ts.map +1 -0
  47. package/dist/types/types.d.ts +7 -0
  48. package/dist/types/types.d.ts.map +1 -0
  49. package/dist/types/unsigned-transaction.d.ts +4 -0
  50. package/dist/types/unsigned-transaction.d.ts.map +1 -0
  51. package/dist/types/wire-transaction.d.ts +1 -1
  52. package/dist/types/wire-transaction.d.ts.map +1 -0
  53. package/package.json +18 -18
@@ -9,7 +9,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
9
9
  return value;
10
10
  };
11
11
 
12
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.2/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/bytes.mjs
12
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/bytes.mjs
13
13
  var mergeBytes = (bytesArr) => {
14
14
  const totalLength = bytesArr.reduce((total, arr) => total + arr.length, 0);
15
15
  const result = new Uint8Array(totalLength);
@@ -29,7 +29,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
29
29
  };
30
30
  var fixBytes = (bytes2, length) => padBytes(bytes2.slice(0, length), length);
31
31
 
32
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.2/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/errors.mjs
32
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/errors.mjs
33
33
  var DeserializingEmptyBufferError = class extends Error {
34
34
  constructor(serializer) {
35
35
  super(`Serializer [${serializer}] cannot deserialize empty buffers.`);
@@ -50,7 +50,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
50
50
  }
51
51
  };
52
52
 
53
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.2/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/fixSerializer.mjs
53
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/fixSerializer.mjs
54
54
  function fixSerializer(serializer, fixedBytes, description) {
55
55
  return {
56
56
  description: description ?? `fixed(${fixedBytes}, ${serializer.description})`,
@@ -71,7 +71,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
71
71
  };
72
72
  }
73
73
 
74
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.2/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/mapSerializer.mjs
74
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-core@0.8.9/node_modules/@metaplex-foundation/umi-serializers-core/dist/esm/mapSerializer.mjs
75
75
  function mapSerializer(serializer, unmap, map) {
76
76
  return {
77
77
  description: serializer.description,
@@ -85,7 +85,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
85
85
  };
86
86
  }
87
87
 
88
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.2/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/errors.mjs
88
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/errors.mjs
89
89
  var InvalidBaseStringError = class extends Error {
90
90
  constructor(value, base, cause) {
91
91
  const message = `Expected a string of base ${base}, got [${value}].`;
@@ -95,7 +95,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
95
95
  }
96
96
  };
97
97
 
98
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.2/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/baseX.mjs
98
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/baseX.mjs
99
99
  var baseX = (alphabet) => {
100
100
  const base = alphabet.length;
101
101
  const baseBigInt = BigInt(base);
@@ -149,16 +149,16 @@ this.globalThis.solanaWeb3 = (function (exports) {
149
149
  };
150
150
  };
151
151
 
152
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.2/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/base58.mjs
152
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/base58.mjs
153
153
  var base58 = baseX("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");
154
154
 
155
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.2/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/nullCharacters.mjs
155
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/nullCharacters.mjs
156
156
  var removeNullCharacters = (value) => (
157
157
  // eslint-disable-next-line no-control-regex
158
158
  value.replace(/\u0000/g, "")
159
159
  );
160
160
 
161
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.2/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/utf8.mjs
161
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-encodings@0.8.9/node_modules/@metaplex-foundation/umi-serializers-encodings/dist/esm/utf8.mjs
162
162
  var utf8 = {
163
163
  description: "utf8",
164
164
  fixedSize: null,
@@ -172,14 +172,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
172
172
  }
173
173
  };
174
174
 
175
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/common.mjs
175
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/common.mjs
176
176
  var Endian;
177
177
  (function(Endian2) {
178
178
  Endian2["Little"] = "le";
179
179
  Endian2["Big"] = "be";
180
180
  })(Endian || (Endian = {}));
181
181
 
182
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/errors.mjs
182
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/errors.mjs
183
183
  var NumberOutOfRangeError = class extends RangeError {
184
184
  constructor(serializer, min, max, actual) {
185
185
  super(`Serializer [${serializer}] expected number to be between ${min} and ${max}, got ${actual}.`);
@@ -187,7 +187,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
187
187
  }
188
188
  };
189
189
 
190
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/utils.mjs
190
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/utils.mjs
191
191
  function numberFactory(input) {
192
192
  let littleEndian;
193
193
  let defaultDescription = input.name;
@@ -231,7 +231,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
231
231
  }
232
232
  };
233
233
 
234
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u8.mjs
234
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u8.mjs
235
235
  var u8 = (options = {}) => numberFactory({
236
236
  name: "u8",
237
237
  size: 1,
@@ -241,7 +241,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
241
241
  options
242
242
  });
243
243
 
244
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u32.mjs
244
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/u32.mjs
245
245
  var u32 = (options = {}) => numberFactory({
246
246
  name: "u32",
247
247
  size: 4,
@@ -251,7 +251,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
251
251
  options
252
252
  });
253
253
 
254
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.2/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/shortU16.mjs
254
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers-numbers@0.8.9/node_modules/@metaplex-foundation/umi-serializers-numbers/dist/esm/shortU16.mjs
255
255
  var shortU16 = (options = {}) => ({
256
256
  description: options.description ?? "shortU16",
257
257
  fixedSize: null,
@@ -288,7 +288,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
288
288
  }
289
289
  });
290
290
 
291
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/errors.mjs
291
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/errors.mjs
292
292
  var InvalidNumberOfItemsError = class extends Error {
293
293
  constructor(serializer, expected, actual) {
294
294
  super(`Expected [${serializer}] to have ${expected} items, got ${actual}.`);
@@ -308,12 +308,12 @@ this.globalThis.solanaWeb3 = (function (exports) {
308
308
  }
309
309
  };
310
310
 
311
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/sumSerializerSizes.mjs
311
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/sumSerializerSizes.mjs
312
312
  function sumSerializerSizes(sizes) {
313
313
  return sizes.reduce((all, size) => all === null || size === null ? null : all + size, 0);
314
314
  }
315
315
 
316
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/utils.mjs
316
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/utils.mjs
317
317
  function getResolvedSize(size, childrenSizes, bytes2, offset) {
318
318
  if (typeof size === "number") {
319
319
  return [size, offset];
@@ -349,7 +349,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
349
349
  return typeof size === "object" ? size.serialize(realSize) : new Uint8Array();
350
350
  }
351
351
 
352
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/array.mjs
352
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/array.mjs
353
353
  function array(item, options = {}) {
354
354
  const size = options.size ?? u32();
355
355
  if (size === "remainder" && item.fixedSize === null) {
@@ -382,7 +382,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
382
382
  };
383
383
  }
384
384
 
385
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/bytes.mjs
385
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/bytes.mjs
386
386
  function bytes(options = {}) {
387
387
  const size = options.size ?? "variable";
388
388
  const description = options.description ?? `bytes(${getSizeDescription(size)})`;
@@ -429,7 +429,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
429
429
  };
430
430
  }
431
431
 
432
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/string.mjs
432
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/string.mjs
433
433
  function string(options = {}) {
434
434
  const size = options.size ?? u32();
435
435
  const encoding = options.encoding ?? utf8;
@@ -470,7 +470,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
470
470
  };
471
471
  }
472
472
 
473
- // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.5/node_modules/@metaplex-foundation/umi-serializers/dist/esm/struct.mjs
473
+ // ../../node_modules/.pnpm/@metaplex-foundation+umi-serializers@0.8.9/node_modules/@metaplex-foundation/umi-serializers/dist/esm/struct.mjs
474
474
  function struct(fields, options = {}) {
475
475
  const fieldDescriptions = fields.map(([name, serializer]) => `${String(name)}: ${serializer.description}`).join(", ");
476
476
  return {
@@ -493,6 +493,20 @@ this.globalThis.solanaWeb3 = (function (exports) {
493
493
  };
494
494
  }
495
495
 
496
+ // src/unsigned-transaction.ts
497
+ function getUnsignedTransaction(transaction) {
498
+ if ("signatures" in transaction) {
499
+ const {
500
+ signatures: _,
501
+ // eslint-disable-line @typescript-eslint/no-unused-vars
502
+ ...unsignedTransaction
503
+ } = transaction;
504
+ return unsignedTransaction;
505
+ } else {
506
+ return transaction;
507
+ }
508
+ }
509
+
496
510
  // src/blockhash.ts
497
511
  function assertIsBlockhash(putativeBlockhash) {
498
512
  try {
@@ -514,6 +528,17 @@ this.globalThis.solanaWeb3 = (function (exports) {
514
528
  });
515
529
  }
516
530
  }
531
+ function setTransactionLifetimeUsingBlockhash(blockhashLifetimeConstraint, transaction) {
532
+ if ("lifetimeConstraint" in transaction && transaction.lifetimeConstraint.blockhash === blockhashLifetimeConstraint.blockhash && transaction.lifetimeConstraint.lastValidBlockHeight === blockhashLifetimeConstraint.lastValidBlockHeight) {
533
+ return transaction;
534
+ }
535
+ const out = {
536
+ ...getUnsignedTransaction(transaction),
537
+ lifetimeConstraint: blockhashLifetimeConstraint
538
+ };
539
+ Object.freeze(out);
540
+ return out;
541
+ }
517
542
 
518
543
  // src/create-transaction.ts
519
544
  function createTransaction({
@@ -527,82 +552,120 @@ this.globalThis.solanaWeb3 = (function (exports) {
527
552
  return out;
528
553
  }
529
554
 
555
+ // ../instructions/dist/index.browser.js
556
+ var AccountRole = /* @__PURE__ */ ((AccountRole2) => {
557
+ AccountRole2[AccountRole2["WRITABLE_SIGNER"] = /* 3 */
558
+ 3] = "WRITABLE_SIGNER";
559
+ AccountRole2[AccountRole2["READONLY_SIGNER"] = /* 2 */
560
+ 2] = "READONLY_SIGNER";
561
+ AccountRole2[AccountRole2["WRITABLE"] = /* 1 */
562
+ 1] = "WRITABLE";
563
+ AccountRole2[AccountRole2["READONLY"] = /* 0 */
564
+ 0] = "READONLY";
565
+ return AccountRole2;
566
+ })(AccountRole || {});
567
+ var IS_WRITABLE_BITMASK = 1;
568
+ function isSignerRole(role) {
569
+ return role >= 2;
570
+ }
571
+ function isWritableRole(role) {
572
+ return (role & IS_WRITABLE_BITMASK) !== 0;
573
+ }
574
+ function mergeRoles(roleA, roleB) {
575
+ return roleA | roleB;
576
+ }
577
+
578
+ // src/durable-nonce.ts
579
+ var RECENT_BLOCKHASHES_SYSVAR_ADDRESS = "SysvarRecentB1ockHashes11111111111111111111";
580
+ var SYSTEM_PROGRAM_ADDRESS = "11111111111111111111111111111111";
581
+ function assertIsDurableNonceTransaction(transaction) {
582
+ if (!isDurableNonceTransaction(transaction)) {
583
+ throw new Error("Transaction is not a durable nonce transaction");
584
+ }
585
+ }
586
+ function createAdvanceNonceAccountInstruction(nonceAccountAddress, nonceAuthorityAddress) {
587
+ return {
588
+ accounts: [
589
+ { address: nonceAccountAddress, role: AccountRole.WRITABLE },
590
+ {
591
+ address: RECENT_BLOCKHASHES_SYSVAR_ADDRESS,
592
+ role: AccountRole.READONLY
593
+ },
594
+ { address: nonceAuthorityAddress, role: AccountRole.READONLY_SIGNER }
595
+ ],
596
+ data: new Uint8Array([4, 0, 0, 0]),
597
+ programAddress: SYSTEM_PROGRAM_ADDRESS
598
+ };
599
+ }
600
+ function isAdvanceNonceAccountInstruction(instruction) {
601
+ return instruction.programAddress === SYSTEM_PROGRAM_ADDRESS && // Test for `AdvanceNonceAccount` instruction data
602
+ instruction.data != null && isAdvanceNonceAccountInstructionData(instruction.data) && // Test for exactly 3 accounts
603
+ instruction.accounts?.length === 3 && // First account is nonce account address
604
+ instruction.accounts[0].address != null && instruction.accounts[0].role === AccountRole.WRITABLE && // Second account is recent blockhashes sysvar
605
+ instruction.accounts[1].address === RECENT_BLOCKHASHES_SYSVAR_ADDRESS && instruction.accounts[1].role === AccountRole.READONLY && // Third account is nonce authority account
606
+ instruction.accounts[2].address != null && instruction.accounts[2].role === AccountRole.READONLY_SIGNER;
607
+ }
608
+ function isAdvanceNonceAccountInstructionData(data) {
609
+ return data.byteLength === 4 && data[0] === 4 && data[1] === 0 && data[2] === 0 && data[3] === 0;
610
+ }
611
+ function isDurableNonceTransaction(transaction) {
612
+ return "lifetimeConstraint" in transaction && typeof transaction.lifetimeConstraint.nonce === "string" && transaction.instructions[0] != null && isAdvanceNonceAccountInstruction(transaction.instructions[0]);
613
+ }
614
+ function setTransactionLifetimeUsingDurableNonce({
615
+ nonce,
616
+ nonceAccountAddress,
617
+ nonceAuthorityAddress
618
+ }, transaction) {
619
+ const isAlreadyDurableNonceTransaction = isDurableNonceTransaction(transaction);
620
+ if (isAlreadyDurableNonceTransaction && transaction.lifetimeConstraint.nonce === nonce && transaction.instructions[0].accounts[0].address === nonceAccountAddress && transaction.instructions[0].accounts[2].address === nonceAuthorityAddress) {
621
+ return transaction;
622
+ }
623
+ const out = {
624
+ ...getUnsignedTransaction(transaction),
625
+ instructions: [
626
+ createAdvanceNonceAccountInstruction(nonceAccountAddress, nonceAuthorityAddress),
627
+ ...isAlreadyDurableNonceTransaction ? transaction.instructions.slice(1) : transaction.instructions
628
+ ],
629
+ lifetimeConstraint: {
630
+ nonce
631
+ }
632
+ };
633
+ Object.freeze(out);
634
+ return out;
635
+ }
636
+
530
637
  // src/fee-payer.ts
531
638
  function setTransactionFeePayer(feePayer, transaction) {
532
639
  if ("feePayer" in transaction && feePayer === transaction.feePayer) {
533
640
  return transaction;
534
641
  }
535
- let out;
536
- if ("signatures" in transaction) {
537
- const {
538
- signatures: _,
539
- // eslint-disable-line @typescript-eslint/no-unused-vars
540
- ...unsignedTransaction
541
- } = transaction;
542
- out = {
543
- ...unsignedTransaction,
544
- feePayer
545
- };
546
- } else {
547
- out = {
548
- ...transaction,
549
- feePayer
550
- };
551
- }
642
+ const out = {
643
+ ...getUnsignedTransaction(transaction),
644
+ feePayer
645
+ };
552
646
  Object.freeze(out);
553
647
  return out;
554
648
  }
555
649
 
556
650
  // src/instructions.ts
557
- function replaceInstructions(transaction, nextInstructions) {
558
- let out;
559
- if ("signatures" in transaction) {
560
- const {
561
- signatures: _,
562
- // eslint-disable-line @typescript-eslint/no-unused-vars
563
- ...unsignedTransaction
564
- } = transaction;
565
- out = {
566
- ...unsignedTransaction,
567
- instructions: nextInstructions
568
- };
569
- } else {
570
- out = {
571
- ...transaction,
572
- instructions: nextInstructions
573
- };
574
- }
575
- return out;
576
- }
577
651
  function appendTransactionInstruction(instruction, transaction) {
578
- const nextInstructions = [...transaction.instructions, instruction];
579
- const out = replaceInstructions(transaction, nextInstructions);
652
+ const out = {
653
+ ...getUnsignedTransaction(transaction),
654
+ instructions: [...transaction.instructions, instruction]
655
+ };
580
656
  Object.freeze(out);
581
657
  return out;
582
658
  }
583
659
  function prependTransactionInstruction(instruction, transaction) {
584
- const nextInstructions = [instruction, ...transaction.instructions];
585
- const out = replaceInstructions(transaction, nextInstructions);
660
+ const out = {
661
+ ...getUnsignedTransaction(transaction),
662
+ instructions: [instruction, ...transaction.instructions]
663
+ };
586
664
  Object.freeze(out);
587
665
  return out;
588
666
  }
589
- function getBase58EncodedAddressCodec(config) {
590
- return string({
591
- description: config?.description ?? ("A 32-byte account address" ),
592
- encoding: base58,
593
- size: 32
594
- });
595
- }
596
- function getBase58EncodedAddressComparator() {
597
- return new Intl.Collator("en", {
598
- caseFirst: "lower",
599
- ignorePunctuation: false,
600
- localeMatcher: "best fit",
601
- numeric: false,
602
- sensitivity: "variant",
603
- usage: "sort"
604
- }).compare;
605
- }
667
+
668
+ // ../assertions/dist/index.browser.js
606
669
  function assertIsSecureContext() {
607
670
  if (!globalThis.isSecureContext) {
608
671
  throw new Error(
@@ -622,43 +685,32 @@ this.globalThis.solanaWeb3 = (function (exports) {
622
685
  throw new Error("No signing implementation could be found");
623
686
  }
624
687
  }
625
- async function getBase58EncodedAddressFromPublicKey(publicKey) {
688
+ function getAddressCodec(config) {
689
+ return string({
690
+ description: config?.description ?? ("A 32-byte account address" ),
691
+ encoding: base58,
692
+ size: 32
693
+ });
694
+ }
695
+ function getAddressComparator() {
696
+ return new Intl.Collator("en", {
697
+ caseFirst: "lower",
698
+ ignorePunctuation: false,
699
+ localeMatcher: "best fit",
700
+ numeric: false,
701
+ sensitivity: "variant",
702
+ usage: "sort"
703
+ }).compare;
704
+ }
705
+ async function getAddressFromPublicKey(publicKey) {
626
706
  await assertKeyExporterIsAvailable();
627
707
  if (publicKey.type !== "public" || publicKey.algorithm.name !== "Ed25519") {
628
708
  throw new Error("The `CryptoKey` must be an `Ed25519` public key");
629
709
  }
630
710
  const publicKeyBytes = await crypto.subtle.exportKey("raw", publicKey);
631
- const [base58EncodedAddress] = getBase58EncodedAddressCodec().deserialize(new Uint8Array(publicKeyBytes));
711
+ const [base58EncodedAddress] = getAddressCodec().deserialize(new Uint8Array(publicKeyBytes));
632
712
  return base58EncodedAddress;
633
713
  }
634
- async function signBytes(key, data) {
635
- await assertSigningCapabilityIsAvailable();
636
- const signedData = await crypto.subtle.sign("Ed25519", key, data);
637
- return new Uint8Array(signedData);
638
- }
639
-
640
- // ../instructions/dist/index.browser.js
641
- var AccountRole = /* @__PURE__ */ ((AccountRole2) => {
642
- AccountRole2[AccountRole2["WRITABLE_SIGNER"] = /* 3 */
643
- 3] = "WRITABLE_SIGNER";
644
- AccountRole2[AccountRole2["READONLY_SIGNER"] = /* 2 */
645
- 2] = "READONLY_SIGNER";
646
- AccountRole2[AccountRole2["WRITABLE"] = /* 1 */
647
- 1] = "WRITABLE";
648
- AccountRole2[AccountRole2["READONLY"] = /* 0 */
649
- 0] = "READONLY";
650
- return AccountRole2;
651
- })(AccountRole || {});
652
- var IS_WRITABLE_BITMASK = 1;
653
- function isSignerRole(role) {
654
- return role >= 2;
655
- }
656
- function isWritableRole(role) {
657
- return (role & IS_WRITABLE_BITMASK) !== 0;
658
- }
659
- function mergeRoles(roleA, roleB) {
660
- return roleA | roleB;
661
- }
662
714
 
663
715
  // src/accounts.ts
664
716
  function upsert(addressMap, address, update) {
@@ -713,7 +765,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
713
765
  const shouldReplaceEntry = (
714
766
  // Consider using the new LOOKUP_TABLE if its address is different...
715
767
  entry.lookupTableAddress !== accountMeta.lookupTableAddress && // ...and sorts before the existing one.
716
- (addressComparator || (addressComparator = getBase58EncodedAddressComparator()))(
768
+ (addressComparator || (addressComparator = getAddressComparator()))(
717
769
  accountMeta.lookupTableAddress,
718
770
  entry.lookupTableAddress
719
771
  ) < 0
@@ -819,7 +871,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
819
871
  if (leftIsWritable !== isWritableRole(rightEntry.role)) {
820
872
  return leftIsWritable ? -1 : 1;
821
873
  }
822
- addressComparator || (addressComparator = getBase58EncodedAddressComparator());
874
+ addressComparator || (addressComparator = getAddressComparator());
823
875
  if (leftEntry[TYPE] === 1 /* LOOKUP_TABLE */ && rightEntry[TYPE] === 1 /* LOOKUP_TABLE */ && leftEntry.lookupTableAddress !== rightEntry.lookupTableAddress) {
824
876
  return addressComparator(leftEntry.lookupTableAddress, rightEntry.lookupTableAddress);
825
877
  } else {
@@ -850,7 +902,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
850
902
  entry.readableIndices.push(account.addressIndex);
851
903
  }
852
904
  }
853
- return Object.keys(index).sort(getBase58EncodedAddressComparator()).map((lookupTableAddress) => ({
905
+ return Object.keys(index).sort(getAddressComparator()).map((lookupTableAddress) => ({
854
906
  lookupTableAddress,
855
907
  ...index[lookupTableAddress]
856
908
  }));
@@ -930,13 +982,31 @@ this.globalThis.solanaWeb3 = (function (exports) {
930
982
  };
931
983
  }
932
984
 
985
+ // src/compile-transaction.ts
986
+ function getCompiledTransaction(transaction) {
987
+ const compiledMessage = compileMessage(transaction);
988
+ let signatures;
989
+ if ("signatures" in transaction) {
990
+ signatures = [];
991
+ for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
992
+ signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
993
+ }
994
+ } else {
995
+ signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
996
+ }
997
+ return {
998
+ compiledMessage,
999
+ signatures
1000
+ };
1001
+ }
1002
+
933
1003
  // src/serializers/address-table-lookup.ts
934
1004
  function getAddressTableLookupCodec() {
935
1005
  return struct(
936
1006
  [
937
1007
  [
938
1008
  "lookupTableAddress",
939
- getBase58EncodedAddressCodec(
1009
+ getAddressCodec(
940
1010
  {
941
1011
  description: "The address of the address lookup table account from which instruction addresses should be looked up"
942
1012
  }
@@ -1015,7 +1085,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1015
1085
  )
1016
1086
  ],
1017
1087
  [
1018
- "addressIndices",
1088
+ "accountIndices",
1019
1089
  array(
1020
1090
  u8({
1021
1091
  description: "The index of an account, according to the well-ordered accounts list for this transaction"
@@ -1035,23 +1105,23 @@ this.globalThis.solanaWeb3 = (function (exports) {
1035
1105
  ]
1036
1106
  ]),
1037
1107
  (value) => {
1038
- if (value.addressIndices !== void 0 && value.data !== void 0) {
1108
+ if (value.accountIndices !== void 0 && value.data !== void 0) {
1039
1109
  return value;
1040
1110
  }
1041
1111
  return {
1042
1112
  ...value,
1043
- addressIndices: value.addressIndices ?? [],
1113
+ accountIndices: value.accountIndices ?? [],
1044
1114
  data: value.data ?? new Uint8Array(0)
1045
1115
  };
1046
1116
  },
1047
1117
  (value) => {
1048
- if (value.addressIndices.length && value.data.byteLength) {
1118
+ if (value.accountIndices.length && value.data.byteLength) {
1049
1119
  return value;
1050
1120
  }
1051
- const { addressIndices, data, ...rest } = value;
1121
+ const { accountIndices, data, ...rest } = value;
1052
1122
  return {
1053
1123
  ...rest,
1054
- ...addressIndices.length ? { addressIndices } : null,
1124
+ ...accountIndices.length ? { accountIndices } : null,
1055
1125
  ...data.byteLength ? { data } : null
1056
1126
  };
1057
1127
  }
@@ -1137,7 +1207,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1137
1207
  ["header", getMessageHeaderCodec()],
1138
1208
  [
1139
1209
  "staticAccounts",
1140
- array(getBase58EncodedAddressCodec(), {
1210
+ array(getAddressCodec(), {
1141
1211
  description: "A compact-array of static account addresses belonging to this transaction" ,
1142
1212
  size: shortU16()
1143
1213
  })
@@ -1173,48 +1243,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
1173
1243
  };
1174
1244
  }
1175
1245
 
1176
- // src/signatures.ts
1177
- async function getCompiledMessageSignature(message, secretKey) {
1178
- const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
1179
- const signature = await signBytes(secretKey, wireMessageBytes);
1180
- return signature;
1181
- }
1182
- async function signTransaction(keyPair, transaction) {
1183
- const compiledMessage = compileMessage(transaction);
1184
- const [signerPublicKey, signature] = await Promise.all([
1185
- getBase58EncodedAddressFromPublicKey(keyPair.publicKey),
1186
- getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
1187
- ]);
1188
- const nextSignatures = {
1189
- ..."signatures" in transaction ? transaction.signatures : null,
1190
- ...{ [signerPublicKey]: signature }
1191
- };
1192
- const out = {
1193
- ...transaction,
1194
- signatures: nextSignatures
1195
- };
1196
- Object.freeze(out);
1197
- return out;
1198
- }
1199
-
1200
- // src/compile-transaction.ts
1201
- function getCompiledTransaction(transaction) {
1202
- const compiledMessage = compileMessage(transaction);
1203
- let signatures;
1204
- if ("signatures" in transaction) {
1205
- signatures = [];
1206
- for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
1207
- signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
1208
- }
1209
- } else {
1210
- signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
1211
- }
1212
- return {
1213
- compiledMessage,
1214
- signatures
1215
- };
1216
- }
1217
-
1218
1246
  // src/serializers/transaction.ts
1219
1247
  var BASE_CONFIG3 = {
1220
1248
  description: "The wire format of a Solana transaction" ,
@@ -1242,6 +1270,89 @@ this.globalThis.solanaWeb3 = (function (exports) {
1242
1270
  };
1243
1271
  }
1244
1272
 
1273
+ // ../keys/dist/index.browser.js
1274
+ async function signBytes(key, data) {
1275
+ await assertSigningCapabilityIsAvailable();
1276
+ const signedData = await crypto.subtle.sign("Ed25519", key, data);
1277
+ return new Uint8Array(signedData);
1278
+ }
1279
+
1280
+ // src/signatures.ts
1281
+ function assertIsTransactionSignature(putativeTransactionSignature) {
1282
+ try {
1283
+ if (
1284
+ // Lowest value (64 bytes of zeroes)
1285
+ putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
1286
+ putativeTransactionSignature.length > 88
1287
+ ) {
1288
+ throw new Error("Expected input string to decode to a byte array of length 64.");
1289
+ }
1290
+ const bytes2 = base58.serialize(putativeTransactionSignature);
1291
+ const numBytes = bytes2.byteLength;
1292
+ if (numBytes !== 64) {
1293
+ throw new Error(`Expected input string to decode to a byte array of length 64. Actual length: ${numBytes}`);
1294
+ }
1295
+ } catch (e) {
1296
+ throw new Error(`\`${putativeTransactionSignature}\` is not a transaction signature`, {
1297
+ cause: e
1298
+ });
1299
+ }
1300
+ }
1301
+ function isTransactionSignature(putativeTransactionSignature) {
1302
+ if (
1303
+ // Lowest value (64 bytes of zeroes)
1304
+ putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
1305
+ putativeTransactionSignature.length > 88
1306
+ ) {
1307
+ return false;
1308
+ }
1309
+ const bytes2 = base58.serialize(putativeTransactionSignature);
1310
+ const numBytes = bytes2.byteLength;
1311
+ if (numBytes !== 64) {
1312
+ return false;
1313
+ }
1314
+ return true;
1315
+ }
1316
+ async function getCompiledMessageSignature(message, secretKey) {
1317
+ const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
1318
+ const signature = await signBytes(secretKey, wireMessageBytes);
1319
+ return signature;
1320
+ }
1321
+ function getSignatureFromTransaction(transaction) {
1322
+ const signature = transaction.signatures[transaction.feePayer];
1323
+ if (!signature) {
1324
+ throw new Error(
1325
+ "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
1326
+ );
1327
+ }
1328
+ return signature;
1329
+ }
1330
+ async function signTransaction(keyPairs, transaction) {
1331
+ const compiledMessage = compileMessage(transaction);
1332
+ const nextSignatures = "signatures" in transaction ? { ...transaction.signatures } : {};
1333
+ const publicKeySignaturePairs = await Promise.all(
1334
+ keyPairs.map(
1335
+ (keyPair) => Promise.all([
1336
+ getAddressFromPublicKey(keyPair.publicKey),
1337
+ getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
1338
+ ])
1339
+ )
1340
+ );
1341
+ for (const [signerPublicKey, signature] of publicKeySignaturePairs) {
1342
+ nextSignatures[signerPublicKey] = signature;
1343
+ }
1344
+ const out = {
1345
+ ...transaction,
1346
+ signatures: nextSignatures
1347
+ };
1348
+ Object.freeze(out);
1349
+ return out;
1350
+ }
1351
+ function transactionSignature(putativeTransactionSignature) {
1352
+ assertIsTransactionSignature(putativeTransactionSignature);
1353
+ return putativeTransactionSignature;
1354
+ }
1355
+
1245
1356
  // src/wire-transaction.ts
1246
1357
  function getBase64EncodedWireTransaction(transaction) {
1247
1358
  const wireTransactionBytes = getTransactionEncoder().serialize(transaction);
@@ -1252,11 +1363,19 @@ this.globalThis.solanaWeb3 = (function (exports) {
1252
1363
 
1253
1364
  exports.appendTransactionInstruction = appendTransactionInstruction;
1254
1365
  exports.assertIsBlockhash = assertIsBlockhash;
1366
+ exports.assertIsDurableNonceTransaction = assertIsDurableNonceTransaction;
1367
+ exports.assertIsTransactionSignature = assertIsTransactionSignature;
1255
1368
  exports.createTransaction = createTransaction;
1256
1369
  exports.getBase64EncodedWireTransaction = getBase64EncodedWireTransaction;
1370
+ exports.getSignatureFromTransaction = getSignatureFromTransaction;
1371
+ exports.getTransactionEncoder = getTransactionEncoder;
1372
+ exports.isTransactionSignature = isTransactionSignature;
1257
1373
  exports.prependTransactionInstruction = prependTransactionInstruction;
1258
1374
  exports.setTransactionFeePayer = setTransactionFeePayer;
1375
+ exports.setTransactionLifetimeUsingBlockhash = setTransactionLifetimeUsingBlockhash;
1376
+ exports.setTransactionLifetimeUsingDurableNonce = setTransactionLifetimeUsingDurableNonce;
1259
1377
  exports.signTransaction = signTransaction;
1378
+ exports.transactionSignature = transactionSignature;
1260
1379
 
1261
1380
  return exports;
1262
1381