@solana/web3.js 1.54.1 → 1.54.2

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.
@@ -562,6 +562,44 @@ function encodeLength(bytes, len) {
562
562
  }
563
563
  }
564
564
 
565
+ const END_OF_BUFFER_ERROR_MESSAGE = 'Reached end of buffer unexpectedly';
566
+ /**
567
+ * Delegates to `Array#shift`, but throws if the array is zero-length.
568
+ */
569
+
570
+ function guardedShift(byteArray) {
571
+ if (byteArray.length === 0) {
572
+ throw new Error(END_OF_BUFFER_ERROR_MESSAGE);
573
+ }
574
+
575
+ return byteArray.shift();
576
+ }
577
+ /**
578
+ * Delegates to `Array#splice`, but throws if the section being spliced out extends past the end of
579
+ * the array.
580
+ */
581
+
582
+ function guardedSplice(byteArray, ...args) {
583
+ var _args$;
584
+
585
+ const [start] = args;
586
+
587
+ if (args.length === 2 // Implies that `deleteCount` was supplied
588
+ ? start + ((_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : 0) > byteArray.length : start >= byteArray.length) {
589
+ throw new Error(END_OF_BUFFER_ERROR_MESSAGE);
590
+ }
591
+
592
+ return byteArray.splice(...args);
593
+ }
594
+
595
+ /**
596
+ * An instruction to execute by a program
597
+ *
598
+ * @property {number} programIdIndex
599
+ * @property {number[]} accounts
600
+ * @property {string} data
601
+ */
602
+
565
603
  /**
566
604
  * List of instructions to be processed atomically
567
605
  */
@@ -674,37 +712,33 @@ class Message {
674
712
  static from(buffer$1) {
675
713
  // Slice up wire data
676
714
  let byteArray = [...buffer$1];
677
- const numRequiredSignatures = byteArray.shift();
715
+ const numRequiredSignatures = guardedShift(byteArray);
678
716
 
679
717
  if (numRequiredSignatures !== (numRequiredSignatures & VERSION_PREFIX_MASK)) {
680
718
  throw new Error('Versioned messages must be deserialized with VersionedMessage.deserialize()');
681
719
  }
682
720
 
683
- const numReadonlySignedAccounts = byteArray.shift();
684
- const numReadonlyUnsignedAccounts = byteArray.shift();
721
+ const numReadonlySignedAccounts = guardedShift(byteArray);
722
+ const numReadonlyUnsignedAccounts = guardedShift(byteArray);
685
723
  const accountCount = decodeLength(byteArray);
686
724
  let accountKeys = [];
687
725
 
688
726
  for (let i = 0; i < accountCount; i++) {
689
- const account = byteArray.slice(0, PUBLIC_KEY_LENGTH);
690
- byteArray = byteArray.slice(PUBLIC_KEY_LENGTH);
727
+ const account = guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH);
691
728
  accountKeys.push(bs58__default["default"].encode(buffer.Buffer.from(account)));
692
729
  }
693
730
 
694
- const recentBlockhash = byteArray.slice(0, PUBLIC_KEY_LENGTH);
695
- byteArray = byteArray.slice(PUBLIC_KEY_LENGTH);
731
+ const recentBlockhash = guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH);
696
732
  const instructionCount = decodeLength(byteArray);
697
733
  let instructions = [];
698
734
 
699
735
  for (let i = 0; i < instructionCount; i++) {
700
- const programIdIndex = byteArray.shift();
736
+ const programIdIndex = guardedShift(byteArray);
701
737
  const accountCount = decodeLength(byteArray);
702
- const accounts = byteArray.slice(0, accountCount);
703
- byteArray = byteArray.slice(accountCount);
738
+ const accounts = guardedSplice(byteArray, 0, accountCount);
704
739
  const dataLength = decodeLength(byteArray);
705
- const dataSlice = byteArray.slice(0, dataLength);
740
+ const dataSlice = guardedSplice(byteArray, 0, dataLength);
706
741
  const data = bs58__default["default"].encode(buffer.Buffer.from(dataSlice));
707
- byteArray = byteArray.slice(dataLength);
708
742
  instructions.push({
709
743
  programIdIndex,
710
744
  accounts,
@@ -827,33 +861,33 @@ class MessageV0 {
827
861
 
828
862
  static deserialize(serializedMessage) {
829
863
  let byteArray = [...serializedMessage];
830
- const prefix = byteArray.shift();
864
+ const prefix = guardedShift(byteArray);
831
865
  const maskedPrefix = prefix & VERSION_PREFIX_MASK;
832
866
  assert(prefix !== maskedPrefix, `Expected versioned message but received legacy message`);
833
867
  const version = maskedPrefix;
834
868
  assert(version === 0, `Expected versioned message with version 0 but found version ${version}`);
835
869
  const header = {
836
- numRequiredSignatures: byteArray.shift(),
837
- numReadonlySignedAccounts: byteArray.shift(),
838
- numReadonlyUnsignedAccounts: byteArray.shift()
870
+ numRequiredSignatures: guardedShift(byteArray),
871
+ numReadonlySignedAccounts: guardedShift(byteArray),
872
+ numReadonlyUnsignedAccounts: guardedShift(byteArray)
839
873
  };
840
874
  const staticAccountKeys = [];
841
875
  const staticAccountKeysLength = decodeLength(byteArray);
842
876
 
843
877
  for (let i = 0; i < staticAccountKeysLength; i++) {
844
- staticAccountKeys.push(new PublicKey(byteArray.splice(0, PUBLIC_KEY_LENGTH)));
878
+ staticAccountKeys.push(new PublicKey(guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH)));
845
879
  }
846
880
 
847
- const recentBlockhash = bs58__default["default"].encode(byteArray.splice(0, PUBLIC_KEY_LENGTH));
881
+ const recentBlockhash = bs58__default["default"].encode(guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH));
848
882
  const instructionCount = decodeLength(byteArray);
849
883
  const compiledInstructions = [];
850
884
 
851
885
  for (let i = 0; i < instructionCount; i++) {
852
- const programIdIndex = byteArray.shift();
886
+ const programIdIndex = guardedShift(byteArray);
853
887
  const accountKeyIndexesLength = decodeLength(byteArray);
854
- const accountKeyIndexes = byteArray.splice(0, accountKeyIndexesLength);
888
+ const accountKeyIndexes = guardedSplice(byteArray, 0, accountKeyIndexesLength);
855
889
  const dataLength = decodeLength(byteArray);
856
- const data = new Uint8Array(byteArray.splice(0, dataLength));
890
+ const data = new Uint8Array(guardedSplice(byteArray, 0, dataLength));
857
891
  compiledInstructions.push({
858
892
  programIdIndex,
859
893
  accountKeyIndexes,
@@ -865,11 +899,11 @@ class MessageV0 {
865
899
  const addressTableLookups = [];
866
900
 
867
901
  for (let i = 0; i < addressTableLookupsCount; i++) {
868
- const accountKey = new PublicKey(byteArray.splice(0, PUBLIC_KEY_LENGTH));
902
+ const accountKey = new PublicKey(guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH));
869
903
  const writableIndexesLength = decodeLength(byteArray);
870
- const writableIndexes = byteArray.splice(0, writableIndexesLength);
904
+ const writableIndexes = guardedSplice(byteArray, 0, writableIndexesLength);
871
905
  const readonlyIndexesLength = decodeLength(byteArray);
872
- const readonlyIndexes = byteArray.splice(0, readonlyIndexesLength);
906
+ const readonlyIndexes = guardedSplice(byteArray, 0, readonlyIndexesLength);
873
907
  addressTableLookups.push({
874
908
  accountKey,
875
909
  writableIndexes,
@@ -1592,8 +1626,7 @@ class Transaction {
1592
1626
  let signatures = [];
1593
1627
 
1594
1628
  for (let i = 0; i < signatureCount; i++) {
1595
- const signature = byteArray.slice(0, SIGNATURE_LENGTH_IN_BYTES);
1596
- byteArray = byteArray.slice(SIGNATURE_LENGTH_IN_BYTES);
1629
+ const signature = guardedSplice(byteArray, 0, SIGNATURE_LENGTH_IN_BYTES);
1597
1630
  signatures.push(bs58__default["default"].encode(buffer.Buffer.from(signature)));
1598
1631
  }
1599
1632
 
@@ -1685,7 +1718,7 @@ class VersionedTransaction {
1685
1718
  const signaturesLength = decodeLength(byteArray);
1686
1719
 
1687
1720
  for (let i = 0; i < signaturesLength; i++) {
1688
- signatures.push(new Uint8Array(byteArray.splice(0, SIGNATURE_LENGTH_IN_BYTES)));
1721
+ signatures.push(new Uint8Array(guardedSplice(byteArray, 0, SIGNATURE_LENGTH_IN_BYTES)));
1689
1722
  }
1690
1723
 
1691
1724
  const message = VersionedMessage.deserialize(new Uint8Array(byteArray));
@@ -4049,7 +4082,7 @@ const LogsNotificationResult = superstruct.type({
4049
4082
 
4050
4083
  /** @internal */
4051
4084
  const COMMON_HTTP_HEADERS = {
4052
- 'solana-client': `js/${(_process$env$npm_pack = "0.0.0-development") !== null && _process$env$npm_pack !== void 0 ? _process$env$npm_pack : 'UNKNOWN'}`
4085
+ 'solana-client': `js/${(_process$env$npm_pack = "1.54.2") !== null && _process$env$npm_pack !== void 0 ? _process$env$npm_pack : 'UNKNOWN'}`
4053
4086
  };
4054
4087
  /**
4055
4088
  * A connection to a fullnode JSON RPC endpoint
@@ -8803,10 +8836,8 @@ class ValidatorInfo {
8803
8836
  const configKeys = [];
8804
8837
 
8805
8838
  for (let i = 0; i < 2; i++) {
8806
- const publicKey = new PublicKey(byteArray.slice(0, PUBLIC_KEY_LENGTH));
8807
- byteArray = byteArray.slice(PUBLIC_KEY_LENGTH);
8808
- const isSigner = byteArray.slice(0, 1)[0] === 1;
8809
- byteArray = byteArray.slice(1);
8839
+ const publicKey = new PublicKey(guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH));
8840
+ const isSigner = guardedShift(byteArray) === 1;
8810
8841
  configKeys.push({
8811
8842
  publicKey,
8812
8843
  isSigner