Bitcoin-Core

為什麼 getnewaddress 或 generate 時不呼叫 key.cpp 中的 MakeNewKey

  • September 19, 2021

嗨,我是學習比特幣核心的學生。我測試了比特幣註冊測試模式,我想知道何時呼叫 CKey::MakeNewKey()。

當我這樣做時,

比特幣-cli -regtest 創建錢包“wallet1”

呼叫了 MakeNewKey() 函式,但是

bitcoin-cli -regtest getnewaddressbitcoin-cli -regtest -generate 1

沒有呼叫 MakeNewKey(),只在 key.cpp 中呼叫 GetPrivKey() 和 GetPubKey()

呼叫GetPrivKey()時,序列化密鑰中key32部分與錢包私鑰不匹配

我的問題是,

  1. 我的錢包只有一個私鑰嗎?
  2. 區塊有自己的私鑰嗎?
  3. 如果#2 是正確的,什麼文件製作區塊的私鑰和公鑰

自 Bitcoin Core 0.13 起,錢包使用確定性密鑰派生。

這意味著錢包儲存一個種子,並在需要時使用它來派生密鑰。有關詳細資訊,請參閱 BIP32。

這樣做的好處是錢包的備份可以永遠持續下去,至少因為沒有導入其他密鑰。由於相同的種子產生相同的密鑰,較舊的備份將生成與備份後生成的真實錢包相同的密鑰,因此在恢復備份後將發現相同的付款。

MakeNewKey用於生成新的隨機密鑰。有關從種子派生密鑰,請參閱CExtKeykey.cpp 中的函式。

引用自:https://bitcoin.stackexchange.com/questions/109734