NO IMAGE

1. 區塊鏈簡介

區塊鏈是一種共享的分散式資料庫技術,具備共識的四個特性: 去中心化(Decentralized)、去信任(Trustless)、集體維護(Collectively maintain)、可靠資料庫(Reliable Database)。 簡單可以把區塊鏈理解為是一種完整的、不可篡改的、多方參與和監督的記錄方式。

去中心化:整個網路沒有中心化的硬體或者管理機構,任意節點之間的權利和義務都是均等的,且任意節點的損壞或者失去都會不影響整個系統的運作。 

去信任:參與整個系統中的每個節點之間進行資料交換是無須互相信任的,整個系統的運作規則是公開透明的,所有的資料內容也是公開的。 

集體維護:系統中的資料塊由整個系統中所有具有維護功能的節點來共同維護的,而這些具有維護功能的節點是任何人都可以參與的。 

可靠資料庫:整個系統將通過分資料庫的形式,讓每個參與節點都能獲得一份完整資料庫的拷貝。除非能夠同時控制整個系統中超過51%的節點,否則單個節點上對資料庫的修改是無效的,也無法影響其他節點上的資料內容。 

關鍵的創新是通過具有時間戳(Timestamp)的雜湊鏈和工作量證明(Proof of Work)機制解決雙重支付(Double Spending)和拜占庭將軍問題(Byzantine Generals’Problem)–容錯計算問題, 即保證同一筆比特幣不會同時出現在兩個地址,並且在通道可靠的基礎上,所有節點都可以讓其它節點接收到自己的真實意圖, 並最終一致行動。區塊鏈技術和思想的引入,可以讓所有機構公平參與,中心平臺的操作也變為透明和可監督,成為隨時可監督、可拋棄、可替換的服務者,每個參與者也可自成中心,讓原來的強中心變成弱中心

1. 區塊鏈提供了一種新型的社會信任機制,為數字經濟的發展奠定了新基石,標誌著人類開始構建真正的信任網際網路。

2. 區塊鏈到底是一種怎樣技術呢?根據《中國區塊鏈白皮書》的定義,狹義的區塊鏈是指“按照時間順序將資料區塊以順序相連的方式組合成的一種鏈式資料結構,並以密碼學方式保證的不可篡改和偽造的分散式賬本”。廣義的區塊鏈是指“利用塊鏈式資料結構來驗證與儲存資料、利用分散式節點共識演算法來生成和更新資料、利用密碼學的方式保證資料傳輸和訪問的安全、利用自動化指令碼程式碼組成的智慧合約來程式設計和運算元據的一種全新的分散式基礎架構與計算正規化。

3. 區塊鏈以其技術公開、不可篡改的屬性,為去中心化的信任機制提供了基礎,並通過分散式儲存與全網驗證保證安全性,解決了價值網際網路的核心問題,即去中心、安全以及信任三大痛點。

2. 雙重支付問題解決方案思想:

最長鏈原則

3. UTXO

4. 共識機制:

共識機制是區塊鏈節點就區塊資訊達成全網一致共識的機制,可以保證最新區塊被準確新增至區塊鏈、節點儲存的區塊鏈新一致不分叉甚至可以抵禦惡意攻擊;當前主流的共識機制包括:工作量證明、權益證明、工作量證明與權益證明混合、股份授權證明、瑞波共識協議等。

5. 智慧合約:

智慧合約是一套以數字形式定義的承諾,承諾控制著數字資產幷包含了合約參與者約定的權利和義務,由計算機系統自動執行。智慧合約機制,以程式代替合同,約定條件一旦達成,網路自動執行合約。

6. 比特幣發行規則:

發行有嚴格的既定規則,任何人都沒有權利修改這些規則,進行規則外的增發。

7. 比特幣價值由來:

獲得比特幣是需要成本的,這個成本主要包括購買礦機的成本和執行礦機的成本,這些成本的存在一定程度上“賦予”了比特幣某種價值;從經濟學角度看,決定價格的並非成本,而應該是市場供需關係。

8.區塊鏈節點資料一致性保障:

是通過點對點網路的共享儲存和不停的訊息傳遞,實時同步各自的賬本從而實現資料一致性。

9.存在性證明:

使用者可以把自身創作的作品、專利的資料指紋(摘要)通過“存在性證明”網站記錄到比特幣區塊鏈上;當未來發生版權糾紛時,使用者通過展示區塊鏈上的資料指紋,證明自己早在某某時間就已經擁有該份檔案;如果對方無法提供更早的證明,再結合其他憑證,就很容易推定你是該智慧財產權的創作者。

10. 零知識有條件付款:

10.1 零知識證明:

設H()是一個複雜的計算機程式,對於H(X)=Y,給定一些特定的Y,你能推匯出符合條件的X。就是對於給定的輸出,你知道對應的輸入是什麼。

10.2 零知識有條件付款:

構造一個計算機程式,程式的內容是這樣的:

Program(K,Ex,H()) =>  [Ex,Hk,Y]{

        Hk=SHA256(K);

        Y=H(UNAES(Ex,K));

        return [Ex,Hk,Y];

}

捕捉該程式,命名為P()。

將程式P()轉換成零知識證明。

零知識證明的效果是:

證明我掌握著特定輸入K,Ex,H(),它進入程式P()之後會得到輸出Ex,Hk,Y。

—– 別人給出輸出Ex,Hk,Y,就可以找到對應的輸入K,Ex,H()

並且在證明過程中,K、Ex不會暴露。

——————

此處的零知識證明,不是證明我有輸入X,可以得到輸出Y,

而是證明我有輸入K,Ex,可以得到輸出Ex,Hk,Y。

這就證明了我的Ex解密之後確實是是H()=Y的解,而不是瞎編的。

待解的問題H(),是P()的子程式。

對H(X)==Y的證明已經包含在對P()的零知識證明之中。

——————

有問題H()=Y,需要特解X,我想出售X。

但我不能直接告訴買家X,以免買家不給我錢;

買家也不能直接給我錢,以免我不告訴買家X。

所以我用K加密X得到Ex、雜湊K得到Hk,將Ex和Hk告訴買家,

現在買家需要驗證我是否有Ex和K滿足Y==H(UNAES(Ex,K))。

我構建了程式P(K,Ex,H())=>[Ex,Hk,Y]並將其轉換為零知識證明,期間我的K始終處於保密狀態。

買家得到證明之後,確認收到的Ex、Hk無誤,然後他可以構造指令碼(比特幣合同,驗證Hk):

當我廣播這個合同指令碼,外加一個K滿足SHA256(K)==Hk時候,交易成功,我收到錢,而買家用我廣播的K解開Ex,得到X,一手交錢一手交貨。

參考:

https://blog.csdn.net/lucky_greenegg/article/details/52821924