UNPKG

@abcpros/bitcore-wallet-service

Version:
77 lines (70 loc) 2.1 kB
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 XPIAddressTranslator { 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) { try { const a = new Bitcore_['xpi'].Address(address); return 'xaddr'; } catch (e) { return; } } } } // Supports 3 formats: legacy (1xxx, mxxxx); Cashaddr(qxxx); Lotus(lotus_xxx) static translate(addresses, to, from?) { let wasArray = true; if (!_.isArray(addresses)) { wasArray = false; addresses = [addresses]; } from = from || XPIAddressTranslator.getAddressCoin(addresses[0]); let ret; if (from == to) { ret = addresses; } else { ret = _.filter( _.map(addresses, x => { let bitcore; if (from == 'xaddr') { bitcore = Bitcore_['xpi']; } else { 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(); } else if (to == 'xaddr') { return Bitcore_['xpi'].Address.fromObject(orig).toXAddress(); } }) ); } if (wasArray) return ret; else return ret[0]; } } module.exports = XPIAddressTranslator;