終於明白——區塊鏈是個什麼鬼
區塊鏈
先附上鍊接轉載:https://ethfans.org/posts/wtf-is-the-blockchain
“只讓人們在比特幣帶來的交易中獲取比特幣,或許是有意義的。一旦有足夠的人這樣想,它就會變成一個自我實現的預言。”——中本聰,2009
首先我們說說它的由來:
設想一個場景:
你的一個屌絲朋友要帶女朋友去旅遊,結果沒錢買機票不得已來向你借錢,於是你給銀行的經理打電話告訴他從你的賬戶轉1000塊給你那個朋友。其實這一個過程只是在你的賬簿上減去了1000,在他的賬簿上多增加一千。但這個賬簿既不受限於你,也不受限於你的朋友。只是一紙憑證。如果說你的經理不小心把錢多加了一個零寫成了10000,或者不小心銀行著火了,你的賬簿也燒沒了,那你怎麼辦,即使你那麼信任銀行。
提出一個設想:
多年來,我們一直把所有的雞蛋(積蓄)都放在了一個籃子裡,而且還是別人的籃子。那我們能不能有這麼一個系統,可以不需要銀行就可以轉賬,不需要銀行來記賬,而是通過某種手段來記錄,並且這種手段記錄下來的資訊是安全的,不可變的,是值得我們信任的。
工作原理:
打個比方,假設有10個人想拋棄銀行以及任何第三方,根據相互之間的協議,他們可以一直擁有彼此的賬號資訊,但是不知道對方的真實身份。
首先我們給這10個人每人一張白紙用於記錄十個人之間發生的交易,比如第一個人給第二個人100塊,那麼這10個人的紙上都記錄下這一條記錄,直到這張紙被寫滿後換一張新的紙,然後將寫滿的紙張放到一個資料夾裡。
雜湊方程:
在紙張放入之前,我們需要對它進行封存加密,以保證放入資料夾之後紙張不能再被修改,這就需要用到加密,而這個加密的方式恰恰就是我們所說的雜湊方程,我們這裡暫時先叫它魔法機器吧,從魔法機器的左邊輸入一個數字,通過計算在右邊輸出結果,但是這個計算過程沒人知道,並且這個過程同樣也是不可逆的。當你輸入一個數,它會輸出一個唯一的結果。
所以說如果給你一個數字72533,然後問你會不會產生一個000開頭的字串,顯然我們只要輸入這個數字就可以驗證結果,就只是這樣。但要是反過來,給定你一個輸出結果,讓你算出輸入值的非常困難的。
“給定一個輸出值,要算出輸入值是極端困難的。但是,給定輸入值和輸出值,要檢驗該輸入是否會導致該輸出,卻是非常容易的。”
紙張放入——講究:
那麼我們如何來使用魔法機器為我們的紙張產生一個密封條呢?
密封包含著我們網路中交易內容的記錄,我們將需要算出一個數字,該數字在新增到交易記錄清單上、輸入機器以後,可以使我們得到一串三個 0 開頭的字元。
我們會在機器上花費時間和電力,然後一旦我們算出那個數字,這頁紙就被那個數字封存起來,這個密封的數字允許任何人去驗證這頁紙的完整性。
第一個計算出密封數字的人:
一旦每個人都用盡一頁紙的空間、無法記錄進一步的交易,他們就開始賣力地計算該頁紙的密封數字,使得它可以被藏入資料夾中。在網路中,每個人都進行這個計算,而最早算出密封數字的那個人會向其他所有人宣佈這個數字。
可是,如果他們知道其他人會算出它然後宣佈它,為什麼每個人都要耗費資源來進行計算呢?為什麼不坐視不理、等著抱大腿呢?
好問題。這就是激勵加入到這幅圖景的地方。每一個區塊鏈的成員都有資格獲得獎勵。第一個計算出密封數字的人將得到免費的金錢作為對他的努力(比如:付出的 CPU 算力和電力)的獎勵。
簡單地設想一下,如果 #5 為一頁記錄算出了密封數字,他得到了一些免費的錢作為獎勵,假設是憑空鑄造出來的1美元。換句話來說,#5的賬戶餘額增加了 1 美元,同時沒有任何人的賬戶餘額有所減少。
這就是比特幣變為現實的方式。它是在區塊鏈(比如:分散式的賬簿)上被用來交易的第一種貨幣。同時,人們被獎勵以比特幣作為回報,以使在網路上,(計算密封數字的)努力會繼續進行。
當足夠多的人持有比特幣,比特幣會升值,使得更多人想要比特幣;這會使比特幣進一步升值;這升值又使更多人想要比特幣;這願望又進一步使比特幣升值;如此迴圈往復。
這種獎勵,使得網路中的每一個人都不停歇地工作
Tip:將一頁紙想象為記錄交易的一個區塊、把資料夾想象為紙張(區塊)的鏈條,結果是,它變身成了一個區塊鏈。
以上就是區塊鏈的工作方式
那麼防止對密封數字的修改呢?
還記得我是怎麼跟你說的嗎?我給了你兩個盒子——一個裝著數字 20893,另一個空的讓你來計算?實際上,為了在區塊鏈上算出密封數字,有三個盒子,而非兩個——兩個提前裝好的,一個被用來計算的。
而當所有三個盒子裡面的內容加起來、輸入魔法機器後,從機器右邊出來的答案必須滿足要求的條件。
我們已經知道了,一個盒子裝著交易記錄的清單,一個盒子將裝著密封數字。而第三個盒子,裝著前一張紙的魔法機器輸出值。
有了這個優雅的小心機,我們可以保證,每一頁紙張都依賴於它之前的紙張。因此,如果有人要修改一張歷史記錄,他將同樣必須改變該頁以後所有紙張的內容和密封數字,以使這條鏈保持一致。
如果某個人,不屬於我們在一開始設想的 10 個人,試圖作弊,修改區塊鏈(儲存了所有交易記錄清單紙張的資料夾)中的內容,他將不得不調整多頁紙張、為所有這些紙張計算新的密封數字。我們都知道計算密封數字有多麼困難。因此,這網路中的一個壞蛋欺負不了九個老實人。
將會發生的事情是,從這個不誠實的傢伙嘗試作弊的那一夜開始,他將要在這網路中創造另一個區塊鏈,但那個區塊鏈將永遠無法趕上可信的區塊鏈——僅僅因為一個傢伙的努力和速度不可能戰勝九個人積累起來的努力和速度。因此,這保證了在一個網路中,最長的鏈就是可信的鏈。
解釋一下自己對以下幾個關鍵詞的理解:
去中心化:去中心的計算機相對於中心控制的伺服器執行緩慢且成本高昂,為了享受使用中心化計算機的低成本,我們給它們控制我們的力量。如果中央計算機(伺服器)出故障或被黑了,就會連累與其連線的所有使用者。只有當每個節點都出故障之時,去中心化計算機才會出故障,因此這臺計算機能夠一直工作下去。
分散式:分散式儲存是將資料分散儲存在多臺獨立的裝置上區別於集中儲存。
gas:中文意思 汽油,支付給實際使用記憶體、硬碟、計算和電力執行智慧合約的節點,執行使用節點內容的語句會有特定的成本,這類成本的單位是Gas,最終通過一點的兌換率轉換成虛擬貨幣