Evm
為什麼合約僅限於之前的 256 個區塊雜湊?
為什麼合約僅限於使用 BLOCKHASH 操作碼(以及 Solidity 和 Serpent 中的相應函式)的前 256 個區塊雜湊?
為什麼需要使用另一個合約,例如this來獲取超過 256 個區塊之前的區塊雜湊?另外,256 的限制是如何確定的,是否有調整的計劃?(增加它仍然會保持向後兼容性。)
根據 Vitalik Buterin 的說法:
約束是要保留一個屬性,即歷史在某個點之後無關緊要,而狀態才是最重要的;它提高了多種節點的效率和程式碼簡單性。
Gavin Wood 在乙太坊黃皮書第 25 頁也提到了 256 個區塊的限制。
我認為通過契約執行此任務的鏈上服務(例如您連結的那個)足以使塊雜湊值超過之前的 256。乙太坊作為一個平台的願景是通用的並能夠建構去中心化服務,因此設計的許多方面可能無法滿足完整的區塊雜湊歷史等功能。這可能是因為這樣做會為減少泛化和更多複雜性/錯誤打開大門,此外還開創了添加功能以促進某些需求或案例的先例。