|
@ -1,12 +1,9 @@ |
|
|
var _ = require('lodash'); |
|
|
var _ = require('lodash'); |
|
|
var $ = require('preconditions').singleton(); |
|
|
var $ = require('preconditions').singleton(); |
|
|
|
|
|
|
|
|
var STRATEGIES = { |
|
|
var WalletUtils = require('bitcore-wallet-utils'); |
|
|
BIP44: 'BIP44', |
|
|
|
|
|
BIP45: 'BIP45', |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
var SHARED_INDEX = 0x80000000 - 1; |
|
|
var BIP45_SHARED_INDEX = 0x80000000 - 1; |
|
|
|
|
|
|
|
|
function AddressManager() {}; |
|
|
function AddressManager() {}; |
|
|
|
|
|
|
|
@ -16,12 +13,12 @@ AddressManager.create = function(opts) { |
|
|
var x = new AddressManager(); |
|
|
var x = new AddressManager(); |
|
|
|
|
|
|
|
|
x.version = 2; |
|
|
x.version = 2; |
|
|
x.derivationStrategy = opts.derivationStrategy || STRATEGIES.BIP44; |
|
|
x.derivationStrategy = opts.derivationStrategy || WalletUtils.DERIVATION_STRATEGIES.BIP44; |
|
|
$.checkState(_.contains(_.values(STRATEGIES), x.derivationStrategy)); |
|
|
$.checkState(_.contains(_.values(WalletUtils.DERIVATION_STRATEGIES), x.derivationStrategy)); |
|
|
|
|
|
|
|
|
x.receiveAddressIndex = 0; |
|
|
x.receiveAddressIndex = 0; |
|
|
x.changeAddressIndex = 0; |
|
|
x.changeAddressIndex = 0; |
|
|
x.copayerIndex = (opts && _.isNumber(opts.copayerIndex)) ? opts.copayerIndex : SHARED_INDEX; |
|
|
x.copayerIndex = (opts && _.isNumber(opts.copayerIndex)) ? opts.copayerIndex : BIP45_SHARED_INDEX; |
|
|
|
|
|
|
|
|
return x; |
|
|
return x; |
|
|
}; |
|
|
}; |
|
@ -30,7 +27,7 @@ AddressManager.fromObj = function(obj) { |
|
|
var x = new AddressManager(); |
|
|
var x = new AddressManager(); |
|
|
|
|
|
|
|
|
x.version = obj.version; |
|
|
x.version = obj.version; |
|
|
x.derivationStrategy = obj.derivationStrategy || STRATEGIES.BIP45; |
|
|
x.derivationStrategy = obj.derivationStrategy || WalletUtils.DERIVATION_STRATEGIES.BIP45; |
|
|
x.receiveAddressIndex = obj.receiveAddressIndex; |
|
|
x.receiveAddressIndex = obj.receiveAddressIndex; |
|
|
x.changeAddressIndex = obj.changeAddressIndex; |
|
|
x.changeAddressIndex = obj.changeAddressIndex; |
|
|
x.copayerIndex = obj.copayerIndex; |
|
|
x.copayerIndex = obj.copayerIndex; |
|
@ -40,7 +37,7 @@ AddressManager.fromObj = function(obj) { |
|
|
|
|
|
|
|
|
AddressManager.prototype.supportsDerivation = function() { |
|
|
AddressManager.prototype.supportsDerivation = function() { |
|
|
// BIP44 does not support copayer specific indexes
|
|
|
// BIP44 does not support copayer specific indexes
|
|
|
return !(this.derivationStrategy == STRATEGIES.BIP44 && this.copayerIndex != SHARED_INDEX); |
|
|
return !(this.derivationStrategy == WalletUtils.DERIVATION_STRATEGIES.BIP44 && this.copayerIndex != BIP45_SHARED_INDEX); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
AddressManager.prototype._incrementIndex = function(isChange) { |
|
|
AddressManager.prototype._incrementIndex = function(isChange) { |
|
@ -62,7 +59,7 @@ AddressManager.prototype.rewindIndex = function(isChange, n) { |
|
|
|
|
|
|
|
|
AddressManager.prototype.getCurrentAddressPath = function(isChange) { |
|
|
AddressManager.prototype.getCurrentAddressPath = function(isChange) { |
|
|
return 'm/' + |
|
|
return 'm/' + |
|
|
(this.derivationStrategy == STRATEGIES.BIP45 ? this.copayerIndex + '/' : '') + |
|
|
(this.derivationStrategy == WalletUtils.DERIVATION_STRATEGIES.BIP45 ? this.copayerIndex + '/' : '') + |
|
|
(isChange ? 1 : 0) + '/' + |
|
|
(isChange ? 1 : 0) + '/' + |
|
|
(isChange ? this.changeAddressIndex : this.receiveAddressIndex); |
|
|
(isChange ? this.changeAddressIndex : this.receiveAddressIndex); |
|
|
}; |
|
|
}; |
|
|