lnwallet: refactor common logic between NewAddress and LastUnusedAddress
This commit is contained in:
parent
785d3c9b4f
commit
798113a024
@ -70,6 +70,10 @@ var (
|
|||||||
// requested for the default imported account within the wallet.
|
// requested for the default imported account within the wallet.
|
||||||
errNoImportedAddrGen = errors.New("addresses cannot be generated for " +
|
errNoImportedAddrGen = errors.New("addresses cannot be generated for " +
|
||||||
"the default imported account")
|
"the default imported account")
|
||||||
|
|
||||||
|
// errIncompatibleAccountAddr
|
||||||
|
errIncompatibleAccountAddr = errors.New("incompatible address type " +
|
||||||
|
"for account")
|
||||||
)
|
)
|
||||||
|
|
||||||
// BtcWallet is an implementation of the lnwallet.WalletController interface
|
// BtcWallet is an implementation of the lnwallet.WalletController interface
|
||||||
@ -365,6 +369,38 @@ func (b *BtcWallet) ConfirmedBalance(confs int32,
|
|||||||
return balance, nil
|
return balance, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// keyScopeForAccountAddr determines the appropriate key scope of an account
|
||||||
|
// based on its name/address type.
|
||||||
|
func (b *BtcWallet) keyScopeForAccountAddr(accountName string,
|
||||||
|
addrType lnwallet.AddressType) (waddrmgr.KeyScope, uint32, error) {
|
||||||
|
|
||||||
|
// Map the requested address type to its key scope.
|
||||||
|
var addrKeyScope waddrmgr.KeyScope
|
||||||
|
switch addrType {
|
||||||
|
case lnwallet.WitnessPubKey:
|
||||||
|
addrKeyScope = waddrmgr.KeyScopeBIP0084
|
||||||
|
case lnwallet.NestedWitnessPubKey:
|
||||||
|
addrKeyScope = waddrmgr.KeyScopeBIP0049Plus
|
||||||
|
default:
|
||||||
|
return waddrmgr.KeyScope{}, 0,
|
||||||
|
fmt.Errorf("unknown address type")
|
||||||
|
}
|
||||||
|
|
||||||
|
// The default account spans across multiple key scopes, so the
|
||||||
|
// requested address type should already be valid for this account.
|
||||||
|
if accountName == lnwallet.DefaultAccountName {
|
||||||
|
return addrKeyScope, defaultAccount, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, look up the account's key scope.
|
||||||
|
keyScope, account, err := b.wallet.LookupAccount(accountName)
|
||||||
|
if err != nil {
|
||||||
|
return waddrmgr.KeyScope{}, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return keyScope, account, nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewAddress returns the next external or internal address for the wallet
|
// NewAddress returns the next external or internal address for the wallet
|
||||||
// dictated by the value of the `change` parameter. If change is true, then an
|
// dictated by the value of the `change` parameter. If change is true, then an
|
||||||
// internal address will be returned, otherwise an external address should be
|
// internal address will be returned, otherwise an external address should be
|
||||||
@ -375,32 +411,15 @@ func (b *BtcWallet) ConfirmedBalance(confs int32,
|
|||||||
func (b *BtcWallet) NewAddress(t lnwallet.AddressType, change bool,
|
func (b *BtcWallet) NewAddress(t lnwallet.AddressType, change bool,
|
||||||
accountName string) (btcutil.Address, error) {
|
accountName string) (btcutil.Address, error) {
|
||||||
|
|
||||||
var (
|
// Addresses cannot be derived from the catch-all imported accounts.
|
||||||
keyScope waddrmgr.KeyScope
|
if accountName == waddrmgr.ImportedAddrAccountName {
|
||||||
account uint32
|
|
||||||
)
|
|
||||||
switch accountName {
|
|
||||||
case waddrmgr.ImportedAddrAccountName:
|
|
||||||
return nil, errNoImportedAddrGen
|
return nil, errNoImportedAddrGen
|
||||||
|
|
||||||
case lnwallet.DefaultAccountName:
|
|
||||||
switch t {
|
|
||||||
case lnwallet.WitnessPubKey:
|
|
||||||
keyScope = waddrmgr.KeyScopeBIP0084
|
|
||||||
case lnwallet.NestedWitnessPubKey:
|
|
||||||
keyScope = waddrmgr.KeyScopeBIP0049Plus
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("unknown address type")
|
|
||||||
}
|
}
|
||||||
account = defaultAccount
|
|
||||||
|
|
||||||
default:
|
keyScope, account, err := b.keyScopeForAccountAddr(accountName, t)
|
||||||
var err error
|
|
||||||
keyScope, account, err = b.wallet.LookupAccount(accountName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if change {
|
if change {
|
||||||
return b.wallet.NewChangeAddress(account, keyScope)
|
return b.wallet.NewChangeAddress(account, keyScope)
|
||||||
@ -418,32 +437,15 @@ func (b *BtcWallet) NewAddress(t lnwallet.AddressType, change bool,
|
|||||||
func (b *BtcWallet) LastUnusedAddress(addrType lnwallet.AddressType,
|
func (b *BtcWallet) LastUnusedAddress(addrType lnwallet.AddressType,
|
||||||
accountName string) (btcutil.Address, error) {
|
accountName string) (btcutil.Address, error) {
|
||||||
|
|
||||||
var (
|
// Addresses cannot be derived from the catch-all imported accounts.
|
||||||
keyScope waddrmgr.KeyScope
|
if accountName == waddrmgr.ImportedAddrAccountName {
|
||||||
account uint32
|
|
||||||
)
|
|
||||||
switch accountName {
|
|
||||||
case waddrmgr.ImportedAddrAccountName:
|
|
||||||
return nil, errNoImportedAddrGen
|
return nil, errNoImportedAddrGen
|
||||||
|
|
||||||
case lnwallet.DefaultAccountName:
|
|
||||||
switch addrType {
|
|
||||||
case lnwallet.WitnessPubKey:
|
|
||||||
keyScope = waddrmgr.KeyScopeBIP0084
|
|
||||||
case lnwallet.NestedWitnessPubKey:
|
|
||||||
keyScope = waddrmgr.KeyScopeBIP0049Plus
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("unknown address type")
|
|
||||||
}
|
}
|
||||||
account = defaultAccount
|
|
||||||
|
|
||||||
default:
|
keyScope, account, err := b.keyScopeForAccountAddr(accountName, addrType)
|
||||||
var err error
|
|
||||||
keyScope, account, err = b.wallet.LookupAccount(accountName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return b.wallet.CurrentAddress(account, keyScope)
|
return b.wallet.CurrentAddress(account, keyScope)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user