@abcpros/bitcore-wallet-service
Version:
A service for Mutisig HD Bitcoin Wallets
65 lines (58 loc) • 1.74 kB
text/typescript
import _ from 'lodash';
const Bitcore_ = {
btc: require('@abcpros/bitcore-lib'),
bch: require('@abcpros/bitcore-lib-cash'),
xec: require('@abcpros/bitcore-lib-xec'),
xpi: require('@abcpros/bitcore-lib-xpi')
};
export class BCHAddressTranslator {
static getAddressCoin(address) {
try {
new Bitcore_['btc'].Address(address);
return 'legacy';
} catch (e) {
try {
const a = new Bitcore_['bch'].Address(address);
if (a.toLegacyAddress() == address) return 'copay';
return 'cashaddr';
} catch (e) {
return;
}
}
}
// Supports 3 formats: legacy (1xxx, mxxxx); Copay: (Cxxx, Hxxx), Cashaddr(qxxx);
static translate(addresses, to, from?) {
let wasArray = true;
if (!_.isArray(addresses)) {
wasArray = false;
addresses = [addresses];
}
from = from || BCHAddressTranslator.getAddressCoin(addresses[0]);
let ret;
if (from == to) {
ret = addresses;
} else {
ret = _.filter(
_.map(addresses, x => {
const bitcore = Bitcore_[from == 'legacy' ? 'btc' : 'bch'];
let orig;
try {
orig = new bitcore.Address(x).toObject();
} catch (e) {
return null;
}
if (to == 'cashaddr') {
return Bitcore_['bch'].Address.fromObject(orig).toCashAddress(true);
} else if (to == 'copay') {
return Bitcore_['bch'].Address.fromObject(orig).toLegacyAddress();
} else if (to == 'legacy') {
return Bitcore_['btc'].Address.fromObject(orig).toString();
}
})
);
}
if (wasArray) return ret;
else return ret[0];
}
}
module.exports = BCHAddressTranslator;