From 6c0745adce6d21bac0feea87eef46862ee32457e Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Thu, 26 Nov 2015 12:40:06 +1100 Subject: [PATCH] TxBuilder: add setLockTime --- src/transaction_builder.js | 17 +++++++++++++++++ test/fixtures/transaction_builder.json | 22 ++++++++++++++++++++++ test/transaction_builder.js | 4 ++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/transaction_builder.js b/src/transaction_builder.js index 73fd12b..64069f2 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -4,6 +4,8 @@ var bscript = require('./script') var bufferEquals = require('buffer-equals') var networks = require('./networks') var ops = require('./opcodes') +var typeforce = require('typeforce') +var types = require('./types') var ECPair = require('./ecpair') var ECSignature = require('./ecsignature') @@ -135,6 +137,21 @@ function TransactionBuilder (network) { this.tx = new Transaction() } +TransactionBuilder.prototype.setLockTime = function (locktime) { + typeforce(types.UInt32, locktime) + + // if any signatures exist, throw + if (this.inputs.some(function (input) { + if (!input.signatures) return false + + return input.signatures.some(function (s) { return s }) + })) { + throw new Error('No, this would invalidate signatures') + } + + this.tx.locktime = locktime +} + TransactionBuilder.fromTransaction = function (transaction, network) { var txb = new TransactionBuilder(network) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index 2ccda67..f17ceca 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -263,6 +263,28 @@ "value": 10000 } ] + }, + { + "description": "Transaction w/ nLockTime, pubKeyHash -> pubKeyHash", + "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006b483045022100a3b254e1c10b5d039f36c05f323995d6e5a367d98dd78a13d5bbc3991b35720e022022fccea3897d594de0689601fbd486588d5bfa6915be2386db0397ee9a6e80b601210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ffffffff0110270000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588acffff0000", + "locktime": 65535, + "inputs": [ + { + "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "vout": 0, + "signs": [ + { + "keyPair": "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn" + } + ] + } + ], + "outputs": [ + { + "script": "OP_DUP OP_HASH160 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5 OP_EQUALVERIFY OP_CHECKSIG", + "value": 10000 + } + ] } ], "fromTransaction": [ diff --git a/test/transaction_builder.js b/test/transaction_builder.js index 5720d62..b6d2896 100644 --- a/test/transaction_builder.js +++ b/test/transaction_builder.js @@ -17,13 +17,13 @@ function construct (f, sign) { var network = NETWORKS[f.network] var txb = new TransactionBuilder(network) - // FIXME: add support for locktime/version in TransactionBuilder API + // FIXME: add support for version in TransactionBuilder API if (f.version !== undefined) { txb.tx.version = f.version } if (f.locktime !== undefined) { - txb.tx.locktime = f.locktime + txb.setLockTime(f.locktime) } f.inputs.forEach(function (input) {