為什麼開采的區塊與區塊模板有如此大的不同?
我正在查看高度為680175的特定塊。
在尚未挖出區塊的時候,我通過
bitcoin-cli getblocktemplate '{"rules": ["segwit"]}'
1451 筆交易收到了區塊模板:{ "capabilities": [ "proposal" ], "version": 536870912, "rules": [ "csv", "!segwit" ], "vbavailable": {}, "vbrequired": 0, "previousblockhash": "00000000000000000008465bf3145011298dddb04f026e077d8deb5b9ac5cf7f", "transactions": [ { "data": "..", "txid": "f0fcac28b1dec7b8e67f73229052639c58f7f175bdb87ea068f499a4728bb35d", "hash": "2a4aa6c2b5a6bee592e3690a843ee63b2598315da01954c05c4c0aa77d57af34", "depends": [], "fee": 160000, "sigops": 5, "weight": 953 }, .., { "data": "..", "txid": "e0ae05fa82edb0dee7e9d11ca9471bf3ee1a90e19ac8abf1013511338613b814", "hash": "e0ae05fa82edb0dee7e9d11ca9471bf3ee1a90e19ac8abf1013511338613b814", "depends": [], "fee": 103950, "sigops": 4, "weight": 1388 }, .., { "data": "..", "txid": "8d55bd874acea1fbc03b98e82d585c39021be083645dde83e8306171e32258d5", "hash": "8d55bd874acea1fbc03b98e82d585c39021be083645dde83e8306171e32258d5", "depends": [], "fee": 16425, "sigops": 8, "weight": 904 } ], "coinbaseaux": {}, "coinbasevalue": 745954254, "longpollid": "00000000000000000008465bf3145011298dddb04f026e077d8deb5b9ac5cf7f3670", "target": "0000000000000000000bef930000000000000000000000000000000000000000", "mintime": 1619115663, "mutable": [ "time", "transactions", "prevblock" ], "noncerange": "00000000ffffffff", "sigoplimit": 80000, "sizelimit": 4000000, "weightlimit": 4000000, "curtime": 1619117253, "bits": "170bef93", "height": 680175, "default_witness_commitment": "6a24aa21a9ed82637c9b63e2165105a672c4f6edcfa0187d961843a8d2b9c7a6bceeda109a65" }
將塊模板與開采的塊進行比較時,存在一些差異:
開採區塊的版本
0x2fffe000
不是536870912
.區塊模板中只有 194 筆交易在探勘的區塊中,例如f0fcac28b1dec7b8e67f73229052639c58f7f175bdb87ea068f499a4728bb35d。其他 1257 個事務失去。
有誰知道如何解釋這些差異?
如果礦工發現接收到的塊模板的塊雜湊並送出它會發生什麼?那麼被探勘的塊是否會有不同的版本和失去的交易(包括尚未被探勘的交易)?
開採區塊的版本
0x2fffe000
不是536870912
.許多礦工採用一種稱為公開 Asicboost 的策略。這種策略需要像nonce一樣修改版本號,所以我們經常會看到版本號很奇怪的block。
區塊模板中只有 194 筆交易在探勘的區塊中,例如 f0fcac28b1dec7b8e67f73229052639c58f7f175bdb87ea068f499a4728bb35d。其他 1257 個事務失去。
每個節點對未確認的事務集都有不同的視圖,這取決於它們執行了多長時間、它們所在的位置以及它們使用的任何自定義規則。可能是您的節點沒有像礦工的節點一樣長時間執行,因此它沒有看到礦工看到的所有相同交易。可能是您的節點使用的規則與礦工不同,可能是由於同一軟體的不同版本,也可能是因為某些礦工可能使用自定義軟體。此外,一些礦工提供了一項服務,他們將在帶外支付後優先處理交易,因此當此類交易沒有出現在您的節點生成的塊模板中時,它們最終可能會出現在一個塊中。
如果礦工發現接收到的塊模板的塊雜湊並送出它會發生什麼?那麼被探勘的塊是否會有不同的版本和失去的交易(包括尚未被探勘的交易)?
整個網路沒有“目前模板”。如果有,那麼就不需要區塊鏈,因為這意味著每個節點實際上都與其他每個節點同步。因此,當礦工找到一個區塊時,他們會完整地廣播該區塊。當節點收到一個塊時,它們會在不創建自己的塊模板的情況下對其進行驗證。沒有要求該塊包含節點期望它包含的事務。唯一的要求是區塊包含有效的交易並且區塊頭是有效的。您的節點之前是否看過這些交易以及它是否會包含它們本身是無關緊要的。