From 2099012f2118422e1122c80d79666b8595661dbe Mon Sep 17 00:00:00 2001 From: JDonadio Date: Fri, 17 Nov 2017 12:55:36 -0300 Subject: [PATCH] add address provider --- src/app/app.module.ts | 2 + src/pages/send/amount/amount.ts | 13 ++++-- src/pages/send/confirm/confirm.html | 4 +- src/pages/send/confirm/confirm.ts | 44 +++--------------- src/providers/address/address.ts | 72 +++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 44 deletions(-) create mode 100644 src/providers/address/address.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4558db23b..4011d65c1 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -75,6 +75,7 @@ import { SatToFiatPipe } from '../pipes/satToFiat'; import { FiatToUnitPipe } from '../pipes/fiatToUnit'; /* Providers */ +import { AddressProvider } from '../providers/address/address'; import { AddressBookProvider } from '../providers/address-book/address-book'; import { AppProvider } from '../providers/app/app'; import { BwcProvider } from '../providers/bwc/bwc'; @@ -152,6 +153,7 @@ let pages: any = [ ]; let providers: any = [ + AddressProvider, AddressBookProvider, AndroidFingerprintAuth, AppProvider, diff --git a/src/pages/send/amount/amount.ts b/src/pages/send/amount/amount.ts index 393fcc066..44e593faf 100644 --- a/src/pages/send/amount/amount.ts +++ b/src/pages/send/amount/amount.ts @@ -1,6 +1,8 @@ import { Component, HostListener } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; import { Logger } from '@nsalaun/ng-logger'; +import { BwcProvider } from '../../../providers/bwc/bwc'; +import { AddressProvider } from '../../../providers/address/address'; import * as _ from 'lodash'; //providers @@ -33,7 +35,7 @@ export class AmountPage { public allowSend: boolean; public fromSend: boolean; public recipientType: string; - public toAddress: string; + public addressInfo: any; public name: string; public email: string; public showSendMax: boolean; @@ -47,10 +49,12 @@ export class AmountPage { private platformProvider: PlatformProvider, private nodeWebkitProvider: NodeWebkitProvider, private configProvider: ConfigProvider, + private bwcProvider: BwcProvider, + private addressProvider: AddressProvider, ) { this.recipientType = this.navParams.data.recipientType || null; this.nextView = this.navParams.data.fromSend ? ConfirmPage : ConfirmPage; - this.toAddress = this.navParams.data.toAddress; + this.addressInfo = this.addressProvider.validateAddress(this.navParams.data.toAddress); this.name = this.navParams.data.name; this.email = this.navParams.data.email; this.LENGTH_EXPRESSION_LIMIT = 19; @@ -188,10 +192,11 @@ export class AmountPage { let data: any = { recipientType: this.recipientType, amount: this.amount, - toAddress: this.toAddress, + addressInfo: this.addressInfo, name: this.name, email: this.email, - coin: this.unit.toLocaleLowerCase(), + unit: this.unit.toLocaleLowerCase(), + coin: this.addressInfo.coin, useSendMax: this.useSendMax } this.navCtrl.push(this.nextView, data); diff --git a/src/pages/send/confirm/confirm.html b/src/pages/send/confirm/confirm.html index 03688c6b9..506178474 100644 --- a/src/pages/send/confirm/confirm.html +++ b/src/pages/send/confirm/confirm.html @@ -13,8 +13,8 @@ Sending maximum amount
-
{{tx.amountValueStr || '...'}} {{tx.amountUnitStr}}
-
{{tx.alternativeAmountStr || '...'}}
+
{{amount | satToUnit: tx.amount * 1e8 || '...'}}
+
{{alternativeAmount | satToFiat: tx.amount * 1e8 || '...'}}
diff --git a/src/pages/send/confirm/confirm.ts b/src/pages/send/confirm/confirm.ts index 270532413..62e5e7e25 100644 --- a/src/pages/send/confirm/confirm.ts +++ b/src/pages/send/confirm/confirm.ts @@ -99,44 +99,24 @@ export class ConfirmPage { ionViewDidLoad() { console.log('ionViewDidLoad ConfirmPage'); - // Setup - let B = this.coin.toLocaleLowerCase() == 'bch' ? this.bwcProvider.getBitcoreCash() : this.bwcProvider.getBitcore(); - let networkName; - try { - networkName = (new B.Address(this.toAddress)).network.name; - } catch (e) { - let message = 'Copay only supports Bitcoin Cash using new version numbers addresses'; // TODO gettextCatalog - let backText = 'Go back'; // TODO gettextCatalog - let learnText = 'Learn more'; // TODO gettextCatalog - this.popupProvider.ionicConfirm(null, message, backText, learnText).then((res: boolean) => { - this.navCtrl.setRoot(SendPage); - this.navCtrl.popToRoot(); - if (!res) { - let url = 'https://support.bitpay.com/hc/en-us/articles/115004671663'; - this.externalLinkProvider.open(url); - } - }); - return; - } - // Grab stateParams + let addressInfo = this.navParams.data.addressInfo; let tx: any = { - amount: parseFloat(this.navParams.data.amount) * 100000000, // TODO review this line '* 100000000' convert satoshi to BTC + amount: this.navParams.data.amount, sendMax: this.navParams.data.useSendMax == 'true' ? true : false, - toAddress: this.navParams.data.toAddress, + toAddress: addressInfo.address, description: this.navParams.data.description, paypro: this.navParams.data.paypro, - feeLevel: this.configFeeLevel, spendUnconfirmed: this.config.wallet.spendUnconfirmed, // Vanity tx info (not in the real tx) - recipientType: this.navParams.data.recipientType || null, + recipientType: this.navParams.data.recipientType, name: this.navParams.data.name, email: this.navParams.data.email, color: this.navParams.data.color, - network: networkName, - coin: this.navParams.data.coin, + network: addressInfo.network, + coin: addressInfo.coin, txp: {}, }; @@ -317,17 +297,6 @@ export class ConfirmPage { } this.tx = tx; - let updateAmount = (): void => { - if (!tx.amount) return; - - // Amount - tx.amountStr = this.txFormatProvider.formatAmountStr(wallet.coin, tx.amount); - tx.amountValueStr = tx.amountStr.split(' ')[0]; - tx.amountUnitStr = tx.amountStr.split(' ')[1]; - // tx.alternativeAmountStr = this.txFormatProvider.formatAlternativeStr(wallet.coin, tx.amount); - } - - updateAmount(); // End of quick refresh, before wallet is selected. if (!wallet) { @@ -357,7 +326,6 @@ export class ConfirmPage { tx.sendMaxInfo = sendMaxInfo; tx.amount = tx.sendMaxInfo.amount; - updateAmount(); this.onGoingProcessProvider.set('calculatingFee', false); setTimeout(() => { this.showSendMaxWarning(wallet, sendMaxInfo); diff --git a/src/providers/address/address.ts b/src/providers/address/address.ts new file mode 100644 index 000000000..8589e5de7 --- /dev/null +++ b/src/providers/address/address.ts @@ -0,0 +1,72 @@ +import { Injectable } from '@angular/core'; +import { BwcProvider } from '../../providers/bwc/bwc'; + +@Injectable() +export class AddressProvider { + private bitcore: any; + private bitcoreCash: any; + private Bitcore: any; + + constructor( + private bwcProvider: BwcProvider, + ) { + this.bitcore = this.bwcProvider.getBitcore(); + this.bitcoreCash = this.bwcProvider.getBitcoreCash(); + this.Bitcore = { + 'btc': { + lib: this.bitcore, + translateTo: 'bch' + }, + 'bch': { + lib: this.bitcoreCash, + translateTo: 'btc' + } + }; + } + + getCoin(address: string) { + try { + new this.Bitcore['btc'].lib.Address(address); + return 'btc'; + } catch (e) { + try { + new this.Bitcore['bch'].lib.Address(address); + return 'bch'; + } catch (e) { + return null; + } + } + }; + + translateAddress(address: string) { + var origCoin = this.getCoin(address); + if (!origCoin) return; + + var origAddress = new this.Bitcore[origCoin].lib.Address(address); + var origObj = origAddress.toObject(); + + var resultCoin = this.Bitcore[origCoin].translateTo; + var resultAddress = this.Bitcore[resultCoin].lib.Address.fromObject(origObj); + return { + origCoin: origCoin.toUpperCase(), + origAddress: address, + resultCoin: resultCoin.toUpperCase(), + resultAddress: resultAddress.toString() + }; + }; + + validateAddress(address: string) { + let Address = this.bitcore.Address; + let AddressCash = this.bitcoreCash.Address; + let isLivenet = Address.isValid(address, 'livenet'); + let isTestnet = Address.isValid(address, 'testnet'); + let isLivenetCash = AddressCash.isValid(address, 'livenet'); + return { + address: address, + isValid: isLivenet || isTestnet || isLivenetCash, + network: isTestnet ? 'testnet' : 'livenet', + coin: this.getCoin(address), + translation: this.translateAddress(address), + }; + } +} \ No newline at end of file