使用 EQUALVERIFY 與不同的公鑰,但從相同的種子生成
我正在建構某些涉及比特幣的系統,因此我需要很好地了解它是如何在幕後工作的。
為了接收資金,對於每筆新交易,都應該生成新的公鑰及其雜湊值。我假設這是通過擴展父公鑰並為每筆交易生成新的子密鑰來完成的。所有這些都是有道理的,直到之前收到資金的使用者(比如說邁克)決定他想使用他收到的資金並將它們發送給其他人(比如說愛麗絲)。在這種情況下,除了附加到他之前收到資金的地址的鎖定腳本之外,他還必須建構帶有簽名和公鑰的解鎖腳本,並將其送出給堆棧。鎖定腳本(除了操作員)也有一個公鑰。現在,
我的問題是,如果為每筆交易生成新的公鑰,那麼我們怎麼知道哪個公鑰用於某個交易?儘管所有密鑰都是由相同的使用者和全域種子生成的,但它們可以不同,據我所知,EQUALVERIFY 只執行基本的相等操作。它不檢查兩個公鑰是否以某種方式來自同一個種子。這意味著如果兩個腳本的公鑰不完全相同,EQUALVERIFY 將返回 FALSE。
我相信我錯過了這個過程的一部分。謝謝!
多個密鑰確實可以從同一個主密鑰或種子派生,但重要的是要認識到這會導致不同的公鑰和不同的私鑰。公鑰被轉換為地址,分發,在該地址上接收交易,然後為了花費接收到的輸出,公鑰連同帶有相應私鑰的簽名一起被公開。
換句話說,區塊鍊和驗證它的節點不知道也不關心哪些密鑰是從同一個種子生成的。這純粹是本地錢包的決定。節點只看到不同的公鑰,以及帶有相應私鑰的簽名。事實上,最早的錢包軟體並沒有使用種子/主密鑰派生,而只是為每個新地址使用隨機生成的密鑰。
為了確定要使用哪個私鑰簽名(以及要顯示哪個相應的公鑰),錢包只需將其生成的所有公鑰散列映射到有關其派生的資訊(派生中的哪個索引,可能是哪個父密鑰)來源於)。
使用現有助記詞設置新錢包時,錢包可以輕鬆地重建密鑰映射。由於從父節點派生的所有子密鑰都是以確定的方式派生的,**因此錢包可以僅派生數百甚至數千個潛在的密鑰和地址,交易可能在某個時間點到達。**然後可以檢查區塊鏈中的這些地址,並查看有關它們的記錄是否存在於鏈上,以及它們是否確實收到了任何資金。