diff options
| author | Pieter Wuille <[email protected]> | 2013-06-20 01:13:55 +0200 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2013-06-20 01:31:18 +0200 |
| commit | 4addb2c066e157f479fdbae902b3d568f2432fd0 (patch) | |
| tree | a2fbaf1a181fbac619166fcc75eb7102a172d73f /src/walletdb.cpp | |
| parent | Merge pull request #2760 from cozz/cozz2 (diff) | |
| download | discoin-4addb2c066e157f479fdbae902b3d568f2432fd0.tar.xz discoin-4addb2c066e157f479fdbae902b3d568f2432fd0.zip | |
Refactor keytime/metadata and wallet encryption bugfix
Refactor keytime:
* Key metadata is kept in a CWallet::mapKeyMetadata (std::map<CKeyId,CKeyMetadata>).
* When generating a new key, time is put in that map, and new key is written.
* AddKeyPubKey and AddCryptedKey do not take a creation time argument, but instead
pull it from that map, if it exists there.
Bugfix:
* AddKeyPubKey and AddCryptedKey in CWallet didn't override the CKeyStore
definition anymore. This is fixed, as they no longed need the nCreationTime
argument now.
Also a few related other changes:
* Metadata can be overwritten.
* Only GenerateNewKey calls GetTime(), as it's the only place where we know for
sure a key was not constructed earlier.
* When the nTimeFirstKey is known to be inaccurate, it is set to the value 1
(instead of 0, which would mean unknown).
* Use CPubKey instead of std::vector<unsigned char> where possible.
Diffstat (limited to 'src/walletdb.cpp')
| -rw-r--r-- | src/walletdb.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/walletdb.cpp b/src/walletdb.cpp index 96fd4a5fc..bf23357f7 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -344,12 +344,14 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, } else if (strType == "keymeta") { - vector<unsigned char> vchPubKey; + CPubKey vchPubKey; ssKey >> vchPubKey; CKeyMetadata keyMeta; ssValue >> keyMeta; wss.nKeyMeta++; + pwallet->LoadKeyMetadata(vchPubKey, keyMeta); + // find earliest key creation time, as wallet birthday if (!pwallet->nTimeFirstKey || (keyMeta.nCreateTime < pwallet->nTimeFirstKey)) @@ -483,7 +485,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) // nTimeFirstKey is only reliable if all keys have metadata if ((wss.nKeys + wss.nCKeys) != wss.nKeyMeta) - pwallet->nTimeFirstKey = 0; + pwallet->nTimeFirstKey = 1; // 0 would be considered 'no value' BOOST_FOREACH(uint256 hash, wss.vWalletUpgrade) WriteTx(hash, pwallet->mapWallet[hash]); |