feat: expose `Transaction._getSignData()` as `Transaction.signData`
This commit is contained in:
parent
1be298c49f
commit
7d3781e19f
|
@ -403,6 +403,7 @@ declare module '@solana/web3.js' {
|
||||||
Transaction | TransactionInstruction | TransactionInstructionCtorFields
|
Transaction | TransactionInstruction | TransactionInstructionCtorFields
|
||||||
>
|
>
|
||||||
): Transaction;
|
): Transaction;
|
||||||
|
signData: Buffer;
|
||||||
sign(...signers: Array<Account>): void;
|
sign(...signers: Array<Account>): void;
|
||||||
signPartial(...partialSigners: Array<PublicKey | Account>): void;
|
signPartial(...partialSigners: Array<PublicKey | Account>): void;
|
||||||
addSigner(signer: Account): void;
|
addSigner(signer: Account): void;
|
||||||
|
|
|
@ -411,6 +411,7 @@ declare module '@solana/web3.js' {
|
||||||
Transaction | TransactionInstruction | TransactionInstructionCtorFields,
|
Transaction | TransactionInstruction | TransactionInstructionCtorFields,
|
||||||
>
|
>
|
||||||
): Transaction;
|
): Transaction;
|
||||||
|
signData: Buffer;
|
||||||
sign(...signers: Array<Account>): void;
|
sign(...signers: Array<Account>): void;
|
||||||
signPartial(...partialSigners: Array<PublicKey | Account>): void;
|
signPartial(...partialSigners: Array<PublicKey | Account>): void;
|
||||||
addSigner(signer: Account): void;
|
addSigner(signer: Account): void;
|
||||||
|
|
|
@ -180,9 +180,9 @@ export class Transaction {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* Get a buffer of the Transaction data that need to be covered by signatures
|
||||||
*/
|
*/
|
||||||
_getSignData(): Buffer {
|
get signData(): Buffer {
|
||||||
const {nonceInfo} = this;
|
const {nonceInfo} = this;
|
||||||
if (nonceInfo && this.instructions[0] != nonceInfo.nonceInstruction) {
|
if (nonceInfo && this.instructions[0] != nonceInfo.nonceInstruction) {
|
||||||
this.recentBlockhash = nonceInfo.nonce;
|
this.recentBlockhash = nonceInfo.nonce;
|
||||||
|
@ -377,7 +377,7 @@ export class Transaction {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
this.signatures = signatures;
|
this.signatures = signatures;
|
||||||
const signData = this._getSignData();
|
const signData = this.signData;
|
||||||
|
|
||||||
partialSigners.forEach((accountOrPublicKey, index) => {
|
partialSigners.forEach((accountOrPublicKey, index) => {
|
||||||
if (accountOrPublicKey instanceof PublicKey) {
|
if (accountOrPublicKey instanceof PublicKey) {
|
||||||
|
@ -405,7 +405,7 @@ export class Transaction {
|
||||||
throw new Error(`Unknown signer: ${signer.publicKey.toString()}`);
|
throw new Error(`Unknown signer: ${signer.publicKey.toString()}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const signData = this._getSignData();
|
const signData = this.signData;
|
||||||
const signature = nacl.sign.detached(signData, signer.secretKey);
|
const signature = nacl.sign.detached(signData, signer.secretKey);
|
||||||
invariant(signature.length === 64);
|
invariant(signature.length === 64);
|
||||||
this.signatures[index].signature = Buffer.from(signature);
|
this.signatures[index].signature = Buffer.from(signature);
|
||||||
|
@ -416,7 +416,7 @@ export class Transaction {
|
||||||
*/
|
*/
|
||||||
verifySignatures(): boolean {
|
verifySignatures(): boolean {
|
||||||
let verified = true;
|
let verified = true;
|
||||||
const signData = this._getSignData();
|
const signData = this.signData;
|
||||||
for (const {signature, publicKey} of this.signatures) {
|
for (const {signature, publicKey} of this.signatures) {
|
||||||
if (
|
if (
|
||||||
!nacl.sign.detached.verify(signData, signature, publicKey.toBuffer())
|
!nacl.sign.detached.verify(signData, signature, publicKey.toBuffer())
|
||||||
|
@ -438,7 +438,7 @@ export class Transaction {
|
||||||
throw new Error('Transaction has not been signed');
|
throw new Error('Transaction has not been signed');
|
||||||
}
|
}
|
||||||
|
|
||||||
const signData = this._getSignData();
|
const signData = this.signData;
|
||||||
const signatureCount = [];
|
const signatureCount = [];
|
||||||
shortvec.encodeLength(signatureCount, signatures.length);
|
shortvec.encodeLength(signatureCount, signatures.length);
|
||||||
const transactionLength =
|
const transactionLength =
|
||||||
|
|
Loading…
Reference in New Issue