區塊鏈在本質上就是一種記帳方法,固然了,並非經過人來記帳的,而是經過一種 軟件,咱們暫且簡稱爲區塊鏈客戶端。以上面的例子來講,張3、李4、王5、趙六等 人,就至關於一個個的區塊鏈客戶端軟件,它們運行在不一樣的設備上,彼此之間獨立工 做。一般咱們把運行中的客戶端軟件稱爲「節點」。這些節點運行後,彼此之間會認識一 下。它們彼此之間是這樣認識的:張三認識李四也認識王五,趙六聯繫到了張三,讓張三 把他認識的人的聯繫方式發給本身,這樣趙六也認識了李四和王五,經過這樣的方式,大 家就造成了一張網,有什麼事只要招呼一聲,立馬消息就會傳遍整個網絡節點。這種方式 跟新聞轉發差很少,不須要依靠某一我的,你們就能互通消息了,在區塊鏈軟件的結構 中,這種互相通訊的功能稱爲「網絡路由」。算法
在這個網絡中,每一個節點都維護着本身的一個帳本,帳本中記錄着網絡中發生的一筆 筆帳務。具體是什麼樣的帳務呢?這得看具體是什麼樣的功能網絡。區塊鏈技術屬於一種 技術方法,能夠用來實現各類不一樣的業務功能,小到如上例中的平常記帳,大到各類複雜 的商業合約,等等,記錄的數據也就不一樣了。網絡中的節點是獨立記帳的,但是記帳的內 容要保持彼此一致。所用的方法就是設定一個遊戲規則,經過這個規則選出一個記帳的節 點,就如上例中的擲骰子。在區塊鏈系統中,這個所謂的「擲骰子」稱爲「共識算法」,就是 一種你們都遵照的篩選方案,咱們能夠先這麼簡單地理解。選出一個節點後,則一段時間 內的帳務數據都以這個節點記錄的爲準,這個節點記錄後會把數據廣播出去,告訴其餘的 節點,其餘節點只須要經過網絡來接收新的數據,接收後各自根據本身現有的帳本驗證一 下能不能接得上,有沒有不匹配和不規範的,若是都符合要求,就存儲到本身的帳本中。網絡
在有些系統中,會考慮到被骰子投中的節點的勞動付出,畢竟它要負責整理數據,驗 證數據,打包數據,還要再廣而告之,這個活仍是挺辛苦的。因而會設計一種激勵機制, 負責打包數據的那個節點能夠得到系統的獎勵,這個獎勵相似於論壇積分,站在軟件技術 的角度,就是一個數據。這個數據能夠視爲獎金,有時候你們會很積極地去爭取那個獎 金,因而就但願骰子能投中本身,有些區塊鏈系統在這個環節會設計出一種帶有競爭的機 制,讓各個節點去搶,誰能搶到這個機會誰就能得到打包數據的權力而且同時得到這筆獎 勵,在這種狀況下,咱們會形象地將這個競爭的過程稱爲「挖礦」。區塊鏈
那麼,話又說回來了,咱們將一個個運行客戶端稱爲節點,那到底怎麼標記不一樣的使 用者呢?也是經過用戶名註冊嗎?實則否則。在區塊鏈系統中,這個地方的設計頗有意 思,是經過一種密碼算法來實現的,具體來講是經過一種叫公開密鑰算法的機制來實現 的。咱們知道,對於一種密碼算法來講,不管算法過程是什麼樣的,都會有一個密鑰。而 公開密鑰算法擁有一對(也就是兩個)密鑰,跟虎符同樣,是彼此配合使用的,能夠互相 用來加解密。其中一個叫私鑰,另一個叫公鑰,公鑰能夠公開給別人,私鑰要本身保管 好。在區塊鏈系統中,公鑰就是用來用戶身份識別的,通常不會直接使用公鑰,由於不容 易讓人記住。公鑰每每都比較長,實際處理的時候都會進行轉換,好比取得公鑰的最後20 個字節或者通過一系列更復雜的轉換,最後獲得一個稱爲「地址」的轉換結果,這個「地 址」就能表明一個用戶。加密
爲何在區塊鏈系統中要用這麼一個奇怪的用戶身份表示方法呢?彷佛看起來除了有 些創意外,也沒特別的用處。這裏咱們就得再介紹下這個公開密鑰算法的特別能力。以前 提到說這種算法有兩個密鑰,那麼這兩個密鑰是怎麼配合工做的呢?咱們來簡單說明一 下:用公鑰加密的數據必須用對應的私鑰來解密,而用私鑰加密(一般稱爲「簽名」)的數 據必須用對應的公鑰來解密。這個特色但是能發揮很大用處的,就如上述的例子中,若是 張三要發送給李四一張支票,那怎麼傳送呢?就這麼發過去,會被那個記帳的人拿到,風 險可就大了。因而張三想了一個辦法,他在支票上用李四的公鑰加了個密,而後再簽上自 己的名字(使用本身的私鑰簽名),這個時候其餘人就算拿到支票也沒用,由於只有李四 纔有本身的私鑰,也只有李四才能解開這張支票來使用。這種功能設計在區塊鏈系統中稱 爲「腳本系統」。設計
如今咱們知道了,區塊鏈的技術理念,其實就是你們共同來參與記帳,經過一種規則 不斷地選出帳務打包者,其餘節點接收驗證,而且每一個用戶都有一對密鑰表示本身,經過 腳本系統的功能實如今公共網絡中定向發送有價值的數據。遊戲