compact: more compact block tests.
This commit is contained in:
parent
902fa59ca9
commit
acdd9c0a8a
@ -10,6 +10,8 @@ var block300025 = require('./data/block300025.json');
|
||||
var fs = require('fs');
|
||||
var cmpct = fs.readFileSync(__dirname + '/data/compactblock.hex', 'utf8').trim().split('\n');
|
||||
var bip152 = require('../lib/net/bip152');
|
||||
var cmpct2 = fs.readFileSync(__dirname + '/data/cmpct2', 'utf8').trim();
|
||||
var cmpct2block = fs.readFileSync(__dirname + '/data/cmpct2.bin');
|
||||
|
||||
describe('Block', function() {
|
||||
var mblock = bcoin.merkleblock({
|
||||
@ -292,4 +294,90 @@ describe('Block', function() {
|
||||
|
||||
cb();
|
||||
});
|
||||
|
||||
it('should handle compact block', function(cb) {
|
||||
var cblock = bip152.CompactBlock.fromRaw(cmpct2, 'hex');
|
||||
var block = bcoin.block.fromRaw(cmpct2block);
|
||||
var cblock2 = bip152.CompactBlock.fromBlock(block, cblock.keyNonce);
|
||||
var map = {};
|
||||
|
||||
assert.equal(cblock.toRaw().toString('hex'), cmpct2);
|
||||
assert.equal(cblock2.toRaw().toString('hex'), cmpct2);
|
||||
|
||||
for (var i = 0; i < block.txs.length; i++) {
|
||||
var tx = block.txs[i];
|
||||
map[tx.hash('hex')] = tx;
|
||||
}
|
||||
|
||||
var fakeMempool = {
|
||||
getSnapshot: function(callback) {
|
||||
return Object.keys(map);
|
||||
},
|
||||
getTX: function(hash, callback) {
|
||||
return map[hash];
|
||||
}
|
||||
};
|
||||
|
||||
//assert.equal(cblock.sid(block.txs[1].hash()), 125673511480291);
|
||||
|
||||
var result = cblock.fillMempool(fakeMempool);
|
||||
assert(result);
|
||||
for (var i = 0; i < cblock.available.length; i++)
|
||||
assert(cblock.available[i]);
|
||||
assert.equal(cblock.toBlock().toRaw().toString('hex'), block.toRaw().toString('hex'));
|
||||
cb();
|
||||
});
|
||||
|
||||
it('should handle half-full compact block', function(cb) {
|
||||
var cblock = bip152.CompactBlock.fromRaw(cmpct2, 'hex');
|
||||
var block = bcoin.block.fromRaw(cmpct2block);
|
||||
var cblock2 = bip152.CompactBlock.fromBlock(block, cblock.keyNonce);
|
||||
var map = {};
|
||||
|
||||
assert.equal(cblock.toRaw().toString('hex'), cmpct2);
|
||||
assert.equal(cblock2.toRaw().toString('hex'), cmpct2);
|
||||
|
||||
for (var i = 0; i < block.txs.length; i++) {
|
||||
var tx = block.txs[i];
|
||||
map[tx.hash('hex')] = tx;
|
||||
}
|
||||
|
||||
var mid = block.txs.length >>> 1;
|
||||
var keys = Object.keys(map).slice(0, mid);
|
||||
|
||||
var fakeMempool = {
|
||||
getSnapshot: function(callback) {
|
||||
return keys;
|
||||
},
|
||||
getTX: function(hash, callback) {
|
||||
return map[hash];
|
||||
}
|
||||
};
|
||||
|
||||
//assert.equal(cblock.sid(block.txs[1].hash()), 125673511480291);
|
||||
|
||||
var result = cblock.fillMempool(fakeMempool);
|
||||
assert(!result);
|
||||
|
||||
var req = cblock.toRequest();
|
||||
assert.equal(req.hash, cblock.hash('hex'));
|
||||
//assert.deepEqual(req.indexes, [5, 6, 7, 8, 9]);
|
||||
|
||||
req = bip152.TXRequest.fromRaw(req.toRaw());
|
||||
assert.equal(req.hash, cblock.hash('hex'));
|
||||
//assert.deepEqual(req.indexes, [5, 6, 7, 8, 9]);
|
||||
|
||||
var res = bip152.TXResponse.fromBlock(block, req);
|
||||
res = bip152.TXResponse.fromRaw(res.toRaw());
|
||||
|
||||
var result = cblock.fillMissing(res);
|
||||
assert(result);
|
||||
|
||||
for (var i = 0; i < cblock.available.length; i++)
|
||||
assert(cblock.available[i]);
|
||||
|
||||
assert.equal(cblock.toBlock().toRaw().toString('hex'), block.toRaw().toString('hex'));
|
||||
|
||||
cb();
|
||||
});
|
||||
});
|
||||
|
||||
1
test/data/cmpct2
Normal file
1
test/data/cmpct2
Normal file
File diff suppressed because one or more lines are too long
BIN
test/data/cmpct2.bin
Normal file
BIN
test/data/cmpct2.bin
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user