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