區塊鏈 | 比特幣與區塊鏈原理&什麼是礦機挖礦

前言

本章內容主要有:什麼是比特幣、比特幣的起源與發展、區塊及區塊鏈的定義,礦機挖礦的原理。

什麼是比特幣

比特幣(BitCoin)是一種P2P形式的虛擬貨幣。2008年,一個名叫中本聰(Satoshi Nakamoto)的人發明了比特幣,他在網絡上發表了《比特幣:一種點對點的電子現金系統》,即《白皮書》。點對點的傳輸意味着一個去中心化的電子記賬系統的建立。

去中心化的電子記賬系統

和傳統的記賬方式不同(傳統記賬由銀行來進行操作,可信度基於國家信用),去中心化則不需要依靠傳統銀行機構,每個人的賬單記錄都是公開的。
傳統記賬系統
舉例來說,有A,B,C,D四個人進行交易,每次交易內容都會告訴其它三個人。
去中心化的記賬系統


區塊&&區塊鏈

A,B,C,D四個人的賬單信息進行打包,就形成了一個區塊(block)。一般來說一個區塊的大小大約爲1M,可以存放4000條左右的記錄。
區塊
一個區塊打包完成之後,把它接到前一個區塊上,並且之後打包的區塊接在目前這個區塊之後,這樣形成的一條鏈我們稱爲區塊鏈(Block Chain)
在這裏插入圖片描述

爲何我需要記賬?

記錄和自己的資金不相干的賬單,佔用了自己的電腦資源,我們爲什麼要記賬?

記賬獎勵
記賬是由於記賬可以得到獎勵。
(1)手續費
舉例來說,A支付10個比特幣給B,實際上A支付的要比10個比特幣多一點,多出的一點就是給記賬人的手續費。(比特幣交易的手續費比傳統交易的手續費低)
(2)打包獎勵
從比特幣系統運行開始,在第一個四年裏,每打一次包獎勵50個比特幣,在第二個四年裏,每打一個包獎勵25個比特幣,在第三個四年裏,每打一個包獎勵12.5個比特幣…依次類推,每過一個四年,打包獎勵少一半。

比特幣總量

中本聰在最初提出比特幣時,規定每十分鐘打一個包。我們可以計算出比特幣總量如下:

50 * 6 * 24 * 365 * 4 * (1/2 + 1/4 +1/8 + …(1/2)n)=2100萬

賬單以誰爲準?

因爲記賬獎勵豐厚,一羣人搶着去進行打包,但由於網絡延遲,可能每個人收到賬單不同,這種時候該以誰爲準?

工作量證明

每一個參與打包的用戶都要去做一個很難的數學題,如果你可以做出這道數學題,就可以去進行打包了。這個數學題難到沒有哪一個人可以通過腦子去計算出來,而必須通過一個一個數去嘗試,直到你去把這個數嘗試出來了,就有機會去獲得獎勵,這個過程叫做挖礦

挖礦原理

哈希函數

我們可以通過運算,把一串字符串轉化成爲一個摘要的形式。 並且正着算容易,反過來算很難(即可以通過字符串得到摘要,但不能通過摘要獲得字符串)
以SHA256函數舉例:

sha256("abcd") = 1010...(256位二進制數)
正算很容易,反算很難。如果給出一串256位的二進制數,求原來的輸入,就只能通過一個一個嘗試的方式去尋找。

具體原理

區塊由頭部和賬單信息組成。
區塊組成
假設現在有很多人想要去接塊,每個人都有一分記錄好的賬單。
在接塊的時候必須要算一個數學題:
1.字符串:前塊的頭部+賬單信息+時間戳+…+隨機數
2.Hash=sha256(sha256(字符串))
3.計算得到的Hash值需要符合要求

比如說要求前n位爲0:即 Hash=000…11011(前n位爲0即可滿足條件,獲得接塊的權利)

4.符合要求之後進行打包
把計算得到的Hash值作爲新塊的頭部,賬單作爲新塊的信息,即可打包成一個新塊從而獲得獎勵。
在這裏插入圖片描述
怎麼去使得字符串滿足要求?
我們來看字符串的組成,字符串:前塊的頭部+賬單信息+時間戳+…+隨機數

我們可以改變的只有隨機數,二進制從0開始一直嘗試。 每個人的計算難度是不一樣的,但是平均而言,挖到礦的可能性大小與計算能力相關聯,誰的計算能力強,誰就有更大的可能去挖到這個礦。

挖礦難度設置

挖礦難度由要求Hash值的前n位來設置。
前n位爲指定數,比如前n個都是0,概率爲 (1/2)n
中本聰當初設置在每十分鐘出一個塊,如何保證在10分鐘內能出一個塊呢?則需要調整n的大小即挖礦難度。

例:假設世界上有104臺礦機,每臺礦機的運算速度爲14T/s(即每秒可以進行1.4 * 1013次哈希運算)
10min計算次數:1.4 * 1013 * 104 * 600 = 8 * 1019 ,大概相當於 266 。在這種情況下,就會把難度n設置爲66。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章