add data and tests for getheaders

This commit is contained in:
Manuel Araoz 2015-02-02 18:22:30 -03:00
parent e4741dc96e
commit e5fb2bba31
4 changed files with 54 additions and 23 deletions

View File

@ -26,6 +26,10 @@ var blockHash = {
'livenet': '000000000000000013413cf2536b491bf0988f52e90c476ffeb701c8bfdb1db9',
'testnet': '0000000058cc069d964711cd25083c0a709f4df2b34c8ff9302ce71fe5b45786'
};
var stopBlock = {
'livenet': '000000000000000006181d9d183e2191a5e704d6ed3513f29b0970198fb34d2e',
'testnet': '000000003d594c41db49d5a8b850344943438620acf79ce8aa88177f5b35e337'
};
var txHash = {
'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b',
'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b'
@ -152,4 +156,32 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
peer.sendMessage(message);
});
});
var from = [blockHash[network.name]];
var stop = stopBlock[network.name];
it('can get headers', function(cb) {
connect(function(peer) {
peer.once('headers', function(message) {
(message instanceof Messages.Headers).should.equal(true);
message.headers.length.should.equal(2);
cb();
});
var message = new Messages.GetHeaders(from, stop);
peer.sendMessage(message);
});
});
it.skip('can get blocks', function(cb) {
connect(function(peer) {
peer.on('inv', function(message) {
(message instanceof Messages.Inventory).should.equal(true);
console.log('inv' + message.inventory.length);
if (message.inventory.length === 2) {
console.log(message);
message.inventory[0].type.should.equal(Messages.Inventory.TYPE.BLOCK);
cb();
}
});
var message = new Messages.GetBlocks(from, stop);
peer.sendMessage(message);
});
});
});

View File

@ -601,7 +601,7 @@ Headers.prototype.fromBuffer = function(payload) {
this.headers = [];
for (var i = 0; i < count; i++) {
var header = BlockHeaderModel._fromBufferReader(parser);
var header = BlockHeaderModel.fromBufferReader(parser);
this.headers.push(header);
}
@ -613,7 +613,9 @@ Headers.prototype.getPayload = function() {
put.varint(this.headers.length);
for (var i = 0; i < this.headers.length; i++) {
var buffer = this.headers[i].toBuffer();
var buffer = this
.headers[i]
.toBuffer();
put.put(buffer);
}
@ -685,24 +687,35 @@ module.exports.Transaction = Message.COMMANDS.tx = Transaction;
* hashes.
*
* @name P2P.Message.GetBlocks
* @param{Array} starts - array of buffers with the starting block hashes
* @param{Array} starts - array of buffers or strings with the starting block hashes
* @param{Buffer} [stop] - hash of the last block
*/
function GetBlocks(starts, stop) {
$.checkArgument(_.isUndefined(starts) || _.isArray(starts));
this.command = 'getblocks';
/**
* @type {number}
*/
this.version = PROTOCOL_VERSION;
starts = starts ? starts.map(function(hash) {
return _.isString(hash) ? BufferUtil.reverse(new Buffer(hash, 'hex')) : hash;
}) : undefined;
/**
* @type {Array.Buffer}
*/
this.starts = starts || [];
for (var i = 0; i < this.starts.length; i++) {
if (this.starts[i].length !== 32) {
throw new Error('Invalid hash ' + i + ' length: ' + this.starts[i].length);
}
}
/**
* @type {Array.Buffer}
* @desc Hashes to limit the amount of blocks to be sent
*/
this.stop = stop || BufferUtil.NULL_HASH;
this.stop = (_.isString(stop) ? BufferUtil.reverse(new Buffer(stop, 'hex')) : stop) || BufferUtil.NULL_HASH;
}
util.inherits(GetBlocks, Message);
@ -727,14 +740,11 @@ GetBlocks.prototype.getPayload = function() {
put.varint(this.starts.length);
for (var i = 0; i < this.starts.length; i++) {
if (this.starts[i].length !== 32) {
throw new Error('Invalid hash length');
}
put.put(this.starts[i]);
}
if (this.stop.length !== 32) {
throw new Error('Invalid hash length');
throw new Error('Invalid hash length: ' + this.stop.length);
}
put.put(this.stop);
@ -751,19 +761,8 @@ module.exports.GetBlocks = Message.COMMANDS.getblocks = GetBlocks;
* @param{Buffer} [stop] - hash of the last block
*/
function GetHeaders(starts, stop) {
GetBlocks.call(this, starts, stop);
this.command = 'getheaders';
/**
* @type {number}
*/
this.version = PROTOCOL_VERSION;
/**
* @type {Array.Buffer}
*/
this.starts = starts || [];
/**
* @type {Array.Buffer}
*/
this.stop = stop || BufferUtil.NULL_HASH;
}
util.inherits(GetHeaders, GetBlocks);

View File

@ -32,8 +32,8 @@
"payload": ""
},
"HEADERS": {
"message": "",
"payload": ""
"message": "f9beb4d9686561646572730000000000a1000000ffd6770b0202000000b91ddbbfc801b7fe6f470ce9528f98f01b496b53f23c411300000000000000004901c9d18d0a468b20cc62ddf75aee58cf410440ea390300bf7a5f6848be350508d4cb54c0a31a18b9f661ec0002000000a02d6472e3e6fc9a1cebeaad14a90208a715e2bd234ea00600000000000000006f596f650fbbd5478489c66d651c9e3ea56f394d1f1481f90975cf0c8dda45fd3ad4cb54c0a31a1872e262",
"payload": "0202000000b91ddbbfc801b7fe6f470ce9528f98f01b496b53f23c411300000000000000004901c9d18d0a468b20cc62ddf75aee58cf410440ea390300bf7a5f6848be350508d4cb54c0a31a18b9f661ec0002000000a02d6472e3e6fc9a1cebeaad14a90208a715e2bd234ea00600000000000000006f596f650fbbd5478489c66d651c9e3ea56f394d1f1481f90975cf0c8dda45fd3ad4cb54c0a31a1872e262"
},
"TX": {
"message": "",

View File

@ -31,7 +31,7 @@ describe('Messages', function() {
NotFound: 'notfound'
};
// TODO: add data for these
var noPayload = ['Alert', 'Reject', 'GetBlocks', 'GetHeaders', 'GetData', 'Headers'];
var noPayload = ['Alert', 'Reject', 'GetBlocks', 'GetHeaders', 'GetData'];
var names = Object.keys(commands);
describe('named', function() {
names.forEach(function(name) {