add function to parse list of signatures buffers into proper list of TransactionSignature objects
This commit is contained in:
parent
af70e69588
commit
6e1e4e69c4
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
var _ = require('lodash');
|
var _ = require('lodash');
|
||||||
var inherits = require('inherits');
|
var inherits = require('inherits');
|
||||||
|
var Transaction = require('../transaction');
|
||||||
var Input = require('./input');
|
var Input = require('./input');
|
||||||
var Output = require('../output');
|
var Output = require('../output');
|
||||||
var $ = require('../../util/preconditions');
|
var $ = require('../../util/preconditions');
|
||||||
|
@ -152,6 +153,53 @@ MultiSigInput.prototype.isValidSignature = function(transaction, signature) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Buffer[]} signatures
|
||||||
|
* @param {PublicKey[]} publicKeys
|
||||||
|
* @param {Transaction} transaction
|
||||||
|
* @param {Integer} inputIndex
|
||||||
|
* @param {Input} input
|
||||||
|
* @returns {TransactionSignature[]}
|
||||||
|
*/
|
||||||
|
MultiSigInput.normalizeSignatures = function(transaction, input, inputIndex, signatures, publicKeys) {
|
||||||
|
return publicKeys.map(function (pubKey) {
|
||||||
|
var signatureMatch = null;
|
||||||
|
signatures = signatures.filter(function (signatureBuffer) {
|
||||||
|
if (signatureMatch) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var signature = new TransactionSignature({
|
||||||
|
signature: Signature.fromTxFormat(signatureBuffer),
|
||||||
|
publicKey: pubKey,
|
||||||
|
prevTxId: input.prevTxId,
|
||||||
|
outputIndex: input.outputIndex,
|
||||||
|
inputIndex: inputIndex,
|
||||||
|
sigtype: Signature.SIGHASH_ALL
|
||||||
|
});
|
||||||
|
|
||||||
|
signature.signature.nhashtype = signature.sigtype;
|
||||||
|
var isMatch = Sighash.verify(
|
||||||
|
transaction,
|
||||||
|
signature.signature,
|
||||||
|
signature.publicKey,
|
||||||
|
signature.inputIndex,
|
||||||
|
input.output.script
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isMatch) {
|
||||||
|
signatureMatch = signature;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
return signatureMatch ? signatureMatch : null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
MultiSigInput.OPCODES_SIZE = 7; // serialized size (<=3) + 0 .. N .. M OP_CHECKMULTISIG
|
MultiSigInput.OPCODES_SIZE = 7; // serialized size (<=3) + 0 .. N .. M OP_CHECKMULTISIG
|
||||||
MultiSigInput.SIGNATURE_SIZE = 74; // size (1) + DER (<=72) + sighash (1)
|
MultiSigInput.SIGNATURE_SIZE = 74; // size (1) + DER (<=72) + sighash (1)
|
||||||
MultiSigInput.PUBKEY_SIZE = 34; // size (1) + DER (<=33)
|
MultiSigInput.PUBKEY_SIZE = 34; // size (1) + DER (<=33)
|
||||||
|
|
Loading…
Reference in New Issue