區塊鏈100講:從村裏的帳原本看什麼是區塊鏈

image

好久之前就有個想法,把區塊鏈的技術和概念整理成一個體系化的知識圖譜,方便你們查閱和學習,大話已說出去好久,卻一直沒有踐行(papa打臉!),天天的文章發佈零散而缺少規律,相信大家看了也有點丈二和尚的感受。算法

那麼從今天開始立下一個flag,天天(週一到週五)一篇文章,整合資料,介紹一個點,系列命名《區塊鏈100講》,今天先從什麼是區塊鏈開始吧~安全

本文摘自《白話區塊鏈》,做者以一個通俗的例子介紹了什麼是區塊鏈,講真,這是目前爲止看到的最好理解的解釋了。小編曾經用這個例子跟不少圈外人介紹過什麼是區塊鏈,灰常好用,看到你們崇拜的眼神內心美滋滋~!服務器

小哥哥小姐姐們能夠學起來,展(撩)露(妹)才(撩)學(漢)的機會來了~!網絡

固然不能忘記,感謝做者蔣勇老師,感謝機械工業出版社華章分社提供內容。分佈式

1

從一本帳本提及

早些時候,農村通常都會有個帳房先生,村裏人出個工或者買賣些種子肥料等,都會依靠這個帳房先生來記帳,大部分狀況下其餘人也沒有查帳的習慣,那個帳本基本就是這個帳房先生保管着,到了年末,村長會根據帳本餘額購置些瑣碎物件給村裏人發發,一直以來也都是相安無事,誰也沒有懷疑帳本會有什麼問題。帳房先生由於承擔着替你們記帳的任務,所以不用出去幹活出工,額外會有些補貼,僅此一點,倒也是讓一些人羨慕不已。下圖即是當時帳本的記帳權圖示:學習

image

終於有一天,有我的無心中發現了帳房先生的那本帳。看了下帳面,發現數字不對,最關鍵的是支出、收入、餘額竟然不能平衡。對不上,這可不行,當即報告給其餘人,結果你們都不幹了,這還得了。通過一番討論,你們決定,輪流來記帳,這個月張三,下個月李四,你們輪着來,防止帳本被一我的拿在手裏。因而,帳本的記帳權發生了以下圖所示的變化:區塊鏈

image

經過上圖咱們能夠看到,村裏的帳本由你們輪流來保管記帳了,一切又相安無事了,直到某一天,李四想要挪用村裏的公款,但是他又怕這個事情被後來記帳的人發現,怎麼辦呢?李四決定燒掉帳本的一部份內容,這樣別人就查不出來了,回頭只要告訴你們這是不當心碰到蠟燭,別人也沒什麼辦法。加密

果真,出了這個事情之後,你們也迫不得已。但是緊接着,趙六也說不當心碰到蠟燭了;王五說不當心掉水裏;張三說被狗啃了……終於你們決定坐下來從新討論這個問題。通過一番爭論,你們決定啓用一種新的記帳方法:每一個人都擁有一本本身的帳本,任何一我的改動了帳本都必需要告知全部其餘人,其餘人會在本身的帳本上一樣地記上一筆,若是有人發現新改動的帳目不對,能夠拒絕接受,到了最後,以大多數人都一致的帳目表示爲準。設計

果真,使用了這個辦法後,很長一段時間內都沒有發生過帳本問題,即使是有人真的不當心損壞了一部分帳本的內容,只要找到其餘的人去從新複製一份來就好了。遊戲

然而,這種作法仍是有問題,時間長了,有人就偷懶了,不肯意這麼麻煩地記帳,就但願別人記好帳後,本身拿過來覈對一下,沒問題就直接抄一遍。這下記帳記得最勤的人就有意見了。最終你們開會決定,天天早上擲骰子,根據點數決定誰來記當天的帳,其餘人只要覈對一下,沒問題就複製過來。

咱們能夠看到,在這個時候,帳本的記帳權變成了這樣:

image

經過上圖,咱們能夠看到,經歷了幾回風雨以後,你們終於仍是決定共同來記帳,這樣是比較安全的作法,也不怕帳本損壞丟失了。後來你們還決定,天天被擲到要記帳的人,能得到一些獎勵,從當天的記帳總額中劃出必定獎勵的比例。

實際上,最後你們決定的作法,就是區塊鏈中記帳方法的雛形了,接下來咱們就來了解一下區塊鏈的技術理念。

2

區塊鏈技術理念

區塊鏈在本質上就是一種記帳方法,固然了,並非經過人來記帳的,而是經過一種軟件,咱們暫且簡稱爲區塊鏈客戶端。以上面的例子來講,張3、李4、王5、趙六等人,就至關於一個個的區塊鏈客戶端軟件,它們運行在不一樣的設備上,彼此之間獨立工做。一般咱們把運行中的客戶端軟件稱爲「節點」。這些節點運行後,彼此之間會認識一下。它們彼此之間是這樣認識的:張三認識李四也認識王五,趙六聯繫到了張三,讓張三把他認識的人的聯繫方式發給本身,這樣趙六也認識了李四和王五,經過這樣的方式,你們就造成了一張網,有什麼事只要招呼一聲,立馬消息就會傳遍整個網絡節點。這種方式跟新聞轉發差很少,不須要依靠某一我的,你們就能互通消息了,在區塊鏈軟件的結構中,這種互相通訊的功能稱爲「網絡路由」。

在這個網絡中,每一個節點都維護着本身的一個帳本,帳本中記錄着網絡中發生的一筆筆帳務。具體是什麼樣的帳務呢?這得看具體是什麼樣的功能網絡。區塊鏈技術屬於一種技術方法,能夠用來實現各類不一樣的業務功能,小到如上例中的平常記帳,大到各類複雜的商業合約,等等,記錄的數據也就不一樣了。網絡中的節點是獨立記帳的,但是記帳的內容要保持彼此一致。所用的方法就是設定一個遊戲規則,經過這個規則選出一個記帳的節點,就如上例中的擲骰子。在區塊鏈系統中,這個所謂的「擲骰子」稱爲「共識算法」,就是一種你們都遵照的篩選方案,咱們能夠先這麼簡單地理解。選出一個節點後,則一段時間內的帳務數據都以這個節點記錄的爲準,這個節點記錄後會把數據廣播出去,告訴其餘的節點,其餘節點只須要經過網絡來接收新的數據,接收後各自根據本身現有的帳本驗證一下能不能接得上,有沒有不匹配和不規範的,若是都符合要求,就存儲到本身的帳本中。

在有些系統中,會考慮到被骰子投中的節點的勞動付出,畢竟它要負責整理數據,驗證數據,打包數據,還要再廣而告之,這個活仍是挺辛苦的。因而會設計一種激勵機制,負責打包數據的那個節點能夠得到系統的獎勵,這個獎勵相似於論壇積分,站在軟件技術的角度,就是一個數據。這個數據能夠視爲獎金,有時候你們會很積極地去爭取那個獎金,因而就但願骰子能投中本身,有些區塊鏈系統在這個環節會設計出一種帶有競爭的機制,讓各個節點去搶,誰能搶到這個機會誰就能得到打包數據的權力而且同時得到這筆獎勵,在這種狀況下,咱們會形象地將這個競爭的過程稱爲「挖礦」。

那麼,話又說回來了,咱們將一個個運行客戶端稱爲節點,那到底怎麼標記不一樣的使用者呢?也是經過用戶名註冊嗎?實則否則。在區塊鏈系統中,這個地方的設計頗有意思,是經過一種密碼算法來實現的,具體來講是經過一種叫公開密鑰算法的機制來實現的。咱們知道,對於一種密碼算法來講,不管算法過程是什麼樣的,都會有一個密鑰。而公開密鑰算法擁有一對(也就是兩個)密鑰,跟虎符同樣,是彼此配合使用的,能夠互相用來加解密。其中一個叫私鑰,另一個叫公鑰,公鑰能夠公開給別人,私鑰要本身保管好。在區塊鏈系統中,公鑰就是用來用戶身份識別的,通常不會直接使用公鑰,由於不容易讓人記住。公鑰每每都比較長,實際處理的時候都會進行轉換,好比取得公鑰的最後20個字節或者通過一系列更復雜的轉換,最後獲得一個稱爲「地址」的轉換結果,這個「地址」就能表明一個用戶。

爲何在區塊鏈系統中要用這麼一個奇怪的用戶身份表示方法呢?彷佛看起來除了有些創意外,也沒特別的用處。這裏咱們就得再介紹下這個公開密鑰算法的特別能力。以前提到說這種算法有兩個密鑰,那麼這兩個密鑰是怎麼配合工做的呢?咱們來簡單說明一下:用公鑰加密的數據必須用對應的私鑰來解密,而用私鑰加密(一般稱爲「簽名」)的數據必須用對應的公鑰來解密。這個特色但是能發揮很大用處的,就如上述的例子中,若是張三要發送給李四一張支票,那怎麼傳送呢?就這麼發過去,會被那個記帳的人拿到,風險可就大了。因而張三想了一個辦法,他在支票上用李四的公鑰加了個密,而後再簽上本身的名字(使用本身的私鑰簽名),這個時候其餘人就算拿到支票也沒用,由於只有李四纔有本身的私鑰,也只有李四才能解開這張支票來使用。這種功能設計在區塊鏈系統中稱爲「腳本系統」。

如今咱們知道了,區塊鏈的技術理念,其實就是你們共同來參與記帳,經過一種規則不斷地選出帳務打包者,其餘節點接收驗證,而且每一個用戶都有一對密鑰表示本身,經過腳本系統的功能實如今公共網絡中定向發送有價值的數據。

3

通常工做流程

經過上面的例子,相信讀者朋友對區塊鏈已經有了基本認識。區塊鏈系統有不少種,第一個應用區塊鏈技術的軟件就是比特幣,事實上區塊鏈的概念就是比特幣帶出來的。到如今爲止,已經出現了至關多的基於區塊鏈技術的衍生系統,好比閃電網絡、公證通、以太坊、超級帳本項目等。每一類系統都有本身的特色,例如汽車設計,有的設計成跑車,有的設計成運輸車,有的設計成商務車,可是有一點,不管是什麼類型的車,它的工做方式或者說工做流程都是相似的,在本質上它們都是同一類技術結構的產物。在這一小節,咱們從通常性的角度闡述一下區塊鏈系統的工做流程,爲了便於說明,咱們會選取一些場景例子。

咱們先來看一個轉帳交易的流程。轉帳交易本質上就是發送一筆數據,這個數據能夠表示爲資產,也能夠表示爲訂單或者其餘各類形式的數據,咱們看一下下面的圖示。

image

從圖中咱們能夠看到,整個數據的發送過程其實仍是很簡單的,數據發送出去後,會被打包進區塊,而後廣播出去給全部的節點確認,確認沒有問題後就寫入到各自的本地區塊鏈帳本中,當網絡中的大多數節點都確認寫入後,這個轉帳過程就算是完成了。有朋友可能會問,在這種分佈式的網絡中,怎麼能知道是被大多數節點確認寫入了呢?這裏並無什麼服務器登記呀?這個問題咱們先留着,在下面講到區塊鏈分類的時候會有詳細的解釋,你們能夠先思考一下。

image

這個工做流程圖是有表明性的,其餘各類系統都是在這個基礎上進行衍生和擴展。好比有些會增長身份認證功能,以確保只有符合身份驗證的用戶才能發送數據;有些則擴展交易數據的表達能力,不但能用來表示通常的交易轉帳,還能表示更復雜的商業邏輯。各類應用不少,可是萬變不離其宗。

實際上,說一千道一萬,整個區塊鏈網絡,就是你們共同來維護一份公共帳本。注意了,這個公共帳本是一個邏輯上的概念,每一個節點各自都是獨立維護本身帳本數據的,而所謂的公共帳本,是說各自的帳本要保持一致,保持一致的部分就是公共帳本,咱們看下圖示:

如圖所示,有些節點在廣播新的數據,有些節點在接收數據,你們共同維護一個帳本,確保達成一致。區塊鏈技術其實就是圍繞如何保持數據的一致、如何讓這個公共帳本的數據不被篡改來展開的。

本期就講到這裏,下期繼續。什麼是區塊鏈,你明白了嗎?找個身邊的人演練一下吧~

本文內容節選自《白話區塊鏈》一書的第1章《例說區塊鏈》。

本書做者:蔣勇、文延、嘉文

感謝機械工業出版社華章分社的支持和分享。

如下是咱們的社區介紹,歡迎各類合做、交流、學習:)

image

相關文章
相關標籤/搜索