比特幣系統(tǒng)挖礦的難度目標(biāo)是什么
比特幣系統(tǒng)給礦工出的難題就是讓礦工找出符合要求的隨機(jī)數(shù)。礦工構(gòu)造區(qū)塊,確定區(qū)塊頭中其他5個(gè)字段,另一個(gè)需要不斷試錯(cuò)的變量就是隨機(jī)數(shù)。只有符合要求的隨機(jī)數(shù)才能召喚“神龍”。符合要求的意思是:對(duì)整個(gè)區(qū)塊頭取哈希值,使得該哈希值小等于難度目標(biāo)(準(zhǔn)確的說是小于目標(biāo)值Target)。
我們今天主要來回答比特幣系統(tǒng)挖礦難度目標(biāo)是什么,它是怎么調(diào)整的?
什么是難度目標(biāo)?
難度目標(biāo)是比特幣系統(tǒng)中調(diào)控挖出區(qū)塊所用平均時(shí)間的參數(shù),是區(qū)塊頭中6個(gè)字段之一。
比特幣挖礦難度(Difficulty),是對(duì)挖礦困難程度的度量,挖礦難度越大,挖出區(qū)塊就越困難。目標(biāo)值(Target)與挖礦難度成反比。難度越高,目標(biāo)值越小。而難度目標(biāo)是目標(biāo)值通過轉(zhuǎn)化得到,是一個(gè)只有4個(gè)字節(jié)的字段(為了便于理解,本文將難度目標(biāo)等同目標(biāo)值處理)。比特幣系統(tǒng)正是通過調(diào)整區(qū)塊頭中難度目標(biāo)來控制挖出區(qū)塊所需平均時(shí)間的。
目標(biāo)值是個(gè)長(zhǎng)度為256比特的字符串,換句話說目標(biāo)值約有2^256種可能的取值。調(diào)整難度目標(biāo)就是調(diào)整目標(biāo)值在整個(gè)輸出空間的占比。
舉例說明:挖礦就如射擊,所有射出去的子彈都會(huì)落在一個(gè)很大的靶子上。難度目標(biāo)就是這個(gè)大靶子上圈出一個(gè)范圍,這個(gè)范圍越小,被射中的難度就越高。調(diào)節(jié)難度目標(biāo),就是調(diào)節(jié)這個(gè)圈在整個(gè)靶子上的占比。
挖礦算力增大,單位時(shí)間射擊的次數(shù)就越多,目標(biāo)范圍被射中所需的時(shí)間就越短。反之,挖礦算力減小,目標(biāo)范圍被擊中所需的時(shí)間就越長(zhǎng)。而比特幣系統(tǒng)追求的平均出塊時(shí)間為10分鐘,這時(shí)候就需要調(diào)整難度目標(biāo)來實(shí)現(xiàn)。
如何調(diào)整難度目標(biāo)?
比特幣系統(tǒng)是怎樣調(diào)整難度目標(biāo)的呢?在《白話區(qū)塊鏈入門080 |數(shù)說比特幣,了解比特幣必須知道這10個(gè)數(shù)字》一文中,我們介紹了比特幣系統(tǒng)每過2016區(qū)塊(大約為14天時(shí)間),會(huì)自動(dòng)調(diào)整一次難度目標(biāo)。所有區(qū)塊高度為2016整數(shù)倍的區(qū)塊,系統(tǒng)就會(huì)自動(dòng)調(diào)整難度目標(biāo)。如果上一個(gè)難度目標(biāo)調(diào)整周期(也就是之前2016個(gè)區(qū)塊),平均出塊時(shí)間大于10分鐘,說明挖礦難度偏高,需要降低挖礦難度,增大難度目標(biāo)(準(zhǔn)確地說是目標(biāo)值);反之,前一個(gè)難度目標(biāo)調(diào)整周期,平均出塊時(shí)間小于10分鐘,說明挖礦難度偏低,需要縮小難度目標(biāo)。
難度目標(biāo)的可調(diào)范圍
比特幣系統(tǒng)設(shè)定,難度目標(biāo)上調(diào)和下調(diào)的范圍都有4倍的限制。舉例說明:假設(shè)上一個(gè)難度目標(biāo)調(diào)整周期內(nèi)的2016個(gè)區(qū)塊,由于算力暴漲,只用7天就全部挖出來了,通過難度目標(biāo)調(diào)整,將難度目標(biāo)縮小一倍,可以將平均出塊時(shí)間維持在10分鐘左右,但如果算力暴漲,前2016個(gè)區(qū)塊全部挖出只用了1天,那么難度目標(biāo)最小只能調(diào)整為原來的四分之一。
總結(jié)
比特幣的算力是持續(xù)波動(dòng)的,比特幣系統(tǒng)通過難度目標(biāo)的調(diào)整,使得平均出塊時(shí)間維持在10分鐘左右。難度目標(biāo)和挖礦難度成反比,挖礦難度越大,難度目標(biāo)越小。當(dāng)區(qū)塊高度為2016的整數(shù)倍時(shí),比特幣系統(tǒng)就會(huì)在該區(qū)塊上,自動(dòng)調(diào)整難度目標(biāo)。如果上一個(gè)難度目標(biāo)調(diào)整周期內(nèi),平均出塊時(shí)間超過10分鐘,那么降低挖礦難度,增大難度目標(biāo);反之則提高挖礦難度,減小難度目標(biāo)。難度目標(biāo)上調(diào)和下調(diào)的范圍都有4倍的限制。
比特幣每2016個(gè)區(qū)塊(大約14天)調(diào)整一次挖礦難度,相比于BCH每個(gè)區(qū)塊都調(diào)整(大約10分鐘調(diào)整一次),有明顯的滯后性。你認(rèn)為是哪種調(diào)整方式更合理呢?為什么呢?