@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.
- package/dist/index.browser.cjs +127 -66
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +120 -62
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +143 -81
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +122 -62
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +127 -66
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +120 -62
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +11 -8
- package/dist/types/accounts.d.ts +1 -1
- package/dist/types/accounts.d.ts.map +1 -0
- package/dist/types/blockhash.d.ts +5 -0
- package/dist/types/blockhash.d.ts.map +1 -0
- package/dist/types/compile-address-table-lookups.d.ts +1 -1
- package/dist/types/compile-address-table-lookups.d.ts.map +1 -0
- package/dist/types/compile-header.d.ts.map +1 -0
- package/dist/types/compile-instructions.d.ts.map +1 -0
- package/dist/types/compile-lifetime-token.d.ts.map +1 -0
- package/dist/types/compile-static-accounts.d.ts +1 -1
- package/dist/types/compile-static-accounts.d.ts.map +1 -0
- package/dist/types/compile-transaction.d.ts.map +1 -0
- package/dist/types/create-transaction.d.ts.map +1 -0
- package/dist/types/durable-nonce.d.ts +18 -6
- package/dist/types/durable-nonce.d.ts.map +1 -0
- package/dist/types/fee-payer.d.ts +1 -1
- package/dist/types/fee-payer.d.ts.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/instructions.d.ts.map +1 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/serializers/address-table-lookup.d.ts.map +1 -0
- package/dist/types/serializers/header.d.ts.map +1 -0
- package/dist/types/serializers/instruction.d.ts.map +1 -0
- package/dist/types/serializers/message.d.ts.map +1 -0
- package/dist/types/serializers/transaction-version.d.ts.map +1 -0
- package/dist/types/serializers/transaction.d.ts.map +1 -0
- package/dist/types/serializers/unimplemented.d.ts.map +1 -0
- package/dist/types/signatures.d.ts +3 -4
- package/dist/types/signatures.d.ts.map +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/unsigned-transaction.d.ts +4 -0
- package/dist/types/unsigned-transaction.d.ts.map +1 -0
- package/dist/types/wire-transaction.d.ts.map +1 -0
- 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
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
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
|
|
579
|
-
|
|
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
|
|
585
|
-
|
|
660
|
+
const out = {
|
|
661
|
+
...getUnsignedTransaction(transaction),
|
|
662
|
+
instructions: [instruction, ...transaction.instructions]
|
|
663
|
+
};
|
|
586
664
|
Object.freeze(out);
|
|
587
665
|
return out;
|
|
588
666
|
}
|
|
589
|
-
|
|
590
|
-
|
|
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;
|