coin dependent default fee levels
This commit is contained in:
parent
cb4ebe8c50
commit
acdf99a34f
|
@ -24,30 +24,35 @@ Defaults.MAX_MAIN_ADDRESS_GAP = 20;
|
||||||
// TODO: should allow different gap sizes for external/internal chains
|
// TODO: should allow different gap sizes for external/internal chains
|
||||||
Defaults.SCAN_ADDRESS_GAP = Defaults.MAX_MAIN_ADDRESS_GAP + 20;
|
Defaults.SCAN_ADDRESS_GAP = Defaults.MAX_MAIN_ADDRESS_GAP + 20;
|
||||||
|
|
||||||
Defaults.FEE_LEVELS = [{
|
Defaults.FEE_LEVELS = {
|
||||||
name: 'urgent',
|
btc: [{
|
||||||
nbBlocks: 2,
|
name: 'urgent',
|
||||||
multiplier: 1.5,
|
nbBlocks: 2,
|
||||||
defaultValue: 150000,
|
multiplier: 1.5,
|
||||||
}, {
|
defaultValue: 150000,
|
||||||
name: 'priority',
|
}, {
|
||||||
nbBlocks: 2,
|
name: 'priority',
|
||||||
defaultValue: 100000
|
nbBlocks: 2,
|
||||||
}, {
|
defaultValue: 100000
|
||||||
name: 'normal',
|
}, {
|
||||||
nbBlocks: 3,
|
name: 'normal',
|
||||||
defaultValue: 80000
|
nbBlocks: 3,
|
||||||
}, {
|
defaultValue: 80000
|
||||||
name: 'economy',
|
}, {
|
||||||
nbBlocks: 6,
|
name: 'economy',
|
||||||
defaultValue: 50000
|
nbBlocks: 6,
|
||||||
}, {
|
defaultValue: 50000
|
||||||
name: 'superEconomy',
|
}, {
|
||||||
nbBlocks: 24,
|
name: 'superEconomy',
|
||||||
defaultValue: 20000
|
nbBlocks: 24,
|
||||||
}];
|
defaultValue: 20000
|
||||||
|
}],
|
||||||
Defaults.DEFAULT_FEE_PER_KB = Defaults.FEE_LEVELS[1].defaultValue;
|
bch: [{
|
||||||
|
name: 'normal',
|
||||||
|
nbBlocks: 2,
|
||||||
|
defaultValue: 2000,
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
// How many levels to fallback to if the value returned by the network for a given nbBlocks is -1
|
// How many levels to fallback to if the value returned by the network for a given nbBlocks is -1
|
||||||
Defaults.FEE_LEVELS_FALLBACK = 2;
|
Defaults.FEE_LEVELS_FALLBACK = 2;
|
||||||
|
|
|
@ -1363,30 +1363,31 @@ WalletService.prototype.getSendMaxInfo = function(opts, cb) {
|
||||||
|
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
|
|
||||||
var feeArgs = !!opts.feeLevel + _.isNumber(opts.feePerKb);
|
|
||||||
if (feeArgs > 1)
|
|
||||||
return cb(new ClientError('Only one of feeLevel/feePerKb can be specified'));
|
|
||||||
|
|
||||||
if (feeArgs == 0) {
|
|
||||||
log.debug('No fee provided, using "normal" fee level');
|
|
||||||
opts.feeLevel = 'normal';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.feeLevel) {
|
|
||||||
if (!_.any(Defaults.FEE_LEVELS, {
|
|
||||||
name: opts.feeLevel
|
|
||||||
}))
|
|
||||||
return cb(new ClientError('Invalid fee level. Valid values are ' + _.pluck(Defaults.FEE_LEVELS, 'name').join(', ')));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_.isNumber(opts.feePerKb)) {
|
|
||||||
if (opts.feePerKb < Defaults.MIN_FEE_PER_KB || opts.feePerKb > Defaults.MAX_FEE_PER_KB)
|
|
||||||
return cb(new ClientError('Invalid fee per KB'));
|
|
||||||
}
|
|
||||||
|
|
||||||
self.getWallet({}, function(err, wallet) {
|
self.getWallet({}, function(err, wallet) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
|
var feeArgs = !!opts.feeLevel + _.isNumber(opts.feePerKb);
|
||||||
|
if (feeArgs > 1)
|
||||||
|
return cb(new ClientError('Only one of feeLevel/feePerKb can be specified'));
|
||||||
|
|
||||||
|
if (feeArgs == 0) {
|
||||||
|
log.debug('No fee provided, using "normal" fee level');
|
||||||
|
opts.feeLevel = 'normal';
|
||||||
|
}
|
||||||
|
|
||||||
|
var feeLevels = Defaults.FEE_LEVELS[wallet.coin];
|
||||||
|
if (opts.feeLevel) {
|
||||||
|
if (!_.any(feeLevels, {
|
||||||
|
name: opts.feeLevel
|
||||||
|
}))
|
||||||
|
return cb(new ClientError('Invalid fee level. Valid values are ' + _.pluck(feeLevels, 'name').join(', ')));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_.isNumber(opts.feePerKb)) {
|
||||||
|
if (opts.feePerKb < Defaults.MIN_FEE_PER_KB || opts.feePerKb > Defaults.MAX_FEE_PER_KB)
|
||||||
|
return cb(new ClientError('Invalid fee per KB'));
|
||||||
|
}
|
||||||
|
|
||||||
self._getUtxosForCurrentWallet(null, function(err, utxos) {
|
self._getUtxosForCurrentWallet(null, function(err, utxos) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
|
@ -1510,8 +1511,18 @@ WalletService.prototype.getFeeLevels = function(opts, cb) {
|
||||||
|
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
|
|
||||||
|
opts.coin = opts.coin || Defaults.COIN;
|
||||||
|
if (!Utils.checkValueInCollection(opts.coin, Constants.COINS))
|
||||||
|
return cb(new ClientError('Invalid coin'));
|
||||||
|
|
||||||
|
opts.network = opts.network || 'livenet';
|
||||||
|
if (!Utils.checkValueInCollection(opts.network, Constants.NETWORKS))
|
||||||
|
return cb(new ClientError('Invalid network'));
|
||||||
|
|
||||||
|
var feeLevels = Defaults.FEE_LEVELS[opts.coin];
|
||||||
|
|
||||||
function samplePoints() {
|
function samplePoints() {
|
||||||
var definedPoints = _.uniq(_.pluck(Defaults.FEE_LEVELS, 'nbBlocks'));
|
var definedPoints = _.uniq(_.pluck(feeLevels, 'nbBlocks'));
|
||||||
return _.uniq(_.flatten(_.map(definedPoints, function(p) {
|
return _.uniq(_.flatten(_.map(definedPoints, function(p) {
|
||||||
return _.range(p, p + Defaults.FEE_LEVELS_FALLBACK + 1);
|
return _.range(p, p + Defaults.FEE_LEVELS_FALLBACK + 1);
|
||||||
})));
|
})));
|
||||||
|
@ -1538,16 +1549,8 @@ WalletService.prototype.getFeeLevels = function(opts, cb) {
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
opts.coin = opts.coin || Defaults.COIN;
|
|
||||||
if (!Utils.checkValueInCollection(opts.coin, Constants.COINS))
|
|
||||||
return cb(new ClientError('Invalid coin'));
|
|
||||||
|
|
||||||
opts.network = opts.network || 'livenet';
|
|
||||||
if (!Utils.checkValueInCollection(opts.network, Constants.NETWORKS))
|
|
||||||
return cb(new ClientError('Invalid network'));
|
|
||||||
|
|
||||||
self._sampleFeeLevels(opts.coin, opts.network, samplePoints(), function(err, feeSamples) {
|
self._sampleFeeLevels(opts.coin, opts.network, samplePoints(), function(err, feeSamples) {
|
||||||
var values = _.map(Defaults.FEE_LEVELS, function(level) {
|
var values = _.map(feeLevels, function(level) {
|
||||||
var result = {
|
var result = {
|
||||||
level: level.name,
|
level: level.name,
|
||||||
};
|
};
|
||||||
|
@ -1932,11 +1935,12 @@ WalletService.prototype._validateAndSanitizeTxOpts = function(wallet, opts, cb)
|
||||||
opts.feeLevel = 'normal';
|
opts.feeLevel = 'normal';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var feeLevels = Defaults.FEE_LEVELS[wallet.coin];
|
||||||
if (opts.feeLevel) {
|
if (opts.feeLevel) {
|
||||||
if (!_.any(Defaults.FEE_LEVELS, {
|
if (!_.any(feeLevels, {
|
||||||
name: opts.feeLevel
|
name: opts.feeLevel
|
||||||
}))
|
}))
|
||||||
return next(new ClientError('Invalid fee level. Valid values are ' + _.pluck(Defaults.FEE_LEVELS, 'name').join(', ')));
|
return next(new ClientError('Invalid fee level. Valid values are ' + _.pluck(feeLevels, 'name').join(', ')));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_.isNumber(opts.feePerKb)) {
|
if (_.isNumber(opts.feePerKb)) {
|
||||||
|
@ -1964,7 +1968,7 @@ WalletService.prototype._validateAndSanitizeTxOpts = function(wallet, opts, cb)
|
||||||
return next(new ClientError('Fee is not allowed when sendMax is specified (use feeLevel/feePerKb instead)'));
|
return next(new ClientError('Fee is not allowed when sendMax is specified (use feeLevel/feePerKb instead)'));
|
||||||
|
|
||||||
self.getSendMaxInfo({
|
self.getSendMaxInfo({
|
||||||
feePerKb: opts.feePerKb || Defaults.DEFAULT_FEE_PER_KB,
|
feePerKb: opts.feePerKb,
|
||||||
excludeUnconfirmedUtxos: !!opts.excludeUnconfirmedUtxos,
|
excludeUnconfirmedUtxos: !!opts.excludeUnconfirmedUtxos,
|
||||||
returnInputs: true,
|
returnInputs: true,
|
||||||
}, function(err, info) {
|
}, function(err, info) {
|
||||||
|
|
Loading…
Reference in New Issue