Merge pull request #88 from cmgustavo/bug/01-sync
Fix sync process by @matiu
This commit is contained in:
commit
09baa94a8b
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue