天天看點

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

文字内容挺多的,跟随文章的思路就可以簡單的了解區塊鍊啦~ 本人能力有點,所述多有不當之處,歡迎在評論區指正 區塊鍊 ---

比特币

 比特币實際上是一種電子貨币或者叫數字貨币,它是基于密碼學的一種貨币,這種貨币跟我們以前用銀行卡裡面的那種貨币不一樣,它的出現是一種傳奇.

去中心化的電子現金系統

 在2008年11月1日金融危機的時候有一個網絡極客,他的使用者名叫中本聰,這個中本聰我們到目前為止也不知道他到底是誰,他在網絡上發表了一篇文章,這一篇文章我們現在管他叫<白皮書>,全名叫

<比特币:一種點對點的電子現金系統>

(PDF原本連結—譯文),他在這個<白皮書>裡面提出了這樣一種構想:

 現在我們進行交易的時候最重要的一件事就是記賬,比如說我付給你多少錢,我要檢查自己的銀行卡裡還有沒有那麼多錢,我付給你之後還剩多少錢這就叫記賬.現在的記賬是銀行來負責,不管是信用卡還是支付寶微信都是銀行來記賬,我們信任銀行因為銀行的背後是國家的信用.
 但是中本聰就說 我們可以設計一個去中心化的電子記賬系統,其實我們并不需要這麼一個中心化的記賬系統,每一個人的賬本都是可以讓别人去看,都是公開的沒有銀行在中間幫我們記賬所有人都可以來記賬,這就叫去中心化的電子記賬系統.

區塊鍊的形成

舉個例子 有A B C D四個小朋友(無中生友 q(≧▽≦q)) 他們之間有交易行為(買賣東西),那麼互相中間就要進行支付

第一次 A 給 B 10個BTC(比特币) 交易之後需要記賬 但是這個賬單不能隻是A自己留着,因為自己留着别人不信

是以A要把賬單廣播出去告訴所有人 是以A把賬單告訴B 告訴C 又告訴D …廣播到網絡上所有的人

第二次 B 給 C 5個BTC(比特币) 同時B 把賬單告訴D 告訴A 再告訴C …廣播到網絡上所有的人

第三次 C 給 D 2個BTC(比特币) 同時C 把賬單告訴D 告訴B 再告訴A …廣播到網絡上所有的人

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

 銀行系統每天都會對賬單進行整理存檔,相同的現在我們也需要把賬單打包成一個塊,這個塊就是"區塊".一個區塊的大小大概是一兆,可以存4000條左右的交易記錄.

 區塊打包好之後,再把這個區塊連結到之前的區塊上,就是把這個區塊接到以前的區塊之後,把這個區塊接到以後形成的區塊之前,這樣就形成了一條鍊,這就叫區塊鍊

區塊鍊的問題

 我們有了這個系統之後就要解決幾個問題

  1. 賬單以誰的為準? 因為每個人的賬單可能是不一樣的:B 可能先記錄 第一次交易 然後再繼續第二次交易.但是由于網絡的延遲,D

    的記錄可能就不是這樣的 每個人的賬單可能是不太一樣,那麼到底以誰的為準呢?

  2. 我們為何要記賬?憑什麼你廣播給我我就要收着,憑什麼我要花我自己的電腦資源 記錄這麼一個與我無關的賬目呢?
  3. 如何防僞?比如說B 廣播了一個消息 :B 支付了5個BTC給A.但是實際上A并沒有收到這5個BTC,那麼這就是一個僞造的記錄.我們怎麼去防僞怎麼去防止篡改呢?之前的記錄我把它改掉這個怎麼辦?
  4. 如何防止雙重支付?就是一個人同時發給兩個人10個BTC 但是實際上這個人隻有10個BTC.
  5. 如何進行保密?你這個資訊都是公開的,那别人不就知道你有多少錢了麼?

 我們逐個分析

為什麼要記賬?

因為有獎勵!

 每一個BTC系統中的使用者都可以去記賬,如果他記了賬他會有一個手續費的收益(A 給 B 10個BTC的交易 A必須多付出一點點作為記賬打包的這個人的手續費)如果用銀行卡的話其實也是有手續費的,而且還挺高的,比特币交易的手續費就低了,這是第一個收益!

 第二個收益就是打包的這個人執行完打包操作之後有一個打包獎勵(打包隻能一個人完成,後面會說到),那這個獎勵是多少呢?

 中本聰在2008年提出這個系統的時候,他設計了這樣一個方案:

 每十分鐘打一個包 最開始這一個包會獎勵打包者50個BTC,過了四年之後每打一個包會獎勵25 個BTC,如果再過四年就是獎勵12.5,也就是每過四年獎勵減半

 我們來算一算BTC一共有多少個.首先每過10分鐘會打一個包這一個包會有50個BTC.一小時有6個十分鐘,一分鐘可以打包6次,每天有24小時,每年有365天 前四年是這樣,之後會減半…

50×6×24×365×4×(1+(1/2)+((1/2)^2)+....) =21000000
           

 也就是說BTC一共就有2100萬個,它是通過打包獎勵這種方式擴散出去.

 正因為有手續費和打包獎勵這兩條 是以大家都搶着去打包 但是都想打包,那麼以誰為準呢?

以誰為準(隻能有一人打包)

 這個權力給誰呢?中本聰想了一個辦法叫

工作量證明

 這個工作量證明在這裡就是說每一個使用者他都要去做一個很難的數學題,這個很難的數學題你把它做出來了,那麼你就有權利進行打包,你如果獲得了打包的權力,你就會獲得手續費以及打包獎勵,就醬紫 <( ̄︶ ̄)↗[GO!]

 這個很難的數學題難道什麼程度呢?難到沒有任何一個人能夠直接通過腦子把它做出來 我們必須一個一個數的去嘗試 直到你把他嘗試出來了,你才能解出這一道數學題得到打包的權力獲得獎勵,這個解題獲得獎勵的過程我們稱之為挖礦!

挖礦

 挖礦我們剛才說過,是做一個很難的數學題,但是這個數學題不是看你的腦子聰明不聰明,而是看你的CPU的速度如何,因為沒有人能夠通過腦子把它計算出來大家的方法隻能是一個一個的試,那具體原理是什麼呢?在次之前我們先說一下另外的很有意思的東西:哈希函數

哈希函數

 哈希函數又可以叫數字摘要或者散列函數 我們可以把一個字元串通過一定的運算,轉化成一個摘要的形式,它正着算比較容易 但反向逆推是很難的!

 雜湊演算法裡面有一個很著名的雜湊演算法叫SHA256,SHA256 是美國國家安全局發明的一種算法,如果我把一個字元串’cnfox’輸入到這個SHA256函數裡面,輸出的是一個二進制數,這個二進制數有256位不管輸入什麼最後輸出的都是256位的二進制,而且輸入的字元串改一點點輸出的二進制就會有變化.

sha256(cnfox)= 

100001000001010011010010111100111000011110001010100110000111101011100100111010010011001110100011101001010010101000001110110101011110011000011111100111101100011101100111000110010100010001011110111000001111000110101

=68c2bbe1644e68e5fa90aae1318e7e0736a17a4c424fcff1cd2f30855d9ae6ac

sha256(icnfox)= a464f62280b7bbe64bd0d710dbc72fc3a6c6003d6891e7a55ec23a34bd79e483
           

雜湊演算法正向算比較容易,但是反向算非常非常困難

 這個怎麼了解呢~舉個例子 x^3+log2(x)+sin(x)=y 已知x求y是比較簡單的 但是已知y求x就很困難

 哈希函數比這個還要複雜的多 是以它反算基本上是不可能的 我們隻能一個一個去試(後面會說到這邊怎了解,先記下就好)

 假如你告訴我一個二進制形式的結果,問我什麼字元串結果是這個二進制,我隻能一個一個去這個字元串,一直試出來為止,這就是雜湊演算法的一個基本的問題

 這邊可能不是很好了解,那就暫且擱下,看完後面的就懂了

 挖礦就是基于SHA256S算法的一個運算

挖礦的具體原理

 前面說到,區塊鍊是賬單打包成塊,然後塊連接配接成鍊形成的.實際上是區塊中還有一個頭部.

現在假設區塊鍊剛好某一個區塊打包完成,所有的人都想拿着自己的賬單去打包接塊,但是接塊的時候必須算一個很難的數學題

  1. 這個數學題首先會有一個字元串,這個字元串裡面的内容非常多,主要的内容包含前塊的頭部資訊.還沒有打包的已有的賬單資訊還有時間戳之類的…加上

    随機數

    .
  2. 現在需要對這個字元串做兩次SHA256運算:HASH = SHA256(SHA256(字元串)),這個計算的速度實際上是很快的,計算出來是個256位的二進制
  3. 題目要求解出的二進制它的前N位數必須是0 假設 N=9 ,那麼誰解出的256二進制的前9位數是0,這個人就擁有了打包的權力!

    擁有打包的權力的人需要打一個包并且把算出來的哈希值作為一個新塊的頭部,再把這個包接到上一個區塊的後面,就可以獲得獎勵BTC.

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

 現在問題來了我們應該怎麼讓前面幾個數都是 0 呢?怎麼控制0的數量呢?這就需要做一個操作:

就是改變随機數.因為其他的内容是改不了的

,随機數從0開始 ,算一次看一下是不是滿足0的數量,如果不滿足開始算1…直到試出來為止

 每個人再計算的時候它的這個題的難度是不一樣的,因為每一個人的前塊的頭部雖然都是一樣的,但是賬單的内容可能是不一樣的,開始時間可能是不一樣的個人資訊也是不一樣的是以造成了随機數的大小不同;有的人運氣比較好第一次就算出來了,直接就打包了;有的人運氣不好需要算好久.但是平均下來說是誰的計算能力越強誰就更有希望打包這個塊,誰就更有可能挖到這個礦,是以大家都拼命的去買礦機~

難度的設定(N的設定)

N越大,這個數學題就越難

為什麼呢?首先這個不可能逆算,隻能正向一個一個去試 ,每一個0出現的機率試50% 這就顯而易見了 N越大難度越高 N 越小難度越低

(1/2)×(1/2)×(1/2)×(1/2)×...×(1/2)=(1/2)^n
           

 中本聰在設計的時候設定的是每10分鐘出一個塊,那這個是怎麼保證的呢?就是調整N的難度

比如說現在世界上有1w台礦機 每一台的計算能力是14T/s 也就是每秒鐘可以計算14T次哈希運算(1.4×10^13次每秒),十分鐘是600秒1w台礦機 可以算(1.4×1013×600×104)=8×10^19次

也就是說1w台計算能力位14T/s的礦機 十分鐘可以計算8×10^19次

如果0出現的機率是(1/2)^n 那麼就需要計算的次數就是2^n次 如果n出現的機率是1/64的話,那麼你出這個塊的平均要計算64次

同樣的道理 現在計算了8×10^19次 N=66的時候 0出現的機率是(1/2)^66 計算的次數大概就是8×10^19次,是以說這種情況下,礦機就會把難度設定位N=66 第一個能夠算出來前66位全是0的人 就有權利去打包這個塊拿到獎勵!

中本聰的錢包位址

 一時心血來潮,就是想看一下這個創世區塊和中本聰老師的錢包位址~

BTC的官網(可能需要科學上網):https://bitcoin.org/en/

包括概念介紹、代碼送出等基礎資訊都可以找到相應連結,有中文版!

但是我們想找的不在這裡 ╰(‵□′)╯

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

https://www.blockchain.com/

這個網址就是比特币的區塊鍊網站位址,可以查詢區塊、哈希、交易記錄等等資訊。

好~現在好像也有中文版

我們直接在搜尋框寫’0’回車

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

網頁底部可以修改語言 ,然後點選BTC

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

這就是創世區塊的資訊啦~

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

很顯然,沒有 點下一個區塊看看…

比特币?區塊鍊?礦機?挖礦?到底是什麼!?

果然,并不是查不到而是被隐藏了,本來還想偷偷給這個位址捐點錢,表達一下對中本聰老師的敬意呢

未完待續

 講到這裡還有很多問題沒有解決:比如說如何防止僞造,如何防止雙重支付,我們以後再聊~晚安

本人個人網站: https://www.icnfox.cn 歡迎來訪

有任何問題可以在個人網站的評論區留言,看到就會第一時間回複 啾咪ヾ(≧▽≦*)o

繼續閱讀