Fix sync process by @matiu

This commit is contained in:
Gustavo Cortez 2014-05-26 14:09:25 -03:00
parent cb1861f10f
commit 0779dd6da7
2 changed files with 31 additions and 22 deletions

View File

@ -16,6 +16,7 @@ function BlockExtractor(dataDir, network) {
self.dataDir = dataDir;
self.files = glob.sync(path);
self.nfiles = self.files.length;
self.errorCount =0;
if (self.nfiles === 0)
throw new Error('Could not find block files at: ' + path);
@ -97,29 +98,40 @@ BlockExtractor.prototype.getNextBlock = function(cb) {
async.whilst(
function() {
return (!magic);
return (!magic || magic === '00000000');
},
function(w_cb) {
magic = null;
self.readCurrentFileSync();
if (self.currentFileIndex < 0) return cb();
var byte0 = self.currentParser ? self.currentParser.buffer(1).toString('hex') : null;
magic = self.currentParser ? self.currentParser.buffer(4).toString('hex')
: null ;
if (byte0) {
// Grab 3 bytes from block without removing them
var p = self.currentParser.pos;
var bytes123 = self.currentParser.subject.toString('hex',p,p+3);
magic = byte0 + bytes123;
if (!self.currentParser || self.currentParser.eof() || magic === '00000000') {
magic = null;
if (self.nextFile()) {
if (magic !=='00000000' && magic !== self.magic) {
if (self.errorCount++ > 4)
return cb(new Error('CRITICAL ERROR: Magic number mismatch: ' +
magic + '!=' + self.magic));
magic=null;
}
}
if (!self.currentParser || self.currentParser.eof() ) {
if (self.nextFile())
console.log('Moving forward to file:' + self.currentFile() );
return w_cb();
}
else {
else
console.log('Finished all files');
magic = null;
return w_cb();
}
magic = null;
return w_cb();
}
else {
return w_cb();
@ -128,15 +140,8 @@ BlockExtractor.prototype.getNextBlock = function(cb) {
},
function (a_cb) {
if (!magic) return a_cb();
if (magic !== self.magic) {
var e = new Error('CRITICAL ERROR: Magic number mismatch: ' +
magic + '!=' + self.magic);
return a_cb(e);
}
// spacer?
self.currentParser.word32le();
// Remove 3 bytes from magic and spacer
self.currentParser.buffer(3+4);
return a_cb();
},
function (a_cb) {
@ -145,6 +150,7 @@ BlockExtractor.prototype.getNextBlock = function(cb) {
b = new Block();
b.parse(self.currentParser);
b.getHash();
self.errorCount=0;
return a_cb();
},
], function(err) {

View File

@ -11,6 +11,7 @@ var assert = require('assert'),
networks = require('bitcore/networks'),
util = require('bitcore/util/util');
var should = require('chai');
//var txItemsValid = JSON.parse(fs.readFileSync('test/model/txitems.json'));
describe('BlockExtractor', function(){
@ -46,6 +47,8 @@ describe('BlockExtractor', function(){
it('should read next '+config.network+' block ', function(done) {
be.getNextBlock(function(err,b) {
assert(!err);
// 2nd block of testnet3
util.formatHashFull(b.hash).should.equal('00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206');
assert(b.timestamp > lastTs, 'timestamp > genesis_ts');
done();
});