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

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 (47) hide show
  1. package/dist/index.browser.cjs +127 -66
  2. package/dist/index.browser.cjs.map +1 -1
  3. package/dist/index.browser.js +120 -62
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.development.js +143 -81
  6. package/dist/index.development.js.map +1 -1
  7. package/dist/index.native.js +122 -62
  8. package/dist/index.native.js.map +1 -1
  9. package/dist/index.node.cjs +127 -66
  10. package/dist/index.node.cjs.map +1 -1
  11. package/dist/index.node.js +120 -62
  12. package/dist/index.node.js.map +1 -1
  13. package/dist/index.production.min.js +11 -8
  14. package/dist/types/accounts.d.ts +1 -1
  15. package/dist/types/accounts.d.ts.map +1 -0
  16. package/dist/types/blockhash.d.ts +5 -0
  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.map +1 -0
  22. package/dist/types/compile-lifetime-token.d.ts.map +1 -0
  23. package/dist/types/compile-static-accounts.d.ts +1 -1
  24. package/dist/types/compile-static-accounts.d.ts.map +1 -0
  25. package/dist/types/compile-transaction.d.ts.map +1 -0
  26. package/dist/types/create-transaction.d.ts.map +1 -0
  27. package/dist/types/durable-nonce.d.ts +18 -6
  28. package/dist/types/durable-nonce.d.ts.map +1 -0
  29. package/dist/types/fee-payer.d.ts +1 -1
  30. package/dist/types/fee-payer.d.ts.map +1 -0
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/instructions.d.ts.map +1 -0
  33. package/dist/types/message.d.ts.map +1 -0
  34. package/dist/types/serializers/address-table-lookup.d.ts.map +1 -0
  35. package/dist/types/serializers/header.d.ts.map +1 -0
  36. package/dist/types/serializers/instruction.d.ts.map +1 -0
  37. package/dist/types/serializers/message.d.ts.map +1 -0
  38. package/dist/types/serializers/transaction-version.d.ts.map +1 -0
  39. package/dist/types/serializers/transaction.d.ts.map +1 -0
  40. package/dist/types/serializers/unimplemented.d.ts.map +1 -0
  41. package/dist/types/signatures.d.ts +3 -4
  42. package/dist/types/signatures.d.ts.map +1 -0
  43. package/dist/types/types.d.ts.map +1 -0
  44. package/dist/types/unsigned-transaction.d.ts +4 -0
  45. package/dist/types/unsigned-transaction.d.ts.map +1 -0
  46. package/dist/types/wire-transaction.d.ts.map +1 -0
  47. package/package.json +7 -9
@@ -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,6 +685,23 @@ this.globalThis.solanaWeb3 = (function (exports) {
622
685
  throw new Error("No signing implementation could be found");
623
686
  }
624
687
  }
688
+ function getBase58EncodedAddressCodec(config) {
689
+ return string({
690
+ description: config?.description ?? ("A 32-byte account address" ),
691
+ encoding: base58,
692
+ size: 32
693
+ });
694
+ }
695
+ function getBase58EncodedAddressComparator() {
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
+ }
625
705
  async function getBase58EncodedAddressFromPublicKey(publicKey) {
626
706
  await assertKeyExporterIsAvailable();
627
707
  if (publicKey.type !== "public" || publicKey.algorithm.name !== "Ed25519") {
@@ -631,35 +711,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
631
711
  const [base58EncodedAddress] = getBase58EncodedAddressCodec().deserialize(new Uint8Array(publicKeyBytes));
632
712
  return base58EncodedAddress;
633
713
  }
714
+
715
+ // ../keys/dist/index.browser.js
634
716
  async function signBytes(key, data) {
635
717
  await assertSigningCapabilityIsAvailable();
636
718
  const signedData = await crypto.subtle.sign("Ed25519", key, data);
637
719
  return new Uint8Array(signedData);
638
720
  }
639
721
 
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
-
663
722
  // src/accounts.ts
664
723
  function upsert(addressMap, address, update) {
665
724
  addressMap[address] = update(addressMap[address] ?? { role: AccountRole.READONLY });
@@ -1252,10 +1311,13 @@ this.globalThis.solanaWeb3 = (function (exports) {
1252
1311
 
1253
1312
  exports.appendTransactionInstruction = appendTransactionInstruction;
1254
1313
  exports.assertIsBlockhash = assertIsBlockhash;
1314
+ exports.assertIsDurableNonceTransaction = assertIsDurableNonceTransaction;
1255
1315
  exports.createTransaction = createTransaction;
1256
1316
  exports.getBase64EncodedWireTransaction = getBase64EncodedWireTransaction;
1257
1317
  exports.prependTransactionInstruction = prependTransactionInstruction;
1258
1318
  exports.setTransactionFeePayer = setTransactionFeePayer;
1319
+ exports.setTransactionLifetimeUsingBlockhash = setTransactionLifetimeUsingBlockhash;
1320
+ exports.setTransactionLifetimeUsingDurableNonce = setTransactionLifetimeUsingDurableNonce;
1259
1321
  exports.signTransaction = signTransaction;
1260
1322
 
1261
1323
  return exports;