Create data directory on a fresh start.

This commit is contained in:
Braydon Fuller 2015-07-22 17:33:28 -04:00
parent ac09e767fb
commit 6dc3577e00
2 changed files with 30 additions and 44 deletions

View File

@ -1,9 +1,3 @@
/**
* bitcoind.js
* Copyright (c) 2014, BitPay (MIT License)
* A bitcoind node.js binding.
*/
var net = require('net'); var net = require('net');
var EventEmitter = require('events').EventEmitter; var EventEmitter = require('events').EventEmitter;
var bitcoindjs = require('bindings')('bitcoindjs.node'); var bitcoindjs = require('bindings')('bitcoindjs.node');
@ -11,16 +5,13 @@ var util = require('util');
var fs = require('fs'); var fs = require('fs');
var mkdirp = require('mkdirp'); var mkdirp = require('mkdirp');
var tiny = require('tiny').json; var tiny = require('tiny').json;
var bitcore = require('bitcore');
// Compatibility with old node versions: var $ = bitcore.util.preconditions;
var setImmediate = global.setImmediate || process.nextTick.bind(process);
/**
* Daemon
*/
var daemon = Daemon; var daemon = Daemon;
function Daemon(options) { function Daemon(options) {
var self = this; var self = this;
@ -29,44 +20,25 @@ function Daemon(options) {
} }
if (Object.keys(this.instances).length) { if (Object.keys(this.instances).length) {
throw new throw new Error('Daemon cannot be instantiated more than once.');
Error('bitcoind.js cannot be instantiated more than once.');
} }
EventEmitter.call(this); EventEmitter.call(this);
$.checkArgument(options.datadir, 'Please specify a datadir');
this.options = options || {}; this.options = options || {};
if (!this.options.datadir) {
this.options.datadir = '~/.bitcoind.js';
}
this.options.datadir = this.options.datadir.replace(/^~/, process.env.HOME); this.options.datadir = this.options.datadir.replace(/^~/, process.env.HOME);
this.datadir = this.options.datadir; this.datadir = this.options.datadir;
this.config = this.datadir + '/bitcoin.conf'; this.config = this.datadir + '/bitcoin.conf';
this.network = Daemon['livenet'];
this.network = Daemon.livenet;
if (this.options.network === 'testnet') { if (this.options.network === 'testnet') {
this.network = Daemon['testnet']; this.network = Daemon.testnet;
} else if(this.options.network === 'regtest') { } else if(this.options.network === 'regtest') {
this.network = Daemon['regtest']; this.network = Daemon.regtest;
}
if (!fs.existsSync(this.datadir)) {
mkdirp.sync(this.datadir);
}
if (!fs.existsSync(this.config)) {
var password = ''
+ Math.random().toString(36).slice(2)
+ Math.random().toString(36).slice(2)
+ Math.random().toString(36).slice(2);
fs.writeFileSync(this.config, ''
+ 'rpcuser=bitcoinrpc\n'
+ 'rpcpassword=' + password + '\n'
);
} }
// Add hardcoded peers // Add hardcoded peers
@ -87,7 +59,8 @@ function Daemon(options) {
} }
fs.writeFileSync( fs.writeFileSync(
this.datadir + '/testnet3/bitcoin.conf', this.datadir + '/testnet3/bitcoin.conf',
fs.readFileSync(this.config)); fs.readFileSync(this.config)
);
} }
if (this.network.name === 'regtest') { if (this.network.name === 'regtest') {
@ -96,7 +69,8 @@ function Daemon(options) {
} }
fs.writeFileSync( fs.writeFileSync(
this.datadir + '/regtest/bitcoin.conf', this.datadir + '/regtest/bitcoin.conf',
fs.readFileSync(this.config)); fs.readFileSync(this.config)
);
} }
Object.keys(exports).forEach(function(key) { Object.keys(exports).forEach(function(key) {
@ -423,7 +397,6 @@ Daemon.prototype.getAddresses = function() {
}; };
Daemon.prototype.getProgress = function(callback) { Daemon.prototype.getProgress = function(callback) {
if (daemon.stopping) return [];
return bitcoindjs.getProgress(callback); return bitcoindjs.getProgress(callback);
}; };

View File

@ -9,6 +9,7 @@ var P2P = chainlib.P2P;
var fs = require('fs'); var fs = require('fs');
var BaseNode = chainlib.Node; var BaseNode = chainlib.Node;
var util = require('util'); var util = require('util');
var mkdirp = require('mkdirp');
var log = chainlib.log; var log = chainlib.log;
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var Networks = bitcore.Networks; var Networks = bitcore.Networks;
@ -36,6 +37,8 @@ Node.SYNC_STRATEGIES = {
BITCOIND: 'bitcoind' BITCOIND: 'bitcoind'
}; };
Node.DEFAULT_DAEMON_CONFIG = 'whitelist=127.0.0.1\n' + 'txindex=1\n';
Node.prototype.setSyncStrategy = function(strategy) { Node.prototype.setSyncStrategy = function(strategy) {
this.syncStrategy = strategy; this.syncStrategy = strategy;
@ -53,8 +56,18 @@ Node.prototype.setSyncStrategy = function(strategy) {
Node.prototype._loadBitcoinConf = function(config) { Node.prototype._loadBitcoinConf = function(config) {
$.checkArgument(config.datadir, 'Please specify "datadir" in configuration options'); $.checkArgument(config.datadir, 'Please specify "datadir" in configuration options');
var datadir = config.datadir.replace(/^~/, process.env.HOME); var datadir = config.datadir.replace(/^~/, process.env.HOME);
var configPath = datadir + '/bitcoin.conf';
this.bitcoinConfiguration = {}; this.bitcoinConfiguration = {};
var file = fs.readFileSync(datadir + '/bitcoin.conf');
if (!fs.existsSync(datadir)) {
mkdirp.sync(datadir);
}
if (!fs.existsSync(configPath)) {
fs.writeFileSync(configPath, Node.DEFAULT_DAEMON_CONFIG);
}
var file = fs.readFileSync(configPath);
var unparsed = file.toString().split('\n'); var unparsed = file.toString().split('\n');
for(var i = 0; i < unparsed.length; i++) { for(var i = 0; i < unparsed.length; i++) {
var line = unparsed[i]; var line = unparsed[i];