@solana/transactions 2.0.0-experimental.c5061ae → 2.0.0-experimental.c7ef49c

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.
@@ -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 {
@@ -522,9 +522,9 @@ this.globalThis.solanaWeb3 = (function (exports) {
522
522
  if (numBytes !== 32) {
523
523
  throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${numBytes}`);
524
524
  }
525
- } catch (e) {
525
+ } catch (e2) {
526
526
  throw new Error(`\`${putativeBlockhash}\` is not a blockhash`, {
527
- cause: e
527
+ cause: e2
528
528
  });
529
529
  }
530
530
  }
@@ -583,6 +583,20 @@ this.globalThis.solanaWeb3 = (function (exports) {
583
583
  throw new Error("Transaction is not a durable nonce transaction");
584
584
  }
585
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
+ }
586
600
  function isAdvanceNonceAccountInstruction(instruction) {
587
601
  return instruction.programAddress === SYSTEM_PROGRAM_ADDRESS && // Test for `AdvanceNonceAccount` instruction data
588
602
  instruction.data != null && isAdvanceNonceAccountInstructionData(instruction.data) && // Test for exactly 3 accounts
@@ -597,6 +611,28 @@ this.globalThis.solanaWeb3 = (function (exports) {
597
611
  function isDurableNonceTransaction(transaction) {
598
612
  return "lifetimeConstraint" in transaction && typeof transaction.lifetimeConstraint.nonce === "string" && transaction.instructions[0] != null && isAdvanceNonceAccountInstruction(transaction.instructions[0]);
599
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
+ }
600
636
 
601
637
  // src/fee-payer.ts
602
638
  function setTransactionFeePayer(feePayer, transaction) {
@@ -628,23 +664,339 @@ this.globalThis.solanaWeb3 = (function (exports) {
628
664
  Object.freeze(out);
629
665
  return out;
630
666
  }
631
- function getBase58EncodedAddressCodec(config) {
632
- return string({
633
- description: config?.description ?? ("A 32-byte account address" ),
634
- encoding: base58,
635
- size: 32
667
+
668
+ // ../codecs-core/dist/index.browser.js
669
+ function assertByteArrayIsNotEmptyForCodec(codecDescription, bytes2, offset = 0) {
670
+ if (bytes2.length - offset <= 0) {
671
+ throw new Error(`Codec [${codecDescription}] cannot decode empty byte arrays.`);
672
+ }
673
+ }
674
+ function assertByteArrayHasEnoughBytesForCodec(codecDescription, expected, bytes2, offset = 0) {
675
+ const bytesLength = bytes2.length - offset;
676
+ if (bytesLength < expected) {
677
+ throw new Error(`Codec [${codecDescription}] expected ${expected} bytes, got ${bytesLength}.`);
678
+ }
679
+ }
680
+ var mergeBytes2 = (byteArrays) => {
681
+ const nonEmptyByteArrays = byteArrays.filter((arr) => arr.length);
682
+ if (nonEmptyByteArrays.length === 0) {
683
+ return byteArrays.length ? byteArrays[0] : new Uint8Array();
684
+ }
685
+ if (nonEmptyByteArrays.length === 1) {
686
+ return nonEmptyByteArrays[0];
687
+ }
688
+ const totalLength = nonEmptyByteArrays.reduce((total, arr) => total + arr.length, 0);
689
+ const result = new Uint8Array(totalLength);
690
+ let offset = 0;
691
+ nonEmptyByteArrays.forEach((arr) => {
692
+ result.set(arr, offset);
693
+ offset += arr.length;
636
694
  });
695
+ return result;
696
+ };
697
+ var padBytes2 = (bytes2, length) => {
698
+ if (bytes2.length >= length)
699
+ return bytes2;
700
+ const paddedBytes = new Uint8Array(length).fill(0);
701
+ paddedBytes.set(bytes2);
702
+ return paddedBytes;
703
+ };
704
+ var fixBytes2 = (bytes2, length) => padBytes2(bytes2.length <= length ? bytes2 : bytes2.slice(0, length), length);
705
+ function combineCodec(encoder, decoder, description) {
706
+ if (encoder.fixedSize !== decoder.fixedSize) {
707
+ throw new Error(
708
+ `Encoder and decoder must have the same fixed size, got [${encoder.fixedSize}] and [${decoder.fixedSize}].`
709
+ );
710
+ }
711
+ if (encoder.maxSize !== decoder.maxSize) {
712
+ throw new Error(
713
+ `Encoder and decoder must have the same max size, got [${encoder.maxSize}] and [${decoder.maxSize}].`
714
+ );
715
+ }
716
+ if (description === void 0 && encoder.description !== decoder.description) {
717
+ throw new Error(
718
+ `Encoder and decoder must have the same description, got [${encoder.description}] and [${decoder.description}]. Pass a custom description as a third argument if you want to override the description and bypass this error.`
719
+ );
720
+ }
721
+ return {
722
+ decode: decoder.decode,
723
+ description: description ?? encoder.description,
724
+ encode: encoder.encode,
725
+ fixedSize: encoder.fixedSize,
726
+ maxSize: encoder.maxSize
727
+ };
637
728
  }
638
- function getBase58EncodedAddressComparator() {
639
- return new Intl.Collator("en", {
640
- caseFirst: "lower",
641
- ignorePunctuation: false,
642
- localeMatcher: "best fit",
643
- numeric: false,
644
- sensitivity: "variant",
645
- usage: "sort"
646
- }).compare;
729
+ function fixCodecHelper(data, fixedBytes, description) {
730
+ return {
731
+ description: description ?? `fixed(${fixedBytes}, ${data.description})`,
732
+ fixedSize: fixedBytes,
733
+ maxSize: fixedBytes
734
+ };
735
+ }
736
+ function fixEncoder(encoder, fixedBytes, description) {
737
+ return {
738
+ ...fixCodecHelper(encoder, fixedBytes, description),
739
+ encode: (value) => fixBytes2(encoder.encode(value), fixedBytes)
740
+ };
741
+ }
742
+ function fixDecoder(decoder, fixedBytes, description) {
743
+ return {
744
+ ...fixCodecHelper(decoder, fixedBytes, description),
745
+ decode: (bytes2, offset = 0) => {
746
+ assertByteArrayHasEnoughBytesForCodec("fixCodec", fixedBytes, bytes2, offset);
747
+ if (offset > 0 || bytes2.length > fixedBytes) {
748
+ bytes2 = bytes2.slice(offset, offset + fixedBytes);
749
+ }
750
+ if (decoder.fixedSize !== null) {
751
+ bytes2 = fixBytes2(bytes2, decoder.fixedSize);
752
+ }
753
+ const [value] = decoder.decode(bytes2, 0);
754
+ return [value, offset + fixedBytes];
755
+ }
756
+ };
757
+ }
758
+ function mapEncoder(encoder, unmap) {
759
+ return {
760
+ description: encoder.description,
761
+ encode: (value) => encoder.encode(unmap(value)),
762
+ fixedSize: encoder.fixedSize,
763
+ maxSize: encoder.maxSize
764
+ };
647
765
  }
766
+
767
+ // ../codecs-numbers/dist/index.browser.js
768
+ function assertNumberIsBetweenForCodec(codecDescription, min, max, value) {
769
+ if (value < min || value > max) {
770
+ throw new Error(
771
+ `Codec [${codecDescription}] expected number to be in the range [${min}, ${max}], got ${value}.`
772
+ );
773
+ }
774
+ }
775
+ function sharedNumberFactory(input) {
776
+ let littleEndian;
777
+ let defaultDescription = input.name;
778
+ if (input.size > 1) {
779
+ littleEndian = !("endian" in input.options) || input.options.endian === 0;
780
+ defaultDescription += littleEndian ? "(le)" : "(be)";
781
+ }
782
+ return {
783
+ description: input.options.description ?? defaultDescription,
784
+ fixedSize: input.size,
785
+ littleEndian,
786
+ maxSize: input.size
787
+ };
788
+ }
789
+ function numberEncoderFactory(input) {
790
+ const codecData = sharedNumberFactory(input);
791
+ return {
792
+ description: codecData.description,
793
+ encode(value) {
794
+ if (input.range) {
795
+ assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);
796
+ }
797
+ const arrayBuffer = new ArrayBuffer(input.size);
798
+ input.set(new DataView(arrayBuffer), value, codecData.littleEndian);
799
+ return new Uint8Array(arrayBuffer);
800
+ },
801
+ fixedSize: codecData.fixedSize,
802
+ maxSize: codecData.maxSize
803
+ };
804
+ }
805
+ function numberDecoderFactory(input) {
806
+ const codecData = sharedNumberFactory(input);
807
+ return {
808
+ decode(bytes2, offset = 0) {
809
+ assertByteArrayIsNotEmptyForCodec(codecData.description, bytes2, offset);
810
+ assertByteArrayHasEnoughBytesForCodec(codecData.description, input.size, bytes2, offset);
811
+ const view = new DataView(toArrayBuffer2(bytes2, offset, input.size));
812
+ return [input.get(view, codecData.littleEndian), offset + input.size];
813
+ },
814
+ description: codecData.description,
815
+ fixedSize: codecData.fixedSize,
816
+ maxSize: codecData.maxSize
817
+ };
818
+ }
819
+ function toArrayBuffer2(bytes2, offset, length) {
820
+ const bytesOffset = bytes2.byteOffset + (offset ?? 0);
821
+ const bytesLength = length ?? bytes2.byteLength;
822
+ return bytes2.buffer.slice(bytesOffset, bytesOffset + bytesLength);
823
+ }
824
+ var getU32Encoder = (options = {}) => numberEncoderFactory({
825
+ name: "u32",
826
+ options,
827
+ range: [0, Number("0xffffffff")],
828
+ set: (view, value, le) => view.setUint32(0, value, le),
829
+ size: 4
830
+ });
831
+ var getU32Decoder = (options = {}) => numberDecoderFactory({
832
+ get: (view, le) => view.getUint32(0, le),
833
+ name: "u32",
834
+ options,
835
+ size: 4
836
+ });
837
+ var getU8Encoder = (options = {}) => numberEncoderFactory({
838
+ name: "u8",
839
+ options,
840
+ range: [0, Number("0xff")],
841
+ set: (view, value) => view.setUint8(0, value),
842
+ size: 1
843
+ });
844
+ var getU8Decoder = (options = {}) => numberDecoderFactory({
845
+ get: (view) => view.getUint8(0),
846
+ name: "u8",
847
+ options,
848
+ size: 1
849
+ });
850
+ var getU8Codec = (options = {}) => combineCodec(getU8Encoder(options), getU8Decoder(options));
851
+
852
+ // ../codecs-strings/dist/index.browser.js
853
+ function assertValidBaseString(alphabet4, testValue, givenValue = testValue) {
854
+ if (!testValue.match(new RegExp(`^[${alphabet4}]*$`))) {
855
+ throw new Error(`Expected a string of base ${alphabet4.length}, got [${givenValue}].`);
856
+ }
857
+ }
858
+ var getBaseXEncoder = (alphabet4) => {
859
+ const base = alphabet4.length;
860
+ const baseBigInt = BigInt(base);
861
+ return {
862
+ description: `base${base}`,
863
+ encode(value) {
864
+ assertValidBaseString(alphabet4, value);
865
+ if (value === "")
866
+ return new Uint8Array();
867
+ const chars = [...value];
868
+ let trailIndex = chars.findIndex((c) => c !== alphabet4[0]);
869
+ trailIndex = trailIndex === -1 ? chars.length : trailIndex;
870
+ const leadingZeroes = Array(trailIndex).fill(0);
871
+ if (trailIndex === chars.length)
872
+ return Uint8Array.from(leadingZeroes);
873
+ const tailChars = chars.slice(trailIndex);
874
+ let base10Number = 0n;
875
+ let baseXPower = 1n;
876
+ for (let i = tailChars.length - 1; i >= 0; i -= 1) {
877
+ base10Number += baseXPower * BigInt(alphabet4.indexOf(tailChars[i]));
878
+ baseXPower *= baseBigInt;
879
+ }
880
+ const tailBytes = [];
881
+ while (base10Number > 0n) {
882
+ tailBytes.unshift(Number(base10Number % 256n));
883
+ base10Number /= 256n;
884
+ }
885
+ return Uint8Array.from(leadingZeroes.concat(tailBytes));
886
+ },
887
+ fixedSize: null,
888
+ maxSize: null
889
+ };
890
+ };
891
+ var getBaseXDecoder = (alphabet4) => {
892
+ const base = alphabet4.length;
893
+ const baseBigInt = BigInt(base);
894
+ return {
895
+ decode(rawBytes, offset = 0) {
896
+ const bytes2 = offset === 0 ? rawBytes : rawBytes.slice(offset);
897
+ if (bytes2.length === 0)
898
+ return ["", 0];
899
+ let trailIndex = bytes2.findIndex((n) => n !== 0);
900
+ trailIndex = trailIndex === -1 ? bytes2.length : trailIndex;
901
+ const leadingZeroes = alphabet4[0].repeat(trailIndex);
902
+ if (trailIndex === bytes2.length)
903
+ return [leadingZeroes, rawBytes.length];
904
+ let base10Number = bytes2.slice(trailIndex).reduce((sum, byte) => sum * 256n + BigInt(byte), 0n);
905
+ const tailChars = [];
906
+ while (base10Number > 0n) {
907
+ tailChars.unshift(alphabet4[Number(base10Number % baseBigInt)]);
908
+ base10Number /= baseBigInt;
909
+ }
910
+ return [leadingZeroes + tailChars.join(""), rawBytes.length];
911
+ },
912
+ description: `base${base}`,
913
+ fixedSize: null,
914
+ maxSize: null
915
+ };
916
+ };
917
+ var alphabet2 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
918
+ var getBase58Encoder = () => getBaseXEncoder(alphabet2);
919
+ var getBase58Decoder = () => getBaseXDecoder(alphabet2);
920
+ var removeNullCharacters2 = (value) => (
921
+ // eslint-disable-next-line no-control-regex
922
+ value.replace(/\u0000/g, "")
923
+ );
924
+ var e = globalThis.TextDecoder;
925
+ var o = globalThis.TextEncoder;
926
+ var getUtf8Encoder = () => {
927
+ let textEncoder;
928
+ return {
929
+ description: "utf8",
930
+ encode: (value) => new Uint8Array((textEncoder || (textEncoder = new o())).encode(value)),
931
+ fixedSize: null,
932
+ maxSize: null
933
+ };
934
+ };
935
+ var getUtf8Decoder = () => {
936
+ let textDecoder;
937
+ return {
938
+ decode(bytes2, offset = 0) {
939
+ const value = (textDecoder || (textDecoder = new e())).decode(bytes2.slice(offset));
940
+ return [removeNullCharacters2(value), bytes2.length];
941
+ },
942
+ description: "utf8",
943
+ fixedSize: null,
944
+ maxSize: null
945
+ };
946
+ };
947
+ var getStringEncoder = (options = {}) => {
948
+ const size = options.size ?? getU32Encoder();
949
+ const encoding = options.encoding ?? getUtf8Encoder();
950
+ const description = options.description ?? `string(${encoding.description}; ${getSizeDescription2(size)})`;
951
+ if (size === "variable") {
952
+ return { ...encoding, description };
953
+ }
954
+ if (typeof size === "number") {
955
+ return fixEncoder(encoding, size, description);
956
+ }
957
+ return {
958
+ description,
959
+ encode: (value) => {
960
+ const contentBytes = encoding.encode(value);
961
+ const lengthBytes = size.encode(contentBytes.length);
962
+ return mergeBytes2([lengthBytes, contentBytes]);
963
+ },
964
+ fixedSize: null,
965
+ maxSize: null
966
+ };
967
+ };
968
+ var getStringDecoder = (options = {}) => {
969
+ const size = options.size ?? getU32Decoder();
970
+ const encoding = options.encoding ?? getUtf8Decoder();
971
+ const description = options.description ?? `string(${encoding.description}; ${getSizeDescription2(size)})`;
972
+ if (size === "variable") {
973
+ return { ...encoding, description };
974
+ }
975
+ if (typeof size === "number") {
976
+ return fixDecoder(encoding, size, description);
977
+ }
978
+ return {
979
+ decode: (bytes2, offset = 0) => {
980
+ assertByteArrayIsNotEmptyForCodec("string", bytes2, offset);
981
+ const [lengthBigInt, lengthOffset] = size.decode(bytes2, offset);
982
+ const length = Number(lengthBigInt);
983
+ offset = lengthOffset;
984
+ const contentBytes = bytes2.slice(offset, offset + length);
985
+ assertByteArrayHasEnoughBytesForCodec("string", length, contentBytes);
986
+ const [value, contentOffset] = encoding.decode(contentBytes);
987
+ offset += contentOffset;
988
+ return [value, offset];
989
+ },
990
+ description,
991
+ fixedSize: null,
992
+ maxSize: null
993
+ };
994
+ };
995
+ function getSizeDescription2(size) {
996
+ return typeof size === "object" ? size.description : `${size}`;
997
+ }
998
+
999
+ // ../assertions/dist/index.browser.js
648
1000
  function assertIsSecureContext() {
649
1001
  if (!globalThis.isSecureContext) {
650
1002
  throw new Error(
@@ -664,24 +1016,88 @@ this.globalThis.solanaWeb3 = (function (exports) {
664
1016
  throw new Error("No signing implementation could be found");
665
1017
  }
666
1018
  }
667
- async function getBase58EncodedAddressFromPublicKey(publicKey) {
1019
+
1020
+ // ../addresses/dist/index.browser.js
1021
+ var memoizedBase58Encoder;
1022
+ var memoizedBase58Decoder;
1023
+ function getMemoizedBase58Encoder() {
1024
+ if (!memoizedBase58Encoder)
1025
+ memoizedBase58Encoder = getBase58Encoder();
1026
+ return memoizedBase58Encoder;
1027
+ }
1028
+ function getMemoizedBase58Decoder() {
1029
+ if (!memoizedBase58Decoder)
1030
+ memoizedBase58Decoder = getBase58Decoder();
1031
+ return memoizedBase58Decoder;
1032
+ }
1033
+ function assertIsAddress(putativeBase58EncodedAddress) {
1034
+ try {
1035
+ if (
1036
+ // Lowest address (32 bytes of zeroes)
1037
+ putativeBase58EncodedAddress.length < 32 || // Highest address (32 bytes of 255)
1038
+ putativeBase58EncodedAddress.length > 44
1039
+ ) {
1040
+ throw new Error("Expected input string to decode to a byte array of length 32.");
1041
+ }
1042
+ const base58Encoder = getMemoizedBase58Encoder();
1043
+ const bytes2 = base58Encoder.encode(putativeBase58EncodedAddress);
1044
+ const numBytes = bytes2.byteLength;
1045
+ if (numBytes !== 32) {
1046
+ throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${numBytes}`);
1047
+ }
1048
+ } catch (e2) {
1049
+ throw new Error(`\`${putativeBase58EncodedAddress}\` is not a base-58 encoded address`, {
1050
+ cause: e2
1051
+ });
1052
+ }
1053
+ }
1054
+ function address(putativeBase58EncodedAddress) {
1055
+ assertIsAddress(putativeBase58EncodedAddress);
1056
+ return putativeBase58EncodedAddress;
1057
+ }
1058
+ function getAddressEncoder(config) {
1059
+ return mapEncoder(
1060
+ getStringEncoder({
1061
+ description: config?.description ?? "Base58EncodedAddress",
1062
+ encoding: getMemoizedBase58Encoder(),
1063
+ size: 32
1064
+ }),
1065
+ (putativeAddress) => address(putativeAddress)
1066
+ );
1067
+ }
1068
+ function getAddressDecoder(config) {
1069
+ return getStringDecoder({
1070
+ description: config?.description ?? "Base58EncodedAddress",
1071
+ encoding: getMemoizedBase58Decoder(),
1072
+ size: 32
1073
+ });
1074
+ }
1075
+ function getAddressCodec(config) {
1076
+ return combineCodec(getAddressEncoder(config), getAddressDecoder(config));
1077
+ }
1078
+ function getAddressComparator() {
1079
+ return new Intl.Collator("en", {
1080
+ caseFirst: "lower",
1081
+ ignorePunctuation: false,
1082
+ localeMatcher: "best fit",
1083
+ numeric: false,
1084
+ sensitivity: "variant",
1085
+ usage: "sort"
1086
+ }).compare;
1087
+ }
1088
+ async function getAddressFromPublicKey(publicKey) {
668
1089
  await assertKeyExporterIsAvailable();
669
1090
  if (publicKey.type !== "public" || publicKey.algorithm.name !== "Ed25519") {
670
1091
  throw new Error("The `CryptoKey` must be an `Ed25519` public key");
671
1092
  }
672
1093
  const publicKeyBytes = await crypto.subtle.exportKey("raw", publicKey);
673
- const [base58EncodedAddress] = getBase58EncodedAddressCodec().deserialize(new Uint8Array(publicKeyBytes));
1094
+ const [base58EncodedAddress] = getAddressDecoder().decode(new Uint8Array(publicKeyBytes));
674
1095
  return base58EncodedAddress;
675
1096
  }
676
- async function signBytes(key, data) {
677
- await assertSigningCapabilityIsAvailable();
678
- const signedData = await crypto.subtle.sign("Ed25519", key, data);
679
- return new Uint8Array(signedData);
680
- }
681
1097
 
682
1098
  // src/accounts.ts
683
- function upsert(addressMap, address, update) {
684
- addressMap[address] = update(addressMap[address] ?? { role: AccountRole.READONLY });
1099
+ function upsert(addressMap, address2, update) {
1100
+ addressMap[address2] = update(addressMap[address2] ?? { role: AccountRole.READONLY });
685
1101
  }
686
1102
  var TYPE = Symbol("AddressMapTypeProperty");
687
1103
  function getAddressMapFromInstructions(feePayer, instructions) {
@@ -732,7 +1148,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
732
1148
  const shouldReplaceEntry = (
733
1149
  // Consider using the new LOOKUP_TABLE if its address is different...
734
1150
  entry.lookupTableAddress !== accountMeta.lookupTableAddress && // ...and sorts before the existing one.
735
- (addressComparator || (addressComparator = getBase58EncodedAddressComparator()))(
1151
+ (addressComparator || (addressComparator = getAddressComparator()))(
736
1152
  accountMeta.lookupTableAddress,
737
1153
  entry.lookupTableAddress
738
1154
  ) < 0
@@ -838,14 +1254,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
838
1254
  if (leftIsWritable !== isWritableRole(rightEntry.role)) {
839
1255
  return leftIsWritable ? -1 : 1;
840
1256
  }
841
- addressComparator || (addressComparator = getBase58EncodedAddressComparator());
1257
+ addressComparator || (addressComparator = getAddressComparator());
842
1258
  if (leftEntry[TYPE] === 1 /* LOOKUP_TABLE */ && rightEntry[TYPE] === 1 /* LOOKUP_TABLE */ && leftEntry.lookupTableAddress !== rightEntry.lookupTableAddress) {
843
1259
  return addressComparator(leftEntry.lookupTableAddress, rightEntry.lookupTableAddress);
844
1260
  } else {
845
1261
  return addressComparator(leftAddress, rightAddress);
846
1262
  }
847
- }).map(([address, addressMeta]) => ({
848
- address,
1263
+ }).map(([address2, addressMeta]) => ({
1264
+ address: address2,
849
1265
  ...addressMeta
850
1266
  }));
851
1267
  return orderedAccounts;
@@ -869,7 +1285,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
869
1285
  entry.readableIndices.push(account.addressIndex);
870
1286
  }
871
1287
  }
872
- return Object.keys(index).sort(getBase58EncodedAddressComparator()).map((lookupTableAddress) => ({
1288
+ return Object.keys(index).sort(getAddressComparator()).map((lookupTableAddress) => ({
873
1289
  lookupTableAddress,
874
1290
  ...index[lookupTableAddress]
875
1291
  }));
@@ -914,7 +1330,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
914
1330
  return instructions.map(({ accounts, data, programAddress }) => {
915
1331
  return {
916
1332
  programAddressIndex: accountIndex[programAddress],
917
- ...accounts ? { accountIndices: accounts.map(({ address }) => accountIndex[address]) } : null,
1333
+ ...accounts ? { accountIndices: accounts.map(({ address: address2 }) => accountIndex[address2]) } : null,
918
1334
  ...data ? { data } : null
919
1335
  };
920
1336
  });
@@ -932,7 +1348,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
932
1348
  function getCompiledStaticAccounts(orderedAccounts) {
933
1349
  const firstLookupTableAccountIndex = orderedAccounts.findIndex((account) => "lookupTableAddress" in account);
934
1350
  const orderedStaticAccounts = firstLookupTableAccountIndex === -1 ? orderedAccounts : orderedAccounts.slice(0, firstLookupTableAccountIndex);
935
- return orderedStaticAccounts.map(({ address }) => address);
1351
+ return orderedStaticAccounts.map(({ address: address2 }) => address2);
936
1352
  }
937
1353
 
938
1354
  // src/message.ts
@@ -949,13 +1365,41 @@ this.globalThis.solanaWeb3 = (function (exports) {
949
1365
  };
950
1366
  }
951
1367
 
1368
+ // src/compile-transaction.ts
1369
+ function getCompiledTransaction(transaction) {
1370
+ const compiledMessage = compileMessage(transaction);
1371
+ let signatures;
1372
+ if ("signatures" in transaction) {
1373
+ signatures = [];
1374
+ for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
1375
+ signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
1376
+ }
1377
+ } else {
1378
+ signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
1379
+ }
1380
+ return {
1381
+ compiledMessage,
1382
+ signatures
1383
+ };
1384
+ }
1385
+
952
1386
  // src/serializers/address-table-lookup.ts
1387
+ function addressSerializerCompat(compat) {
1388
+ const codec = getAddressCodec();
1389
+ return {
1390
+ description: compat?.description ?? codec.description,
1391
+ deserialize: codec.decode,
1392
+ fixedSize: codec.fixedSize,
1393
+ maxSize: codec.maxSize,
1394
+ serialize: codec.encode
1395
+ };
1396
+ }
953
1397
  function getAddressTableLookupCodec() {
954
1398
  return struct(
955
1399
  [
956
1400
  [
957
1401
  "lookupTableAddress",
958
- getBase58EncodedAddressCodec(
1402
+ addressSerializerCompat(
959
1403
  {
960
1404
  description: "The address of the address lookup table account from which instruction addresses should be looked up"
961
1405
  }
@@ -986,38 +1430,73 @@ this.globalThis.solanaWeb3 = (function (exports) {
986
1430
  );
987
1431
  }
988
1432
 
1433
+ // ../codecs-data-structures/dist/index.browser.js
1434
+ function sumCodecSizes(sizes) {
1435
+ return sizes.reduce((all, size) => all === null || size === null ? null : all + size, 0);
1436
+ }
1437
+ function structCodecHelper(fields, description) {
1438
+ const fieldDescriptions = fields.map(([name, codec]) => `${String(name)}: ${codec.description}`).join(", ");
1439
+ return {
1440
+ description: description ?? `struct(${fieldDescriptions})`,
1441
+ fixedSize: sumCodecSizes(fields.map(([, field]) => field.fixedSize)),
1442
+ maxSize: sumCodecSizes(fields.map(([, field]) => field.maxSize))
1443
+ };
1444
+ }
1445
+ function getStructEncoder(fields, options = {}) {
1446
+ return {
1447
+ ...structCodecHelper(fields, options.description),
1448
+ encode: (struct2) => {
1449
+ const fieldBytes = fields.map(([key, codec]) => codec.encode(struct2[key]));
1450
+ return mergeBytes2(fieldBytes);
1451
+ }
1452
+ };
1453
+ }
1454
+ function getStructDecoder(fields, options = {}) {
1455
+ return {
1456
+ ...structCodecHelper(fields, options.description),
1457
+ decode: (bytes2, offset = 0) => {
1458
+ const struct2 = {};
1459
+ fields.forEach(([key, codec]) => {
1460
+ const [value, newOffset] = codec.decode(bytes2, offset);
1461
+ offset = newOffset;
1462
+ struct2[key] = value;
1463
+ });
1464
+ return [struct2, offset];
1465
+ }
1466
+ };
1467
+ }
1468
+ function getStructCodec(fields, options = {}) {
1469
+ return combineCodec(getStructEncoder(fields, options), getStructDecoder(fields, options));
1470
+ }
1471
+
989
1472
  // src/serializers/header.ts
1473
+ var memoizedU8Codec;
1474
+ function getMemoizedU8Codec() {
1475
+ if (!memoizedU8Codec)
1476
+ memoizedU8Codec = getU8Codec();
1477
+ return memoizedU8Codec;
1478
+ }
1479
+ function getMemoizedU8CodecDescription(description) {
1480
+ const codec = getMemoizedU8Codec();
1481
+ return {
1482
+ ...codec,
1483
+ description: description ?? codec.description
1484
+ };
1485
+ }
1486
+ var numSignerAccountsDescription = "The expected number of addresses in the static address list belonging to accounts that are required to sign this transaction" ;
1487
+ var numReadonlySignerAccountsDescription = "The expected number of addresses in the static address list belonging to accounts that are required to sign this transaction, but may not be writable" ;
1488
+ var numReadonlyNonSignerAccountsDescription = "The expected number of addresses in the static address list belonging to accounts that are neither signers, nor writable" ;
1489
+ var messageHeaderDescription = "The transaction message header containing counts of the signer, readonly-signer, and readonly-nonsigner account addresses" ;
990
1490
  function getMessageHeaderCodec() {
991
- return struct(
1491
+ return getStructCodec(
992
1492
  [
993
- [
994
- "numSignerAccounts",
995
- u8(
996
- {
997
- description: "The expected number of addresses in the static address list belonging to accounts that are required to sign this transaction"
998
- }
999
- )
1000
- ],
1001
- [
1002
- "numReadonlySignerAccounts",
1003
- u8(
1004
- {
1005
- description: "The expected number of addresses in the static address list belonging to accounts that are required to sign this transaction, but may not be writable"
1006
- }
1007
- )
1008
- ],
1009
- [
1010
- "numReadonlyNonSignerAccounts",
1011
- u8(
1012
- {
1013
- description: "The expected number of addresses in the static address list belonging to accounts that are neither signers, nor writable"
1014
- }
1015
- )
1016
- ]
1493
+ ["numSignerAccounts", getMemoizedU8CodecDescription(numSignerAccountsDescription)],
1494
+ ["numReadonlySignerAccounts", getMemoizedU8CodecDescription(numReadonlySignerAccountsDescription)],
1495
+ ["numReadonlyNonSignerAccounts", getMemoizedU8CodecDescription(numReadonlyNonSignerAccountsDescription)]
1017
1496
  ],
1018
1497
  {
1019
- description: "The transaction message header containing counts of the signer, readonly-signer, and readonly-nonsigner account addresses"
1020
- }
1498
+ description: messageHeaderDescription
1499
+ }
1021
1500
  );
1022
1501
  }
1023
1502
 
@@ -1034,7 +1513,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1034
1513
  )
1035
1514
  ],
1036
1515
  [
1037
- "addressIndices",
1516
+ "accountIndices",
1038
1517
  array(
1039
1518
  u8({
1040
1519
  description: "The index of an account, according to the well-ordered accounts list for this transaction"
@@ -1054,42 +1533,29 @@ this.globalThis.solanaWeb3 = (function (exports) {
1054
1533
  ]
1055
1534
  ]),
1056
1535
  (value) => {
1057
- if (value.addressIndices !== void 0 && value.data !== void 0) {
1536
+ if (value.accountIndices !== void 0 && value.data !== void 0) {
1058
1537
  return value;
1059
1538
  }
1060
1539
  return {
1061
1540
  ...value,
1062
- addressIndices: value.addressIndices ?? [],
1541
+ accountIndices: value.accountIndices ?? [],
1063
1542
  data: value.data ?? new Uint8Array(0)
1064
1543
  };
1065
1544
  },
1066
1545
  (value) => {
1067
- if (value.addressIndices.length && value.data.byteLength) {
1546
+ if (value.accountIndices.length && value.data.byteLength) {
1068
1547
  return value;
1069
1548
  }
1070
- const { addressIndices, data, ...rest } = value;
1549
+ const { accountIndices, data, ...rest } = value;
1071
1550
  return {
1072
1551
  ...rest,
1073
- ...addressIndices.length ? { addressIndices } : null,
1552
+ ...accountIndices.length ? { accountIndices } : null,
1074
1553
  ...data.byteLength ? { data } : null
1075
1554
  };
1076
1555
  }
1077
1556
  );
1078
1557
  }
1079
1558
 
1080
- // src/serializers/unimplemented.ts
1081
- function getError(type, name) {
1082
- const functionSuffix = name + type[0].toUpperCase() + type.slice(1);
1083
- return new Error(
1084
- `No ${type} exists for ${name}. Use \`get${functionSuffix}()\` if you need a ${type}, and \`get${name}Codec()\` if you need to both encode and decode ${name}`
1085
- );
1086
- }
1087
- function getUnimplementedDecoder(name) {
1088
- return () => {
1089
- throw getError("decoder", name);
1090
- };
1091
- }
1092
-
1093
1559
  // src/serializers/transaction-version.ts
1094
1560
  var VERSION_FLAG_MASK = 128;
1095
1561
  var BASE_CONFIG = {
@@ -1097,7 +1563,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1097
1563
  fixedSize: null,
1098
1564
  maxSize: 1
1099
1565
  };
1100
- function deserialize(bytes2, offset = 0) {
1566
+ function decode(bytes2, offset = 0) {
1101
1567
  const firstByte = bytes2[offset];
1102
1568
  if ((firstByte & VERSION_FLAG_MASK) === 0) {
1103
1569
  return ["legacy", offset];
@@ -1106,7 +1572,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1106
1572
  return [version, offset + 1];
1107
1573
  }
1108
1574
  }
1109
- function serialize(value) {
1575
+ function encode(value) {
1110
1576
  if (value === "legacy") {
1111
1577
  return new Uint8Array();
1112
1578
  }
@@ -1115,11 +1581,32 @@ this.globalThis.solanaWeb3 = (function (exports) {
1115
1581
  }
1116
1582
  return new Uint8Array([value | VERSION_FLAG_MASK]);
1117
1583
  }
1118
- function getTransactionVersionCodec() {
1584
+ function getTransactionVersionDecoder() {
1119
1585
  return {
1120
1586
  ...BASE_CONFIG,
1121
- deserialize,
1122
- serialize
1587
+ decode
1588
+ };
1589
+ }
1590
+ function getTransactionVersionEncoder() {
1591
+ return {
1592
+ ...BASE_CONFIG,
1593
+ encode
1594
+ };
1595
+ }
1596
+ function getTransactionVersionCodec() {
1597
+ return combineCodec(getTransactionVersionEncoder(), getTransactionVersionDecoder());
1598
+ }
1599
+
1600
+ // src/serializers/unimplemented.ts
1601
+ function getError(type, name) {
1602
+ const functionSuffix = name + type[0].toUpperCase() + type.slice(1);
1603
+ return new Error(
1604
+ `No ${type} exists for ${name}. Use \`get${functionSuffix}()\` if you need a ${type}, and \`get${name}Codec()\` if you need to both encode and decode ${name}`
1605
+ );
1606
+ }
1607
+ function getUnimplementedDecoder(name) {
1608
+ return () => {
1609
+ throw getError("decoder", name);
1123
1610
  };
1124
1611
  }
1125
1612
 
@@ -1129,7 +1616,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1129
1616
  fixedSize: null,
1130
1617
  maxSize: null
1131
1618
  };
1132
- function serialize2(compiledMessage) {
1619
+ function serialize(compiledMessage) {
1133
1620
  if (compiledMessage.version === "legacy") {
1134
1621
  return struct(getPreludeStructSerializerTuple()).serialize(compiledMessage);
1135
1622
  } else {
@@ -1150,13 +1637,22 @@ this.globalThis.solanaWeb3 = (function (exports) {
1150
1637
  ).serialize(compiledMessage);
1151
1638
  }
1152
1639
  }
1640
+ function toSerializer(codec) {
1641
+ return {
1642
+ description: codec.description,
1643
+ deserialize: codec.decode,
1644
+ fixedSize: codec.fixedSize,
1645
+ maxSize: codec.maxSize,
1646
+ serialize: codec.encode
1647
+ };
1648
+ }
1153
1649
  function getPreludeStructSerializerTuple() {
1154
1650
  return [
1155
- ["version", getTransactionVersionCodec()],
1156
- ["header", getMessageHeaderCodec()],
1651
+ ["version", toSerializer(getTransactionVersionCodec())],
1652
+ ["header", toSerializer(getMessageHeaderCodec())],
1157
1653
  [
1158
1654
  "staticAccounts",
1159
- array(getBase58EncodedAddressCodec(), {
1655
+ array(toSerializer(getAddressCodec()), {
1160
1656
  description: "A compact-array of static account addresses belonging to this transaction" ,
1161
1657
  size: shortU16()
1162
1658
  })
@@ -1188,49 +1684,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1188
1684
  return {
1189
1685
  ...BASE_CONFIG2,
1190
1686
  deserialize: getUnimplementedDecoder("CompiledMessage"),
1191
- serialize: serialize2
1192
- };
1193
- }
1194
-
1195
- // src/signatures.ts
1196
- async function getCompiledMessageSignature(message, secretKey) {
1197
- const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
1198
- const signature = await signBytes(secretKey, wireMessageBytes);
1199
- return signature;
1200
- }
1201
- async function signTransaction(keyPair, transaction) {
1202
- const compiledMessage = compileMessage(transaction);
1203
- const [signerPublicKey, signature] = await Promise.all([
1204
- getBase58EncodedAddressFromPublicKey(keyPair.publicKey),
1205
- getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
1206
- ]);
1207
- const nextSignatures = {
1208
- ..."signatures" in transaction ? transaction.signatures : null,
1209
- ...{ [signerPublicKey]: signature }
1210
- };
1211
- const out = {
1212
- ...transaction,
1213
- signatures: nextSignatures
1214
- };
1215
- Object.freeze(out);
1216
- return out;
1217
- }
1218
-
1219
- // src/compile-transaction.ts
1220
- function getCompiledTransaction(transaction) {
1221
- const compiledMessage = compileMessage(transaction);
1222
- let signatures;
1223
- if ("signatures" in transaction) {
1224
- signatures = [];
1225
- for (let ii = 0; ii < compiledMessage.header.numSignerAccounts; ii++) {
1226
- signatures[ii] = transaction.signatures[compiledMessage.staticAccounts[ii]] ?? new Uint8Array(Array(64).fill(0));
1227
- }
1228
- } else {
1229
- signatures = Array(compiledMessage.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));
1230
- }
1231
- return {
1232
- compiledMessage,
1233
- signatures
1687
+ serialize
1234
1688
  };
1235
1689
  }
1236
1690
 
@@ -1240,7 +1694,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
1240
1694
  fixedSize: null,
1241
1695
  maxSize: null
1242
1696
  };
1243
- function serialize3(transaction) {
1697
+ function serialize2(transaction) {
1244
1698
  const compiledTransaction = getCompiledTransaction(transaction);
1245
1699
  return struct([
1246
1700
  [
@@ -1257,10 +1711,93 @@ this.globalThis.solanaWeb3 = (function (exports) {
1257
1711
  return {
1258
1712
  ...BASE_CONFIG3,
1259
1713
  deserialize: getUnimplementedDecoder("CompiledMessage"),
1260
- serialize: serialize3
1714
+ serialize: serialize2
1261
1715
  };
1262
1716
  }
1263
1717
 
1718
+ // ../keys/dist/index.browser.js
1719
+ async function signBytes(key, data) {
1720
+ await assertSigningCapabilityIsAvailable();
1721
+ const signedData = await crypto.subtle.sign("Ed25519", key, data);
1722
+ return new Uint8Array(signedData);
1723
+ }
1724
+
1725
+ // src/signatures.ts
1726
+ function assertIsTransactionSignature(putativeTransactionSignature) {
1727
+ try {
1728
+ if (
1729
+ // Lowest value (64 bytes of zeroes)
1730
+ putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
1731
+ putativeTransactionSignature.length > 88
1732
+ ) {
1733
+ throw new Error("Expected input string to decode to a byte array of length 64.");
1734
+ }
1735
+ const bytes2 = base58.serialize(putativeTransactionSignature);
1736
+ const numBytes = bytes2.byteLength;
1737
+ if (numBytes !== 64) {
1738
+ throw new Error(`Expected input string to decode to a byte array of length 64. Actual length: ${numBytes}`);
1739
+ }
1740
+ } catch (e2) {
1741
+ throw new Error(`\`${putativeTransactionSignature}\` is not a transaction signature`, {
1742
+ cause: e2
1743
+ });
1744
+ }
1745
+ }
1746
+ function isTransactionSignature(putativeTransactionSignature) {
1747
+ if (
1748
+ // Lowest value (64 bytes of zeroes)
1749
+ putativeTransactionSignature.length < 64 || // Highest value (64 bytes of 255)
1750
+ putativeTransactionSignature.length > 88
1751
+ ) {
1752
+ return false;
1753
+ }
1754
+ const bytes2 = base58.serialize(putativeTransactionSignature);
1755
+ const numBytes = bytes2.byteLength;
1756
+ if (numBytes !== 64) {
1757
+ return false;
1758
+ }
1759
+ return true;
1760
+ }
1761
+ async function getCompiledMessageSignature(message, secretKey) {
1762
+ const wireMessageBytes = getCompiledMessageEncoder().serialize(message);
1763
+ const signature = await signBytes(secretKey, wireMessageBytes);
1764
+ return signature;
1765
+ }
1766
+ function getSignatureFromTransaction(transaction) {
1767
+ const signature = transaction.signatures[transaction.feePayer];
1768
+ if (!signature) {
1769
+ throw new Error(
1770
+ "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer."
1771
+ );
1772
+ }
1773
+ return signature;
1774
+ }
1775
+ async function signTransaction(keyPairs, transaction) {
1776
+ const compiledMessage = compileMessage(transaction);
1777
+ const nextSignatures = "signatures" in transaction ? { ...transaction.signatures } : {};
1778
+ const publicKeySignaturePairs = await Promise.all(
1779
+ keyPairs.map(
1780
+ (keyPair) => Promise.all([
1781
+ getAddressFromPublicKey(keyPair.publicKey),
1782
+ getCompiledMessageSignature(compiledMessage, keyPair.privateKey)
1783
+ ])
1784
+ )
1785
+ );
1786
+ for (const [signerPublicKey, signature] of publicKeySignaturePairs) {
1787
+ nextSignatures[signerPublicKey] = signature;
1788
+ }
1789
+ const out = {
1790
+ ...transaction,
1791
+ signatures: nextSignatures
1792
+ };
1793
+ Object.freeze(out);
1794
+ return out;
1795
+ }
1796
+ function transactionSignature(putativeTransactionSignature) {
1797
+ assertIsTransactionSignature(putativeTransactionSignature);
1798
+ return putativeTransactionSignature;
1799
+ }
1800
+
1264
1801
  // src/wire-transaction.ts
1265
1802
  function getBase64EncodedWireTransaction(transaction) {
1266
1803
  const wireTransactionBytes = getTransactionEncoder().serialize(transaction);
@@ -1272,12 +1809,18 @@ this.globalThis.solanaWeb3 = (function (exports) {
1272
1809
  exports.appendTransactionInstruction = appendTransactionInstruction;
1273
1810
  exports.assertIsBlockhash = assertIsBlockhash;
1274
1811
  exports.assertIsDurableNonceTransaction = assertIsDurableNonceTransaction;
1812
+ exports.assertIsTransactionSignature = assertIsTransactionSignature;
1275
1813
  exports.createTransaction = createTransaction;
1276
1814
  exports.getBase64EncodedWireTransaction = getBase64EncodedWireTransaction;
1815
+ exports.getSignatureFromTransaction = getSignatureFromTransaction;
1816
+ exports.getTransactionEncoder = getTransactionEncoder;
1817
+ exports.isTransactionSignature = isTransactionSignature;
1277
1818
  exports.prependTransactionInstruction = prependTransactionInstruction;
1278
1819
  exports.setTransactionFeePayer = setTransactionFeePayer;
1279
1820
  exports.setTransactionLifetimeUsingBlockhash = setTransactionLifetimeUsingBlockhash;
1821
+ exports.setTransactionLifetimeUsingDurableNonce = setTransactionLifetimeUsingDurableNonce;
1280
1822
  exports.signTransaction = signTransaction;
1823
+ exports.transactionSignature = transactionSignature;
1281
1824
 
1282
1825
  return exports;
1283
1826