2 區塊鏈到底是怎麼執行的

2021-08-19 14:48:49 字數 3895 閱讀 2659

由於區塊鏈發展到目前階段,各個技術方向都有長足的發展,介紹最簡單、最容易理解的位元幣區塊鏈;

由於大部分區塊鏈都是以位元幣區塊鏈為基礎進行擴充的,所以了解位元幣區塊鏈有助於其他專案區塊鏈的後續學習。

引出中心化記賬的問題

*首先,我們借鑑了乙個區塊鏈描述中的經典情景來模擬中心化記賬。

假設有乙個有百戶居民的村子,其中有一位德高望重的村長,村長有乙個兒子。村民們都把錢存到村長家,村長負責記賬。比如,張三用 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區塊鏈裡的「挖礦」到底是什麼意思?

這一期,我們研究一下,到底是什麼方法能鼓勵大家一起參與記賬,讓這個體系能自給自足 穩定執行的。首先我們先認識乙個神奇的東西 黑盒 想象乙個神奇的盒子,如果你從往盒子裡塞乙個的蘋果進去,它可能會吐出乙個漢堡包。小知識 這個神奇的盒子被稱為 雜湊方程 但非專業人士又怎麼好理解 雜湊 這個詞。所以,今天,...

區塊鏈到底是神馬鬼東西

區塊鏈 的概念火了,但節奏較快的網際網路世界仍有很多人不了解何為 區塊鏈 即便網上有太多介紹此物的 名詞解釋 但也都過於古板和難懂,那麼今天我給大家講個 故事 讓更多使用者秒懂何為 區塊鏈 區塊鏈本質上是乙個分布式的公共賬本,聽起來很矇圈?別急,後面會用最深入淺出的方式來一一解釋。任何人都可以對這個...