home > theory > network >

區塊鏈技術原理、發展歷史根由、應用場景

author:zhoulujun date:2017-12-13 18:01:00

而有關區塊鏈技術及歷史以及發展情況的的介紹,在各個區塊鏈平臺的社區是有詳細資料的,針對這些資料的總結,以及抽象出一共些共通概念。列舉大綱,概況性復習。資料鏈接拓展閱讀。

記賬技術歷史悠久,現代復式記賬系統(Double Entry Bookkeeping)是由意大利數學家盧卡·帕西奧利,1494年在《Summa de arithmetica, geometrica, proportioni et proportionalità》 一書中最早制定。復式記賬法的基石是資產負債表等式,又稱為會計恒等式。

即任何一項經濟業務的發生,都會引起資產和負債的至少兩個項目發生增減變動,而且增減的金額相等

復式記賬法對每一筆賬目同時記錄來源和去向,首次將對賬驗證功能引入記賬過程,提升了記賬的可靠性。

2.jpg點擊查看源網頁

從這個角度來看,區塊鏈是首個自帶對賬功能的數字記賬技術實現:在所有的交易都是通過一種有序的數據「塊」進行登記,這個記錄就被成為區塊鏈。區塊鏈是一個公共的分布式總賬!更確切的說應該叫分布式的冗余的鏈式總帳本方案。

  • 包含一個分布式數據庫

  • 分布式數據庫是區塊鏈的物理載體,區塊鏈是交易的邏輯載體,所有核心節點都應包含該條區塊鏈數據的全副本

  • 區塊鏈按時間序列化區塊,且區塊鏈是整個網絡交易數據的唯一主體

  • 區塊鏈只對添加有效,對其他操作無效

  • 基于非對稱加密的公私鑰驗證

  • 記賬節點要求拜占庭將軍問題可解/避免

  • 共識過程(consensus progress)是演化穩定的,即面對一定量的不同節點的矛盾數據不會崩潰。

  • 共識過程能夠解決double-spending問題

比特幣使用UXTO模型,以太坊和比特股使用賬戶余額模型(所謂賬戶模型是指賬戶記賬方法)。

UXTO模型(Unspent Transaction Outputs (UTXOs) ):此模型表達了一種轉移的概念,即任何產生的新幣,在以后的生命周期中,只有轉移,沒有消亡,轉移實質上是由加密算法的簽名與驗證控制的:

UXTO模型(Unspent Transaction Outputs (UTXOs) )

賬戶余額模型:賬戶余額模型摒棄了這種強驗證的賬戶模型,即賬戶余額回歸到數字加減,這樣做提升了交易的效率。

區塊鏈的定義

區塊鏈是由包含交易信息的區塊從后向前有序鏈接起來的數據結構。它可以被存儲為flat file(一種包含沒有相對關系記錄的文件),或是存儲在一個簡單數據庫中。

區塊被從后向前有序地鏈接在這個鏈條里,每個區塊都指向前一個區塊。區塊鏈經常被視為一個垂直的棧,第一個區塊作為棧底的首區塊,隨后每個區塊都被放置在其他區塊之上。用棧來形象化表示區塊依次堆疊這一概念后,我們便可以使用一些術語,例如:“高度”來表示區塊與首區塊之間的距離;以及“頂部”或“頂端”來表示最新添加的區塊。

對每個區塊頭進行SHA256加密哈希,可生成一個哈希值。通過這個哈希值,可以識別出區塊鏈中的對應區塊。同時,每一個區塊都可以通過其區塊頭的“父區塊哈希值”字段引用前一區塊(父區塊)。也就是說,每個區塊頭都包含它的父區塊哈希值這樣把每個區塊鏈接到各自父區塊的哈希值序列就創建了一條一直可以追溯到第一個區塊(創世區塊)的鏈條

雖然每個區塊只有一個父區塊,但可以暫時擁有多個子區塊。每個子區塊都將同一區塊作為其父區塊,并且在“父區塊哈希值”字段中具有相同的(父區塊)哈希值。一個區塊出現多個子區塊的情況被稱為“區塊鏈分叉”區塊鏈分叉只是暫時狀態,只有當多個不同區塊幾乎同時被不同的礦工發現時才會發生(參見“8.10.1 區塊鏈分叉”)。最終,只有一個子區塊會成為區塊鏈的一部分,同時解決了“區塊鏈分叉”的問題。盡管一個區塊可能會有不止一個子區塊,但每一區塊只有一個父區塊,這是因為一個區塊只有一個“父區塊哈希值”字段可以指向它的唯一父區塊

由于區塊頭里面包含“父區塊哈希值”字段,所以當前區塊的哈希值因此也受到該字段的影響。如果父區塊的身份標識發生變化,子區塊的身份標識也會跟著變化。當父區塊有任何改動時,父區塊的哈希值也發生變化。父區塊的哈希值發生改變將迫使子區塊的“父區塊哈希值”字段發生改變,從而又將導致子區塊的哈希值發生改變。而子區塊的哈希值發生改變又將迫使孫區塊的“父區塊哈希值”字段發生改變,又因此改變了孫區塊哈希值,等等以此類推。一旦一個區塊有很多代以后,這種瀑布效應將保證該區塊不會被改變,除非強制重新計算該區塊所有后續的區塊。正是因為這樣的重新計算需要耗費巨大的計算量,所以一個長區塊鏈的存在可以讓區塊鏈的歷史不可改變,這也是比特幣安全性的一個關鍵特征。

你可以把區塊鏈想象成地質構造中的地質層或者是冰川巖芯樣品。表層可能會隨著季節而變化,甚至在沉積之前就被風吹走了。但是越往深處,地質層就變得越穩定。到了幾百英尺深的地方,你看到的將是保存了數百萬年但依然保持歷史原狀的巖層。在區塊鏈里,最近的幾個區塊可能會由于區塊鏈分叉所引發的重新計算而被修改。最新的六個區塊就像幾英寸深的表土層。但是,超過這六塊后,區塊在區塊鏈中的位置越深,被改變的可能性就越小。在100個區塊以后,區塊鏈已經足夠穩定,這時Coinbase交易(包含新挖出的比特幣的交易)可以被支付。幾千個區塊(一個月)后的區塊鏈將變成確定的歷史,永遠不會改變。

區塊鏈解決了啥問題?

根本還是解決買賣間彼此不信任的問題,在不依賴傳統機構建立信任的情況下,成功完成一筆安全交易。

能夠提供一個可信任的環境,使

  1. 每個節點交換數據過程不被篡改;交換歷史記錄不可被篡改;

  2. 每個節點的數據會同步到最新數據,且承認經過共識的最新數據;

  3. 基于少數服從多數的原則,整體節點維護的數據本身客觀反映了交換歷史。

拜占庭將軍問題延伸到互聯網生活中來,其內涵可概括為:在互聯網大背景下,當需要與不熟悉的對手方進行價值交換活動時,人們如何才能防止不會被其中的惡意破壞者欺騙、迷惑從而做出錯誤的決策。進一步將拜占庭將軍問題延伸到技術領域中來,其內涵可概括為:在缺少可信任的中央節點和可信任的通道的情況下,分布在網絡中的各個節點應如何達成共識。區塊鏈技術解決了聞名已久的拜占庭將軍問題——它提供了一種無需信任單個節點、還能創建共識網絡的方法

  • 維護一條不斷增長的鏈,只可能添加記錄,而發生過的記錄都不可篡改;

  • 通過密碼學的機制來確保交易無法抵賴和破壞,并盡量保護用戶信息和記錄的隱私性

  • 所有的結點都有能力去用計算能力投票, 從而保證了得到承認的結果是大多數人公認的結果, 不會因為少數結點作惡,而修改結果

區塊鏈的核心技術理論是啥?

去中心化,或者說多中心化,無需集中的控制而能達成共識,實現上盡量分布式。

從這個角度上看,區塊鏈對于人類社會的意義在于,信任重新構建,而不依賴于中央銀行、企業

區塊鏈的優勢在于能夠用非常低的成本解決網絡交易的身份識別和個人征信,以及使用點對點的交易避免了傳統集中式的清算結構,從而能夠大大提高金融系統甚至整個經濟體系的運行效率

記賬貨幣可以記載賬務、價格以及一般購買力,是貨幣理論最基本的概念。從嚴格意義上說,貨幣只有在于記賬貨幣的關系中才能存在。——凱恩斯

比特幣只是記賬的表征,而區塊鏈就是其背后的一套由信用記錄以及信用記錄的清算構成的體系

信任,其實就是彼此相信對方不會做出傷害到我的欺詐和違約行為。信任的產生包含三個層面,一是對方沒有欺詐的動機;二是對方有欺詐的動機卻不敢或者不愿意真的去行動;三是對方不僅有動機,還真的去做出了欺詐行為,但由于各種原因,不會對我做出傷害。區塊鏈機制這個基礎協議便通過分布式的信用公正,使互不信任的節點進行大規模協作成為可能,這可以激發共享經濟和協同治理的巨大潛能。在這樣一個去中心化的經濟系統內部,在沒有任何可信第三方擔保的情況下,卻沒有發生過嚴重的欺詐行為,其主要原因在于,欺詐行為的成本往往遠大于預期的收益。

顯然,當欺詐的行為所要付出的成本遠大于其所能帶來的收益時,并且成本和收益都經過了精確的計算時,任何一個理性的參與者都不會有欺詐的動力

以區塊鏈為基礎,人們正在互聯網上建立起一套信用互聯網治理機制。包括:

  • 工作量證明(如果要篡改區塊鏈上的數據,需要擁有全網51%的算力,這會使得作偽的成本高于預期利益)

  • 互聯網共識機制(無需甄別好壞,以共識來確保正確)

  • 智能合約機制(以可以編譯的程序代替合同,網絡自動執行合約)

  • 互聯網透明機制(賬號全網公開而賬戶匿名)

  • 密碼學,非對稱加密和公私鑰等技術等

區塊鏈技術涉及的關鍵點包括:去中心化(Decentralized)、去信任(Trustless)、集體維護(Collectively maintain)、可靠數據庫(ReliableDatabase)、時間戳(Time stamp)、非對稱加密(AsymmetricCryptography)等。

區塊鏈最大特點是啥?

區塊鏈是將所有數據都存儲在每一個節點存儲。每個節點的數據一致性,區塊鏈是一個開放的數據庫,任何服務器都可以加入區塊鏈,并成為其中的一個節點,每個節點都保存著區塊鏈的全部數據,而且是相同的

如何保證全網交易數據客觀記錄并且不可篡改

,比特幣使用工作量證明PoW(Proof of Work),以太坊即將轉換為權益證明PoS(Proof of Stake),比特股使用授權權益證明DPoS(Delegated Proof of Stake)。

以上這些算法我稱之為“經濟學”的算法,所謂經濟學的算法,是指讓作弊成本可計算,且讓作弊成本往往遠大于作弊帶來的收益,即作弊無利可圖,通過這種思想構造一個用于節點之間博弈的算法,并使之趨向一個穩定的平衡

相對應的我們還有計算機領域的分布式一致性算法,例如Paxos、Raft,我也稱之為傳統分布式一致性算法。他們之間的最大區別是:

系統在拜占庭將軍(Byzantine Generals Problem)情景下的可靠性,即拜占庭容錯(PBFT算法支持拜占庭容錯)。然而無論是Paxos還是Raft算法,理論上都可能會進入無法表決通過的死循環(盡管這個概率其實是非常非常低的),但是他們都是滿足safety的,只是放松了liveness的要求, PBFT也是這樣。

下面是一些傳統分布式一致性算法和區塊鏈共識過程的異同點:

相同點:

  • Append only

  • 強調序列化

  • 少數服從多數原則

  • 分離覆蓋的問題:即長鏈覆蓋短鏈區塊,多節點覆蓋少數節點日志

不同點:

  • 傳統分布式一致性算法大多不考慮拜占庭容錯(Byzanetine Paxos除外),即假設所有節點只發生宕機、網絡故障等非人為問題,并不考慮惡意節點篡改數據的問題;

  • 傳統分布式一致性算法是面向日志(數據庫)的,即更通用的情況,而區塊鏈共識模型面向交易的,所以嚴格來說,傳統分布式一致性算法應該處于區塊鏈共識模型的下面一層。

如何確保每個節點數據一致的呢?

每個區塊就是一個哈希值,哈希就是一串字母加數字,可以表示任何的事情。每個區塊鏈都需要記錄上一個區塊鏈、生成時間、以及本區塊鏈的一些信息。一旦一個區塊鏈被修改了,那么它自己的哈希值就變了,因為下一個區塊需要記錄上個區塊的哈希值,所以下一個區塊的哈希也需要變化,依次類推,也就是一個區塊鏈變了,全網都需要同步。所以每個節點都保存著完整的區塊鏈,所以做到了節點間的一致性。

基本原理

區塊鏈的基本原理理解起來并不難。基本概念包括:

交易(Transaction):一次操作,導致賬本狀態的一次改變,如添加一條記錄;

每一位電子貨幣所有者通過對前一次交易和貨幣接受者的公鑰(pubilc key)簽署一個hash數字簽名,然后發送給下一位所有者。(1)收款人使用付款人的公鑰(public key)校驗,是否是正確的付款人發送(2)由于交易中有收款人的公鑰,所以只有收款人使用自己的私鑰才能解鎖并將該貨幣傳遞下去

但以上過程仍然有問題,無法解決雙重支付問題,即貨幣所有者將同一電子貨幣簽名后發送給多個收款人。傳統金融:通過中介機構判斷并確認用戶是否進行雙重支付比特幣:通過公開宣布貨幣的所有交易,形成唯一公認的歷史交易序列,由系統內所有參與者認同交易個人點評:通過非對稱加密的公私鑰,可以解決虛擬貨幣的歸屬權問題,但是同一個貨幣可以由歸屬人付給多個人,也就是雙重支付,僅使用加密在貨幣體系里是不夠的。(這里其實隱含了貨幣體系必須要有人記賬)

時間戳服務器(Timestamp server)。對區塊形式存在的一組數據實施隨機散列(HASH)加上時間戳,將區塊連成一個鏈條,形成區塊鏈


工作量證明(Proof-of-Work)
計算一個隨機數(Nonce),將隨機數與區塊頭一起計算隨機散列值(Hash),該散列值要滿足以N個0開頭(N為變量,可通過N來控制計算難度,N越大,難度越大),此即為“挖礦”的內部原理。

工作量證明的用途:
(1)保證區塊鏈(Blockchain)的不可篡改性,由于區塊形成了鏈條,如果要修改區塊,必須重新完成之前所有的工作量,所以隨著區塊鏈高度越高,越舊的區塊越難以篡改。
(2)工作量證明的本質是一CPU一票(與傳統的一IP一票不同,攻擊者要獲得更多的票數需要投入大量的成本),如果大多數的CPU為誠實節點,那么正確的鏈條將以最快的速度延長。

模型能保證賬本的順序和真實性,但是無法阻止人為的創造多個賬本,而這些賬本中只能有一個是被大家認可的,所以必須創造一種共識機制。比特幣的共識機制即為工作量證明(POW),即工作量(Hash計算)最大的那個賬本是大家公認的正確賬本。

區塊(Block):記錄一段時間內發生的交易和狀態結果,是對當前賬本狀態的一次共識

鏈(Chain):由一個個區塊按照發生順序串聯而成,是整個狀態變化的日志記錄。

比特幣底層運行機制


區塊鏈架構層面

一個區塊鏈至少分為三層

  • 最底層是一些通用的基礎模塊,比如基礎加密算法,網絡通訊庫,流處理,線程封裝,消息封裝與解碼,系統時間等

  • 中間一層是區塊鏈的核心模塊,一般包含了區塊鏈的主要邏輯,如P2P網絡協議,共識模塊,交易處理模塊,交易池模塊,簡單合約或者智能合約模塊,嵌入式數據庫處理模塊,錢包模塊等等

  • 最上面一層,往往都是基于Json Standard RPC的交互模塊,基于Json-RPC,我們還可以做出更好的UI界面,也可以是一個web-service。如果區塊鏈 支持智能合約,可能還要分更多的層,比如增加BaaS層,區塊鏈上的智能合約提供自治的服務


客戶端整體的設計的一些通用的概念太坊的架構圖比特幣的設計

以上無論哪種設計,一般都要從P2P網絡協議作為切入,作為一個P2P錢包,既要提供Service也要提供Client,作為Service依賴P2P網絡協議,作為Client依賴Json-RPC。

編程實現

比特幣(協議層)就是用C++語言開發的,而且目前為止,沒有比比特幣更加成功的區塊鏈產品。比特幣官方客戶端錢包用的Qt,第三方錢包有Python語言開發的,特別是第三方整理的開發庫(Api包)很多是Nodejs設計的

個人覺得:區塊鏈作為大眾交易貨幣,困難點在于,

  • 交易速度慢

  • 雖然是區中心,但是現在算力中心化,以后就變成寡頭混戰了

  • 丟掉密鑰后,無法挽回損失

  • 違背宏觀經濟學,財富增加,貨幣等量增加(少了通縮,多了通脹).

參考鏈接:

對"復式記賬原理"的探討 fanwen.jianlimoban.net/625708/

中式簿記改良啟示 fanwen.jianlimoban.net/1044823/

https://www.zhihu.com/question/31112808/answer/350659756

https://www.zhihu.com/question/31112808/answer/309593837






轉載本站文章《區塊鏈技術原理、發展歷史根由、應用場景》,
請注明出處:http://www.qsexmk.tw/html/theory/network/2017_1213_8169.html