add custom datadir option.

This commit is contained in:
Christopher Jeffrey 2014-10-16 13:53:47 -07:00
parent fd1e193106
commit ef0bfa14eb
3 changed files with 54 additions and 4 deletions

View File

@ -7,13 +7,21 @@
process.title = 'bitcoind.js'; process.title = 'bitcoind.js';
var util = require('util'); var util = require('util');
var fs = require('fs');
var argv = require('optimist').argv; var argv = require('optimist').argv;
var rimraf = require('rimraf');
/** /**
* bitcoind * bitcoind
*/ */
var bitcoind = require('../')(); if (fs.existsSync(process.env.HOME + '/.libbitcoind-example')) {
rimraf.sync(process.env.HOME + '/.libbitcoind-example');
}
var bitcoind = require('../')({
directory: '~/.libbitcoind-example'
});
var genesisBlock = '0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'; var genesisBlock = '0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f';
var genesisTx = '0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b'; var genesisTx = '0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b';

View File

@ -8,6 +8,8 @@ var net = require('net');
var EventEmitter = require('events').EventEmitter; var EventEmitter = require('events').EventEmitter;
var bitcoindjs = require('../build/Release/bitcoindjs.node'); var bitcoindjs = require('../build/Release/bitcoindjs.node');
var util = require('util'); var util = require('util');
var fs = require('fs');
var mkdirp = require('mkdirp');
/** /**
* Bitcoin * Bitcoin
@ -28,9 +30,37 @@ function Bitcoin(options) {
EventEmitter.call(this); EventEmitter.call(this);
this.options = options; this.options = options || {};
this.wallet = Wallet; this.wallet = Wallet;
if (typeof this.options === 'string') {
this.options = { datadir: this.options };
}
if (this.options.directory) {
this.options.datadir = this.options.directory;
delete this.options.directory;
}
this.options.datadir = this.options.datadir.replace(/^~/, process.env.HOME);
this.config = this.datadir + '/bitcoin.conf';
if (!fs.existsSync(this.options.datadir)) {
mkdirp.sync(this.options.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'
+ '\n'
);
}
Bitcoin.global = this; Bitcoin.global = this;
Object.keys(exports).forEach(function(key) { Object.keys(exports).forEach(function(key) {
@ -65,8 +95,13 @@ Bitcoin.prototype.start = function(options, callback) {
if (!callback) { if (!callback) {
callback = options; callback = options;
options = null;
}
if (!options) {
options = {}; options = {};
} }
if (!callback) { if (!callback) {
callback = utils.NOOP; callback = utils.NOOP;
} }
@ -82,6 +117,12 @@ Bitcoin.prototype.start = function(options, callback) {
var exitCaught = none; var exitCaught = none;
var errorCaught = none; var errorCaught = none;
Object.keys(this.options).forEach(function(key) {
if (options[key] == null) {
options[key] = self.options[key];
}
});
this.log_pipe = bitcoindjs.start(options, function(err, status) { this.log_pipe = bitcoindjs.start(options, function(err, status) {
self._started = true; self._started = true;

View File

@ -18,10 +18,11 @@
], ],
"dependencies": { "dependencies": {
"nan": "1.3.0", "nan": "1.3.0",
"bn.js": "^0.10.0" "mkdirp": "0.5.0"
}, },
"devDependencies": { "devDependencies": {
"mocha": "~1.16.2", "mocha": "~1.16.2",
"optimist": "0.6.0" "optimist": "0.6.0",
"rimraf": "2.2.8"
} }
} }