Browse Source

[Wallet] extend CKeyMetadata with HD keypath

0.13
Jonas Schnelli 8 years ago
parent
commit
5b95dd2c25
No known key found for this signature in database
GPG Key ID: 29D4BCB6416F53EC
  1. 2
      src/wallet/wallet.cpp
  2. 13
      src/wallet/walletdb.h

2
src/wallet/wallet.cpp

@ -126,6 +126,8 @@ CPubKey CWallet::GenerateNewKey() @@ -126,6 +126,8 @@ CPubKey CWallet::GenerateNewKey()
// childIndex | BIP32_HARDENED_KEY_LIMIT = derive childIndex in hardened child-index-range
// example: 1 | BIP32_HARDENED_KEY_LIMIT == 0x80000001 == 2147483649
externalChainChildKey.Derive(childKey, hdChain.nExternalChainCounter | BIP32_HARDENED_KEY_LIMIT);
metadata.hdKeypath = "m/0'/0'/"+std::to_string(hdChain.nExternalChainCounter)+"'";
metadata.hdMasterKeyID = hdChain.masterKeyID;
// increment childkey index
hdChain.nExternalChainCounter++;
} while(HaveKey(childKey.key.GetPubKey().GetID()));

13
src/wallet/walletdb.h

@ -73,9 +73,13 @@ public: @@ -73,9 +73,13 @@ public:
class CKeyMetadata
{
public:
static const int CURRENT_VERSION=1;
static const int VERSION_BASIC=1;
static const int VERSION_WITH_HDDATA=10;
static const int CURRENT_VERSION=VERSION_WITH_HDDATA;
int nVersion;
int64_t nCreateTime; // 0 means unknown
std::string hdKeypath; //optional HD/bip32 keypath
CKeyID hdMasterKeyID; //id of the hd masterkey used to derive this key
CKeyMetadata()
{
@ -85,6 +89,7 @@ public: @@ -85,6 +89,7 @@ public:
{
nVersion = CKeyMetadata::CURRENT_VERSION;
nCreateTime = nCreateTime_;
hdKeypath.clear();
}
ADD_SERIALIZE_METHODS;
@ -94,12 +99,18 @@ public: @@ -94,12 +99,18 @@ public:
READWRITE(this->nVersion);
nVersion = this->nVersion;
READWRITE(nCreateTime);
if (this->nVersion >= VERSION_WITH_HDDATA)
{
READWRITE(hdKeypath);
READWRITE(hdMasterKeyID);
}
}
void SetNull()
{
nVersion = CKeyMetadata::CURRENT_VERSION;
nCreateTime = 0;
hdKeypath.clear();
}
};

Loading…
Cancel
Save