chain: fix requesting known blocks
This commit is contained in:
parent
c3239b7f36
commit
b3c6eb06bc
@ -49,7 +49,7 @@ Chain.prototype.add = function add(block) {
|
|||||||
var last = (this.hashes.length && pos > 0) ? this.hashes[pos - 1] : null;
|
var last = (this.hashes.length && pos > 0) ? this.hashes[pos - 1] : null;
|
||||||
|
|
||||||
// Add orphan
|
// Add orphan
|
||||||
if (last && prev !== last) {
|
if (last && prev !== last && !this.bloom.test(rhash)) {
|
||||||
if (!this.bloom.test(rhash) && !this.orphan.map[prev]) {
|
if (!this.bloom.test(rhash) && !this.orphan.map[prev]) {
|
||||||
this.orphan.count++;
|
this.orphan.count++;
|
||||||
this.orphan.map[prev] = block;
|
this.orphan.map[prev] = block;
|
||||||
@ -59,16 +59,19 @@ Chain.prototype.add = function add(block) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bloom.add(rhash);
|
|
||||||
|
|
||||||
// Sorted insert
|
|
||||||
var pos = utils.binaryInsert(this.ts, block.ts, function(a, b) {
|
|
||||||
return a - b;
|
|
||||||
}, true);
|
|
||||||
|
|
||||||
var hash = block.hash('hex');
|
var hash = block.hash('hex');
|
||||||
this.ts.splice(pos, 0, block.ts);
|
|
||||||
this.hashes.splice(pos, 0, hash);
|
// It may be a re-requested block
|
||||||
|
if (!this.bloom.test(rhash)) {
|
||||||
|
// Sorted insert
|
||||||
|
var pos = utils.binaryInsert(this.ts, block.ts, function(a, b) {
|
||||||
|
return a - b;
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
this.ts.splice(pos, 0, block.ts);
|
||||||
|
this.hashes.splice(pos, 0, hash);
|
||||||
|
this.bloom.add(rhash);
|
||||||
|
}
|
||||||
|
|
||||||
// Blocks is a FIFO queue, acting like a cache for the requests
|
// Blocks is a FIFO queue, acting like a cache for the requests
|
||||||
this.blocks.push(block);
|
this.blocks.push(block);
|
||||||
@ -117,6 +120,8 @@ Chain.prototype.getLast = function getLast() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Chain.prototype.has = function has(hash) {
|
Chain.prototype.has = function has(hash) {
|
||||||
|
if (!Array.isArray(hash))
|
||||||
|
hash = utils.toArray(hash, 'hex');
|
||||||
return this.bloom.test(hash) && !this.requests[utils.toHex(hash)];
|
return this.bloom.test(hash) && !this.requests[utils.toHex(hash)];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -128,11 +133,11 @@ Chain.prototype.get = function get(hash, cb) {
|
|||||||
if (this.blocks[i].hash('hex') === hash)
|
if (this.blocks[i].hash('hex') === hash)
|
||||||
return cb(this.blocks[i]);
|
return cb(this.blocks[i]);
|
||||||
|
|
||||||
this.emit('missing', hash);
|
|
||||||
if (this.requests[hash])
|
if (this.requests[hash])
|
||||||
this.requests[hash].push(cb);
|
this.requests[hash].push(cb);
|
||||||
else
|
else
|
||||||
this.requests[hash] = [ cb ];
|
this.requests[hash] = [ cb ];
|
||||||
|
this.emit('missing', hash);
|
||||||
};
|
};
|
||||||
|
|
||||||
Chain.prototype.isFull = function isFull() {
|
Chain.prototype.isFull = function isFull() {
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
"hash.js": "^0.2.0"
|
"hash.js": "^0.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"browserify": "^3.44.2",
|
||||||
"mocha": "^1.18.2"
|
"mocha": "^1.18.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user