add balance warning
This commit is contained in:
parent
e4799d639a
commit
58d79dd702
3 changed files with 72 additions and 14 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('addressesController', function($scope, $log, $stateParams, $state, $timeout, $ionicHistory, $ionicScrollDelegate, configService, popupService, gettextCatalog, ongoingProcess, lodash, profileService, walletService, bwcError, platformInfo, appConfigService) {
|
angular.module('copayApp.controllers').controller('addressesController', function($scope, $log, $stateParams, $state, $timeout, $ionicHistory, $ionicScrollDelegate, configService, popupService, gettextCatalog, ongoingProcess, lodash, profileService, walletService, bwcError, platformInfo, appConfigService, txFormatService, feeService) {
|
||||||
var UNUSED_ADDRESS_LIMIT = 5;
|
var UNUSED_ADDRESS_LIMIT = 5;
|
||||||
var BALANCE_ADDRESS_LIMIT = 5;
|
var BALANCE_ADDRESS_LIMIT = 5;
|
||||||
var config = configService.getSync().wallet.settings;
|
var config = configService.getSync().wallet.settings;
|
||||||
|
|
@ -55,7 +55,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio
|
||||||
$scope.latestWithBalance = lodash.slice(withBalance, 0, BALANCE_ADDRESS_LIMIT);
|
$scope.latestWithBalance = lodash.slice(withBalance, 0, BALANCE_ADDRESS_LIMIT);
|
||||||
|
|
||||||
lodash.each(withBalance, function(a) {
|
lodash.each(withBalance, function(a) {
|
||||||
a.balanceStr = (a.amount * satToUnit).toFixed(unitDecimals) + ' ' + unitName;
|
a.balanceStr = txFormatService.formatAmount(a.amount);
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.viewAll = {
|
$scope.viewAll = {
|
||||||
|
|
@ -72,6 +72,31 @@ angular.module('copayApp.controllers').controller('addressesController', functio
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
feeService.getFeeLevels(function(err, levels){
|
||||||
|
walletService.getLowUtxos($scope.wallet, levels, function(err, resp) {
|
||||||
|
if (err) return;
|
||||||
|
|
||||||
|
if (resp.allUtxos && resp.allUtxos.length) {
|
||||||
|
|
||||||
|
|
||||||
|
var allSum = lodash.sum(resp.allUtxos || 0, 'satoshis');
|
||||||
|
var per = (resp.minFee / allSum) * 100;
|
||||||
|
|
||||||
|
$scope.lowWarning = resp.warning;
|
||||||
|
$scope.lowUtxosNb = resp.lowUtxos.length;
|
||||||
|
$scope.allUtxosNb = resp.allUtxos.length;
|
||||||
|
$scope.lowUtxosSum = txFormatService.formatAmountStr(lodash.sum(resp.lowUtxos || 0, 'satoshis'));
|
||||||
|
$scope.allUtxosSum = txFormatService.formatAmountStr(allSum);
|
||||||
|
$scope.minFee = txFormatService.formatAmountStr(resp.minFee || 0);
|
||||||
|
$scope.minFeePer = per.toFixed(2) + '%';
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function processPaths(list) {
|
function processPaths(list) {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.services').factory('walletService', function($log, $timeout, lodash, trezor, ledger, intelTEE, storageService, configService, rateService, uxLanguage, $filter, gettextCatalog, bwcError, $ionicPopup, fingerprintService, ongoingProcess, gettext, $rootScope, txFormatService, $ionicModal, $state, bwcService, bitcore, popupService) {
|
angular.module('copayApp.services').factory('walletService', function($log, $timeout, lodash, trezor, ledger, intelTEE, storageService, configService, rateService, uxLanguage, $filter, gettextCatalog, bwcError, $ionicPopup, fingerprintService, ongoingProcess, gettext, $rootScope, txFormatService, $ionicModal, $state, bwcService, bitcore, popupService) {
|
||||||
// `wallet` is a decorated version of client.
|
|
||||||
|
|
||||||
var LOW_AMOUNT_RATIO = 0.15; //Ratio low amount warning (econ fee/amount)
|
// Ratio low amount warning (fee/amount) in incoming TX
|
||||||
var TOTAL_LOW_WARNING_RATIO = .15;
|
var LOW_AMOUNT_RATIO = 0.15;
|
||||||
|
|
||||||
|
// Ratio of "many utxos" warning in total balance (fee/amount)
|
||||||
|
var TOTAL_LOW_WARNING_RATIO = .3;
|
||||||
|
|
||||||
var root = {};
|
var root = {};
|
||||||
|
|
||||||
|
|
@ -921,15 +923,20 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
|
|
||||||
|
|
||||||
// Approx utxo amount, from which the uxto is economically redeemable
|
// Approx utxo amount, from which the uxto is economically redeemable
|
||||||
root.getLowAmount = function(wallet, feeLevels, nbOutputs) {
|
root.getMinFee = function(wallet, feeLevels, nbOutputs) {
|
||||||
var lowLevelRate = (lodash.find(feeLevels[wallet.network], {
|
var lowLevelRate = (lodash.find(feeLevels[wallet.network], {
|
||||||
level: 'normal',
|
level: 'normal',
|
||||||
}).feePerKB / 1000).toFixed(0);
|
}).feePerKB / 1000).toFixed(0);
|
||||||
|
|
||||||
var size = root.getEstimatedTxSize(wallet, nbOutputs);
|
var size = root.getEstimatedTxSize(wallet, nbOutputs);
|
||||||
var minFee = size * lowLevelRate;
|
return size * lowLevelRate;
|
||||||
|
};
|
||||||
|
|
||||||
return parseInt(minFee / (LOW_AMOUNT_RATIO));
|
|
||||||
|
// Approx utxo amount, from which the uxto is economically redeemable
|
||||||
|
root.getLowAmount = function(wallet, feeLevels, nbOutputs) {
|
||||||
|
var minFee = root.getMinFee(wallet,feeLevels, nbOutputs);
|
||||||
|
return parseInt( minFee / LOW_AMOUNT_RATIO);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -939,14 +946,10 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
||||||
wallet.getUtxos({}, function(err, resp) {
|
wallet.getUtxos({}, function(err, resp) {
|
||||||
if (err || !resp || !resp.length) return cb();
|
if (err || !resp || !resp.length) return cb();
|
||||||
|
|
||||||
|
|
||||||
var lowAmountN = root.getLowAmount(wallet, levels, resp.length + 1);
|
var lowAmountN = root.getLowAmount(wallet, levels, resp.length + 1);
|
||||||
console.log('[walletService.js.946:lowAmountN:]',lowAmountN); //TODO
|
|
||||||
var total = lodash.sum(resp, 'satoshis');
|
var total = lodash.sum(resp, 'satoshis');
|
||||||
console.log('[walletService.js.948:total:]',total); //TODO
|
|
||||||
|
|
||||||
var lowAmount1 = root.getLowAmount(wallet, levels);
|
var lowAmount1 = root.getLowAmount(wallet, levels);
|
||||||
console.log('[walletService.js.950:lowAmount1:]',lowAmount1); //TODO
|
|
||||||
var lowUtxos = lodash.filter(resp, function(x) {
|
var lowUtxos = lodash.filter(resp, function(x) {
|
||||||
return x.satoshis < lowAmount1;
|
return x.satoshis < lowAmount1;
|
||||||
});
|
});
|
||||||
|
|
@ -954,8 +957,10 @@ console.log('[walletService.js.950:lowAmount1:]',lowAmount1); //TODO
|
||||||
var totalLow = lodash.sum(lowUtxos, 'satoshis');
|
var totalLow = lodash.sum(lowUtxos, 'satoshis');
|
||||||
|
|
||||||
return cb(err, {
|
return cb(err, {
|
||||||
lowUtxos: lowUtxos,
|
allUtxos: resp || [],
|
||||||
|
lowUtxos: lowUtxos || [],
|
||||||
warning: lowAmountN / total > TOTAL_LOW_WARNING_RATIO,
|
warning: lowAmountN / total > TOTAL_LOW_WARNING_RATIO,
|
||||||
|
minFee: root.getMinFee(wallet, levels, resp.length),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
<i class="icon ion-ios-arrow-thin-right"></i>
|
<i class="icon ion-ios-arrow-thin-right"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item item-divider item-icon-right" ng-click="newAddress()">
|
<div class="item item-divider item-icon-right" ng-click="newAddress()">
|
||||||
<span translate>Unused Addresses</span>
|
<span translate>Unused Addresses</span>
|
||||||
<i class="icon ion-ios-plus-empty"></i>
|
<i class="icon ion-ios-plus-empty"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -70,6 +70,34 @@
|
||||||
<div class="addr-balance">{{w.balanceStr}}</div>
|
<div class="addr-balance">{{w.balanceStr}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-if="allUtxosNb">
|
||||||
|
<div class="item item-divider" translate>
|
||||||
|
Wallet Inputs
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item" >
|
||||||
|
<span translate> Total wallet inputs </span>
|
||||||
|
<div class="addr-path">
|
||||||
|
{{allUtxosNb}} [{{allUtxosSum}}]
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item" >
|
||||||
|
<span translate> Low amount inputs </span>
|
||||||
|
<div class="addr-path">
|
||||||
|
{{lowUtxosNb}} [{{ lowUtxosSum }}]
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item" >
|
||||||
|
<span translate> Approximate fee to move all wallet's balance (with normal priority) </span>
|
||||||
|
<div class="addr-path">
|
||||||
|
{{minFeePer}} [{{minFee}}]
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue