礦池是否根據已經送出的“失敗”解決方案向礦工分配“工作”?
我的問題是:stratum 協議究竟如何將“工作”分配給礦工?更具體地說,由於可以(在許多方面)將探勘與“暴力破解”加密散列(即散列隨機輸入,直到幸運地隨機輸入匹配所需輸出)進行比較,所以跟踪送出並確認對特定區塊無效的潛在解決方案,並以某種方式將其傳達給礦工,這樣就不會一遍又一遍地完成相同的工作?
我意識到這將需要很多成本,但這似乎是值得的。是否有任何機制可以確保兩個獨立的礦工不會浪費時間在相同的輸入上工作?在新一輪挖礦開始時向每個礦工發送不同的隨機數生成種子是否有效果?我已經閱讀了關於挖礦的簡單描述,即簡單地增加隨機數直到找到解決方案,但我也閱讀了更詳細的解釋,這意味著涉及更多內容。即使輸入中只更改了隨機數,礦池仍然需要為每個礦工分配一個唯一的隨機數,以便在每次送出後嘗試,不是嗎?
作為關於儲存解決方案影響的最後一個半無關的問題:假設一個池儲存了它曾經收到的每個解決方案,考慮到比特幣網路的巨大規模,這最終會不會成為一個具有統計意義的(就可用性而言)數據庫sha256 碰撞?最終,能否收集到足夠的數據來推導 SHA256?至少,有惡意的礦池能否暫時轉移不知情的礦工的計算能力來破解基於 SHA256 的 TLS 簽名或 PGP 公鑰?尤其是一個還控制其大多數設備(例如 Antpool)上的硬體和軟體的池。
我已經閱讀了關於挖礦的簡單描述,即簡單地增加隨機數直到找到解決方案,但我也閱讀了更詳細的解釋,這意味著涉及更多內容。即使輸入中只更改了隨機數,礦池仍然需要為每個礦工分配一個唯一的隨機數,以便在每次送出後嘗試,不是嗎?
礦工確實改變的不僅僅是隨機數,正是這一事實允許礦池確保兩個礦工不會兩次生產相同的工作。
因為挖礦總是涉及區塊中使用的交易,所以改變這些交易會影響默克爾根,從而影響結果。其中一項交易是 coinbase 交易,這是礦工可以控制的事情。特別是,coinbase 交易輸入的輸入腳本最多可以包含 100 字節的任意數據。因此礦工將使用這個空間作為額外的隨機數(稱為外隨機數)。他們也會有一個 nonce 來生成新的 coinbase 交易,這讓他們可以產生不同的 merkle 根,從而產生不同的區塊頭。extranonce 允許礦工擁有比塊頭中的 32 位隨機數更多的隨機數。
礦池利用這種額外的時間來確保獨特的工作。他們會給礦工額外的一部分(例如前半部分)。然後礦工可以使用剩餘的額外隨機數作為自己的額外隨機數。這讓礦工仍然有很大的搜尋空間,這樣他們就不會不斷地要求礦池做更多的工作。通過給礦工不同的額外半數,礦池可以確保兩個礦工不會多次散列相同的東西。
假設一個池儲存了它曾經收到的每個解決方案,考慮到比特幣網路的巨大規模,這最終會不會成為一個具有統計意義(就可用性而言)的 sha256 衝突數據庫?
最終,是的。但在這種情況發生之前還需要很長時間。整個比特幣網路總共完成了約 2^90 次雜湊。但是,即使要達到 50% 的碰撞機率,您也需要 ~2^128 個雜湊值。2^90 是 2^128 的 1/274877906944。所以達到 2^128 個雜湊的時間是宇宙存在年數的很多倍。所以從理論上講,是的,可以計算出足夠的雜湊值,發現碰撞是純粹的蠻力。但出於所有意圖和目的,它不會發生。