比特幣的支付需要有人記賬,區塊鏈賬本是一個去中心化的賬本,誰都可以參與記賬。那麼,為什麼就有人來記比特幣的賬呢?既然誰都可以記賬,那又以誰的賬為準呢?怎麼確保賬目的真實性呢?


u=357690515,52350640&fm=26&gp=0.jpg


首先,記賬是有獎勵的。一部分獎勵是被打包區塊裡用戶自己出的手續費,手續費用比特幣支付,這個手續費可高可低,給得高,記賬者就傾向於先記這筆手續費高的賬。另一部分獎勵則是區塊獎勵,打包一個區塊,就獲得一定的區塊獎勵。比特幣誕生之初,區塊獎勵為50個比特幣,按比特幣程序設定,每出210000個區塊後,獎勵減半,現在已經經歷了兩次減半,預計2020年5月時會發生第三次減半。區塊獎勵一方面調動了大家去記賬,另一方面也解決了比特幣的發行問題。按照上述規則,我們可以按這個公式計算比特幣的總量,就是210000×50×(1+1/2+1/4+……),總共2100萬個。

有了獎勵,而且獎勵頗豐,大家當然搶著去記賬。為了確定以誰的賬本為準,比特幣又設定: 記賬者要先把收集到的賬單打包成一個區塊,區塊由區塊頭和區塊體組成,區塊頭里有個記賬者自定的隨機數,記賬者換上不同的隨機數,對區塊頭進行哈希運算,誰先試出符合要求的哈希值,他就將這個區塊廣播全網,大家都以他的賬本為準。


區塊頭和區塊體是什麼關係呢? 區塊體裡記錄了具體的賬單,包括記賬者自己所得獎勵和手續費的賬單。 區塊頭則相當於該區塊的身份信息,裡面有上一個區塊頭的哈希值、時間戳、哈希運算的難度目標、隨機數等信息,還有一個Merkle樹哈希值,Merkle樹哈希值由區塊體裡的賬單經過一系列哈希運算得到,相當於區塊體裡那些賬單的摘要信息,只要賬單稍有變化,Merkle樹哈希值就會大不相同。


哈希算法又被稱為摘要算法,輸入任何數據,經過哈希運算後,都會得到一個固定長度的輸出值 稱為該輸入數據的哈希值。哈希運算有兩大特點 第一,只要輸入數據稍有變動,哈希值就會大不相同,比如輸入一本書的內容,只要多加一個字,哈希值都會面目全非。第二,哈希運算只能正向算,不能反向算,輸入數據後可以很快算出哈希值,但給出哈希值,就沒法反推它的輸入數據,要想知道輸入數據就只能一次次輸入不同數據去嘗試,直到試出為止。這可能比較難理解,這就好比可以輕易地算出29179×87013=2538952327,但要是問你2538952327是哪兩個數的乘積,你就只能一個數一個數地試。

爭奪比特幣記賬權時算的哈希值是個256位的二進制數,符合要求的哈希值,就是小於某個特定數值的哈希值,這個特定數值也就是區塊頭里的難度目標,可以簡單地將其視作前面數位都是0的哈希值(當然後面數位的大小也有要求,這里為簡便起見只談論前面數位為0的情況)。例如,難度目標要求哈希值前面70位都是0,在計算過程中,記賬者手頭的賬單、時間戳等信息都是固定的,記賬者能改變的只有隨機數,他就加上不同的隨機數去試。算出的哈希值是毫無規律的,哈希值每個數位上出現1和0的概率各是1/2,一次就試出前面70位都是0的哈希值,概率是1/2 ^70,想增大試出的概率只能做更多哈希運算。全世界想獲得比特幣獎勵的人都會收集網絡上的比特幣賬單,打包成區塊,進行哈希運算。誰先試出了前面70位都是0的哈希值,他就立馬將自己的區塊廣播全網。大家一接收到該區塊,驗證無誤後,就以該區塊的賬單為準,在此基礎上繼續收集賬單繼續計算,爭奪下一個區塊的記賬權。 這種試出符合要求的哈希值並獲得比特幣獎勵的行為,也被稱為挖礦,專門進行這種計算的機器,就被稱為礦機,參與挖礦活動的人,稱作礦工,記賬的手續費,就叫礦工費。


u=1779828203,4125274438&fm=26&gp=0.jpg

 

至於到底要求哈希值前面要有多少個零,則是由系統每隔2016個區塊就自動調節一次的,增加一個0就會在原來基礎上增加1倍計算難度,反之同理,總之就是要讓平均10分鐘左右能出一個塊。這樣一來,誰的計算能力強,誰在單位時間內計算次數多,誰就有更大的概率試出符合要求的哈希值,得到豐厚的比特幣獎勵,這種模式也被稱為工作量證明。世界各地的礦工競相尋找便宜的電力,修建礦場,佈置礦機,就形成了目前浩浩蕩蕩的挖礦局面。由於現在全網算力很高,單槍匹馬已經很難挖到礦了,於是大家把算力集中起來,就形成了一個個礦池,礦池出塊的概率就提高了,然後再按各自貢獻的算力大小相應分配收益,礦池會收取一定的手續費。

從上文可以看出,比特幣的賬本是傳遍了全網的,保存在全網的,大家都驗證過了的,公正可靠,無法篡改,且根本無法銷毀。比特幣用於轉賬和支付只需發出一條信息就行了,可以輕易地在全世界流通。
我們也可以看出,給出哈希值,想試出它的輸入數據有多麼困難,只要求哈希值前面70位是零,都要試上2^70≈1.18×10^21次才有一次機會,若想試出整個哈希值,全世界所有超級計算機計算能力翻一億倍,一起算上幾十億年,也試不出來。 這些算法,就是比特幣安全性的保障

u=1869346316,1063091731&fm=26&gp=0.jpg