waddrmgr+wallet: allow account import for simnet wallets
Simnet was previously left out as it didn't have defined HD versions for some of our key scopes. To allow testing importing accounts into simnet wallets, we fall back to use the mainnet HD versions. This commit also addresses an issue with simnet wallets that would arise whenever ScopedKeyManager.AccountProperties was invoked: `failed to retrieve account public key: unsupported net SimNet`
This commit is contained in:
parent
fe61cc5d78
commit
e1dfc4d1b7
2 changed files with 32 additions and 1 deletions
|
@ -43,6 +43,11 @@ const (
|
|||
// HDVersionTestNetBIP0084 is the HDVersion for BIP-0084 on the test
|
||||
// network.
|
||||
HDVersionTestNetBIP0084 HDVersion = 0x045f1cf6 // vpub
|
||||
|
||||
// HDVersionSimNetBIP0044 is the HDVersion for BIP-0044 on the
|
||||
// simulation test network. There aren't any other versions defined for
|
||||
// the simulation test network.
|
||||
HDVersionSimNetBIP0044 HDVersion = 0x0420bd3a // spub
|
||||
)
|
||||
|
||||
// DerivationPath represents a derivation path from a particular key manager's
|
||||
|
@ -2238,6 +2243,21 @@ func (s *ScopedKeyManager) cloneKeyWithVersion(key *hdkeychain.ExtendedKey) (
|
|||
return nil, fmt.Errorf("unsupported scope %v", s.scope)
|
||||
}
|
||||
|
||||
case wire.SimNet:
|
||||
switch s.scope {
|
||||
case KeyScopeBIP0044:
|
||||
version = HDVersionSimNetBIP0044
|
||||
// We use the mainnet versions for simnet keys when the keys
|
||||
// belong to a key scope which simnet doesn't have a defined
|
||||
// version for.
|
||||
case KeyScopeBIP0049Plus:
|
||||
version = HDVersionMainNetBIP0049
|
||||
case KeyScopeBIP0084:
|
||||
version = HDVersionMainNetBIP0084
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported scope %v", s.scope)
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported net %v", net)
|
||||
}
|
||||
|
|
|
@ -37,7 +37,9 @@ func keyScopeFromPubKey(pubKey *hdkeychain.ExtendedKey,
|
|||
// force the standard BIP-0049 derivation scheme (nested witness pubkeys
|
||||
// everywhere), while a witness address type will force the standard
|
||||
// BIP-0084 derivation scheme.
|
||||
case waddrmgr.HDVersionMainNetBIP0044, waddrmgr.HDVersionTestNetBIP0044:
|
||||
case waddrmgr.HDVersionMainNetBIP0044, waddrmgr.HDVersionTestNetBIP0044,
|
||||
waddrmgr.HDVersionSimNetBIP0044:
|
||||
|
||||
if addrType == nil {
|
||||
return waddrmgr.KeyScope{}, nil, errors.New("address " +
|
||||
"type must be specified for account public " +
|
||||
|
@ -111,6 +113,15 @@ func (w *Wallet) isPubKeyForNet(pubKey *hdkeychain.ExtendedKey) bool {
|
|||
version == waddrmgr.HDVersionTestNetBIP0049 ||
|
||||
version == waddrmgr.HDVersionTestNetBIP0084
|
||||
|
||||
// For simnet, we'll also allow the mainnet versions since simnet
|
||||
// doesn't have defined versions for some of our key scopes, and the
|
||||
// mainnet versions are usually used as the default regardless of the
|
||||
// network/key scope.
|
||||
case wire.SimNet:
|
||||
return version == waddrmgr.HDVersionSimNetBIP0044 ||
|
||||
version == waddrmgr.HDVersionMainNetBIP0049 ||
|
||||
version == waddrmgr.HDVersionMainNetBIP0084
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue