Bitcoin-Core

從高畫質錢包發送付款

  • April 6, 2018

我發現這兩個問題對理解 HD 錢包很有幫助

1)分層確定性錢包如何以交易方式工作?

2)關於HD錢包如何工作的幾個問題

但是,我仍然不清楚在 HD 錢包的情況下如何發送付款。假設以下場景:

  • 派生的公鑰 #15 在一筆交易中收到 1 BTC
  • 派生的公鑰 #20 在一筆交易中收到 2 BTC

現在我想將 2.5 BTC 發送到某個地址,這樣做的程序是什麼?我需要做兩個單獨的交易嗎?

此外,我發現錢包(比特幣核心等)負責什麼以及使用者應該做什麼方面總體上令人困惑。因此,如果有人可以通過突出顯示比特幣核心中的一些步驟來解釋上述內容,將不勝感激。

在交易方面,高畫質錢包並不特別。事務不關心所涉及的密鑰是確定性派生的還是隨機生成的。

想像一個錢包分為兩部分:第一部分(我們將其稱為密鑰處理程序)處理私鑰/公鑰對並創建數字簽名。第二部分(我們將稱之為事務處理程序)處理事務接收和事務創建。假設第一部分有一些功能getnewpubkey(返回一個新地址)和signdatawithpubkey(接收一個公鑰和一些要簽名的數據,返回一個數字簽名)。

因此,有兩種不同類型的密鑰處理程序——一種隨機生成密鑰,另一種確定性生成密鑰(又名 HD 錢包)。這兩者可以與事務處理程序互換使用;事務處理程序做同樣的事情,它不關心密鑰是如何生成的。它所需要的只是在需要時獲取密鑰,並讓密鑰處理程序在事務處理程序要求時簽署事務。


在您的場景中,無論是否使用了 HD 錢包,事務處理程序都知道可以從中花費的兩筆交易。這兩個事務被發送到對應於事務處理程序要求密鑰處理程序提供的兩個密鑰的地址(即,它呼叫getnewpubkey了兩次)。

現在,當您要發送時,事務處理程序會構造一個事務,其中將您收到的兩個事務作為輸入。一旦它創建了事務,它就會將它發送到密鑰處理程序以進行簽名(因此它將呼叫signwithpubkey兩次並在兩次呼叫中傳遞相同的事務,但第一次呼叫一個公鑰,第二個呼叫另一個公鑰)。然後它獲取這些簽名和未簽名的交易,將它們組合起來,並生成最終交易,然後將其廣播到網路。

請注意實際接收和創建事務的事務處理程序如何不知道也不關心密鑰是如何派生的。您可以使用隨機生成密鑰的密鑰處理程序或確定性生成密鑰的密鑰處理程序;這沒什麼區別。


使用者應該做什麼。因此,如果有人可以通過突出顯示比特幣核心中的一些步驟來解釋上述內容,將不勝感激。

使用者不需要做任何事情。使用者在想要一個新地址時點擊按鈕以獲取新地址,並在他想要發送時點擊按鈕發送比特幣。一切(選擇哪些交易用作輸入、創建交易、簽署交易等)都由軟體處理。使用者對事務所做的事情不會改變密鑰是隨機生成的還是確定性生成的。

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