@stacks/transactions
Advanced tools
Comparing version 6.15.1-pr.3bb63ea0.7 to 6.15.1-pr.3c36e222.10
@@ -222,16 +222,3 @@ "use strict"; | ||
const transaction = await makeUnsignedSTXTokenTransfer(options); | ||
const signer = new signer_1.TransactionSigner(transaction); | ||
const publicKeys = txOptions.publicKeys.slice(); | ||
if ((0, authorization_1.isNonSequential)(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
for (const publicKey of publicKeys) { | ||
const signerKey = txOptions.signerKeys.find(key => (0, common_1.bytesToHex)((0, keys_1.pubKeyfromPrivKey)(key).data) === publicKey); | ||
if (signerKey) { | ||
signer.signOrigin((0, keys_1.createStacksPrivateKey)(signerKey)); | ||
} | ||
else { | ||
signer.appendOrigin((0, keys_1.publicKeyFromBytes)((0, common_1.hexToBytes)(publicKey))); | ||
} | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -279,12 +266,3 @@ } | ||
const transaction = await makeUnsignedContractDeploy(options); | ||
const signer = new signer_1.TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = (0, keys_1.pubKeyfromPrivKey)(key); | ||
pubKeys = pubKeys.filter(pk => pk !== (0, common_1.bytesToHex)(pubKey.data)); | ||
signer.signOrigin((0, keys_1.createStacksPrivateKey)(key)); | ||
} | ||
for (const key of pubKeys) { | ||
signer.appendOrigin((0, keys_1.publicKeyFromBytes)((0, common_1.hexToBytes)(key))); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -447,12 +425,3 @@ } | ||
const transaction = await makeUnsignedContractCall(options); | ||
const signer = new signer_1.TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = (0, keys_1.pubKeyfromPrivKey)(key); | ||
pubKeys = pubKeys.filter(pk => pk !== (0, common_1.bytesToHex)(pubKey.data)); | ||
signer.signOrigin((0, keys_1.createStacksPrivateKey)(key)); | ||
} | ||
for (const key of pubKeys) { | ||
signer.appendOrigin((0, keys_1.publicKeyFromBytes)((0, common_1.hexToBytes)(key))); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -629,2 +598,17 @@ } | ||
exports.estimateTransactionFeeWithFallback = estimateTransactionFeeWithFallback; | ||
function mutatingSignMultiSig(transaction, publicKeys, signerKeys) { | ||
const signer = new signer_1.TransactionSigner(transaction); | ||
if ((0, authorization_1.isNonSequential)(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
for (const publicKey of publicKeys) { | ||
const signerKey = signerKeys.find(key => (0, common_1.bytesToHex)((0, keys_1.pubKeyfromPrivKey)(key).data) === publicKey); | ||
if (signerKey) { | ||
signer.signOrigin((0, keys_1.createStacksPrivateKey)(signerKey)); | ||
} | ||
else { | ||
signer.appendOrigin((0, keys_1.publicKeyFromBytes)((0, common_1.hexToBytes)(publicKey))); | ||
} | ||
} | ||
} | ||
//# sourceMappingURL=builders.js.map |
@@ -30,4 +30,6 @@ "use strict"; | ||
case constants_1.AddressHashMode.SerializeP2SH: | ||
case constants_1.AddressHashMode.SerializeP2SHNonSequential: | ||
case constants_1.AddressHashMode.SerializeP2WPKH: | ||
case constants_1.AddressHashMode.SerializeP2WSH: | ||
case constants_1.AddressHashMode.SerializeP2WSHNonSequential: | ||
switch (txVersion) { | ||
@@ -34,0 +36,0 @@ case constants_1.TransactionVersion.Mainnet: |
@@ -211,16 +211,3 @@ import { bytesToHex, hexToBytes, intToBigInt } from '@stacks/common'; | ||
const transaction = await makeUnsignedSTXTokenTransfer(options); | ||
const signer = new TransactionSigner(transaction); | ||
const publicKeys = txOptions.publicKeys.slice(); | ||
if (isNonSequential(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
for (const publicKey of publicKeys) { | ||
const signerKey = txOptions.signerKeys.find(key => bytesToHex(pubKeyfromPrivKey(key).data) === publicKey); | ||
if (signerKey) { | ||
signer.signOrigin(createStacksPrivateKey(signerKey)); | ||
} | ||
else { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(publicKey))); | ||
} | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -266,12 +253,3 @@ } | ||
const transaction = await makeUnsignedContractDeploy(options); | ||
const signer = new TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = pubKeyfromPrivKey(key); | ||
pubKeys = pubKeys.filter(pk => pk !== bytesToHex(pubKey.data)); | ||
signer.signOrigin(createStacksPrivateKey(key)); | ||
} | ||
for (const key of pubKeys) { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(key))); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -430,12 +408,3 @@ } | ||
const transaction = await makeUnsignedContractCall(options); | ||
const signer = new TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = pubKeyfromPrivKey(key); | ||
pubKeys = pubKeys.filter(pk => pk !== bytesToHex(pubKey.data)); | ||
signer.signOrigin(createStacksPrivateKey(key)); | ||
} | ||
for (const key of pubKeys) { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(key))); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
return transaction; | ||
@@ -600,2 +569,17 @@ } | ||
} | ||
function mutatingSignMultiSig(transaction, publicKeys, signerKeys) { | ||
const signer = new TransactionSigner(transaction); | ||
if (isNonSequential(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
for (const publicKey of publicKeys) { | ||
const signerKey = signerKeys.find(key => bytesToHex(pubKeyfromPrivKey(key).data) === publicKey); | ||
if (signerKey) { | ||
signer.signOrigin(createStacksPrivateKey(signerKey)); | ||
} | ||
else { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(publicKey))); | ||
} | ||
} | ||
} | ||
//# sourceMappingURL=builders.js.map |
@@ -26,4 +26,6 @@ import { AddressHashMode, AddressVersion, RECOVERABLE_ECDSA_SIG_LENGTH_BYTES, StacksMessageType, TransactionVersion, } from './constants'; | ||
case AddressHashMode.SerializeP2SH: | ||
case AddressHashMode.SerializeP2SHNonSequential: | ||
case AddressHashMode.SerializeP2WPKH: | ||
case AddressHashMode.SerializeP2WSH: | ||
case AddressHashMode.SerializeP2WSHNonSequential: | ||
switch (txVersion) { | ||
@@ -30,0 +32,0 @@ case TransactionVersion.Mainnet: |
{ | ||
"name": "@stacks/transactions", | ||
"version": "6.15.1-pr.3bb63ea0.7+3bb63ea0", | ||
"version": "6.15.1-pr.3c36e222.10+3c36e222", | ||
"description": "Javascript library for constructing transactions on the Stacks blockchain.", | ||
@@ -30,4 +30,4 @@ "license": "MIT", | ||
"@noble/secp256k1": "1.7.1", | ||
"@stacks/common": "^6.15.1-pr.3bb63ea0.7+3bb63ea0", | ||
"@stacks/network": "^6.15.1-pr.3bb63ea0.7+3bb63ea0", | ||
"@stacks/common": "^6.15.1-pr.3c36e222.10+3c36e222", | ||
"@stacks/network": "^6.15.1-pr.3c36e222.10+3c36e222", | ||
"c32check": "^2.0.0", | ||
@@ -37,3 +37,3 @@ "lodash.clonedeep": "^4.5.0" | ||
"devDependencies": { | ||
"@stacks/encryption": "^6.15.1-pr.3bb63ea0.7+3bb63ea0", | ||
"@stacks/encryption": "^6.15.1-pr.3c36e222.10+3c36e222", | ||
"@types/common-tags": "^1.8.0", | ||
@@ -67,3 +67,3 @@ "@types/elliptic": "^6.4.12", | ||
}, | ||
"gitHead": "3bb63ea04540f8cab9e7771cffc9ceda986a8700" | ||
"gitHead": "3c36e2221b394f20707cbcad3f679ee39188b0b4" | ||
} |
@@ -762,25 +762,4 @@ import { bytesToHex, hexToBytes, IntegerType, intToBigInt } from '@stacks/common'; | ||
const signer = new TransactionSigner(transaction); | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
const publicKeys = txOptions.publicKeys.slice(); | ||
// sort public keys (only for newer non-sequential multi-sig for backwards compatibility) | ||
if (isNonSequential(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
// sign in order of public keys | ||
for (const publicKey of publicKeys) { | ||
const signerKey = txOptions.signerKeys.find( | ||
key => bytesToHex(pubKeyfromPrivKey(key).data) === publicKey | ||
); | ||
if (signerKey) { | ||
// either sign and append message signature (which allows for recovering the public key) | ||
signer.signOrigin(createStacksPrivateKey(signerKey)); | ||
} else { | ||
// or append the public key (which did not sign here) | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(publicKey))); | ||
} | ||
} | ||
return transaction; | ||
@@ -898,3 +877,3 @@ } | ||
if ('senderKey' in txOptions) { | ||
// txOptions is SignedContractDeployOptions | ||
// single-sig | ||
const publicKey = publicKeyToString(getPublicKey(createStacksPrivateKey(txOptions.senderKey))); | ||
@@ -910,18 +889,8 @@ const options = omit(txOptions, 'senderKey'); | ||
} else { | ||
// txOptions is SignedMultiSigContractDeployOptions | ||
// multi-sig | ||
const options = omit(txOptions, 'signerKeys'); | ||
const transaction = await makeUnsignedContractDeploy(options); | ||
const signer = new TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = pubKeyfromPrivKey(key); | ||
pubKeys = pubKeys.filter(pk => pk !== bytesToHex(pubKey.data)); | ||
signer.signOrigin(createStacksPrivateKey(key)); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
for (const key of pubKeys) { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(key))); | ||
} | ||
return transaction; | ||
@@ -1235,2 +1204,3 @@ } | ||
if ('senderKey' in txOptions) { | ||
// single-sig | ||
const publicKey = publicKeyToString(getPublicKey(createStacksPrivateKey(txOptions.senderKey))); | ||
@@ -1246,17 +1216,8 @@ const options = omit(txOptions, 'senderKey'); | ||
} else { | ||
// multi-sig | ||
const options = omit(txOptions, 'signerKeys'); | ||
const transaction = await makeUnsignedContractCall(options); | ||
const signer = new TransactionSigner(transaction); | ||
let pubKeys = txOptions.publicKeys; | ||
for (const key of txOptions.signerKeys) { | ||
const pubKey = pubKeyfromPrivKey(key); | ||
pubKeys = pubKeys.filter(pk => pk !== bytesToHex(pubKey.data)); | ||
signer.signOrigin(createStacksPrivateKey(key)); | ||
} | ||
mutatingSignMultiSig(transaction, txOptions.publicKeys.slice(), txOptions.signerKeys); | ||
for (const key of pubKeys) { | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(key))); | ||
} | ||
return transaction; | ||
@@ -1710,1 +1671,28 @@ } | ||
} | ||
/** @internal multi-sig signing re-use */ | ||
function mutatingSignMultiSig( | ||
/** **Warning:** method mutates `transaction` */ | ||
transaction: StacksTransaction, | ||
publicKeys: string[], | ||
signerKeys: string[] | ||
) { | ||
const signer = new TransactionSigner(transaction); | ||
// sort public keys (only for newer non-sequential multi-sig for backwards compatibility) | ||
if (isNonSequential(transaction.auth.spendingCondition.hashMode)) { | ||
publicKeys.sort(); | ||
} | ||
// sign in order of public keys | ||
for (const publicKey of publicKeys) { | ||
const signerKey = signerKeys.find(key => bytesToHex(pubKeyfromPrivKey(key).data) === publicKey); | ||
if (signerKey) { | ||
// either sign and append message signature (which allows for recovering the public key) | ||
signer.signOrigin(createStacksPrivateKey(signerKey)); | ||
} else { | ||
// or append the public key (which did not sign here) | ||
signer.appendOrigin(publicKeyFromBytes(hexToBytes(publicKey))); | ||
} | ||
} | ||
} |
@@ -43,2 +43,3 @@ import { | ||
): AddressVersion { | ||
// todo: `next` refacto with network param | ||
switch (hashMode) { | ||
@@ -57,4 +58,6 @@ case AddressHashMode.SerializeP2PKH: | ||
case AddressHashMode.SerializeP2SH: | ||
case AddressHashMode.SerializeP2SHNonSequential: | ||
case AddressHashMode.SerializeP2WPKH: | ||
case AddressHashMode.SerializeP2WSH: | ||
case AddressHashMode.SerializeP2WSHNonSequential: | ||
switch (txVersion) { | ||
@@ -61,0 +64,0 @@ case TransactionVersion.Mainnet: |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
1896761
18826