add data and tests for getheaders
This commit is contained in:
parent
e4741dc96e
commit
e5fb2bba31
@ -26,6 +26,10 @@ var blockHash = {
|
|||||||
'livenet': '000000000000000013413cf2536b491bf0988f52e90c476ffeb701c8bfdb1db9',
|
'livenet': '000000000000000013413cf2536b491bf0988f52e90c476ffeb701c8bfdb1db9',
|
||||||
'testnet': '0000000058cc069d964711cd25083c0a709f4df2b34c8ff9302ce71fe5b45786'
|
'testnet': '0000000058cc069d964711cd25083c0a709f4df2b34c8ff9302ce71fe5b45786'
|
||||||
};
|
};
|
||||||
|
var stopBlock = {
|
||||||
|
'livenet': '000000000000000006181d9d183e2191a5e704d6ed3513f29b0970198fb34d2e',
|
||||||
|
'testnet': '000000003d594c41db49d5a8b850344943438620acf79ce8aa88177f5b35e337'
|
||||||
|
};
|
||||||
var txHash = {
|
var txHash = {
|
||||||
'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b',
|
'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b',
|
||||||
'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b'
|
'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b'
|
||||||
@ -152,4 +156,32 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
peer.sendMessage(message);
|
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);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -601,7 +601,7 @@ Headers.prototype.fromBuffer = function(payload) {
|
|||||||
|
|
||||||
this.headers = [];
|
this.headers = [];
|
||||||
for (var i = 0; i < count; i++) {
|
for (var i = 0; i < count; i++) {
|
||||||
var header = BlockHeaderModel._fromBufferReader(parser);
|
var header = BlockHeaderModel.fromBufferReader(parser);
|
||||||
this.headers.push(header);
|
this.headers.push(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,7 +613,9 @@ Headers.prototype.getPayload = function() {
|
|||||||
put.varint(this.headers.length);
|
put.varint(this.headers.length);
|
||||||
|
|
||||||
for (var i = 0; i < this.headers.length; i++) {
|
for (var i = 0; i < this.headers.length; i++) {
|
||||||
var buffer = this.headers[i].toBuffer();
|
var buffer = this
|
||||||
|
.headers[i]
|
||||||
|
.toBuffer();
|
||||||
put.put(buffer);
|
put.put(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -685,24 +687,35 @@ module.exports.Transaction = Message.COMMANDS.tx = Transaction;
|
|||||||
* hashes.
|
* hashes.
|
||||||
*
|
*
|
||||||
* @name P2P.Message.GetBlocks
|
* @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
|
* @param{Buffer} [stop] - hash of the last block
|
||||||
*/
|
*/
|
||||||
function GetBlocks(starts, stop) {
|
function GetBlocks(starts, stop) {
|
||||||
|
$.checkArgument(_.isUndefined(starts) || _.isArray(starts));
|
||||||
this.command = 'getblocks';
|
this.command = 'getblocks';
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
this.version = PROTOCOL_VERSION;
|
this.version = PROTOCOL_VERSION;
|
||||||
|
|
||||||
|
starts = starts ? starts.map(function(hash) {
|
||||||
|
return _.isString(hash) ? BufferUtil.reverse(new Buffer(hash, 'hex')) : hash;
|
||||||
|
}) : undefined;
|
||||||
/**
|
/**
|
||||||
* @type {Array.Buffer}
|
* @type {Array.Buffer}
|
||||||
*/
|
*/
|
||||||
this.starts = starts || [];
|
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}
|
* @type {Array.Buffer}
|
||||||
* @desc Hashes to limit the amount of blocks to be sent
|
* @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);
|
util.inherits(GetBlocks, Message);
|
||||||
|
|
||||||
@ -727,14 +740,11 @@ GetBlocks.prototype.getPayload = function() {
|
|||||||
put.varint(this.starts.length);
|
put.varint(this.starts.length);
|
||||||
|
|
||||||
for (var i = 0; i < this.starts.length; i++) {
|
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]);
|
put.put(this.starts[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.stop.length !== 32) {
|
if (this.stop.length !== 32) {
|
||||||
throw new Error('Invalid hash length');
|
throw new Error('Invalid hash length: ' + this.stop.length);
|
||||||
}
|
}
|
||||||
put.put(this.stop);
|
put.put(this.stop);
|
||||||
|
|
||||||
@ -751,19 +761,8 @@ module.exports.GetBlocks = Message.COMMANDS.getblocks = GetBlocks;
|
|||||||
* @param{Buffer} [stop] - hash of the last block
|
* @param{Buffer} [stop] - hash of the last block
|
||||||
*/
|
*/
|
||||||
function GetHeaders(starts, stop) {
|
function GetHeaders(starts, stop) {
|
||||||
|
GetBlocks.call(this, starts, stop);
|
||||||
this.command = 'getheaders';
|
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);
|
util.inherits(GetHeaders, GetBlocks);
|
||||||
|
|||||||
@ -32,8 +32,8 @@
|
|||||||
"payload": ""
|
"payload": ""
|
||||||
},
|
},
|
||||||
"HEADERS": {
|
"HEADERS": {
|
||||||
"message": "",
|
"message": "f9beb4d9686561646572730000000000a1000000ffd6770b0202000000b91ddbbfc801b7fe6f470ce9528f98f01b496b53f23c411300000000000000004901c9d18d0a468b20cc62ddf75aee58cf410440ea390300bf7a5f6848be350508d4cb54c0a31a18b9f661ec0002000000a02d6472e3e6fc9a1cebeaad14a90208a715e2bd234ea00600000000000000006f596f650fbbd5478489c66d651c9e3ea56f394d1f1481f90975cf0c8dda45fd3ad4cb54c0a31a1872e262",
|
||||||
"payload": ""
|
"payload": "0202000000b91ddbbfc801b7fe6f470ce9528f98f01b496b53f23c411300000000000000004901c9d18d0a468b20cc62ddf75aee58cf410440ea390300bf7a5f6848be350508d4cb54c0a31a18b9f661ec0002000000a02d6472e3e6fc9a1cebeaad14a90208a715e2bd234ea00600000000000000006f596f650fbbd5478489c66d651c9e3ea56f394d1f1481f90975cf0c8dda45fd3ad4cb54c0a31a1872e262"
|
||||||
},
|
},
|
||||||
"TX": {
|
"TX": {
|
||||||
"message": "",
|
"message": "",
|
||||||
|
|||||||
@ -31,7 +31,7 @@ describe('Messages', function() {
|
|||||||
NotFound: 'notfound'
|
NotFound: 'notfound'
|
||||||
};
|
};
|
||||||
// TODO: add data for these
|
// 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);
|
var names = Object.keys(commands);
|
||||||
describe('named', function() {
|
describe('named', function() {
|
||||||
names.forEach(function(name) {
|
names.forEach(function(name) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user