這是否證明了對於每個塊總是有隨機值,這將使塊散列從 n 計數 0 開始
很抱歉這個明顯的問題,但我正在尋找一個數學證明。
塊頭計算為以下值的串聯。
- 版本
- hashPrevBlock
- 雜湊MerkleRoot
- 時間戳
- 位
- 隨機數(32 位數字)
每個塊的前 5 個參數是靜態的。Miner 只嘗試找出 Nonce 值,這樣 Hash(Block_header) 將以一定數量的零開始。
這是否證明對於 Version、hashPrevBlock、hashMerkleRoot、timeStamp 和 Bits 的每個組合都有一個 Nonce 值,這將使塊雜湊以一定數量的零開始?
如果是,您能否分享任何解釋該證明的文章?
加密雜湊函式具有抗衝突性,SHA-256 生成的摘要近似均勻分佈。這表明,如果散列函式的輸入空間比散列函式的投影空間大,我們預計投影空間的每個值都可以命中。
塊頭為 80 字節,SHA-256 的摘要空間為 32 字節(256 位)。塊頭的 80 字節中,版本不受限制,32 位中的 29 位,nonce 是 4 字節的任意值,Merkle 根是從巨大的組合空間派生的 256 位摘要,時間戳相當靈活— 限制在大約 3 小時/10,800 秒(~13 位)的 unix 時間戳範圍內,只有前一個塊雜湊和難度語句是固定的。因此,在計算 Merkle 根之前,礦工可以在塊頭中生成多達 74 位的熵。
Merkle 根源自礦工選擇包含在其比特幣區塊中的一組交易。礦工不僅可以任意選擇(有效)交易的內容和順序,而且每個礦工都在其候選區塊的coinbase 交易中為自己付費。鑑於支付到不同的地址會導致不同的 coinbase 交易,每個礦工都在處理一個獨特的交易集,其 Merkle 根使得不同礦工的候選區塊之間的任何重疊幾乎不可能。此外,coinbase 交易的部分輸入可以任意選擇(“ extranonce ”)“以及 coinbase 交易的其餘 2-100 字節輸入腳本中的大部分)為礦工提供了一種方法,可以輕鬆地將進一步的熵添加到他們正在評估的候選區塊集合中。此外,每當有更多新交易時,礦工都會更新其候選區塊的交易組成支付更高的費率到達即使沒有交易可以添加到區塊中,礦工也可以在用盡 nonce 和 extranonce 空間後生成一個不同的地址來支付自己在 Coinbase 中的使用。
鑑於所有可能的交易訂單的冪集、比特幣的地址空間和 100 字節輸入腳本的總和遠遠超過 SHA-256d 的 32 字節摘要大小,我認為 Merkle 根提供了完整的 32字節的熵。
**總之,給礦工約 41 字節的任意輸入數據以生成 32 字節的摘要,即輸入空間比投影空間大2 72 。**同時,一個區塊僅限於目前難度,明顯小於2224(需要區塊雜湊的難度
000…0
)。雖然這不符合嚴格的數學證明的要求,但我推測礦工不必擔心可能的區塊候選者用完。因此,有人碰巧成功創建新的有效區塊只是時間問題。
也可以在這裡看到這個密切相關的問題:我們如何確定會找到一個新塊?.
Version、hashPrevBlock、Bits(目前難度的表示)對於目前塊是靜態的,timeStamp 是目前時間的 unix 表示,礦工也可以更改它以更改塊頭(直到未來 2 小時)