Block
為什麼將交易分組到塊中?(交易是如何放入區塊的)
為什麼將交易分組到塊中(第 3 部分)?
- 假設我們剛剛在區塊鏈上放了一個塊。現在礦工開始形成新的區塊並嘗試猜測新的雜湊值。礦工正在將交易放入他們形成的區塊中(帶有雜湊猜測)?他們將哪些未確認的交易放入區塊(全部未確認或子集)?
- 將交易放入區塊中是否表明該交易已被驗證?這如何保證礦工放入區塊的交易是有效的?
- 假設我們剛剛在區塊鏈上放了一個區塊,而礦工開采的那一刻沒有區塊。現在礦工開始形成新的區塊並嘗試猜測新的雜湊值。礦工正在將交易放入他們形成的區塊中(帶有雜湊猜測)?他們將哪些未確認的交易放入區塊(全部未確認或子集)?
礦工將根據交易費用選擇要包含的交易。在比特幣核心中,這種交易選擇是這樣完成的:將交易分組到包中,一個包由一個交易及其未確認的祖先和後代組成(一些包可能只是 1 筆交易,而另一些則更多)。然後計算一個包裹支付的總費率,並按費率對包裹進行排序。通過向下查看包裹列表並選擇每個包裹來選擇交易,直到所有交易的權重(如BIP 141所定義)不允許包含更多交易(即添加包裹直到權重超過限制,然後刪除剛剛添加並添加下一個,等等,直到沒有交易可以添加)。
未經確認的交易通常會超過一個區塊的容量,因此礦工只會選擇未經確認的交易的子集。
- 將交易放入區塊中是否表明該交易已被驗證?這如何保證放入區塊的交易礦工是有效的?
它不是。一個塊可能包含無效交易,並且該塊(以及那些無效交易)將是無效的。全節點必須檢查一個塊是否有效。他們通過檢查區塊頭是否有效、coinbase 交易是否有效以及區塊中的所有交易是否有效來做到這一點。僅僅因為在一個區塊中發現了一筆交易,並不意味著它一定是有效的,如果不是,則該區塊是無效的,應該被拒絕。