add OP_CHECKLOCKTIMEVERIFY and integration tests

This commit is contained in:
Daniel Cousens 2015-12-17 16:10:13 +11:00
parent 07cf0bd057
commit cab3022719
2 changed files with 58 additions and 2 deletions

View file

@ -113,6 +113,8 @@
"OP_NOP1": 176,
"OP_NOP2": 177,
"OP_CHECKLOCKTIMEVERIFY": 177,
"OP_NOP3": 178,
"OP_NOP4": 179,
"OP_NOP5": 180,

View file

@ -54,8 +54,62 @@ describe('bitcoinjs-lib (advanced)', function () {
var actualScript = actual.outs[0].script
assert.deepEqual(actualScript, dataScript)
assert.deepEqual(dataScript, dataScript2)
assert.deepEqual(data, data2)
done()
})
})
})
})
it('can create a transaction using OP_CHECKLOCKTIMEVERIFY', function (done) {
this.timeout(30000)
var network = bitcoin.networks.testnet
var keyPair = bitcoin.ECPair.makeRandom({ network: network })
var address = keyPair.getAddress()
blockchain.t.faucet(address, 2e4, function (err, unspents) {
if (err) return done(err)
// use the oldest unspent
var unspent = unspents.pop()
var tx = new bitcoin.TransactionBuilder(network)
// now + 1 month
var hodlDate = Math.floor((Date.now() + new Date(0).setMonth(1)) / 1000)
var hodlLockTimeBuffer = new Buffer(4)
hodlLockTimeBuffer.writeInt32LE(hodlDate | 0, 0)
// {signature} {signature} or
// OP_0 {signature} after 1 month
var hodlScript = bitcoin.script.compile([
bitcoin.opcodes.OP_IF,
hodlLockTimeBuffer,
bitcoin.opcodes.OP_CHECKLOCKTIMEVERIFY,
bitcoin.opcodes.OP_DROP,
bitcoin.opcodes.OP_ELSE,
keyPair.getPublicKeyBuffer(),
bitcoin.opcodes.OP_CHECKSIGVERIFY,
bitcoin.opcodes.OP_ENDIF,
keyPair.getPublicKeyBuffer(),
bitcoin.opcodes.OP_CHECKSIG
])
tx.addInput(unspent.txId, unspent.vout)
tx.addOutput(hodlScript, 1000)
tx.sign(0, keyPair)
var txBuilt = tx.build()
blockchain.t.transactions.propagate(txBuilt.toHex(), function (err) {
if (err) return done(err)
// check that the message was propagated
blockchain.t.transactions.get(txBuilt.getId(), function (err, transaction) {
if (err) return done(err)
var actual = bitcoin.Transaction.fromHex(transaction.txHex)
var actualScript = actual.outs[0].script
assert.deepEqual(actualScript, hodlScript)
done()
})