區塊鏈的原理是什麼?

買賣虛擬貨幣
要講區塊鏈卻不講數字貨幣是不可能的。畢竟區塊鏈是為了滿足比特幣獨特的需求才被創造出來的。比特幣的目標是能夠替代傳統貨幣,作為貨幣,它就必須有流通能力。簡單地說,比特幣使用者之間可以互相轉移比特幣。而為了保證比特幣的流通能夠正常的進行,比特幣軟體必須提供一些最基本的安全上的保證。比如說,如果A給了你一個比特幣,這一個比特幣就是你的了。要是A能隨隨便便把這個比特幣搶回去,那肯定不行。如果你使用的是紙質貨幣,A要拿回給了你的東西,就必須在物理上把它搶回去。那隻要使用物理上的方法保護好這個東西就好了。但是如果你用的是支付寶怎麼辦?支付寶上的轉賬無非是數字上的加加減減,並不涉及物理實體的轉移。你所需要做的無非是信任支付寶這個第三方的機構,相信支付寶沒有和A串通好,一起坑你的錢。但是這兩條到了比特幣身上就都行不通了。比特幣不是物理實體,同時也不存在一個所有人都信任的第三方(比特幣的設計目標就是創造一種使用者可以完全匿名的貨幣,自然不可能去依賴一個這樣的第三方)。那應該怎麼辦呢?其實思路很簡單:如果A在大庭廣眾之下,當著一千個人的面答應把錢給你,那麼就算沒有第三方的保證,A也很難抵賴。從實現上來說,每當使用者使用比特幣進行了交易,關於這次交易的資訊就會被廣播給所有的比特幣使用者。這樣就算有人想要抵賴,也會被抓到證據。好了,講了這麼多,好像問題都解決了,那麼這裡面有區塊鏈什麼事呢?
我們可以從一個新生節點的角度看一下這個問題。新生節點要加入比特幣網路,就必須對整個網路的情況有所瞭解。它必須知道網路中的整個交易歷史,因為只有這樣它才能知道當前其他所有節點各持有多少比特幣。而這些交易歷史所構成的結構就是區塊鏈。區塊鏈是一系列區塊按照時間構成的一個鏈條,鏈條中每一個區塊都包含數條交易記錄。因為比特幣本身在安全上的要求(見前文),區塊鏈必須滿足一些特性。簡而言之,就是不能讓人有修改歷史的能力。假設有一個區塊鏈A->B->C,任何接收到這個區塊鏈的新生節點,必須能夠很方便的驗證交易A之後確實發生了交易B,交易B之後確實發生了交易C。在密碼學中,防止資料被改動有一個很方便的工具,就是hash。如果C之中包含了B的hash值(如sha256值),那麼如果有任何人嘗試傳送改動過的B(不妨稱為B')給新節點,新節點立刻就能發現B'的hash值和C中記錄的不符。所以只要新節點獲取到了區塊鏈中最新的一個塊,它就能往回驗證整個歷史的合法性。那麼,新節點要怎麼知道最新的塊是否合法呢?答案其實是:“它並不能知道。”打個比方說,要是你身邊的所有人都商量好了合起夥來騙你,你就沒辦法判斷你聽到的是不是假話。但是比特幣網路存在這樣一個假設:“好人總是佔大多數的”。也就是說,當新生節點向網路發出請求,它收到的最常見的回覆就是合法的回覆。我們解決掉了歷史驗證的問題,但還有另一個問題:誰有權利往區塊鏈上新增新的塊?如果有惡意節點將“A給C一個比特幣”改成了“A給B一個比特幣”,其他節點應該怎麼區分?答案和之前一樣:“它並不能區分。”但是不要忘了,我們假設網路中的好人是佔大多數的。在大家的計算能力差不多的情況下,這等同於假設網路中的好人們擁有更多的計算力資源。也就是說,如果我們把“往區塊鏈上增加區塊”這件事變成一件需要大量計算的工作,那麼擁有更多計算力資源的好人們就能搶在壞人之前加入新區塊。而這個計算量巨大的工作,仍然是hash。所有的節點會達成一個共識:“只接受hash值前幾位符合條件的區塊”(比如只接收hash值第一位是0的區塊)。節點可以透過改動區塊中的padding來湊hash值。只要hash演算法是安全的,節點就沒辦法高效的湊對hash值,只能暴力嘗試所有的padding來碰運氣。運氣好湊上了的節點,還可以在區塊中增加一條給自己一個比特幣的交易記錄作為對自己的獎勵。這個策略還很適合於控制新區塊出現的速度(比特幣需要在計算力變動的情況下維持勻速增長),只要增強對hash值的要求(比如原先要求第一位是0,現在要求頭兩位都是0),就能減慢區塊鏈增長的速度。區塊鏈的設計目標和工作原理大概是這樣。如果有講的不清楚的地方,或是有錯漏的地方,歡迎在評論中指出。 
要講區塊鏈卻不講數字貨幣是不可能的。畢竟區塊鏈是為了滿足比特幣獨特的需求才被創造出來的。比特幣的目標是能夠替代傳統貨幣,作為貨幣,它就必須有流通能力。簡單地說,比特幣使用者之間可以互相轉移比特幣。而為了保證比特幣的流通能夠正常的進行,比特幣軟體必須提供一些最基本的安全上的保證。比如說,如果A給了你一個比特幣,這一個比特幣就是你的了。要是A能隨隨便便把這個比特幣搶回去,那肯定不行。如果你使用的是紙質貨幣,A要拿回給了你的東西,就必須在物理上把它搶回去。那隻要使用物理上的方法保護好這個東西就好了。但是如果你用的是支付寶怎麼辦?支付寶上的轉賬無非是數字上的加加減減,並不涉及物理實體的轉移。你所需要做的無非是信任支付寶這個第三方的機構,相信支付寶沒有和A串通好,一起坑你的錢。但是這兩條到了比特幣身上就都行不通了。比特幣不是物理實體,同時也不存在一個所有人都信任的第三方(比特幣的設計目標就是創造一種使用者可以完全匿名的貨幣,自然不可能去依賴一個這樣的第三方)。那應該怎麼辦呢?其實思路很簡單:如果A在大庭廣眾之下,當著一千個人的面答應把錢給你,那麼就算沒有第三方的保證,A也很難抵賴。從實現上來說,每當使用者使用比特幣進行了交易,關於這次交易的資訊就會被廣播給所有的比特幣使用者。這樣就算有人想要抵賴,也會被抓到證據。好了,講了這麼多,好像問題都解決了,那麼這裡面有區塊鏈什麼事呢?
我們可以從一個新生節點的角度看一下這個問題。新生節點要加入比特幣網路,就必須對整個網路的情況有所瞭解。它必須知道網路中的整個交易歷史,因為只有這樣它才能知道當前其他所有節點各持有多少比特幣。而這些交易歷史所構成的結構就是區塊鏈。區塊鏈是一系列區塊按照時間構成的一個鏈條,鏈條中每一個區塊都包含數條交易記錄。因為比特幣本身在安全上的要求(見前文),區塊鏈必須滿足一些特性。簡而言之,就是不能讓人有修改歷史的能力。假設有一個區塊鏈A->B->C,任何接收到這個區塊鏈的新生節點,必須能夠很方便的驗證交易A之後確實發生了交易B,交易B之後確實發生了交易C。在密碼學中,防止資料被改動有一個很方便的工具,就是hash。如果C之中包含了B的hash值(如sha256值),那麼如果有任何人嘗試傳送改動過的B(不妨稱為B')給新節點,新節點立刻就能發現B'的hash值和C中記錄的不符。所以只要新節點獲取到了區塊鏈中最新的一個塊,它就能往回驗證整個歷史的合法性。那麼,新節點要怎麼知道最新的塊是否合法呢?答案其實是:“它並不能知道。”打個比方說,要是你身邊的所有人都商量好了合起夥來騙你,你就沒辦法判斷你聽到的是不是假話。但是比特幣網路存在這樣一個假設:“好人總是佔大多數的”。也就是說,當新生節點向網路發出請求,它收到的最常見的回覆就是合法的回覆。我們解決掉了歷史驗證的問題,但還有另一個問題:誰有權利往區塊鏈上新增新的塊?如果有惡意節點將“A給C一個比特幣”改成了“A給B一個比特幣”,其他節點應該怎麼區分?答案和之前一樣:“它並不能區分。”但是不要忘了,我們假設網路中的好人是佔大多數的。在大家的計算能力差不多的情況下,這等同於假設網路中的好人們擁有更多的計算力資源。也就是說,如果我們把“往區塊鏈上增加區塊”這件事變成一件需要大量計算的工作,那麼擁有更多計算力資源的好人們就能搶在壞人之前加入新區塊。而這個計算量巨大的工作,仍然是hash。所有的節點會達成一個共識:“只接受hash值前幾位符合條件的區塊”(比如只接收hash值第一位是0的區塊)。節點可以透過改動區塊中的padding來湊hash值。只要hash演算法是安全的,節點就沒辦法高效的湊對hash值,只能暴力嘗試所有的padding來碰運氣。運氣好湊上了的節點,還可以在區塊中增加一條給自己一個比特幣的交易記錄作為對自己的獎勵。這個策略還很適合於控制新區塊出現的速度(比特幣需要在計算力變動的情況下維持勻速增長),只要增強對hash值的要求(比如原先要求第一位是0,現在要求頭兩位都是0),就能減慢區塊鏈增長的速度。區塊鏈的設計目標和工作原理大概是這樣。如果有講的不清楚的地方,或是有錯漏的地方,歡迎在評論中指出。 

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;