Bitcoin-Core
區塊和交易驗證如何以及何時進行?
我有幾個問題,並會嘗試在這裡解釋它們。
所以,假設我們在整個網路中有 4 個節點。
- 其中一個節點(節點 A)從池中獲取事務。在將其放入候選塊之前,他們首先驗證每筆交易,對嗎?如果是這樣,我猜他們會檢查餘額和簽名。還要別的嗎 ?如果一切順利,他們將每個有效交易放入一個候選塊中,然後,他們開始探勘這個塊……我猜無效交易會消失或其他什麼……
- 假設節點 A 以最快的速度探勘了該區塊。它將塊放入其分類帳中,並將該塊共享給其他節點,以便他們也可以將其添加到自己的分類帳中。我知道其他節點不會只是將它添加到分類帳中,直到他們確認這個新塊確實被探勘(將獲取標題的雜湊並檢查它是否低於目前)。它是否正確 ?如果是這樣,那麼問題是,他們是否還會對該區塊中的每筆交易進行驗證?如果是 - 為什麼?如果沒有 - 為什麼?
- 如果我一個接一個地進行 2 筆交易,即使我只有一筆交易的餘額,那 2 筆交易也會先入池。我猜,當我的節點在將交易放入候選塊之前檢查交易驗證時,他們會看到他們首先檢查的任何一個都是有效的,而第二個則不再有效,因為他們已經檢查了第一個。正確的 ?
通常,每個事務在添加到節點的記憶體池時都會被驗證。這發生在節點第一次看到交易時,它不會等到它被添加到候選塊中進行探勘。用於探勘的候選塊將由記憶體池中已經存在的交易形成 - 那些已經被節點驗證的交易。
如果另一個節點接收到一個塊,那麼是的,它將驗證工作量證明和其他因素,例如時間戳,並且它還將驗證塊中它以前沒有見過的每個事務。它之前看到的那些將簡單地從其記憶體池中刪除,不需要重新驗證。
Re 3.,節點不會接受兩個衝突的交易進入他們的記憶體池。每個節點將接受他們首先看到的任何有效交易。這可能不是最終出現在區塊中的那個,但是一旦兩個衝突的交易之一被探勘出來,節點就會糾正這個問題。