|
|
@ -2,6 +2,8 @@ |
|
|
|
|
|
|
|
var _ = require('lodash'); |
|
|
|
var levelup = require('levelup'); |
|
|
|
var multilevel = require('multilevel'); |
|
|
|
var net = require('net'); |
|
|
|
var async = require('async'); |
|
|
|
var $ = require('preconditions').singleton(); |
|
|
|
var log = require('npmlog'); |
|
|
@ -16,9 +18,20 @@ var Notification = require('./model/notification'); |
|
|
|
|
|
|
|
var Storage = function(opts) { |
|
|
|
opts = opts || {}; |
|
|
|
this.db = opts.db || levelup(opts.dbPath || './db/bws.db', { |
|
|
|
valueEncoding: 'json' |
|
|
|
}); |
|
|
|
this.db = opts.db; |
|
|
|
|
|
|
|
if (!this.db) { |
|
|
|
if (opts.multiLevel) { |
|
|
|
this.db = multilevel.client(); |
|
|
|
var con = net.connect(opts.multiLevel); |
|
|
|
con.pipe(this.db.createRpcStream()).pipe(con); |
|
|
|
console.log('Connected to multilevel server at:', opts.multiLevel); |
|
|
|
} else { |
|
|
|
this.db = levelup(opts.dbPath || './db/bws.db', { |
|
|
|
valueEncoding: 'json' |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var zeroPad = function(x, length) { |
|
|
@ -134,9 +147,9 @@ Storage.prototype.fetchPendingTxs = function(walletId, cb) { |
|
|
|
var txs = []; |
|
|
|
var key = KEY.PENDING_TXP(walletId); |
|
|
|
this.db.createReadStream({ |
|
|
|
gte: key, |
|
|
|
lt: key + '~' |
|
|
|
}) |
|
|
|
gte: key, |
|
|
|
lt: key + '~' |
|
|
|
}) |
|
|
|
.on('data', function(data) { |
|
|
|
txs.push(TxProposal.fromObj(data.value)); |
|
|
|
}) |
|
|
@ -170,11 +183,11 @@ Storage.prototype.fetchTxs = function(walletId, opts, cb) { |
|
|
|
var endkey = KEY.TXP(walletId, opts.maxTs); |
|
|
|
|
|
|
|
this.db.createReadStream({ |
|
|
|
gt: key, |
|
|
|
lt: endkey + '~', |
|
|
|
reverse: true, |
|
|
|
limit: opts.limit, |
|
|
|
}) |
|
|
|
gt: key, |
|
|
|
lt: endkey + '~', |
|
|
|
reverse: true, |
|
|
|
limit: opts.limit, |
|
|
|
}) |
|
|
|
.on('data', function(data) { |
|
|
|
txs.push(TxProposal.fromObj(data.value)); |
|
|
|
}) |
|
|
@ -207,11 +220,11 @@ Storage.prototype.fetchNotifications = function(walletId, opts, cb) { |
|
|
|
var endkey = KEY.NOTIFICATION(walletId, opts.maxTs); |
|
|
|
|
|
|
|
this.db.createReadStream({ |
|
|
|
gt: key, |
|
|
|
lt: endkey + '~', |
|
|
|
reverse: opts.reverse, |
|
|
|
limit: opts.limit, |
|
|
|
}) |
|
|
|
gt: key, |
|
|
|
lt: endkey + '~', |
|
|
|
reverse: opts.reverse, |
|
|
|
limit: opts.limit, |
|
|
|
}) |
|
|
|
.on('data', function(data) { |
|
|
|
txs.push(Notification.fromObj(data.value)); |
|
|
|
}) |
|
|
@ -271,9 +284,9 @@ Storage.prototype._delByKey = function(key, cb) { |
|
|
|
var self = this; |
|
|
|
var keys = []; |
|
|
|
this.db.createKeyStream({ |
|
|
|
gte: key, |
|
|
|
lt: key + '~', |
|
|
|
}) |
|
|
|
gte: key, |
|
|
|
lt: key + '~', |
|
|
|
}) |
|
|
|
.on('data', function(key) { |
|
|
|
keys.push(key); |
|
|
|
}) |
|
|
@ -328,9 +341,9 @@ Storage.prototype.fetchAddresses = function(walletId, cb) { |
|
|
|
var addresses = []; |
|
|
|
var key = KEY.ADDRESS(walletId); |
|
|
|
this.db.createReadStream({ |
|
|
|
gte: key, |
|
|
|
lt: key + '~' |
|
|
|
}) |
|
|
|
gte: key, |
|
|
|
lt: key + '~' |
|
|
|
}) |
|
|
|
.on('data', function(data) { |
|
|
|
addresses.push(Address.fromObj(data.value)); |
|
|
|
}) |
|
|
|