由於區塊鏈發展到目前階段,各個技術方向都有長足的發展,介紹最簡單、最容易理解的位元幣區塊鏈;
由於大部分區塊鏈都是以位元幣區塊鏈為基礎進行擴充的,所以了解位元幣區塊鏈有助於其他專案區塊鏈的後續學習。
引出中心化記賬的問題
*首先,我們借鑑了乙個區塊鏈描述中的經典情景來模擬中心化記賬。
假設有乙個有百戶居民的村子,其中有一位德高望重的村長,村長有乙個兒子。村民們都把錢存到村長家,村長負責記賬。比如,張三用 1000 買了李四家的牛,村長就把張三名下的存款減去 1000,李四家加上 1000。聽起來是不是很像銀行的操作?
對,我們就是先從中心化的銀行記賬開始聊起。村民都相信村長,才願意把錢存到村長家,他們相信村長不會作惡。
可惜好景不長,老村長由於操勞過度,駕鶴西去了。新上任的村長兒子鐵蛋很是聰明,但也有個毛病,就是粗心大意。他不但經常算錯賬,一次還被人偷改了賬單。
不過,幸好村民自己都有記賬,但是由於鐵蛋每次錯賬後都要和別人核對半天,導致村民對新村長的記賬能力十分不滿。
時間就這麼過著,然而最可怕的事情還是發生了,鐵蛋的老婆竟然私下篡改賬本,給鐵蛋七大姑八大姨的餘額全部偷偷加了好多,終於有一天事情暴露,村民們氣沖沖地跑到鐵蛋家裡討說法,於是一片混亂。
這時候有個叫中本聰的人站了出來,他說他設計了一套系統,可以不依賴任何人記賬,於是,眾人開始將目光集中到他的身上。*
中本聰說他的系統稍微麻煩一點,需要幹三件事兒。
這三條總體來說其實是幹一件事情,就是:每家每戶都記賬,賬簿上不再記載每戶村民的餘額,而只記載每一筆 transaction,即記載每一筆交易的付款人、收款人和付款金額。
那麼問題就來了:如果每戶都記賬,肯定每戶的賬都不統一啊,你記你的,我記我的,最後不全亂了麼?
這個時候需要大家統一賬本,保證大家的賬本都是一致的。因為記錄的交易是全村所有人有序產生的,所以這就需要有乙個廣播機制。這個廣播機制,我先賣個關子,後面再講。
中本聰說,其實很簡單,我們現在先把全村所有人的資產都加起來。還真巧了,剛好 100 萬。
中本聰接著說:「只要賬簿的初始狀態確定,並且每一筆交易可靠並按照物理時間自然記錄,並且只加不改不刪,這樣,當前每戶持有多少資產是可以推算出來的。」
中本聰說我現在把我的印章給你們看,這個印章很特殊,蓋的章有兩塊標記,第一塊是乙個可以識別的標記,比如我往紙上一敲,可識別的標記是 1mstg2。
這就是你們的代號,由於我們賬本是公開的,使用真實姓名會很危險,所以你們記賬的交易單上收款人、付款人都填這個碼,不用寫姓名。你的掃瞄器和你的印章生成的代號是關聯的,有且僅有持有對應掃瞄器的人才能花費金額,這一步即為解開交易
。
剛剛說印章有兩塊,這第二塊內容配合這個掃瞄器才能看,肉眼看則都是亂碼,掃瞄器一掃就知道第二塊內容是否有效,這一步也就是交易驗證
。
並且所有交易大家都能接收,都能看到,但卻解不開印章亂碼部分的內容,僅僅收款方才能解開,因為你的掃瞄器和你印章生成的代號是關聯的,有且僅有持有對應掃瞄器的人才能解開交易。
以上就是區塊鏈中公開記賬的過程
。公開記賬
就是全網所有人都可以隨時檢視一套賬本,然後按照規則透明公開地進行記賬。
創世區塊是我們生成全村公開賬本的第一筆交易的第乙個信封,好比 初始化。
於是乎,中本聰說我先生成第乙個 transaction,這個交易單的付款人為空,收款人是村長,付款金額是 100 萬,因為是創世區塊,產出多少個是可以隨意規定的,由於我們上面統計了全村的賬目情況,所以我就寫了 100 萬,待會兒付款給村長以後,我們可以按照原來的賬本給大家傳送對應的金額過去。
好了,我們有了第一筆交易,第乙個信封也已經做好了。現在讓村長把信封傳給張三,張三影印乙份,然後傳給李四,李四繼續傳下去,一傳十,十傳百,直到傳給全村人,這個步驟也就是同步區塊
,也就是全網都拿到這個信封,以及信封裡面的 transaction。
由於上一節我們的創世區塊把 100 萬交給了村長,那麼我們假設張三在村長那裡的存款餘額是 10 萬,這時候村長要根據原來的舊賬本,把這 10 萬傳送給張三,然後把舊賬本上的賬劃掉。下面我們討論一下如何構造這筆交易。
中本聰開始教村長寫交易單,把 100 萬分成兩部分,第一部分 10 萬,收款人是張三;第二部分是 90 萬,收款人是自己;這樣乙個 transaction 就做成啦。
前面我們說了,不能直接寫名字,要寫代號,這個代號也就是你的錢包位址,我們需要把收款人寫名字的地方,讓收款人拿出自己印章,把代號讀出來,然後告訴村長即可。
100 萬 10 萬,張三
90 萬,自己
村長寫好 transaction 以後,還需要拿出自己的印章,在 transaction 上蓋章,這個蓋章的過程也就相當於區塊鏈中的簽名。這個章,全村人都可以拿掃瞄器掃一下驗證是否有效,即驗證付款人的章是否有效。
100 萬 10 萬,張三的印章(1s25vr)
90 萬,村長的印章(13gyip)
就這樣,村長一共寫了 10 份 transaction,分別代表了傳送給不同人的交易,張三一筆 10 萬,李四一筆 1 萬,等等。
現在我們有了 transaction,但是還需要東西把 transaction 裝起來,我們用乙個特殊的信封把 transaction 裝起來,這個信封就是區塊鏈中的區塊
,這個封裝過程就是打包交易
。
為什麼要封裝起來呢?是為了讓打包交易的人能夠在信封上署名,表示這次打包是由某某某打包的,其次全村的交易可能非常多,需要裝配標號,方便大家查詢。
我們看到上述的 transaction 雖然已經生成,但是有個問題,就是沒有規定誰有權利把 transaction 封裝到信封裡。
我們在開篇的故事中看到了中心化操作肯定是不行的,假設在全村人中,這時候如何篩選出這些打包的人呢?
中本聰這時候說了,由於我們村的人口增長,100 萬未來可能不夠,我們暫定 150 萬,那多餘的 50 萬,我們就當獎勵給這些裝信封的人了,當然不能一次性給,誰裝一次信封就領 3 個幣。
這時候大家夥兒來勁了呀,只要裝信封就能夠領錢了,我們在這裡把符合條件的人稱作礦工
。
這個難題是這樣的,它有兩大特性,第一是容易驗證,第二是計算過程非常複雜。
例如,有種棋牌類遊戲叫作「24 點」,玩法就是給出任意 4 個整數,通過整數運算得到 24,比如現在給出 2、9、1、5 四個數,答案是(5-2)*(9-1)= 24。當然,本處僅是舉例,「24 點」遊戲的答案空間非常小,是遠遠不夠生成信封的。
答案非常好驗證,但是計算過程是乙個嘗試的過程,需要耗費大量的精力。而在真實的位元幣中,採用的是尋找符合條件的目標雜湊,這也就是位元幣礦工所做的事情。
好了,這時候大家開始計算給出的難題,剛好李四第乙個計算出來,那麼這次裝信封的操作就由李四完成,李四把 10 份 transaction 裝到信封中,也就是打包 transaction,並且要在信封背面寫上乙個信封的摘要資訊。
比如上乙個信封中的第乙個交易是什麼、信封封面長什麼樣,最後要在信封上蓋上章,也就是「簽名」,礦工簽名的目的是為了領幣,也就是 coinbase 交易。
以上過程在區塊鏈領域稱作「打包 transaction」,也就是大名鼎鼎的挖礦
。
來說說上文提到的廣播交易,廣播是為了讓全村人知道當前時刻你產生了一筆 transaction,或者是你裝好了乙個信封。
廣播的內容分兩種,一種是廣播 transaction,一種是廣播信封。第一種廣播是意味著還有未被打包的 transaction,而第二種廣播信封則意味著這個 transaction 已經被某個礦工確認。
收到了廣播的通知後,大家先驗證信封上難題的答案是否正確,這樣便可以驗證出信封是否被偽造,接著驗裡面的每筆交易,最後還要驗證信封背面的內容,即上乙個信封的摘要是否正確。因為上乙個信封大家都已經確認,所以這樣可以極大地規避作弊的可能。—地資料庫中了。
至此,全村人的記賬問題就差不多解決啦。
第2講 區塊鏈到底是怎麼執行的?
中心化記賬的問題 首先,我們借鑑了乙個區塊鏈描述中的經典情景來模擬中心化記賬。假設有乙個有百戶居民的村子,其中有一位德高望重的村長,村長有乙個兒子。村民們都把錢存到村長家,村長負責記賬。比如,張三用1000買了李四家的牛,村長就把張三名下的存款減去1000,李四家加上1000。聽起來是不是很像銀行的...
區塊鏈 2區塊鏈裡的「挖礦」到底是什麼意思?
這一期,我們研究一下,到底是什麼方法能鼓勵大家一起參與記賬,讓這個體系能自給自足 穩定執行的。首先我們先認識乙個神奇的東西 黑盒 想象乙個神奇的盒子,如果你從往盒子裡塞乙個的蘋果進去,它可能會吐出乙個漢堡包。小知識 這個神奇的盒子被稱為 雜湊方程 但非專業人士又怎麼好理解 雜湊 這個詞。所以,今天,...
區塊鏈到底是神馬鬼東西
區塊鏈 的概念火了,但節奏較快的網際網路世界仍有很多人不了解何為 區塊鏈 即便網上有太多介紹此物的 名詞解釋 但也都過於古板和難懂,那麼今天我給大家講個 故事 讓更多使用者秒懂何為 區塊鏈 區塊鏈本質上是乙個分布式的公共賬本,聽起來很矇圈?別急,後面會用最深入淺出的方式來一一解釋。任何人都可以對這個...