Set fees in preferences. First step for advanced send

This commit is contained in:
Gustavo Maximiliano Cortez 2015-07-28 10:42:11 -03:00
commit e7a98d44f9
No known key found for this signature in database
GPG key ID: 15EDAD8D9F2EB1AF
10 changed files with 82 additions and 64 deletions

View file

@ -6,7 +6,7 @@
</section> </section>
<section class="middle tab-bar-section"> <section class="middle tab-bar-section">
<h1 class="title ellipsis" ng-style="{'color':color}" translate> <h1 class="title ellipsis" ng-style="{'color':color}" translate>
Bitcoin Network Fee Policy Advanced Send
</h1> </h1>
</section> </section>
</nav> </nav>
@ -14,12 +14,9 @@
<div class="modal-content fix-modals-touch"> <div class="modal-content fix-modals-touch">
<ul class="no-bullet m0 size-14"> <ul class="no-bullet m0 size-14">
<h4 class="title m0" translate>Fee level</h4> <h4 class="title m0" translate>Fee Policy</h4>
<li ng-repeat="fee in (network == 'livenet' ? feeLevels.livenet : feeLevels.testnet)" ng-click="save(fee.level)" class="line-b p20"> <li ng-repeat="fee in (network == 'livenet' ? feeLevels.livenet : feeLevels.testnet)" ng-click="save(fee.level)" class="line-b p20">
<span ng-show="fee.level == 'priority'" translate>Priority</span> <span class="text-capitalize">{{fee.level|translate}}</span>
<span ng-show="fee.level == 'normal'" translate>Normal</span>
<span ng-show="fee.level == 'economy'" translate>Economy</span>
<span class="size-12 text-light" translate>{{fee.feePerKBUnit}} per kB</span>
<i class="fi-check size-16 right" ng-show="currentFeeLevel == fee.level"></i> <i class="fi-check size-16 right" ng-show="currentFeeLevel == fee.level"></i>
</li> </li>
</ul> </ul>
@ -27,13 +24,8 @@
<div class="row column m20t"> <div class="row column m20t">
<div class="text-gray size-12 text-center" ng-repeat="fee in (network == 'livenet' ? feeLevels.livenet : <div class="text-gray size-12 text-center" ng-repeat="fee in (network == 'livenet' ? feeLevels.livenet :
feeLevels.testnet)" ng-if="fee.level == currentFeeLevel"> feeLevels.testnet)" ng-if="fee.level == currentFeeLevel">
<span translate>Average confirmation time: {{fee.nbBlocks * 10}} minutes</span> <span translate>Average confirmation time: {{fee.nbBlocks * 10}} minutes</span>.
</div> <span class="size-12 text-light" translate>Current fee rate for this policy: {{fee.feePerKBUnit}}/kiB</span>
</div>
<div class="row column m20t">
<div class="text-gray size-12 text-center" translate>
Bitcoin transactions may include a fee collected by miners on the network. The higher the fee, the greater the incentive a miner has to include that transaction in a block.
</div> </div>
</div> </div>

View file

@ -77,8 +77,13 @@
{{preferences.selectedAlternative.name}} {{preferences.selectedAlternative.name}}
</span> </span>
</li> </li>
<li class="line-b p20" ng-click="$root.go('preferencesFee')">
<span translate>Bitcoin Network Fee Policy</span>
<span class="right text-gray">
<i class="icon-arrow-right3 size-24 right"></i>
<span class="text-capitalize">{{index.currentFeeLevel}}</span>
</span>
</li>
<li class="line-b p20" ng-click="$root.go('preferencesBwsUrl')"> <li class="line-b p20" ng-click="$root.go('preferencesBwsUrl')">
<span>Bitcore Wallet Service</span> <span>Bitcore Wallet Service</span>
<span class="text-gray db"> <span class="text-gray db">

View file

@ -0,0 +1,30 @@
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Bitcoin Network Fee Policy'; goBackToState = 'preferences'; noColor = true">
</div>
<div class="content preferences" ng-controller="preferencesFeeController as prefFee">
<ul class="no-bullet m0 size-14">
<li ng-repeat="fee in (index.network == 'livenet' ? index.feeLevels.livenet : index.feeLevels.testnet)"
ng-click="prefFee.save(fee.level)" class="line-b p20">
<span class="text-capitalize">{{fee.level}}</span>
<i class="fi-check size-16 right" ng-show="index.currentFeeLevel == fee.level"></i>
</li>
</ul>
<div class="row column m20t">
<div class="text-gray size-12 text-center" ng-repeat="fee in (index.network == 'livenet' ? index.feeLevels.livenet :
index.feeLevels.testnet)" ng-if="fee.level == index.currentFeeLevel">
<span translate>Average confirmation time: {{fee.nbBlocks * 10}} minutes</span>.
<span class="size-12 text-light" translate>Current fee rate for this policy: {{fee.feePerKBUnit}}/kiB</span>
</div>
</div>
<div class="row column m20t">
<div class="text-gray size-12 text-center" translate>
Bitcoin transactions may include a fee collected by miners on the network. The higher the fee, the greater the incentive a miner has to include that transaction in a block. Actual fees are determined based on network load and the selected policy.
</div>
</div>
</div>
<div class="extra-margin-bottom"></div>

View file

@ -398,16 +398,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="text-right size-12 m20b" ng-if="index.feeLevels.livenet && index.feeLevels.testnet">
<span ng-repeat="fee in (index.network == 'livenet' ? index.feeLevels.livenet : index.feeLevels.testnet)"
ng-show="index.currentFeeLevel == fee.level" class="pointer" ng-click="home.openFeeLevelsModal(index.feeLevels, index.currentFeeLevel)">
<span translate>Fee level: {{fee.level}}</span>
<span class="text-gray">({{fee.feePerKBUnit}}/KB)</span>
<i class="fi-pencil"></i>
</span>
</div>
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<label for="comment"><span translate>Note</span> <label for="comment"><span translate>Note</span>

View file

@ -877,6 +877,7 @@ input.ng-invalid-match, input.ng-invalid-match:focus {
.text-alert {color: red;} .text-alert {color: red;}
.text-success {color: #1ABC9C;} .text-success {color: #1ABC9C;}
.text-spacing {letter-spacing:2px;} .text-spacing {letter-spacing:2px;}
.text-capitalize {text-transform: capitalize;}
.panel { .panel {
background: #FFFFFF; background: #FFFFFF;

View file

@ -4,7 +4,6 @@ angular.module('copayApp.controllers').controller('preferencesController',
function($scope, $rootScope, $filter, $timeout, $modal, $log, lodash, configService, profileService) { function($scope, $rootScope, $filter, $timeout, $modal, $log, lodash, configService, profileService) {
var config = configService.getSync(); var config = configService.getSync();
this.unitName = config.wallet.settings.unitName; this.unitName = config.wallet.settings.unitName;
this.feeName = config.wallet.settings.feeName || 'Priority';
this.bwsurl = config.bws.url; this.bwsurl = config.bws.url;
this.selectedAlternative = { this.selectedAlternative = {
name: config.wallet.settings.alternativeName, name: config.wallet.settings.alternativeName,

View file

@ -0,0 +1,21 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesFeeController',
function($rootScope, configService) {
this.save = function(newFee) {
var opts = {
wallet: {
settings: {
feeLevel: newFee
}
}
};
$rootScope.$emit('Local/FeeLevelUpdated', newFee);
configService.set(opts, function(err) {
if (err) $log.debug(err);
});
};
});

View file

@ -973,7 +973,8 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
} }
}; };
this.openFeeLevelsModal = function(feeLevels, currentFeeLevel) { // Advanced SEND: set temporary fee policy for each transaction
this.openAdvancedSendModal = function(feeLevels, currentFeeLevel) {
var fc = profileService.focusedClient; var fc = profileService.focusedClient;
var ModalInstanceCtrl = function($scope, $modalInstance) { var ModalInstanceCtrl = function($scope, $modalInstance) {
@ -981,21 +982,8 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
$scope.currentFeeLevel = currentFeeLevel $scope.currentFeeLevel = currentFeeLevel
$scope.network = fc.credentials.network; $scope.network = fc.credentials.network;
$scope.color = fc.backgroundColor; $scope.color = fc.backgroundColor;
$scope.save = function(level) { $scope.save = function(level) {
var opts = {
wallet: {
settings: {
feeLevel: level
}
}
};
$scope.currentFeeLevel = level; $scope.currentFeeLevel = level;
$rootScope.$emit('Local/FeeLevelUpdated', level);
configService.set(opts, function(err) {
if (err) $log.debug(err);
});
}; };
$scope.cancel = function() { $scope.cancel = function() {
@ -1003,7 +991,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
}; };
}; };
var modalInstance = $modal.open({ var modalInstance = $modal.open({
templateUrl: 'views/modals/fee.html', templateUrl: 'views/modals/advancedSend.html',
windowClass: 'full animated slideInUp', windowClass: 'full animated slideInUp',
controller: ModalInstanceCtrl controller: ModalInstanceCtrl
}); });

View file

@ -252,6 +252,17 @@ angular
}, },
} }
}) })
.state('preferencesFee', {
url: '/preferencesFee',
templateUrl: 'views/preferencesFee.html',
walletShouldBeComplete: true,
needProfile: true,
views: {
'main': {
templateUrl: 'views/preferencesFee.html'
},
}
})
.state('preferencesAdvanced', { .state('preferencesAdvanced', {
url: '/preferencesAdvanced', url: '/preferencesAdvanced',
@ -458,6 +469,7 @@ angular
delete: 13, delete: 13,
preferencesLanguage: 12, preferencesLanguage: 12,
preferencesUnit: 12, preferencesUnit: 12,
preferencesFee: 12,
preferencesAltCurrency: 12, preferencesAltCurrency: 12,
preferencesBwsUrl: 12, preferencesBwsUrl: 12,
preferencesAlias: 12, preferencesAlias: 12,

View file

@ -1,17 +1,17 @@
'use strict'; 'use strict';
angular.module('copayApp.services').factory('feeService', function($log, lodash, profileService, configService, gettext) { angular.module('copayApp.services').factory('feeService', function($log, profileService, configService) {
var root = {}; var root = {};
root.getCurrentFeeValue = function(cb) { root.getCurrentFeeValue = function(cb) {
var fc = profileService.focusedClient; var fc = profileService.focusedClient;
var config = configService.getSync().wallet.settings; var config = configService.getSync().wallet.settings;
var feeLevel = config.feeLevel || 'priority'; var feeLevel = config.feeLevel || 'normal';
// static fee // static fee
var fee = 10000; var fee = 10000;
fc.getFeeLevels(fc.credentials.network, function(err, levels) { fc.getFeeLevels(fc.credentials.network, function(err, levels) {
if (err) { if (err) {
return cb({message: 'Could not get dynamic fee'}, fee); return cb({message: 'Could not get dynamic fee. Using static 10000sat'}, fee);
} }
else { else {
for (var i = 0; i < 3; i++) { for (var i = 0; i < 3; i++) {
@ -25,30 +25,10 @@ angular.module('copayApp.services').factory('feeService', function($log, lodash,
}); });
}; };
var checkCompatibility = function(config) {
if (config.feeName && !config.feeLevel) {
// Migrate to new dynamic fee values
var level = config.feeName.toLowerCase();
if (level == 'emergency') level = 'priority';
var opts = {
wallet: {
settings: {
feeLevel: level
}
}
};
configService.set(opts, function(err) {
if (err) $log.debug(err);
});
}
};
root.getFeeLevels = function(cb) { root.getFeeLevels = function(cb) {
var fc = profileService.focusedClient; var fc = profileService.focusedClient;
var config = configService.getSync().wallet.settings; var config = configService.getSync().wallet.settings;
var unitName = config.unitName; var unitName = config.unitName;
checkCompatibility(config);
fc.getFeeLevels('livenet', function(errLivenet, levelsLivenet) { fc.getFeeLevels('livenet', function(errLivenet, levelsLivenet) {
fc.getFeeLevels('testnet', function(errTestnet, levelsTestnet) { fc.getFeeLevels('testnet', function(errTestnet, levelsTestnet) {