From 381a4e9f78d197ea873cbb4364e1ab633bb9c05c Mon Sep 17 00:00:00 2001 From: Kadir Sekha Date: Thu, 1 Mar 2018 14:19:52 +0500 Subject: [PATCH] updated code to work with bitpay bch payments --- src/js/controllers/confirm.js | 50 ++++++++++++++++++++++++++------ src/js/routes.js | 2 +- src/js/services/historicLog.js | 3 +- src/js/services/incomingData.js | 6 ++++ src/js/services/payproService.js | 2 +- 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 25c74dcd7..a49d43090 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -23,7 +23,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( var isWindowsPhoneApp = platformInfo.isCordova && platformInfo.isWP; //custom fee flag - var usingCustomFee = null; + var usingCustomFee = false; + var usingMerchantFee = false; function refresh() { $timeout(function() { @@ -177,7 +178,14 @@ angular.module('copayApp.controllers').controller('confirmController', function( txp: {}, }; - if (tx.coin && tx.coin == 'bch') tx.feeLevel = 'normal'; + if (data.stateParams.requiredFeeRate) { + usingMerchantFee = true; + tx.feeRate = parseInt(data.stateParams.requiredFeeRate); + } + + if (tx.coin && tx.coin == 'bch') { + tx.feeLevel = 'normal'; + } // Other Scope vars $scope.isCordova = isCordova; @@ -240,7 +248,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( txp.inputs = tx.sendMaxInfo.inputs; txp.fee = tx.sendMaxInfo.fee; } else { - if (usingCustomFee) { + if (usingCustomFee || usingMerchantFee) { txp.feePerKb = tx.feeRate; } else txp.feeLevel = tx.feeLevel; } @@ -291,14 +299,29 @@ angular.module('copayApp.controllers').controller('confirmController', function( return cb(); } - feeService.getFeeRate(wallet.coin, tx.network, tx.feeLevel, function(err, feeRate) { + feeService.getFeeRate(wallet.coin, tx.network, usingMerchantFee ? 'urgent' : tx.feeLevel, function(err, feeRate) { if (err) { ongoingProcess.set('calculatingFee', false); return cb(err); } - if (!usingCustomFee) tx.feeRate = feeRate; - tx.feeLevelName = feeService.feeOpts[tx.feeLevel]; + var msg; + if (usingCustomFee) { + msg = gettextCatalog.getString('Custom'); + tx.feeLevelName = msg; + } else if (usingMerchantFee) { + $log.info('Using Merchant Fee:' + tx.feeRate + ' vs. Urgent level:' + feeRate); + if (tx.feeRate > feeRate) { + ongoingProcess.set('calculatingFee', false); + setNoWallet(gettextCatalog.getString('Merchant fee to high. Payment rejected'), true); + return cb('fee_too_high'); + } + msg = gettextCatalog.getString('Suggested by Merchant'); + tx.feeLevelName = msg; + } else { + tx.feeLevelName = feeService.feeOpts[tx.feeLevel]; + tx.feeRate = feeRate; + } getSendMaxInfo(lodash.clone(tx), wallet, function(err, sendMaxInfo) { if (err) { @@ -337,7 +360,12 @@ angular.module('copayApp.controllers').controller('confirmController', function( getTxp(lodash.clone(tx), wallet, opts.dryRun, function(err, txp) { ongoingProcess.set('calculatingFee', false); if (err) { - return cb(err); + if (err.message == 'Insufficient funds') { + setNoWallet(gettextCatalog.getString('Insufficient funds')); + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Not enough funds for fee')); + return cb('no_funds'); + } else + return cb(err); } txp.feeStr = txFormatService.formatAmountStr(wallet.coin, txp.fee); @@ -487,8 +515,11 @@ angular.module('copayApp.controllers').controller('confirmController', function( // If select another wallet tx.coin = wallet.coin; - tx.feeLevel = wallet.coin == 'bch' ? 'normal' : configFeeLevel; - usingCustomFee = null; + + if (usingCustomFee) { + } else { + tx.feeLevel = wallet.coin == 'bch' ? 'normal' : configFeeLevel; + } setButtonText(wallet.credentials.m > 1, !!tx.paypro); @@ -637,6 +668,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.chooseFeeLevel = function(tx, wallet) { if (wallet.coin == 'bch') return; + if (usingMerchantFee) return; var scope = $rootScope.$new(true); scope.network = tx.network; diff --git a/src/js/routes.js b/src/js/routes.js index ef2da47ae..66d3894b5 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -296,7 +296,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.send.confirm', { - url: '/confirm/:recipientType/:toAddress/:toName/:toAmount/:toEmail/:toColor/:description/:coin/:useSendMax/:fromWalletId/:displayAddress', + url: '/confirm/:recipientType/:toAddress/:toName/:toAmount/:toEmail/:toColor/:description/:coin/:useSendMax/:fromWalletId/:displayAddress/:requiredFeeRate', views: { 'tab-send@tabs': { controller: 'confirmController', diff --git a/src/js/services/historicLog.js b/src/js/services/historicLog.js index f044206d0..edbefa07a 100644 --- a/src/js/services/historicLog.js +++ b/src/js/services/historicLog.js @@ -34,7 +34,8 @@ angular.module('copayApp.services') }; root.add = function(level, msg) { - msg = msg.replace('/xpriv.*/', 'xpriv[Hidden]'); + msg = msg.replace('/xpriv.*/', '[...]'); + msg = msg.replace('/walletPrivKey.*/', 'walletPrivKey:[...]'); logs.push({ timestamp: new Date().toISOString(), level: level, diff --git a/src/js/services/incomingData.js b/src/js/services/incomingData.js index 845c4fe0b..a7bb15a8c 100644 --- a/src/js/services/incomingData.js +++ b/src/js/services/incomingData.js @@ -380,6 +380,12 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat paypro: payProDetails, coin: coin, }; + + // fee + if (payProDetails.requiredFeeRate) { + stateParams.requiredFeeRate = payProDetails.requiredFeeRate * 1024; + } + scannerService.pausePreview(); $state.go('tabs.send', {}, { 'reload': true, diff --git a/src/js/services/payproService.js b/src/js/services/payproService.js index 6cd83ef9a..3e639e382 100644 --- a/src/js/services/payproService.js +++ b/src/js/services/payproService.js @@ -27,7 +27,7 @@ angular.module('copayApp.services').factory('payproService', payProUrl: uri, }, function(err, paypro) { if (!disableLoader) ongoingProcess.set('fetchingPayPro', false); - if (err) return cb(err); + if (err) return cb(gettextCatalog.getString('Could Not Fetch Payment: Check if it is still valid')); else if (!paypro.verified) { $log.warn('Failed to verify payment protocol signatures'); return cb(gettextCatalog.getString('Payment Protocol Invalid'));