reindex option for sync

This commit is contained in:
Matias Alejo Garcia 2014-01-07 14:12:44 -03:00
parent 89657e971e
commit 8a1aa6b8fd
2 changed files with 42 additions and 28 deletions

View File

@ -36,6 +36,7 @@
}, },
"dependencies": { "dependencies": {
"classtool": "*", "classtool": "*",
"commander": "*",
"express": "~3.4.7", "express": "~3.4.7",
"jade": "~1.0.2", "jade": "~1.0.2",
"mongoose": "~3.8.3", "mongoose": "~3.8.3",

View File

@ -1,8 +1,11 @@
#!/usr/bin/env node #!/usr/bin/env node
process.env.NODE_ENV = process.env.NODE_ENV || 'development'; process.env.NODE_ENV = process.env.NODE_ENV || 'development';
require('buffertools').extend(); require('buffertools').extend();
var SYNC_VERSION = '0.1';
var program = require('commander');
var util = require('util'); var util = require('util');
var RpcClient = require('../node_modules/bitcore/RpcClient').class(); var RpcClient = require('../node_modules/bitcore/RpcClient').class();
var networks = require('../node_modules/bitcore/networks'); var networks = require('../node_modules/bitcore/networks');
@ -11,10 +14,37 @@ var Block = require('../app/models/Block');
var config = require('../config/config'); var config = require('../config/config');
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var networkName = process.argv[2] || 'testnet'; program
.version(SYNC_VERSION)
.option('-N --network [livenet]', 'Set bitcoin network [livenet]', 'livenet')
.option('-R --reindex', 'Force reindexing', '0')
.parse(process.argv);
var networkName = program.network;
var network = networkName == 'testnet' ? networks.testnet : networks.livenet; var network = networkName == 'testnet' ? networks.testnet : networks.livenet;
mongoose.connect(config.db);
var db = mongoose.connection;
var rpc = new RpcClient(config.bitcoind);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
syncBlocks(network, program.reindex, function(err) {
if (err) {
console.log(err);
}
mongoose.connection.close();
});
});
function getNextBlock(blockHash,cb) { function getNextBlock(blockHash,cb) {
if ( !blockHash ) { if ( !blockHash ) {
@ -47,43 +77,26 @@ function getNextBlock(blockHash,cb) {
} }
function syncBlocks(network, cb) { function syncBlocks(network, reindex, cb) {
var genesisHash = network.genesisBlock.hash.reverse().toString('hex');
if (reindex)
return getNextBlock(genesisHash, cb);
Block.findOne({}, {}, { sort: { 'confirmations' : 1 } }, function(err, block) { Block.findOne({}, {}, { sort: { 'confirmations' : 1 } }, function(err, block) {
if (err) { if (err) return cb(err);
return cb(err);
}
var nextHash = var nextHash =
block && block.hash block && block.hash
? block.hash ? block.hash
: network.genesisBlock.hash.reverse().toString('hex') : genesisHash
; ;
console.log('Starting at hash: ' + nextHash); console.log('Starting at hash: ' + nextHash);
getNextBlock(nextHash, cb); return getNextBlock(nextHash, cb);
}); });
} }
mongoose.connect(config.db);
var db = mongoose.connection;
var rpc = new RpcClient(config.bitcoind);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
syncBlocks(network, function(err) {
if (err) {
console.log(err);
}
mongoose.connection.close();
});
});