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
|
||||
Defaults.SCAN_ADDRESS_GAP = Defaults.MAX_MAIN_ADDRESS_GAP + 20;
|
||||
|
||||
Defaults.FEE_LEVELS = [{
|
||||
name: 'urgent',
|
||||
nbBlocks: 2,
|
||||
multiplier: 1.5,
|
||||
defaultValue: 150000,
|
||||
}, {
|
||||
name: 'priority',
|
||||
nbBlocks: 2,
|
||||
defaultValue: 100000
|
||||
}, {
|
||||
name: 'normal',
|
||||
nbBlocks: 3,
|
||||
defaultValue: 80000
|
||||
}, {
|
||||
name: 'economy',
|
||||
nbBlocks: 6,
|
||||
defaultValue: 50000
|
||||
}, {
|
||||
name: 'superEconomy',
|
||||
nbBlocks: 24,
|
||||
defaultValue: 20000
|
||||
}];
|
||||
|
||||
Defaults.DEFAULT_FEE_PER_KB = Defaults.FEE_LEVELS[1].defaultValue;
|
||||
Defaults.FEE_LEVELS = {
|
||||
btc: [{
|
||||
name: 'urgent',
|
||||
nbBlocks: 2,
|
||||
multiplier: 1.5,
|
||||
defaultValue: 150000,
|
||||
}, {
|
||||
name: 'priority',
|
||||
nbBlocks: 2,
|
||||
defaultValue: 100000
|
||||
}, {
|
||||
name: 'normal',
|
||||
nbBlocks: 3,
|
||||
defaultValue: 80000
|
||||
}, {
|
||||
name: 'economy',
|
||||
nbBlocks: 6,
|
||||
defaultValue: 50000
|
||||
}, {
|
||||
name: 'superEconomy',
|
||||
nbBlocks: 24,
|
||||
defaultValue: 20000
|
||||
}],
|
||||
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
|
||||
Defaults.FEE_LEVELS_FALLBACK = 2;
|
||||
|
|
|
@ -1363,30 +1363,31 @@ WalletService.prototype.getSendMaxInfo = function(opts, cb) {
|
|||
|
||||
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) {
|
||||
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) {
|
||||
if (err) return cb(err);
|
||||
|
||||
|
@ -1510,8 +1511,18 @@ WalletService.prototype.getFeeLevels = function(opts, cb) {
|
|||
|
||||
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() {
|
||||
var definedPoints = _.uniq(_.pluck(Defaults.FEE_LEVELS, 'nbBlocks'));
|
||||
var definedPoints = _.uniq(_.pluck(feeLevels, 'nbBlocks'));
|
||||
return _.uniq(_.flatten(_.map(definedPoints, function(p) {
|
||||
return _.range(p, p + Defaults.FEE_LEVELS_FALLBACK + 1);
|
||||
})));
|
||||
|
@ -1538,16 +1549,8 @@ WalletService.prototype.getFeeLevels = function(opts, cb) {
|
|||
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) {
|
||||
var values = _.map(Defaults.FEE_LEVELS, function(level) {
|
||||
var values = _.map(feeLevels, function(level) {
|
||||
var result = {
|
||||
level: level.name,
|
||||
};
|
||||
|
@ -1932,11 +1935,12 @@ WalletService.prototype._validateAndSanitizeTxOpts = function(wallet, opts, cb)
|
|||
opts.feeLevel = 'normal';
|
||||
}
|
||||
|
||||
var feeLevels = Defaults.FEE_LEVELS[wallet.coin];
|
||||
if (opts.feeLevel) {
|
||||
if (!_.any(Defaults.FEE_LEVELS, {
|
||||
if (!_.any(feeLevels, {
|
||||
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)) {
|
||||
|
@ -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)'));
|
||||
|
||||
self.getSendMaxInfo({
|
||||
feePerKb: opts.feePerKb || Defaults.DEFAULT_FEE_PER_KB,
|
||||
feePerKb: opts.feePerKb,
|
||||
excludeUnconfirmedUtxos: !!opts.excludeUnconfirmedUtxos,
|
||||
returnInputs: true,
|
||||
}, function(err, info) {
|
||||
|
|
Loading…
Reference in New Issue