wallet: range fixes. tests.
This commit is contained in:
parent
1a8d7084a5
commit
e2d530c0da
@ -1410,19 +1410,24 @@ TXDB.prototype.getCoinHashes = function getCoinHashes(account, callback) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
TXDB.prototype.getHeightRangeHashes = function getHeightRangeHashes(account, options, callback) {
|
TXDB.prototype.getHeightRangeHashes = function getHeightRangeHashes(account, options, callback) {
|
||||||
|
var start, end;
|
||||||
|
|
||||||
if (typeof account !== 'number') {
|
if (typeof account !== 'number') {
|
||||||
callback = options;
|
callback = options;
|
||||||
options = account;
|
options = account;
|
||||||
account = null;
|
account = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start = options.start || 0;
|
||||||
|
end = options.end || 0xffffffff;
|
||||||
|
|
||||||
this.iterate({
|
this.iterate({
|
||||||
gte: account != null
|
gte: account != null
|
||||||
? layout.H(account, options.start, constants.NULL_HASH)
|
? layout.H(account, start, constants.NULL_HASH)
|
||||||
: layout.h(options.start, constants.NULL_HASH),
|
: layout.h(start, constants.NULL_HASH),
|
||||||
lte: account != null
|
lte: account != null
|
||||||
? layout.H(account, options.end, constants.HIGH_HASH)
|
? layout.H(account, end, constants.HIGH_HASH)
|
||||||
: layout.h(options.end, constants.HIGH_HASH),
|
: layout.h(end, constants.HIGH_HASH),
|
||||||
limit: options.limit,
|
limit: options.limit,
|
||||||
reverse: options.reverse,
|
reverse: options.reverse,
|
||||||
transform: function(key) {
|
transform: function(key) {
|
||||||
@ -1458,18 +1463,23 @@ TXDB.prototype.getHeightHashes = function getHeightHashes(height, callback) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
TXDB.prototype.getRangeHashes = function getRangeHashes(account, options, callback) {
|
TXDB.prototype.getRangeHashes = function getRangeHashes(account, options, callback) {
|
||||||
|
var start, end;
|
||||||
|
|
||||||
if (typeof account === 'function') {
|
if (typeof account === 'function') {
|
||||||
callback = account;
|
callback = account;
|
||||||
account = null;
|
account = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start = options.start || 0;
|
||||||
|
end = options.end || 0xffffffff;
|
||||||
|
|
||||||
this.iterate({
|
this.iterate({
|
||||||
gte: account != null
|
gte: account != null
|
||||||
? layout.M(account, options.start, constants.NULL_HASH)
|
? layout.M(account, start, constants.NULL_HASH)
|
||||||
: layout.m(options.start, constants.NULL_HASH),
|
: layout.m(start, constants.NULL_HASH),
|
||||||
lte: account != null
|
lte: account != null
|
||||||
? layout.M(account, options.end, constants.HIGH_HASH)
|
? layout.M(account, end, constants.HIGH_HASH)
|
||||||
: layout.m(options.end, constants.HIGH_HASH),
|
: layout.m(end, constants.HIGH_HASH),
|
||||||
limit: options.limit,
|
limit: options.limit,
|
||||||
reverse: options.reverse,
|
reverse: options.reverse,
|
||||||
transform: function(key) {
|
transform: function(key) {
|
||||||
@ -1487,8 +1497,8 @@ TXDB.prototype.getRangeHashes = function getRangeHashes(account, options, callba
|
|||||||
* Get transactions by timestamp range.
|
* Get transactions by timestamp range.
|
||||||
* @param {Number?} account
|
* @param {Number?} account
|
||||||
* @param {Object} options
|
* @param {Object} options
|
||||||
* @param {Number} options.start - Start height.
|
* @param {Number} options.start - Start time.
|
||||||
* @param {Number} options.end - End height.
|
* @param {Number} options.end - End time.
|
||||||
* @param {Number?} options.limit - Max number of records.
|
* @param {Number?} options.limit - Max number of records.
|
||||||
* @param {Boolean?} options.reverse - Reverse order.
|
* @param {Boolean?} options.reverse - Reverse order.
|
||||||
* @param {Function} callback - Returns [Error, {@link TX}[]].
|
* @param {Function} callback - Returns [Error, {@link TX}[]].
|
||||||
|
|||||||
@ -1550,6 +1550,26 @@ Wallet.prototype.getLastTime = function getLastTime(account, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a range of transactions between two timestamps (accesses db).
|
||||||
|
* @param {(String|Number)?} account
|
||||||
|
* @param {Object} options
|
||||||
|
* @param {Number} options.start
|
||||||
|
* @param {Number} options.end
|
||||||
|
* @param {Function} callback - Returns [Error, {@link TX}[]].
|
||||||
|
*/
|
||||||
|
|
||||||
|
Wallet.prototype.getRange = function getRange(account, options, callback) {
|
||||||
|
if (typeof options === 'function') {
|
||||||
|
callback = options;
|
||||||
|
options = account;
|
||||||
|
account = null;
|
||||||
|
}
|
||||||
|
this._getIndex(account, callback, function(account, callback) {
|
||||||
|
this.tx.getRange(account, options, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the last N transactions (accesses db).
|
* Get the last N transactions (accesses db).
|
||||||
* @param {(String|Number)?} account
|
* @param {(String|Number)?} account
|
||||||
@ -1568,26 +1588,6 @@ Wallet.prototype.getLast = function getLast(account, limit, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a range of transactions between two timestamps (accesses db).
|
|
||||||
* @param {(String|Number)?} account
|
|
||||||
* @param {Object} options
|
|
||||||
* @param {Number} options.start
|
|
||||||
* @param {Number} options.end
|
|
||||||
* @param {Function} callback - Returns [Error, {@link TX}[]].
|
|
||||||
*/
|
|
||||||
|
|
||||||
Wallet.prototype.getTimeRange = function getTimeRange(account, options, callback) {
|
|
||||||
if (typeof options === 'function') {
|
|
||||||
callback = options;
|
|
||||||
options = account;
|
|
||||||
account = null;
|
|
||||||
}
|
|
||||||
this._getIndex(account, callback, function(account, callback) {
|
|
||||||
this.tx.getTimeRange(account, options, callback);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zap stale TXs from wallet (accesses db).
|
* Zap stale TXs from wallet (accesses db).
|
||||||
* @param {(Number|String)?} account
|
* @param {(Number|String)?} account
|
||||||
|
|||||||
@ -57,6 +57,7 @@ describe('Wallet', function() {
|
|||||||
db: 'memory',
|
db: 'memory',
|
||||||
verify: true
|
verify: true
|
||||||
});
|
});
|
||||||
|
var lastW;
|
||||||
|
|
||||||
it('should open walletdb', function(cb) {
|
it('should open walletdb', function(cb) {
|
||||||
constants.tx.COINBASE_MATURITY = 0;
|
constants.tx.COINBASE_MATURITY = 0;
|
||||||
@ -818,6 +819,7 @@ describe('Wallet', function() {
|
|||||||
it('should fail to fill tx with account 1', function(cb) {
|
it('should fail to fill tx with account 1', function(cb) {
|
||||||
walletdb.create({}, function(err, w1) {
|
walletdb.create({}, function(err, w1) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
|
lastW = w1;
|
||||||
w1.createAccount({ name: 'foo' }, function(err, acc) {
|
w1.createAccount({ name: 'foo' }, function(err, acc) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(acc.name, 'foo');
|
assert.equal(acc.name, 'foo');
|
||||||
@ -860,6 +862,7 @@ describe('Wallet', function() {
|
|||||||
.addOutput(account.receiveAddress, 5460)
|
.addOutput(account.receiveAddress, 5460)
|
||||||
.addOutput(account.receiveAddress, 5460);
|
.addOutput(account.receiveAddress, 5460);
|
||||||
|
|
||||||
|
t1.ps = 0xdeadbeef;
|
||||||
t1.addInput(dummyInput);
|
t1.addInput(dummyInput);
|
||||||
|
|
||||||
walletdb.addTX(t1, function(err) {
|
walletdb.addTX(t1, function(err) {
|
||||||
@ -1001,10 +1004,47 @@ describe('Wallet', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should get range of txs', function(cb) {
|
||||||
|
var w1 = lastW;
|
||||||
|
w1.getRange({ start: 0xdeadbeef - 1000 }, function(err, txs) {
|
||||||
|
if (err)
|
||||||
|
return callback(err);
|
||||||
|
assert.equal(txs.length, 1);
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get range of txs from account', function(cb) {
|
||||||
|
var w1 = lastW;
|
||||||
|
w1.getRange('foo', { start: 0xdeadbeef - 1000 }, function(err, txs) {
|
||||||
|
if (err)
|
||||||
|
return callback(err);
|
||||||
|
assert.equal(txs.length, 1);
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not get range of txs from non-existent account', function(cb) {
|
||||||
|
var w1 = lastW;
|
||||||
|
w1.getRange('bad', { start: 0xdeadbeef - 1000 }, function(err, txs) {
|
||||||
|
assert(err);
|
||||||
|
assert.equal(err.message, 'Account not found.');
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get account balance', function(cb) {
|
||||||
|
var w1 = lastW;
|
||||||
|
w1.getBalance('foo', function(err, balance) {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert.equal(balance.total, 21840);
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should cleanup', function(cb) {
|
it('should cleanup', function(cb) {
|
||||||
walletdb.dump(function(err, records) {
|
walletdb.dump(function(err, records) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
//utils.log(JSON.stringify(Object.keys(records), null, 2));
|
|
||||||
constants.tx.COINBASE_MATURITY = 100;
|
constants.tx.COINBASE_MATURITY = 100;
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user