Bitcoin-Core
為什麼 getnewaddress 或 generate 時不呼叫 key.cpp 中的 MakeNewKey
嗨,我是學習比特幣核心的學生。我測試了比特幣註冊測試模式,我想知道何時呼叫 CKey::MakeNewKey()。
當我這樣做時,
比特幣-cli -regtest 創建錢包“wallet1”
呼叫了 MakeNewKey() 函式,但是
bitcoin-cli -regtest getnewaddress或bitcoin-cli -regtest -generate 1
沒有呼叫 MakeNewKey(),只在 key.cpp 中呼叫 GetPrivKey() 和 GetPubKey()
呼叫GetPrivKey()時,序列化密鑰中key32部分與錢包私鑰不匹配
我的問題是,
- 我的錢包只有一個私鑰嗎?
- 區塊有自己的私鑰嗎?
- 如果#2 是正確的,什麼文件製作區塊的私鑰和公鑰
自 Bitcoin Core 0.13 起,錢包使用確定性密鑰派生。
這意味著錢包儲存一個種子,並在需要時使用它來派生密鑰。有關詳細資訊,請參閱 BIP32。
這樣做的好處是錢包的備份可以永遠持續下去,至少因為沒有導入其他密鑰。由於相同的種子產生相同的密鑰,較舊的備份將生成與備份後生成的真實錢包相同的密鑰,因此在恢復備份後將發現相同的付款。
MakeNewKey
用於生成新的隨機密鑰。有關從種子派生密鑰,請參閱CExtKey
key.cpp 中的函式。