UNPKG

@abcpros/bitcore-wallet-service

Version:
119 lines 5.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Address = void 0; var crypto_wallet_core_1 = require("@abcpros/crypto-wallet-core"); var lodash_1 = __importDefault(require("lodash")); var addressmanager_1 = require("./addressmanager"); var $ = require('preconditions').singleton(); var Common = require('../common'); var Constants = Common.Constants, Defaults = Common.Defaults, Utils = Common.Utils; var Address = (function () { function Address() { } Address.create = function (opts) { opts = opts || {}; var x = new Address(); $.checkArgument(Utils.checkValueInCollection(opts.coin, Constants.COINS)); x.version = '1.0.0'; x.createdOn = Math.floor(Date.now() / 1000); x.address = opts.address; x.walletId = opts.walletId; x.isChange = opts.isChange; x.path = opts.path; x.publicKeys = opts.publicKeys; x.coin = opts.coin; x.network = Address.Bitcore[opts.coin] ? Address.Bitcore[opts.coin].Address(x.address).toObject().network : opts.network; x.type = opts.type || Constants.SCRIPT_TYPES.P2SH; x.hasActivity = undefined; x.beRegistered = null; return x; }; Address.fromObj = function (obj) { var x = new Address(); x.version = obj.version; x.createdOn = obj.createdOn; x.address = obj.address; x.walletId = obj.walletId; x.coin = obj.coin || Defaults.COIN; x.network = obj.network; x.isChange = obj.isChange; x.path = obj.path; x.publicKeys = obj.publicKeys; x.type = obj.type || Constants.SCRIPT_TYPES.P2SH; x.hasActivity = obj.hasActivity; x.beRegistered = obj.beRegistered; return x; }; Address._deriveAddress = function (scriptType, publicKeyRing, path, m, coin, network, noNativeCashAddr) { $.checkArgument(Utils.checkValueInCollection(scriptType, Constants.SCRIPT_TYPES)); var publicKeys = lodash_1.default.map(publicKeyRing, function (item) { var xpub = Address.Bitcore[coin] ? new Address.Bitcore[coin].HDPublicKey(item.xPubKey) : new Address.Bitcore.btc.HDPublicKey(item.xPubKey); return xpub.deriveChild(path).publicKey; }); var bitcoreAddress; switch (scriptType) { case Constants.SCRIPT_TYPES.P2WSH: var nestedWitness = false; bitcoreAddress = Address.Bitcore[coin].Address.createMultisig(publicKeys, m, network, nestedWitness, 'witnessscripthash'); break; case Constants.SCRIPT_TYPES.P2SH: bitcoreAddress = Address.Bitcore[coin].Address.createMultisig(publicKeys, m, network); break; case Constants.SCRIPT_TYPES.P2WPKH: bitcoreAddress = Address.Bitcore[coin].Address.fromPublicKey(publicKeys[0], network, 'witnesspubkeyhash'); break; case Constants.SCRIPT_TYPES.P2PKH: $.checkState(lodash_1.default.isArray(publicKeys) && publicKeys.length == 1, 'Failed state: publicKeys length < 1 or publicKeys not an array at <_deriveAddress()>'); if (Address.Bitcore[coin]) { bitcoreAddress = Address.Bitcore[coin].Address.fromPublicKey(publicKeys[0], network); } else { var _a = new addressmanager_1.AddressManager().parseDerivationPath(path), addressIndex = _a.addressIndex, isChange = _a.isChange; var xPubKey = publicKeyRing[0].xPubKey; bitcoreAddress = crypto_wallet_core_1.Deriver.deriveAddress(coin.toUpperCase(), network, xPubKey, addressIndex, isChange); } break; } var addrStr = bitcoreAddress.toString(true); if (coin == 'xpi') { addrStr = bitcoreAddress.toXAddress(); } else if (noNativeCashAddr && coin == 'bch') { addrStr = bitcoreAddress.toLegacyAddress(); } return { address: addrStr, path: path, publicKeys: lodash_1.default.invokeMap(publicKeys, 'toString') }; }; Address.derive = function (walletId, scriptType, publicKeyRing, path, m, coin, network, isChange, noNativeCashAddr) { if (noNativeCashAddr === void 0) { noNativeCashAddr = false; } var raw = Address._deriveAddress(scriptType, publicKeyRing, path, m, coin, network, noNativeCashAddr); return Address.create(lodash_1.default.extend(raw, { coin: coin, network: network, walletId: walletId, type: scriptType, isChange: isChange })); }; Address.Bitcore = { btc: require('@abcpros/bitcore-lib'), bch: require('@abcpros/bitcore-lib-cash'), xec: require('@abcpros/bitcore-lib-xec'), doge: require('@abcpros/bitcore-lib-doge'), xpi: require('@abcpros/bitcore-lib-xpi'), ltc: require('@abcpros/bitcore-lib-ltc') }; return Address; }()); exports.Address = Address; //# sourceMappingURL=address.js.map