From 8b61189f85024901e486200af7f2b318e36dac8c Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 29 Apr 2016 12:14:09 -0300 Subject: [PATCH] To debug sign procedure (#4151) * Should be considering the existence of a property and not its value. (#4139) * BETA to debug sign test on Android * add more logs * 1.11.4 * and even more logs... * 1.11.5 * better log messages * fix log decorator for mobile * fix android-prod * 1.11.6 --- Makefile | 6 +-- cordova/config.xml | 6 +-- cordova/wp/Package.appxmanifest | 4 +- cordova/wp/Properties/WMAppManifest.xml | 4 +- package.json | 4 +- src/js/controllers/index.js | 12 +++--- src/js/controllers/walletHome.js | 51 ++++++++++++++++--------- src/js/routes.js | 10 +++-- src/js/services/txService.js | 30 ++++++++++++--- webkitbuilds/.desktop | 2 +- webkitbuilds/setup-win.iss | 2 +- 11 files changed, 82 insertions(+), 49 deletions(-) diff --git a/Makefile b/Makefile index 77854b767..c6691b070 100644 --- a/Makefile +++ b/Makefile @@ -56,16 +56,16 @@ ios-debug: open cordova/project/platforms/ios/Copay.xcodeproj android-prod: - cordova/build.sh ANDROID --clear + cordova/build.sh ANDROID --clear cd cordova/project && cordova build android --release jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../copay.keystore -signedjar cordova/project/platforms/android/build/outputs/apk/android-release-signed.apk cordova/project/platforms/android/build/outputs/apk/android-release-unsigned.apk copay_play ../android-sdk-macosx/build-tools/21.1.1/zipalign -v 4 cordova/project/platforms/android/build/outputs/apk/android-release-signed.apk cordova/project/platforms/android/build/outputs/apk/android-release-signed-aligned.apk android-debug: - cordova/build.sh ANDROID --dbgjs --clear + cordova/build.sh ANDROID --dbgjs cd cordova/project && cordova run android android-debug-fast: cordova/build.sh ANDROID --dbgjs - cd cordova/project && cordova run android + cd cordova/project && cordova run android --device diff --git a/cordova/config.xml b/cordova/config.xml index 44e048448..43bc82fcd 100644 --- a/cordova/config.xml +++ b/cordova/config.xml @@ -1,8 +1,8 @@ + version="1.11.6" + android-versionCode="88" + ios-CFBundleVersion="1.11.6"> Copay A secure bitcoin wallet for friends and companies. diff --git a/cordova/wp/Package.appxmanifest b/cordova/wp/Package.appxmanifest index fcb4ea474..6b33d40ce 100644 --- a/cordova/wp/Package.appxmanifest +++ b/cordova/wp/Package.appxmanifest @@ -1,6 +1,6 @@ - + - + Copay Bitcoin Wallet diff --git a/cordova/wp/Properties/WMAppManifest.xml b/cordova/wp/Properties/WMAppManifest.xml index cf948a83a..30ed6c58c 100644 --- a/cordova/wp/Properties/WMAppManifest.xml +++ b/cordova/wp/Properties/WMAppManifest.xml @@ -1,4 +1,4 @@ - + @@ -11,7 +11,7 @@ - + Assets\icon@2.png diff --git a/package.json b/package.json index 7c731c10f..8858bce4f 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "name": "copay", "description": "A multisignature wallet", "author": "BitPay", - "version": "1.11.0", - "androidVersionCode": "81", + "version": "1.11.6", + "androidVersionCode": "88", "keywords": [ "wallet", "copay", diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index 65b6707ec..cae2e3b69 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -97,7 +97,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.loadingWallet = true; return; } - if (vanillaScope[k]) { + if (!lodash.isUndefined(vanillaScope[k])) { self[k] = vanillaScope[k]; return; } @@ -1350,9 +1350,9 @@ angular.module('copayApp.controllers').controller('indexController', function($r coinbaseService.getPendingTransactions(function(err, txs) { self.coinbasePendingTransactions = lodash.isEmpty(txs) ? null : txs; lodash.forEach(txs, function(dataFromStorage, txId) { - if ((dataFromStorage.type == 'sell' && dataFromStorage.status == 'completed') || + if ((dataFromStorage.type == 'sell' && dataFromStorage.status == 'completed') || (dataFromStorage.type == 'buy' && dataFromStorage.status == 'completed') || - dataFromStorage.status == 'error' || + dataFromStorage.status == 'error' || (dataFromStorage.type == 'send' && dataFromStorage.status == 'completed')) return; coinbaseService.getTransaction(accessToken, accountId, txId, function(err, tx) { if (err) { @@ -1453,7 +1453,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r if (err) $log.debug(err); }); } else { - if (!res.data.id) { + if (!res.data.id) { coinbaseService.savePendingTransaction(tx, {status: 'error', error: err}, function(err) { if (err) $log.debug(err); }); @@ -1492,7 +1492,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); return; } - coinbaseService.savePendingTransaction(tx, {remove: true}, function(err) { + coinbaseService.savePendingTransaction(tx, {remove: true}, function(err) { coinbaseService.getTransaction(self.coinbaseToken, self.coinbaseAccount.id, res.data.transaction.id, function(err, updatedTx) { coinbaseService.savePendingTransaction(updatedTx.data, {}, function(err) { if (err) $log.debug(err); @@ -1503,7 +1503,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r }); }); } - }); + }); }; self.setAddressbook = function(ab) { diff --git a/src/js/controllers/walletHome.js b/src/js/controllers/walletHome.js index 9eb4641b3..b8e8411da 100644 --- a/src/js/controllers/walletHome.js +++ b/src/js/controllers/walletHome.js @@ -62,7 +62,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi $log.debug('Cleaning WalletHome Instance'); lodash.each(self, function(v, k) { if (lodash.isFunction(v)) return; - if (vanillaScope[k]) { + if (!lodash.isUndefined(vanillaScope[k])) { self[k] = vanillaScope[k]; return; } @@ -954,35 +954,48 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi this.confirmTx = function(txp) { var self = this; + + $log.info('at .confirmTx'); txService.prepare({}, function(err) { + $log.info('after .prepare:', err); if (err) { + self.setOngoingProcess(); + $log.warn('confirmTx/Prepare error:', err); return self.setSendError(err); } self.setOngoingProcess(gettextCatalog.getString('Sending transaction')); txService.publishTx(txp, {}, function(err, txpPublished) { + + $log.info('after .publishTx:', err); + if (err) { self.setOngoingProcess(); self.setSendError(err); - } else { - txService.signAndBroadcast(txpPublished, { - reporterFn: self.setOngoingProcess.bind(self) - }, function(err, txp) { - self.resetForm(); + return; + } - if (err) { - self.error = err.message ? err.message : gettext('The payment was created but could not be completed. Please try again from home screen'); - $scope.$emit('Local/TxProposalAction'); - $timeout(function() { - $scope.$digest(); - }, 1); - } else { - go.walletHome(); - txStatus.notify(txp, function() { - $scope.$emit('Local/TxProposalAction', txp.status == 'broadcasted'); - }); - } + txService.signAndBroadcast(txpPublished, { + reporterFn: self.setOngoingProcess.bind(self) + }, function(err, txp) { + $log.info('after .signAndBroadcast:', err); + self.resetForm(); + self.setOngoingProcess(); + + if (err) { + self.error = err.message ? err.message : gettext('The payment was created but could not be completed. Please try again from home screen'); + $scope.$emit('Local/TxProposalAction'); + $timeout(function() { + $scope.$digest(); + }, 1); + return; + } + + $log.info('Transaction status:', txp.status); + go.walletHome(); + txStatus.notify(txp, function() { + $scope.$emit('Local/TxProposalAction', txp.status == 'broadcasted'); }); - } + }); }); }); }; diff --git a/src/js/routes.js b/src/js/routes.js index 229552ba2..2137134fb 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -32,8 +32,8 @@ angular if (level == 'error') console.log(arguments); - var args = [].slice.call(arguments); - if (!Array.isArray(args)) args = [args]; + var args = Array.prototype.slice.call(arguments); + args = args.map(function(v) { try { if (typeof v == 'undefined') v = 'undefined'; @@ -47,8 +47,8 @@ angular // Trim output in mobile if (window.cordova) { v = v.toString(); - if (v.length > 300) { - v = v.substr(0, 297) + '...'; + if (v.length > 3000) { + v = v.substr(0, 2997) + '...'; } } } catch (e) { @@ -57,9 +57,11 @@ angular } return v; }); + try { if (window.cordova) console.log(args.join(' ')); + historicLog.add(level, args.join(' ')); orig.apply(null, args); } catch (e) { diff --git a/src/js/services/txService.js b/src/js/services/txService.js index 70a96c0dd..1eef5c58c 100644 --- a/src/js/services/txService.js +++ b/src/js/services/txService.js @@ -72,6 +72,7 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr }; root.prepare = function(opts, cb) { + $log.info("at .prepare"); opts = opts || {}; var fc = opts.selectedClient || profileService.focusedClient; if (!fc.canSign() && !fc.isPrivKeyExternal()) @@ -79,12 +80,14 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr root.checkTouchId(opts, function(err) { if (err) { + $log.warn('CheckTouchId error:', err); return cb(err); }; profileService.unlockFC(opts, function(err) { if (err) { - return cb(bwsError.msg(err)); + $log.warn("prepare/unlockFC error:", err); + return cb(err); }; return cb(); @@ -176,6 +179,7 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr }; root.sign = function(txp, opts, cb) { + $log.info('at .sign'); opts = opts || {}; var fc = opts.selectedClient || profileService.focusedClient; @@ -191,14 +195,26 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr return cb(msg); } } else { - fc.signTxProposal(txp, function(err, signedTxp) { - profileService.lockFC(); - return cb(err, signedTxp); - }); + + txp.signatures = null; + $log.info('at .sign: (isEncrypted):', fc.isPrivKeyEncrypted()); + $log.info('txp BEFORE:', txp); + + try { + fc.signTxProposal(txp, function(err, signedTxp) { + $log.info('txp AFTER:',err, signedTxp); + profileService.lockFC(); + return cb(err, signedTxp); + }); + } catch (e) { + $log.warn('Error at signTxProposal:', e); + return cb(e); + } } }; root.signAndBroadcast = function(txp, opts, cb) { + $log.info('at .signAndBroadcast'); opts = opts || {}; reportSigningStatus(opts); @@ -234,12 +250,14 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr root.prepareAndSignAndBroadcast = function(txp, opts, cb) { opts = opts || {}; + $log.info('at .prepareSignAndBroadcast'); + root.prepare(opts, function(err) { if (err) { + $log.warn('Prepare error:' + err); stopReport(opts); return cb(err); }; - reportSigningStatus(opts); root.signAndBroadcast(txp, opts, function(err, txp) { if (err) { stopReport(opts); diff --git a/webkitbuilds/.desktop b/webkitbuilds/.desktop index 4d0aafcd5..14e4d0734 100644 --- a/webkitbuilds/.desktop +++ b/webkitbuilds/.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Type=Application -Version=1.11.0 +Version=1.11.6 Name=Copay Comment=A multisignature wallet Exec=copay diff --git a/webkitbuilds/setup-win.iss b/webkitbuilds/setup-win.iss index e62a04cf5..81e5644ef 100755 --- a/webkitbuilds/setup-win.iss +++ b/webkitbuilds/setup-win.iss @@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Copay" -#define MyAppVersion "1.11.0" +#define MyAppVersion "1.11.6" #define MyAppPublisher "BitPay" #define MyAppURL "https://copay.io" #define MyAppExeName "Copay.exe"