聯合挖礦中的 Nonce
在探勘比特幣時,隨機數包含在標頭中,然後對其進行散列並檢查它是否低於目標門檻值。
每個人都可以驗證標頭的雜湊值確實低於門檻值。然而,在聯合挖礦中,根據 wiki的說法,輔助鏈頭部的雜湊包含在父代的 coinbase txin 腳本中,而沒有機會更改輔助鏈中的 nonce。父母的隨機數照常增加,但輔助雜湊保持不變。
那麼我們如何驗證輔助鏈呢?
是因為父隨機數通過父標頭的雜湊進入輔助鏈嗎?即便如此,這似乎對驗證沒有幫助,因為輔助鏈的雜湊不再需要滿足任何門檻值標準。
要驗證輔助鏈,您需要證明該輔助鏈中的最新區塊已經完成了一定量的工作。與任何形式的探勘一樣,這涉及計算一個低於門檻值的雜湊值。
然而,雜湊的原像中也有很多其他不相關的數據並不重要,只要它在某處包含相關的輔助塊頭即可。即從工作量證明的角度來看,如果你計算這個沒有區別:
while(h > aux-threshold) { h = hash(aux-header + nonce) nonce++ } result = nonce
與此相比:
container = hash(hash(aux-header) + other-data) while(h > aux-threshold) { h = hash(container + nonce) nonce++ } result = nonce
兩者都將採取相同數量的工作,並且都將證明工作已經完成
aux-header
。之所以如此,是因為container
可以證明包含 aux-header,並且因為aux-header
和other-data
儲存在 aux-chain 塊中,並且可以隨時重新計算雜湊。所以,對於合併挖礦來說,
container
實際上是父鏈區塊的雜湊表頭,aux-header
只需要包含在父區塊的某處即可。只要父塊通過驗證過程,它就可以包含在任何地方。例如,您可以將 aux-chain-header-hash 作為地址包含在多重簽名交易中,或者作為放置在堆棧上但從未在其中一個交易中彈出的數據。然而,最簡單的放置位置是在 coinbase 交易的 txin 腳本中。無論如何,這總是包含任意數據,並且它位於鏈頂部的位置意味著other-data
可以包含最少數量的 merkle 分支。
您以完全相同的方式驗證輔助鏈,除了您還必須檢查輔助鏈的標題是否正確包含在父代幣庫中。從輔助鏈的角度來看,你可以將整個主鏈頭想像成一個巨大的隨機數的一部分。