From 205f70dd8c6888209467fbbf6e542d5b17eb43d9 Mon Sep 17 00:00:00 2001 From: Kadir Sekha Date: Tue, 9 Jan 2018 18:04:52 +0900 Subject: [PATCH] new address and copay address working in receive / send / scan --- bitcoin-cash-js/index.js | 36 ++++++++++++++++++++++++++++++--- src/js/controllers/amount.js | 2 ++ src/js/controllers/confirm.js | 1 + src/js/routes.js | 4 ++-- src/js/services/incomingData.js | 21 +++++++++++++++++-- www/views/amount.html | 2 +- www/views/confirm.html | 10 ++++----- 7 files changed, 63 insertions(+), 13 deletions(-) diff --git a/bitcoin-cash-js/index.js b/bitcoin-cash-js/index.js index 27680866c..462c939ed 100644 --- a/bitcoin-cash-js/index.js +++ b/bitcoin-cash-js/index.js @@ -8,11 +8,11 @@ bitcoinCashJsModule.provider('bitcoinCashJsService', function() { provider.$get = function() { var service = {}; + const Address = bchjs.Address; + const BitpayFormat = Address.BitpayFormat; + const CashAddrFormat = Address.CashAddrFormat; service.translateAddresses = function(address) { - const Address = bchjs.Address; - const BitpayFormat = Address.BitpayFormat; - const CashAddrFormat = Address.CashAddrFormat; var result = new Address(address); return { 'legacy': result.toString(), @@ -21,6 +21,36 @@ bitcoinCashJsModule.provider('bitcoinCashJsService', function() { }; } + service.readAddress = function(address) { + var a = address.replace('bitcoincash:', ''); + var result = {}; + if (a[0] == '1') { + result = Address.fromString(a, 'livenet', 'pubkeyhash'); + } else if (a[0] == '3') { + result = Address.fromString(a, 'livenet', 'scripthash'); + } else if (a[0] == 'C') { + result = Address.fromString(a, 'livenet', 'pubkeyhash', BitpayFormat); + } else if (a[0] == 'H') { + result = Address.fromString(a, 'livenet', 'scripthash', BitpayFormat); + } else if (a[0] == 'q') { + result = Address.fromString(address, 'livenet', 'pubkeyhash', CashAddrFormat); + } else if (a[0] == 'p') { + result = Address.fromString(address, 'livenet', 'scripthash', CashAddrFormat); + } else { + return null; + } + + return { + 'legacy': result.toString(), + 'bitpay': result.toString(BitpayFormat), + 'cashaddr': result.toString(CashAddrFormat).replace('bitcoincash:', '') + } + } + + service.getBitcoinCashJs = function() { + return bchjs; + } + return service; } diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index c9cdca5ec..1efdb55ff 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -126,6 +126,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.showMenu = $ionicHistory.backView() && ($ionicHistory.backView().stateName == 'tabs.send' || $ionicHistory.backView().stateName == 'tabs.bitpayCard'); $scope.recipientType = data.stateParams.recipientType || null; $scope.toAddress = data.stateParams.toAddress; + $scope.displayAddress = data.stateParams.displayAddress; $scope.toName = data.stateParams.toName; $scope.toEmail = data.stateParams.toEmail; $scope.toColor = data.stateParams.toColor; @@ -415,6 +416,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ recipientType: $scope.recipientType, toAmount: amount, toAddress: $scope.toAddress, + displayAddress: $scope.displayAddress || $scope.toAddress, toName: $scope.toName, toEmail: $scope.toEmail, toColor: $scope.toColor, diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 5f8388322..d49e55d4f 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -160,6 +160,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( sendMax: data.stateParams.useSendMax == 'true' ? true : false, fromWalletId: data.stateParams.fromWalletId, toAddress: data.stateParams.toAddress, + displayAddress: data.stateParams.displayAddress, description: data.stateParams.description, paypro: data.stateParams.paypro, diff --git a/src/js/routes.js b/src/js/routes.js index 59c243258..49e153654 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -287,7 +287,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr */ .state('tabs.send.amount', { - url: '/amount/:recipientType/:toAddress/:toName/:toEmail/:toColor/:coin/:fixedUnit/:fromWalletId/:minShapeshiftAmount/:maxShapeshiftAmount/:shapeshiftOrderId', + url: '/amount/:recipientType/:toAddress/:toName/:toEmail/:toColor/:coin/:fixedUnit/:fromWalletId/:minShapeshiftAmount/:maxShapeshiftAmount/:shapeshiftOrderId/:displayAddress', views: { 'tab-send@tabs': { controller: 'amountController', @@ -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', + url: '/confirm/:recipientType/:toAddress/:toName/:toAmount/:toEmail/:toColor/:description/:coin/:useSendMax/:fromWalletId/:displayAddress', views: { 'tab-send@tabs': { controller: 'confirmController', diff --git a/src/js/services/incomingData.js b/src/js/services/incomingData.js index 87e4ac3c0..9c70a2ee7 100644 --- a/src/js/services/incomingData.js +++ b/src/js/services/incomingData.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.services').factory('incomingData', function($log, $state, $timeout, $ionicHistory, bitcore, bitcoreCash, $rootScope, payproService, scannerService, appConfigService, popupService, gettextCatalog) { +angular.module('copayApp.services').factory('incomingData', function($log, $state, $timeout, $ionicHistory, bitcore, bitcoreCash, $rootScope, payproService, scannerService, appConfigService, popupService, gettextCatalog, bitcoinCashJsService) { var root = {}; @@ -9,6 +9,18 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat }; root.redir = function(data, shapeshiftData) { + var originalAddress = null; + if (typeof(data) == 'string' && (data.toLowerCase().indexOf('bitcoincash:') >= 0 || data[0] == 'C' || data[0] == 'H')) { + try { + if (data.indexOf('BITCOINCASH:') >= 0) { + data = data.toLowerCase(); + } + originalAddress = data.replace('bitcoincash:', ''); + var legacyAddress = bitcoinCashJsService.readAddress(data).legacy; + data = 'bitcoincash:' + legacyAddress; + } catch (ex) {} + } + $log.debug('Processing incoming data: ' + data); function sanitizeUri(data) { @@ -57,11 +69,16 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat $state.transitionTo('tabs.send.confirm', { toAmount: amount, toAddress: addr, + displayAddress: originalAddress, description: message, coin: coin }); } else { - var params = { toAddress: addr, coin: coin }; + var params = { + toAddress: addr, + coin: coin, + displayAddress: originalAddress + }; if (shapeshiftData) { params['fromWalletId'] = shapeshiftData.fromWalletId; params['minShapeshiftAmount'] = shapeshiftData.minAmount; diff --git a/www/views/amount.html b/www/views/amount.html index 8fc00145d..1d8b2ff5a 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -25,7 +25,7 @@ - {{toName || toAddress}} + {{toName || displayAddress || toAddress}} diff --git a/www/views/confirm.html b/www/views/confirm.html index 811c3f3e7..5f59d6dbc 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -32,8 +32,8 @@ -
- +
+ {{tx.toName}}
@@ -50,15 +50,15 @@ -
- +
+ {{tx.toName}}
{{tx.toName}} - {{tx.toAddress}} + {{tx.displayAddress}}