mirror of https://github.com/BTCPrivate/copay.git
add address provider
This commit is contained in:
parent
956f3723a0
commit
2099012f21
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
<span translate *ngIf="tx.sendMax">Sending maximum amount</span>
|
||||
</div>
|
||||
<div class="amount-label">
|
||||
<div class="amount">{{tx.amountValueStr || '...'}} <span class="unit">{{tx.amountUnitStr}}</span></div>
|
||||
<div class="alternative">{{tx.alternativeAmountStr || '...'}}</div>
|
||||
<div class="amount">{{amount | satToUnit: tx.amount * 1e8 || '...'}}</div>
|
||||
<div class="alternative">{{alternativeAmount | satToFiat: tx.amount * 1e8 || '...'}}</div>
|
||||
</div>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="tx.paypro">
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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),
|
||||
};
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue