區塊鏈相關名詞解釋(一)

區塊鏈阿特拉斯發表於2018-08-15

前言

此篇主要是一些知識點的講解,大部分來源於維基百科和前人總結。

圖靈完備

圖靈機

首先要理解圖靈完備就要了解圖靈機。以下解釋摘自維基百科:

圖靈機(英語:Turing machine),又稱確定型圖靈機,是英國數學家艾倫·圖靈於1936年提出的一種抽象計算模型,其更抽象的意義為一種數學邏輯機,可以看作等價於任何有限邏輯數學過程的終極強大邏輯機器。

圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程,他把這樣的過程看作下列兩種簡單的動作:

  • 在紙上寫上或擦除某個符號;
  • 把注意力從紙的一個位置移動到另一個位置;

而在每個階段,人要決定下一步的動作,依賴於(a)此人當前所關注的紙上某個位置的符號和(b)此人當前思維的狀態。

為了模擬人的這種運算過程,圖靈構造出一臺假想的機器,該機器由以下幾個部分組成:

  1. 一條無限長的紙帶TAPE。紙帶被劃分為一個接一個的小格子,每個格子上包含一個來自有限字母表的符號,字母表中有一個特殊的符號(blank)表示空白。紙帶上的格子從左到右依次被編號為0, 1, 2, ...,紙帶的右端可以無限伸展。
  2. 一個讀寫頭HEAD。該讀寫頭可以在紙帶上左右移動,它能讀出當前所指的格子上的符號,並能改變當前格子上的符號。
  3. 一套控制規則TABLE。它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作,並改變狀態暫存器的值,令機器進入一個新的狀態,按照以下順序告知圖靈機命令:
    1. 寫入(替換)或擦出當前符號;
    2. 移動 HEAD, 'L'向左, 'R'向右或者'N'不移動;
    3. 保持當前狀態或者轉到另一狀態
  4. 一個狀態暫存器。它用來儲存圖靈機當前所處的狀態。圖靈機的所有可能狀態的數目是有限的,並且有一個特殊的狀態,稱為停機狀態。

什麼是圖靈完備

簡單判定圖靈完備的方法就是看該語言能否模擬出圖靈機。簡單的說就是一切可計算的問題都能計算,就稱為圖靈完備。

圖靈完備性是針對一套資料操作規則而言的概念。資料操作規則可以是一門程式語言,也可以是計算機裡具體實現了的指令集。當這套規則可以實現圖靈機模型裡的全部功能時,就稱它具有圖靈完備性。

圖靈不完備的語言常見原因有迴圈或遞迴受限(無法寫不終止的程式,如 while(true){}; ), 無法實現類似陣列或列表這樣的資料結構(不能模擬紙帶)。這會使能寫的程式有限。

BTC和ETH

兩者的核心區別就在於ETH指令碼是圖靈完備的,而BTC不是。比特幣指令碼語言不是圖靈完備的,具有一定的侷限性,它沒有迴圈語句和複雜的條件控制語句。由於語言存在這種侷限性,我們也就沒辦法使用這種語言寫一些死迴圈或者一些能夠導致DOS攻擊的惡意程式碼,從而也就避免了比特幣網路受到DOS攻擊。每一個全節點,都會對交易進行驗證。具有這種侷限性的指令碼語言,使人們無法把這種驗證機制看成一個攻擊比特幣網路的缺陷。

這導致了在BTC僅能滿足簡單的金融類合約,如建立token,建立多重簽名錢包等;而ETH是圖靈完備的,理論上可以用來編寫一切現代計算機語言能編寫的程式,這也為其發展去中心化應用及智慧合約奠定了良好的基礎。

共識演算法

POW:Proof of Work,工作證明。

比特幣在Block的生成過程中使用了POW機制,一個符合要求的Block Hash由N個前導零構成,零的個數取決於網路的難度值。要得到合理的Block Hash需要經過大量嘗試計算,計算時間取決於機器的雜湊運算速度。當某個節點提供出一個合理的Block Hash值,說明該節點確實經過了大量的嘗試計算,當然,並不能得出計算次數的絕對值,因為尋找合理hash是一個概率事件。當節點擁有佔全網n%的算力時,該節點即有n/100的概率找到Block Hash。

打個比方得到這個合理的hash相當於擲骰子,這個骰子有無所多個面,然後大家都瘋狂的擲骰子,當擲出的值小於某個數時,即表示你贏得了勝利。而擲骰子是一個概率事件,所以大家比拼的就是誰擲的次數多,誰中的概率也大。也就是在單位時間內大家一共擲了100次,而你擲了n次,那你中的概率就是n/100。

POS:Proof of Stake,股權證明

POS:也稱股權證明,類似於財產儲存在銀行,這種模式會根據你持有數字貨幣的量和時間,分配給你相應的利息。 簡單來說,就是一個根據你持有貨幣的量和時間,給你發利息的一個制度,在股權證明POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000,這個時候,如果你發現了一個POS區塊,你的幣齡就會被清空為0。你每被清空365幣齡,你將會從區塊中獲得0.05個幣的利息(假定利息可理解為年利率5%),那麼在這個案例中,利息 = 3000 * 5% / 365 = 0.41個幣,這下就很有意思了,持幣有利息。

DPOS:Delegated Proof of Stake,委任權益證明

位元股的DPoS機制,中文名叫做股份授權證明機制(又稱受託人機制),它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的。從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網路會選出新的超級節點來取代他們。DPOS的出現最主要還是因為礦機的產生,大量的算力在不瞭解也不關心比特幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容。

拜占庭容錯

拜占庭將軍問題(Byzantine Generals Problem),是由萊斯利·蘭波特在其同名論文中提出的分散式對等網路通訊容錯問題。

在分散式計算中,不同的計算機通過通訊交換資訊達成共識而按照同一套協作策略行動。但有時候,系統中的成員計算機可能出錯而傳送錯誤的資訊,用於傳遞資訊的通訊網路也可能導致資訊損壞,使得網路中不同的成員關於全體協作的策略得出不同結論,從而破壞系統一致性。拜占庭將軍問題被認為是容錯性問題中最難的問題型別之一。

拜占庭將軍問故事描述如下:

一組拜占庭將軍分別各率領一支軍隊共同圍困一座城市。為了簡化問題,將各支軍隊的行動策略限定為進攻或撤離兩種。因為部分軍隊進攻部分軍隊撤離可能會造成災難性後果,因此各位將軍必須通過投票來達成一致策略,即所有軍隊一起進攻或所有軍隊一起撤離。因為各位將軍分處城市不同方向,他們只能通過信使互相聯絡。在投票過程中每位將軍都將自己投票給進攻還是撤退的資訊通過信使分別通知其他所有將軍,這樣一來每位將軍根據自己的投票和其他所有將軍送來的資訊就可以知道共同的投票結果而決定行動策略。

系統的問題在於,將軍中可能出現叛徒,他們不僅可能向較為糟糕的策略投票,還可能選擇性地傳送投票資訊。假設有9位將軍投票,其中1名叛徒。8名忠誠的將軍中出現了4人投進攻,4人投撤離的情況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離。這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發起進攻;而在4名投撤離的將軍看來則是5人投撤離。這樣各支軍隊的一致協同就遭到了破壞。

由於將軍之間需要通過信使通訊,叛變將軍可能通過偽造信件來以其他將軍的身份傳送假投票。而即使在保證所有將軍忠誠的情況下,也不能排除信使被敵人截殺,甚至被敵人間諜替換等情況。因此很難通過保證人員可靠性及通訊可靠性來解決問題。

假始那些忠誠(或是沒有出錯)的將軍仍然能通過多數決定來決定他們的戰略,便稱達到了拜占庭容錯。在此,票都會有一個預設值,若訊息(票)沒有被收到,則使用此預設值來投票。

上述的故事對映到計算機系統裡,將軍便成了計算機,而信差就是通訊系統。雖然上述的問題涉及了電子化的決策支援與資訊保安,卻沒辦法單純的用密碼學與數字簽名來解決。因為不正常的電壓仍可能影響整個加密過程,這不是密碼學與數字簽名演算法在解決的問題。因此計算機就有可能將錯誤的結果提交去,亦可能導致錯誤的決策。

而區塊鏈想解決的就是這個問題,但是並沒有真正意義上解決拜占庭問題,只是藉助密碼學、POW共識等技巧在每個參與者 足夠理性、想讓自己利益最大化、並且掌握算力不到 50% 的情況下,依概率收斂到達到一個共識。如果某人想要傳遞錯誤的資訊,就需要掌握超過50%的算力,這樣很可能就會得不償失。

就比如那個叛變的將軍需要給其他將軍抵押100萬兩金子,人家才相信你,但是你叛變成功只能得到80萬兩金子,就算叛變成功也要損失20萬兩金子,那這個將軍也就不會叛變了。當然也不排除人家不要利益,就想叛變玩玩的情況,所以說BTC裡的區塊鏈機制只是基於經濟學上解決了一個拜占庭將軍問題。

參考

什麼是圖靈完備

[區塊鏈]共識演算法

相關文章