交易驗證和向區塊鏈添加區塊如何結合在一起?
我有以下問題:
- 交易如何添加到區塊中?
- 礦工是否會因將交易添加到區塊中而獲得獎勵?
- 然後該塊如何添加到區塊鏈中?
- 如果每個人(礦工)都在解決區塊並添加交易,那麼如何決定將誰的區塊添加到區塊鏈中?另外,例如,如果有兩個礦工 A 和 B,並且如果添加了礦工 A 的塊,那麼礦工 B 驗證的交易會發生什麼?
節點形成一個八卦網路。每次節點聽到新的(未經確認的¹)交易時,他們都會檢查交易是否有資格添加到塊中,如果他們認為有效,他們會將其轉發給對等方。
每個礦工建構自己的塊模板。區塊模板中的第一筆交易必須是coinbase 交易。在其中,礦工向自己支付區塊獎勵。其他交易是礦工從網路上聽到的一系列未經確認的交易。礦工通常會選擇提供最多交易費用的未確認交易,因為礦工可以保留交易費用。
每個礦工都嘗試用不同的隨機數和外隨機數對他們的塊模板的許多變體進行散列。最終,一名礦工會找到一個通過難度要求的區塊頭——一個有效的區塊。成功的礦工將他們的有效區塊發布給他們的同行,他們依次轉發給他們的同行等等。由於成功的礦工在其區塊模板的 coinbase 交易中添加了支付自己的指令,因此區塊將獎勵支付給成功的礦工。
每個其他節點都驗證該塊及其中的所有交易是否遵循協議規則。如果有任何問題,他們就會放棄該塊。否則,他們會更新其UTXO 集以將所有已使用的交易輸出標記為已使用,並添加已創建的新交易輸出。
然後一切從頭開始:礦工建構一個區塊模板,散列它的許多變體,有人找到一個區塊,它被中繼,節點驗證它,將更改應用到他們的 UTXO 集,找到它的礦工得到報酬。
由於這是一個隨機不協調的過程,偶爾會有兩個礦工同時幸運,在同一高度發布競爭區塊。每個節點將首先看到一個或另一個,並且網路將沒有共享的ground-truth。發現的下一個區塊打破了平局:總工作量更大的鏈成為經典,另一個則滅絕。最好的鏈在每個高度只能有一個區塊,因此不存在“在競爭區塊中驗證的交易會發生什麼”的問題。從最佳鏈的角度來看,那個區塊還不如不存在,無關緊要。
從頂部開始:滴答作響,下一個塊。
¹ 未確認表示“尚未添加到塊中”。
交易驗證和向區塊鏈添加區塊如何結合在一起?
交易驗證由比特幣網路中的每個參與者執行。參與者包括普通錢包,通常被稱為節點。
只有礦工創建新區塊。從而確認其中的交易。
請注意驗證和確認之間的重要區別。
交易如何添加到區塊中?
礦工選擇未確認的交易並將它們添加到塊模板中。當他們找到一個雜湊值小於目前目標的安排時,他們會將新塊發送到其他一些網路節點。
礦工是否會因將交易添加到區塊中而獲得獎勵?
是的,輸入總和與輸出總和之間的差異是礦工要求的交易費用。
然後該塊如何添加到區塊鏈中?
每個節點驗證它收到的新塊並決定是否將新塊添加到他們自己的區塊鏈副本中。如果一個節點測試了一個塊並發現它是有效的,它也會將該塊傳遞給其他節點。
如果每個人(礦工)都在解決區塊並添加交易,那麼如何決定將誰的區塊添加到區塊鏈中?
每個礦工的草稿區塊都是不同的,因為區塊中的第一筆交易是向該礦工自己的地址支付獎勵/費用的交易。
節點接收到的第一個塊被添加到目前分支。然後通過比較競爭分支中的總“工作”,節點可以選擇另一個分支作為目前分支。
工作本質上是對一個塊的平均重排次數的評估,**理論上必須嘗試找到一個雜湊值小於適用於塊高度的目標的重排。它不能衡量礦工實際進行了多少次嘗試。
該目標每 2016 個區塊重新評估一次,並給出一個值,使區塊之間的平均時間為 10 分鐘。每個節點都使用應用於 2016 年區塊的區塊鏈數據的通用規則獨立計算這些目標。
另外,例如,如果有兩個礦工 A 和 B,並且如果添加了礦工 A 的塊,那麼礦工 B 的交易 [已驗證 確認] 會發生什麼?
跟隨 A 的分支的節點將認為僅在 B 的塊中的交易未確認。A 或其他礦工可能會將它們包含在稍後引用 A 的區塊的區塊中(即建構在包含 A 的區塊但不包含 B 的區塊的鏈上的區塊)。