add address provider

This commit is contained in:
JDonadio 2017-11-17 12:55:36 -03:00
parent 956f3723a0
commit 2099012f21
No known key found for this signature in database
GPG Key ID: EC1F4E04B2BFA730
5 changed files with 91 additions and 44 deletions

View File

@ -75,6 +75,7 @@ import { SatToFiatPipe } from '../pipes/satToFiat';
import { FiatToUnitPipe } from '../pipes/fiatToUnit'; import { FiatToUnitPipe } from '../pipes/fiatToUnit';
/* Providers */ /* Providers */
import { AddressProvider } from '../providers/address/address';
import { AddressBookProvider } from '../providers/address-book/address-book'; import { AddressBookProvider } from '../providers/address-book/address-book';
import { AppProvider } from '../providers/app/app'; import { AppProvider } from '../providers/app/app';
import { BwcProvider } from '../providers/bwc/bwc'; import { BwcProvider } from '../providers/bwc/bwc';
@ -152,6 +153,7 @@ let pages: any = [
]; ];
let providers: any = [ let providers: any = [
AddressProvider,
AddressBookProvider, AddressBookProvider,
AndroidFingerprintAuth, AndroidFingerprintAuth,
AppProvider, AppProvider,

View File

@ -1,6 +1,8 @@
import { Component, HostListener } from '@angular/core'; import { Component, HostListener } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular'; import { NavController, NavParams } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger'; import { Logger } from '@nsalaun/ng-logger';
import { BwcProvider } from '../../../providers/bwc/bwc';
import { AddressProvider } from '../../../providers/address/address';
import * as _ from 'lodash'; import * as _ from 'lodash';
//providers //providers
@ -33,7 +35,7 @@ export class AmountPage {
public allowSend: boolean; public allowSend: boolean;
public fromSend: boolean; public fromSend: boolean;
public recipientType: string; public recipientType: string;
public toAddress: string; public addressInfo: any;
public name: string; public name: string;
public email: string; public email: string;
public showSendMax: boolean; public showSendMax: boolean;
@ -47,10 +49,12 @@ export class AmountPage {
private platformProvider: PlatformProvider, private platformProvider: PlatformProvider,
private nodeWebkitProvider: NodeWebkitProvider, private nodeWebkitProvider: NodeWebkitProvider,
private configProvider: ConfigProvider, private configProvider: ConfigProvider,
private bwcProvider: BwcProvider,
private addressProvider: AddressProvider,
) { ) {
this.recipientType = this.navParams.data.recipientType || null; this.recipientType = this.navParams.data.recipientType || null;
this.nextView = this.navParams.data.fromSend ? ConfirmPage : ConfirmPage; 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.name = this.navParams.data.name;
this.email = this.navParams.data.email; this.email = this.navParams.data.email;
this.LENGTH_EXPRESSION_LIMIT = 19; this.LENGTH_EXPRESSION_LIMIT = 19;
@ -188,10 +192,11 @@ export class AmountPage {
let data: any = { let data: any = {
recipientType: this.recipientType, recipientType: this.recipientType,
amount: this.amount, amount: this.amount,
toAddress: this.toAddress, addressInfo: this.addressInfo,
name: this.name, name: this.name,
email: this.email, email: this.email,
coin: this.unit.toLocaleLowerCase(), unit: this.unit.toLocaleLowerCase(),
coin: this.addressInfo.coin,
useSendMax: this.useSendMax useSendMax: this.useSendMax
} }
this.navCtrl.push(this.nextView, data); this.navCtrl.push(this.nextView, data);

View File

@ -13,8 +13,8 @@
<span translate *ngIf="tx.sendMax">Sending maximum amount</span> <span translate *ngIf="tx.sendMax">Sending maximum amount</span>
</div> </div>
<div class="amount-label"> <div class="amount-label">
<div class="amount">{{tx.amountValueStr || '...'}} <span class="unit">{{tx.amountUnitStr}}</span></div> <div class="amount">{{amount | satToUnit: tx.amount * 1e8 || '...'}}</div>
<div class="alternative">{{tx.alternativeAmountStr || '...'}}</div> <div class="alternative">{{alternativeAmount | satToFiat: tx.amount * 1e8 || '...'}}</div>
</div> </div>
</ion-item> </ion-item>
<ion-item *ngIf="tx.paypro"> <ion-item *ngIf="tx.paypro">

View File

@ -99,44 +99,24 @@ export class ConfirmPage {
ionViewDidLoad() { ionViewDidLoad() {
console.log('ionViewDidLoad ConfirmPage'); 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 // Grab stateParams
let addressInfo = this.navParams.data.addressInfo;
let tx: any = { 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, sendMax: this.navParams.data.useSendMax == 'true' ? true : false,
toAddress: this.navParams.data.toAddress, toAddress: addressInfo.address,
description: this.navParams.data.description, description: this.navParams.data.description,
paypro: this.navParams.data.paypro, paypro: this.navParams.data.paypro,
feeLevel: this.configFeeLevel, feeLevel: this.configFeeLevel,
spendUnconfirmed: this.config.wallet.spendUnconfirmed, spendUnconfirmed: this.config.wallet.spendUnconfirmed,
// Vanity tx info (not in the real tx) // Vanity tx info (not in the real tx)
recipientType: this.navParams.data.recipientType || null, recipientType: this.navParams.data.recipientType,
name: this.navParams.data.name, name: this.navParams.data.name,
email: this.navParams.data.email, email: this.navParams.data.email,
color: this.navParams.data.color, color: this.navParams.data.color,
network: networkName, network: addressInfo.network,
coin: this.navParams.data.coin, coin: addressInfo.coin,
txp: {}, txp: {},
}; };
@ -317,17 +297,6 @@ export class ConfirmPage {
} }
this.tx = tx; 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. // End of quick refresh, before wallet is selected.
if (!wallet) { if (!wallet) {
@ -357,7 +326,6 @@ export class ConfirmPage {
tx.sendMaxInfo = sendMaxInfo; tx.sendMaxInfo = sendMaxInfo;
tx.amount = tx.sendMaxInfo.amount; tx.amount = tx.sendMaxInfo.amount;
updateAmount();
this.onGoingProcessProvider.set('calculatingFee', false); this.onGoingProcessProvider.set('calculatingFee', false);
setTimeout(() => { setTimeout(() => {
this.showSendMaxWarning(wallet, sendMaxInfo); this.showSendMaxWarning(wallet, sendMaxInfo);

View File

@ -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),
};
}
}