diff --git a/src/js/controllers/review.controller.js b/src/js/controllers/review.controller.js index 2311b2cb6..66a9da040 100644 --- a/src/js/controllers/review.controller.js +++ b/src/js/controllers/review.controller.js @@ -49,7 +49,7 @@ angular vm.sendingTitle = gettextCatalog.getString('You are sending'); vm.sendStatus = ''; vm.showAddress = true; - vm.thirdParty = false; + vm.thirdParty = null; vm.wallet = null; vm.memoExpanded = false; @@ -81,18 +81,11 @@ angular function onBeforeEnter(event, data) { - console.log('review onBeforeEnter sendflow ', sendFlowService.state); - // Reset from last time - vm.memo = ''; - + $log.debug('reviewController onBeforeEnter sendflow ', sendFlowService.state); defaults = configService.getDefaults(); sendFlowData = sendFlowService.state.getClone(); originWalletId = sendFlowData.fromWalletId; - if (typeof sendFlowData.amount === 'string') { - satoshis = parseInt(sendFlowData.amount, 10); - } else { - satoshis = sendFlowData.amount; - } + satoshis = parseInt(sendFlowData.amount, 10); toAddress = sendFlowData.toAddress; destinationWalletId = sendFlowData.toWalletId; @@ -105,11 +98,11 @@ angular vm.thirdParty = sendFlowData.thirdParty; switch (vm.thirdParty.id) { case 'shapeshift': - initShapeshift(function (err) { + initShapeshift(function onInitShapeshift(err) { if (err) { // Error stop here ongoingProcess.set('connectingShapeshift', false); - popupService.showAlert(gettextCatalog.getString('Shapeshift Error'), err.toString(), function () { + popupService.showAlert(gettextCatalog.getString('Shapeshift Error'), err.toString(), function onAlert() { $ionicHistory.goBack(); }); } else { @@ -135,7 +128,6 @@ angular config = configCache; priceDisplayIsFiat = config.wallet.settings.priceDisplay === 'fiat'; vm.origin.currencyColor = (vm.originWallet.coin === 'btc' ? defaults.bitcoinWalletColor : defaults.bitcoinCashWalletColor); - console.log("coin", vm.originWallet.coin, vm.origin.currencyColor, config.bitcoinWalletColor, vm.originWallet.coin === 'btc'); unitFromSat = 1 / config.wallet.settings.unitToSatoshi; } updateSendAmounts(); @@ -152,18 +144,18 @@ angular if (!tx || !vm.originWallet) return; if (vm.paymentExpired) { - popupService.showAlert(null, gettextCatalog.getString('This bitcoin payment request has expired.', function () { + popupService.showAlert(null, gettextCatalog.getString('This bitcoin payment request has expired.', function onAlert() { $ionicHistory.goBack(); })); vm.sendStatus = ''; - $timeout(function() { + $timeout(function onTimeout() { $scope.$apply(); }); return; } ongoingProcess.set('creatingTx', true, statusChangeHandler); - getTxp(lodash.clone(tx), vm.originWallet, false, function(err, txp) { + getTxp(lodash.clone(tx), vm.originWallet, false, function onGetTxp(err, txp) { ongoingProcess.set('creatingTx', false, statusChangeHandler); if (err) return; @@ -180,12 +172,12 @@ angular if (!vm.originWallet.canSign() && !vm.originWallet.isPrivKeyExternal()) { $log.info('No signing proposal: No private key'); - return walletService.onlyPublish(vm.originWallet, txp, function(err) { + return walletService.onlyPublish(vm.originWallet, txp, function onOnlyPublish(err) { if (err) setSendError(err); }, statusChangeHandler); } - walletService.publishAndSign(vm.originWallet, txp, function(err, txp) { + walletService.publishAndSign(vm.originWallet, txp, function onPublishAndSign(err, txp) { if (err) return setSendError(err); if (config.confirmedTxsNotifications && config.confirmedTxsNotifications.enabled) { txConfirmNotification.subscribe(vm.originWallet, { @@ -199,7 +191,7 @@ angular confirmTx(function(nok) { if (nok) { vm.sendStatus = ''; - $timeout(function() { + $timeout(function onTimeout() { $scope.$apply(); }); return; @@ -256,7 +248,6 @@ angular }; function createVanityTransaction(data) { - console.log('createVanityTransaction()'); var configFeeLevel = config.wallet.settings.feeLevel ? config.wallet.settings.feeLevel : 'normal'; // Grab stateParams @@ -280,6 +271,9 @@ angular txp: {}, }; + if (vm.thirdParty && vm.thirdParty.id === "shapeshift") { + tx.toAddress = vm.thirdParty.toAddress; + } if (data.stateParams.requiredFeeRate) { vm.usingMerchantFee = true; @@ -293,29 +287,35 @@ angular var B = tx.coin === 'bch' ? bitcoreCash : bitcore; var networkName; try { - if (vm.destination.kind === 'wallet') { // This is a wallet-to-wallet transfer + // Final destination is a wallet, but this transaction must go to an address for the first stage of the exchange. + if (sendFlowData.thirdParty && sendFlowData.thirdParty.id === 'shapeshift') { + networkName = (new B.Address(tx.toAddress)).network.name; + tx.network = networkName; + setupTx(tx); + + } else if (vm.destination.kind === 'wallet') { // This is a wallet-to-wallet transfer ongoingProcess.set('generatingNewAddress', true); var toWallet = profileService.getWallet(destinationWalletId); // We need an address to send to, so we ask the walletService to create a new address for the toWallet. - console.log('Getting address for wallet...'); walletService.getAddress(toWallet, true, function onWalletAddress(err, addr) { - console.log('getAddress cb called', err); + if (err) { + $log.error('Error getting address for wallet.', err); + throw new Error(err.message); + } ongoingProcess.set('generatingNewAddress', false); tx.toAddress = addr; networkName = (new B.Address(tx.toAddress)).network.name; tx.network = networkName; - console.log('calling setupTx() for wallet.'); setupTx(tx); }); } else { // This is a Wallet-to-address transfer networkName = (new B.Address(tx.toAddress)).network.name; tx.network = networkName; - console.log('calling setupTx() for address.'); setupTx(tx); } } catch (e) { - console.error('Error setting up tx', e); + $log.error('Error setting up tx', e); var message = gettextCatalog.getString('Invalid address'); popupService.showAlert(null, message, function () { $ionicHistory.nextViewOptions({ @@ -385,7 +385,7 @@ angular } txp.excludeUnconfirmedUtxos = !tx.spendUnconfirmed; txp.dryRun = dryRun; - walletService.createTx(wallet, txp, function(err, ctxp) { + walletService.createTx(wallet, txp, function onCreateTx(err, ctxp) { if (err) { setSendError(err); return cb(err); @@ -405,7 +405,7 @@ angular var walletStatus = null; if (wallet.status && wallet.status.isValid) { walletStatus = wallet.status; - } else if (wallet.cachedStatus.isValid) { + } else if (wallet.cachedStatus && wallet.cachedStatus.isValid) { walletStatus = wallet.cachedStatus; } @@ -444,7 +444,7 @@ angular } // Check if the recipient is a contact - addressbookService.get(originCoin + address, function(err, contact) { + addressbookService.get(originCoin + address, function onGetContact(err, contact) { if (!err && contact) { handleDestinationAsAddressOfContact(contact); } else { @@ -517,7 +517,6 @@ angular vm.destination.color = toWallet.color; vm.destination.currency = toWallet.coin.toUpperCase(); - ongoingProcess.set('connectingShapeshift', true); walletService.getAddress(vm.originWallet, false, function onReturnWalletAddress(err, returnAddr) { if (err) { @@ -535,9 +534,8 @@ angular if (err) { return cb(err); } else { - vm.destination.kind = 'shapeshift'; - vm.destination.address = toAddress; - tx.toAddress = shapeshiftData.toAddress; + // Want it to appear like a wallet-to-wallet transfer, so don't set the main toAddress. + vm.thirdParty.toAddress = shapeshiftData.toAddress; vm.memo = 'ShapeShift Order:\nhttps://www.shapeshift.io/#/status/' + shapeshiftData.orderId; vm.memoExpanded = !!vm.memo; ongoingProcess.set('connectingShapeshift', false); @@ -572,7 +570,6 @@ angular }, 1000); function setExpirationTime() { - console.log('setExpirationTime()'); var now = Math.floor(Date.now() / 1000); if (now > expirationTime) { @@ -690,7 +687,7 @@ angular $timeout(function() { $scope.$apply(); }); - popupService.showAlert(gettextCatalog.getString('Error at confirm'), bwcError.msg(msg), function () { + popupService.showAlert(gettextCatalog.getString('Error at confirm'), bwcError.msg(msg), function onAlert() { $ionicHistory.goBack(); }); }; @@ -702,7 +699,7 @@ angular tx.displayAddress = tx.toAddress; } - addressbookService.get(tx.coin+tx.toAddress, function(err, addr) { // Check if the recipient is a contact + addressbookService.get(tx.coin+tx.toAddress, function onGetContact(err, addr) { // Check if the recipient is a contact if (!err && addr) { tx.toName = addr.name; tx.toEmail = addr.email; @@ -721,7 +718,7 @@ angular updateTx(tx, vm.originWallet, { dryRun: true }, function(err) { - $timeout(function() { + $timeout(function onTimeout() { $scope.$apply(); }, 10); @@ -848,7 +845,7 @@ angular // refresh(); var feeServiceLevel = usingMerchantFee && vm.originWallet.coin == 'btc' ? 'urgent' : tx.feeLevel; - feeService.getFeeRate(vm.originWallet.coin, tx.network, feeServiceLevel, function(err, feeRate) { + feeService.getFeeRate(vm.originWallet.coin, tx.network, feeServiceLevel, function onGetFeeRate(err, feeRate) { if (err) { ongoingProcess.set('calculatingFee', false); return cb(err); @@ -867,7 +864,7 @@ angular tx.feeRate = feeRate; } - getSendMaxInfo(lodash.clone(tx), wallet, function(err, sendMaxInfo) { + getSendMaxInfo(lodash.clone(tx), wallet, function onGetSendmaxInfo(err, sendMaxInfo) { if (err) { ongoingProcess.set('calculatingFee', false); var msg = gettextCatalog.getString('Error getting SendMax information'); @@ -881,7 +878,7 @@ angular if (tx.sendMax && sendMaxInfo.amount == 0) { ongoingProcess.set('calculatingFee', false); setNotReady(gettextCatalog.getString('Insufficient confirmed funds')); - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Not enough funds for fee'), function () { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Not enough funds for fee'), function onAlert() { $ionicHistory.goBack(); }); return cb('no_funds'); @@ -906,8 +903,7 @@ angular return cb(); } - console.log('calling getTxp() from getSendMaxInfo cb.'); - getTxp(lodash.clone(tx), wallet, opts.dryRun, function(err, txp) { + getTxp(lodash.clone(tx), wallet, opts.dryRun, function onGetTxp(err, txp) { ongoingProcess.set('calculatingFee', false); if (err) { if (err.message == 'Insufficient funds') { @@ -919,7 +915,7 @@ angular } txp.feeStr = txFormatService.formatAmountStr(wallet.coin, txp.fee); - txFormatService.formatAlternativeStr(wallet.coin, txp.fee, function(v) { + txFormatService.formatAlternativeStr(wallet.coin, txp.fee, function onFormatAlternativeStr(v) { // txp.alternativeFeeStr = v; // if (txp.alternativeFeeStr.substring(0, 4) == '0.00') // txp.alternativeFeeStr = '< ' + txp.alternativeFeeStr; @@ -928,8 +924,6 @@ angular if (v.substring(0, 1) === "<") { vm.feeLessThanACent = true; } - - console.log("fiat", vm.feeFiat); }); @@ -939,14 +933,11 @@ angular txp.feeToHigh = per > FEE_TOO_HIGH_LIMIT_PERCENTAGE; vm.feeCrypto = (unitFromSat * txp.fee).toFixed(8); vm.feeIsHigh = txp.feeToHigh; - console.log("crypto", vm.feeCrypto); - tx.txp[wallet.id] = txp; $log.debug('Confirm. TX Fully Updated for wallet:' + wallet.id, tx); vm.readyToSend = true; updateSendAmounts(); - console.log('readyToSend:', vm.readyToSend); $scope.$apply(); return cb(); diff --git a/src/js/services/shapeshift.service.js b/src/js/services/shapeshift.service.js index 73410e478..8fdfe08b9 100644 --- a/src/js/services/shapeshift.service.js +++ b/src/js/services/shapeshift.service.js @@ -63,6 +63,7 @@ angular } else if (amount > service.marketData.maxLimit) { cb(new Error(gettextCatalog.getString('Amount is above the limit'))); } else { + // Init service data service.withdrawalAddress = withdrawalAddress; service.returnAddress = returnAddress; @@ -72,7 +73,7 @@ angular // Check the address shapeshiftApiService - .ValidateAddress(withdrawalAddress, coinOut) + .ValidateAddress(returnAddress, coinOut) .then(function onSuccess(response) { if (response && response.isvalid) { // Prepare the transaction shapeshift side