diff --git a/lib/common/utils.js b/lib/common/utils.js index 276a447..a6dde9c 100644 --- a/lib/common/utils.js +++ b/lib/common/utils.js @@ -126,32 +126,6 @@ Utils.buildTx = function(txp) { return t; }; -Utils.deriveAddress = function(scriptType, publicKeyRing, path, m, network) { - $.checkArgument(_.contains(_.values(Constants.SCRIPT_TYPES), scriptType)); - - var publicKeys = _.map(publicKeyRing, function(item) { - var xpub = new Bitcore.HDPublicKey(item.xPubKey); - return xpub.derive(path).publicKey; - }); - - var bitcoreAddress; - switch (scriptType) { - case Constants.SCRIPT_TYPES.P2SH: - bitcoreAddress = Address.createMultisig(publicKeys, m, network); - break; - case Constants.SCRIPT_TYPES.P2PKH: - $.checkState(_.isArray(publicKeys) && publicKeys.length == 1); - bitcoreAddress = Address.fromPublicKey(publicKeys[0], network); - break; - } - - return { - address: bitcoreAddress.toString(), - path: path, - publicKeys: _.invoke(publicKeys, 'toString'), - }; -}; - Utils.formatAmount = function(satoshis, unit, opts) { var UNITS = { btc: { diff --git a/lib/model/address.js b/lib/model/address.js index 574a4a4..9b024ab 100644 --- a/lib/model/address.js +++ b/lib/model/address.js @@ -1,5 +1,8 @@ 'use strict'; +var $ = require('preconditions').singleton(); +var _ = require('lodash'); + var Bitcore = require('bitcore-lib'); var Constants = require('../common/constants'); @@ -39,4 +42,40 @@ Address.fromObj = function(obj) { return x; }; +Address._deriveAddress = function(scriptType, publicKeyRing, path, m, network) { + $.checkArgument(_.contains(_.values(Constants.SCRIPT_TYPES), scriptType)); + + var publicKeys = _.map(publicKeyRing, function(item) { + var xpub = new Bitcore.HDPublicKey(item.xPubKey); + return xpub.derive(path).publicKey; + }); + + var bitcoreAddress; + switch (scriptType) { + case Constants.SCRIPT_TYPES.P2SH: + bitcoreAddress = Bitcore.Address.createMultisig(publicKeys, m, network); + break; + case Constants.SCRIPT_TYPES.P2PKH: + $.checkState(_.isArray(publicKeys) && publicKeys.length == 1); + bitcoreAddress = Bitcore.Address.fromPublicKey(publicKeys[0], network); + break; + } + + return { + address: bitcoreAddress.toString(), + path: path, + publicKeys: _.invoke(publicKeys, 'toString'), + }; +}; + +Address.derive = function(walletId, scriptType, publicKeyRing, path, m, network, isChange) { + var raw = Address._deriveAddress(scriptType, publicKeyRing, path, m, network); + return Address.create(_.extend(raw, { + walletId: walletId, + type: scriptType, + isChange: isChange, + })); +}; + + module.exports = Address; diff --git a/lib/model/copayer.js b/lib/model/copayer.js index 6071e20..433bb57 100644 --- a/lib/model/copayer.js +++ b/lib/model/copayer.js @@ -10,7 +10,7 @@ var Address = require('./address'); var AddressManager = require('./addressmanager'); var Bitcore = require('bitcore-lib'); -var Common = require('../common'); +var Constants = require('../common/constants'); function Copayer() {}; @@ -41,7 +41,7 @@ Copayer.create = function(opts) { signature: opts.signature, }]; - var derivationStrategy = opts.derivationStrategy || Common.Constants.DERIVATION_STRATEGIES.BIP45; + var derivationStrategy = opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP45; if (AddressManager.supportsCopayerBranches(derivationStrategy)) { x.addressManager = AddressManager.create({ derivationStrategy: derivationStrategy, @@ -87,13 +87,7 @@ Copayer.prototype.createAddress = function(wallet, isChange) { $.checkState(wallet.isComplete()); var path = this.addressManager.getNewAddressPath(isChange); - var raw = Address.create(Common.Utils.deriveAddress(wallet.addressType, wallet.publicKeyRing, path, wallet.m, wallet.network)); - var address = Address.create(_.extend(raw, { - walletId: wallet.id, - type: wallet.addressType, - })); - - address.isChange = isChange; + var address = Address.derive(wallet.id, wallet.addressType, wallet.publicKeyRing, path, wallet.m, wallet.network, isChange); return address; }; diff --git a/lib/model/wallet.js b/lib/model/wallet.js index a6ac737..afe2a15 100644 --- a/lib/model/wallet.js +++ b/lib/model/wallet.js @@ -9,8 +9,7 @@ var Address = require('./address'); var Copayer = require('./copayer'); var AddressManager = require('./addressmanager'); -var Common = require('../common'); -var Constants = Common.Constants; +var Constants = require('../common/constants'); function Wallet() {}; @@ -155,12 +154,7 @@ Wallet.prototype.createAddress = function(isChange) { var self = this; var path = this.addressManager.getNewAddressPath(isChange); - var raw = Common.Utils.deriveAddress(this.addressType, this.publicKeyRing, path, this.m, this.network); - var address = Address.create(_.extend(raw, { - walletId: self.id, - type: self.addressType, - })); - address.isChange = isChange; + var address = Address.derive(self.id, this.addressType, this.publicKeyRing, path, this.m, this.network, isChange); return address; };