From 8a1aa6b8fd9213094209ae52a2f3bacbf794c3f0 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Tue, 7 Jan 2014 14:12:44 -0300 Subject: [PATCH] reindex option for sync --- package.json | 1 + util/sync.js | 67 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 0fc2f26..51a566e 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ }, "dependencies": { "classtool": "*", + "commander": "*", "express": "~3.4.7", "jade": "~1.0.2", "mongoose": "~3.8.3", diff --git a/util/sync.js b/util/sync.js index 9aff445..f1be0a8 100755 --- a/util/sync.js +++ b/util/sync.js @@ -1,8 +1,11 @@ #!/usr/bin/env node process.env.NODE_ENV = process.env.NODE_ENV || 'development'; + require('buffertools').extend(); +var SYNC_VERSION = '0.1'; +var program = require('commander'); var util = require('util'); var RpcClient = require('../node_modules/bitcore/RpcClient').class(); var networks = require('../node_modules/bitcore/networks'); @@ -11,10 +14,37 @@ var Block = require('../app/models/Block'); var config = require('../config/config'); 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; + +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) { if ( !blockHash ) { @@ -47,43 +77,26 @@ function getNextBlock(blockHash,cb) { } -function syncBlocks(network, cb) { +function syncBlocks(network, reindex, cb) { - Block.findOne({}, {}, { sort: { 'confirmations' : 1 } }, function(err, block) { - if (err) { - return cb(err); - } + var genesisHash = network.genesisBlock.hash.reverse().toString('hex'); + + if (reindex) + return getNextBlock(genesisHash, cb); + Block.findOne({}, {}, { sort: { 'confirmations' : 1 } }, function(err, block) { + if (err) return cb(err); var nextHash = block && block.hash ? block.hash - : network.genesisBlock.hash.reverse().toString('hex') + : genesisHash ; 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(); - }); -}); - - -