diff --git a/lib/transaction.js b/lib/transaction.js index e7762a2..6b824ba 100644 --- a/lib/transaction.js +++ b/lib/transaction.js @@ -3,6 +3,7 @@ var Txout = require('./txout'); var BufferWriter = require('./bufferwriter'); var BufferReader = require('./bufferreader'); var Varint = require('./varint'); +var Hash = require('./hash'); var Transaction = function Transaction(version, txinsvi, txins, txoutsvi, txouts, nlocktime) { if (!(this instanceof Transaction)) @@ -113,4 +114,12 @@ Transaction.prototype.toBufferWriter = function(bw) { return bw; }; +Transaction.prototype.hash = function() { + return Hash.sha256sha256(this.toBuffer()); +}; + +Transaction.prototype.id = function() { + return BufferReader(this.hash()).reverse().read(); +}; + module.exports = Transaction; diff --git a/test/transaction.js b/test/transaction.js index ba6f6fe..e43f6e7 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -124,4 +124,23 @@ describe('Transaction', function() { }); + describe('#hash', function() { + + it('should correctly calculate the hash of this known transaction', function() { + var tx = Transaction().fromBuffer(tx2buf); + var txhashbuf = new Buffer(Array.apply([], new Buffer(tx2idhex, 'hex')).reverse()); + tx.hash().toString('hex').should.equal(txhashbuf.toString('hex')); + }); + + }); + + describe('#id', function() { + + it('should correctly calculate the id of this known transaction', function() { + var tx = Transaction().fromBuffer(tx2buf); + tx.id().toString('hex').should.equal(tx2idhex); + }); + + }); + });