[Blockchain][Note] WTF is The Blockchain? 淺顯易懂的區塊鏈介紹

原文為來自Medium文章"WTF is The Blockchain"
https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348
這邊紀錄一下翻譯的摘要

區塊鏈要解決的問題:

To establish trust between ourselves, we depend on individual third-parties.
我們目前的交易,都是憑藉受信任的第三方來完成的。
舉例來說,我要匯款給朋友,是透過銀行完成款項的轉移,這中間不論是我或是我朋友都沒有真正經手這些錢,我們是信任銀行以及存摺上顯示的數字進而相信這筆錢真的有轉到對方手上。

這樣的系統問題是什麼?

For years, we have been putting all our eggs in one basket and that too in someone else’s.
這樣的問題在於,如果有人刻意想陰你,或是在不可預警的意外中交易資料遺失了,這樣的風險控制權並不在你手上。

因此直接的想法為:

Is there a way to maintain the register among ourselves instead of someone else doing it for us?
轉帳這件事能不能由我們親自完成呢?

這就是Blockchain區塊鏈之所以產生的原因。

那該如何實行呢?

“It might make sense just to get some Bitcoin in case it catches on. If enough people think the same way, that becomes a self-fulfilling prophecy.” — Satoshi Nakamoto in 2009
區塊鏈的要件之一就是有足夠多的人加入。怎樣叫做夠多呢?起碼要三個人。
假設現在有10個人決定放棄銀行這種第三方機構,在共同同意的協定之下,他們知道每一個人的帳戶細節,但並不知道彼此的真實身份。
大家都各自有一個空的資料夾,當交易發生的時候,大家都會不斷的增加紀錄存在自己的資料夾裡。每個人手上現在都有一張空白的紙以及一隻筆,準備好紀錄每一個發生的交易。
當交易發生時,要轉帳的人會告訴大家:"我現在要轉十塊錢給XXX!大家趕快記錄下來!"
這時候大家會先檢查這個人帳戶餘額夠不夠轉十塊錢,夠的話就會把這筆交易記錄下來。交易完成。
接著交易不斷的產生,記錄也不斷地寫在紙上。不過一張紙只能寫得下十筆紀錄。空白不夠的時候,大家就會拿新的空白紙繼續記錄新的交易。
寫滿的那張紙將被放進資料夾裡。不過在放進去之前,我們需要一個"unique key"將這張紙上的紀錄封存起來,這是為了確保資料夾內的資料不會被動任何手腳。這個密封(seal)的動作,在區塊鏈上其實稱為mining

Earlier the third-party/middleman gave us the trust that whatever they have written in the register will never be altered. In a distributed and decentralized system like ours, this seal will provide the trust instead.

透過第三方進行的交易是為了給雙方信任,保證資料不會被竄改。而在這個去中心化的系統中,這樣的資料密封就取代了第三方所能提供的保證。

資料如何密封呢?
想像一個神奇的盒子。如果你把數字"4"丟進去,這盒子會吐出"dcea"還你。每次你丟4都會得到一樣的結果,不過從dcea這串字,你沒辦法還原成原本的數字4。更正確來說,是非常非常難還原,你只能夠透過不斷的嘗試全部的數字看哪個可以得到預期的結果。這盒子神秘的轉換規則就是其實就是區塊鏈所用的Hash Function

Given an output, it is extremely difficult to calculate the input, but given an input and output, it is pretty easy to verify if the input leads to the output.

回到密封資料的問題。假設我現在有個數字20893,我問你這個數字要加上哪一個數字才會使得神秘盒子吐出"000"開頭的文字?像前面提到的,你只能透過對所有的數字做測試。
假設你試出來21193加上去之後可以產生"00078"這串文字,符合。想像"20893"其實是記錄在紙上的數字,"21193"其實就是這張紙的"seal number"。我們把這個數字烙印在紙上,這張紙上的資料就被密封起來了。而seal number就是區塊鏈裡所謂的Proof of work

如果我們想驗證紙上的資料,只要將烙印的數字加上去,丟進神秘盒子看有沒有產生000開頭的文字,就知道紙上的資料是否依然正確了。

因此每一張需要被密封並存入資料夾的紙張,都需要經過一連串的計算,才能找出應該被烙印的密封數字。

回到前面的狀況,當一張紙寫完之後,大家會開始計算要找出這個數字,而第一個算出來的人會把這數字公告給其他人。其他人接收到以後,會進行驗證:也就是把數字加上去丟進神奇盒子看結果是否符合預期。

如果此時有一個人的驗證結果不對呢?

Whatever sealing number the majority agrees upon, becomes the honest sealing number.
有可能是這個人紀錄的時候出了什麼差錯,或是他想作怪。無論是哪一種,他都只有一個選擇,就是清除自己目前的資料並複製其他人的資料。除非他不想把資料放進資料夾,這也意味著他不能繼續記錄接下來的交易,也就被排除在這個系統之外了。

不過為什麼大家會想耗費自己的資源去做如此困難的計算呢?

The rewards make everyone keep working in the network.
沒錯,所以區塊鏈的設計會給第一個算好的人一些"錢"作為獎勵。

Bitcoin比特幣是第一個在區塊鏈上交易的貨幣。當越來越多人因為加入這個系統並獲得更多比特幣作為獎勵,也就會吸引越多人想加入,如此使得這樣的系統可以生生不息。

前面提到的紙其實就是區塊(Block),而存放紙張的資料夾就是代表Blockchain區塊鏈。

這樣的機制還有一個問題,如果有人回過頭,想對自己資料夾內封存的紙張同時竄改紀錄和密封數字呢?只要計算結果同樣是000開頭就行了吧?

其實區塊鏈真正的機制,不只是將資料和密封數字加起來計算而已。他還會加入前一個紙張的計算結果。

也就是說,想要竄改資料,只修改密封數字和原始資料已經不夠了。由於計算的結果會改變,還得要修改每一個接著的區塊的密封數字

這樣造成的結果是,想作怪的人,會產生一條獨立的區塊鏈。但這計算上的難度,會造成他紀錄的速度永遠追不上另外九個人。因此判斷區塊鏈真假的方法很簡單:最長的鏈就是最誠實的鍊。
Longest chain is the honest chain.

不過如果,今天不止一個不誠實的人,而有6個人同時不誠實呢?

恩那這區塊鏈就壞掉了。這就是所謂的"51% Attack"。區塊鏈基本上是建立在"大部分人都是誠實的"這前提之上。

留言

張貼留言