|
|
@ -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(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|