可以在不執行完整網路節點的情況下驗證支付。使用者只需要儲存最長的工作證明鏈的塊頭副本,他可以透過查詢網路節點獲得這個副本,直到他確信自己擁有最長的鏈,並獲得將事務連結到它所標記塊的Merkle分支。他不能自己檢查事務,但是透過將其連結到鏈中的某個位置,他可以看到一個網路節點已經接受了它,並在它進一步確認網路已經接受它之後新增塊。
因此,只要誠實的節點控制網路,驗證是可靠的,但是如果網路被攻擊者制服,驗證就更容易受到攻擊。雖然網路節點可以自己驗證事務,但是隻要攻擊者能夠繼續控制網路,簡化的方法就會被攻擊者編造的事務所欺騙。防止這種情況發生的一種策略是,當網路節點檢測到無效的塊時,接受來自網路節點的警報,提示使用者的軟體下載整個塊,並提醒事務確認不一致性。經常收到付款的企業可能仍然希望執行自己的節點,以獲得更獨立的安全性和更快的驗證。
如果大部分CPU功率合謀說謊,那麼網路顯然不再安全。如果使用51%的攻擊,那麼這個簡單的方法將很容易被愚弄,人們將希望擁有完整的區塊鏈。
隱私
一個典型的模型是,身份與透過受信任的第三方然後在交易對手處結束的交易相關聯。在這個模型中,網路的其他部分不知道雙方之間進行的某些交易。
在比特幣協議模型中,身份是一個單獨的部分,交易以分類賬的形式透過公眾進行。
作為一個額外的防火牆,應該為每個事務使用一個新的金鑰對,以防止它們連結到一個公共所有者。但是,存在這樣一種風險:如果金鑰的所有者被公開,連結可能會顯示屬於同一所有者的其他事務。
使用區塊鏈
區塊鏈提供了可公開編寫的全域性僅追加日誌。參與區塊鏈網路的節點遵循塊頭協議來決定哪個節點可以編寫下一個塊並收取特定的事務費。在每一輪的領導人選舉中,只有一個節點可以寫入一個塊。區塊鏈中的節點維護它的完整和更新版本。獨立驗證和新增到區塊鏈的挖掘過程包括執行計算密集型軟體來解決複雜的數學問題,這種困難被稱為“工作證明”(proof-of-work, POW)。POW基於加密雜湊函式。為了使塊可以接受,它的頭雜湊必須在前面加上一定數量的0,其中雜湊是時間段內所有事務的Merkle根、前一個塊和nonce的組合。 Merkle根是透過雜湊值資料、將結果與另一對資料配對並再次將所有事務資料都包含在最後一個雜湊中而形成的。礦工搜尋' nonce ',它的字首塊頭有足夠的0來滿足POW條件。一旦POW被解決,新的塊將透過網路傳輸。然而,在使用區塊鏈構建系統時存在一些挑戰,比如資料儲存的限制、寫入速度慢、頻寬有限等。
雜湊函式是將任意大小的輸入資料轉換為固定大小的輸出資料。數字簽名是公鑰密碼學(也稱為非對稱密碼學)的派生,公鑰密碼學使用兩個不同但在數學上相連的金鑰,一個是私有的(這是秘密的),另一個是公共的(與他人共享的)。
程式碼
要深入理解區塊鏈技術,我們需要通讀實現它的程式碼。
區塊鏈的基本概念非常簡單:一個分散式資料庫,它維護一個不斷增長的有序記錄列表。比特幣和以太坊等流行的區塊鏈專案就是這種情況。術語“區塊鏈”通常與事務、智慧合約或加密貨幣等概念緊密相關。
這使得理解區塊鏈成為一項困難的任務。尤其是source-code-wisely。在這裡,我將介紹一個超級簡單的區塊鏈,它是我用200行Javascript實現的,名為NaiveChain。
塊結構
第一個邏輯步驟是決定塊結構。為了使事情儘可能簡單,我們只包括最必要的:索引、時間戳、資料、雜湊和以前的雜湊值。
塊雜湊
塊需要雜湊值以保持資料的完整性。SHA-256接管塊的內容。應該注意的是,這個雜湊值與“挖掘”無關,因為沒有要解決的工作問題。
生成一個塊
要生成一個塊,我們必須知道前一個塊的雜湊值,並建立所需內容的其餘部分(=索引、雜湊值、資料和時間戳)。塊資料是由終端使用者提供的。
儲存塊
記憶體中的Javascript陣列用於儲存區塊鏈。區塊鏈的第一個塊總是所謂的“起源快”,它是硬編碼的。
驗證塊的完整性
在任何給定的時間,我們必須能夠驗證一個在完整性方面是否有效。尤其是當我們從其他節點接收新塊並必須決定是否接受它們時,更是如此。
選擇最長的鏈
在給定的時間內,鏈中應該始終只有一個顯式的塊集。在發生衝突的情況下(例如兩個節點都生成72個塊),我們選擇塊數最長的鏈。
與其他節點通訊
節點的一個重要部分是與其他節點共享和同步區塊鏈。以下規則用於保持網路同步。
· 當一個節點生成一個新的塊時,它向網路廣播它
· 當節點連線到新的對等點時,它查詢最新的塊
· 當節點遇到一個索引大於當前已知塊的塊時,它要麼將該塊新增到當前鏈中,要麼查詢完整的區塊鏈。
不使用自動對等發現。必須手動新增對等點的位置(= url)。
控制節點
使用者必須能夠以某種方式控制節點。這是透過設定HTTP伺服器來完成的。
與其他節點通訊
節點的一個重要部分是與其他節點共享和同步區塊鏈。以下規則用於保持網路同步。
· 當一個節點生成一個新的塊時,它向網路廣播它
· 當節點連線到新的對等點時,它查詢最新的塊
· 當節點遇到一個索引大於當前已知塊的塊時,它要麼將該塊新增到當前鏈中,要麼查詢完整的區塊鏈。
不使用自動對等發現。必須手動新增對等點的位置(= url)。
控制節點
使用者必須能夠以某種方式控制節點。這是透過設定HTTP伺服器來完成的。
可以看出,使用者可以透過以下方式與節點進行互動:
列出所有塊
使用使用者提供的內容建立一個新塊
列表或新增對等點
最直接的控制節點的方法是使用Curl:
從節點獲取所有塊
curl http://localhost: 3001 /塊
體系結構
應該注意的是,節點實際上公開了兩個web伺服器:一個用於使用者控制節點(HTTP伺服器),另一個用於節點之間的對等通訊(Websocket HTTP伺服器)。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news