diff --git a/src/transaction.js b/src/transaction.js index 1bfff5d..d8a0fc4 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -162,7 +162,17 @@ Transaction.prototype.toHex = function() { * hashType, serializes and finally hashes the result. This hash can then be * used to sign the transaction input in question. */ -Transaction.prototype.hashForSignature = function(prevOutScript, inIndex, hashType) { +Transaction.prototype.hashForSignature = function(inIndex, prevOutScript, hashType) { + // FIXME: remove in 2.x.y + if (arguments[0] instanceof Script) { + console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)') + + // swap the arguments (must be stored in tmp, arguments is special) + var tmp = arguments[0] + inIndex = arguments[1] + prevOutScript = tmp + } + assert(inIndex >= 0, 'Invalid vin index') assert(inIndex < this.ins.length, 'Invalid vin index') assert(prevOutScript instanceof Script, 'Invalid Script object') @@ -296,35 +306,39 @@ Transaction.fromHex = function(hex) { return Transaction.fromBuffer(new Buffer(hex, 'hex')) } -/** - * Signs a pubKeyHash output at some index with the given key - */ +Transaction.prototype.setInputScript = function(index, script) { + this.ins[index].script = script +} + +// FIXME: remove in 2.x.y Transaction.prototype.sign = function(index, privKey, hashType) { + console.warn("Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.") + var prevOutScript = privKey.pub.getAddress().toOutputScript() var signature = this.signInput(index, prevOutScript, privKey, hashType) - // FIXME: Assumed prior TX was pay-to-pubkey-hash var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub) this.setInputScript(index, scriptSig) } +// FIXME: remove in 2.x.y Transaction.prototype.signInput = function(index, prevOutScript, privKey, hashType) { + console.warn("Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.") + hashType = hashType || Transaction.SIGHASH_ALL - var hash = this.hashForSignature(prevOutScript, index, hashType) + var hash = this.hashForSignature(index, prevOutScript, hashType) var signature = privKey.sign(hash) return signature.toScriptSignature(hashType) } -Transaction.prototype.setInputScript = function(index, script) { - this.ins[index].script = script -} - -// FIXME: could be validateInput(index, prevTxOut, pub) +// FIXME: remove in 2.x.y Transaction.prototype.validateInput = function(index, prevOutScript, pubKey, buffer) { + console.warn("Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.") + var parsed = ECSignature.parseScriptSignature(buffer) - var hash = this.hashForSignature(prevOutScript, index, parsed.hashType) + var hash = this.hashForSignature(index, prevOutScript, parsed.hashType) return pubKey.verify(hash, parsed.signature) } diff --git a/test/bitcoin.core.js b/test/bitcoin.core.js index 71bd7e6..5cf004b 100644 --- a/test/bitcoin.core.js +++ b/test/bitcoin.core.js @@ -183,7 +183,7 @@ describe('Bitcoin-core', function() { var actualHash try { - actualHash = transaction.hashForSignature(script, inIndex, hashType) + actualHash = transaction.hashForSignature(inIndex, script, hashType) } catch (e) { // don't fail if we don't support it yet, TODO if (!e.message.match(/not yet supported/)) throw e diff --git a/test/transaction.js b/test/transaction.js index a8aa1d7..fc2711d 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -221,7 +221,7 @@ describe('Transaction', function() { // TODO: // hashForSignature: [Function], - // FIXME: could be better + // FIXME: remove in 2.x.y describe('signInput/validateInput', function() { it('works for multi-sig redeem script', function() { var tx = new Transaction()