200 行 Javascript 代碼構造一個區塊鏈

雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 A blockchain in 200 lines of code,作者為 Lauri Hartikka。
翻譯 | 餘杭      校對 | 祁曉君     整理 | 凡江


區塊鏈的基礎概念是非常簡單的:一個有序遞增記錄列表的分佈式數據庫。然而,當我們在談論區塊鏈時很容易和用區塊鏈來解決問題的過程混淆。這在如今較流行的以區塊鏈為底層技術的項目,如比特幣以及以太坊中也會存在這樣的問題。「區塊鏈」這個概念經常會和以下幾個概念聯繫起來,比如交易智能合約,或者加密貨幣

這使得理解區塊鏈變得更加艱難,特別是從源代碼角度。在這篇文章中我會用 200 行的 Javascript 代碼構建一個簡單的區塊鏈, 叫做 NaiveChain

區塊構造

第一個邏輯上的步驟是決定區塊的構造。為了儘可能簡單,只包含了必要 的幾個部分:索引,時間戳,數據,哈希以及前一個區塊的哈希。

區塊中必須包含前一個區塊的哈希值來保證鏈的完整性。

2


區塊哈希

需要對區塊進行哈希運算來保持數據的完整性。對區塊內容進行 SHA-256 散列。這裡的哈希運算與挖礦毫無關聯,因為這裡不包含工作量證明問題。


生成一個區塊

為了生成一個區塊,我們必須知道前一個區塊的哈希值以及創建區塊內容要求的剩餘部分(即索引,哈希,數據,以及時間戳)。區塊數據由最後一個使用者提供。


存儲區塊

內存中的 Javascript  用來存儲區塊鏈。區塊鏈中的第一個區塊被稱作 「成因塊」,它是採用硬編碼編寫的。


驗證區塊的完整性

在任意一個時間點我們必須能夠驗證一個區塊或區塊鏈的數據完整性。特別是有其他節點的新區塊接入時需決定是否接受它們。


選擇最長鏈

無論在什麼時間點,都應該只有一條明確的區塊鏈。在有衝突的情況下,選擇最大數值區塊所在的那條鏈。


2

和其他節點溝通

節點的一個重要部分是與鏈上的其他節點共享信息並在鏈上同步。下面的規則是用來確保鏈上節點的同步。

  • 當一個節點生成一個新的區塊,會在網絡上進行廣播。

  • 當一個節點鏈接到一個新的點時,它會對最後一個區塊發起請求。

  • 當一個新的節點碰見一個區塊的索引大於當前已知區塊時,它會把這個區塊添加到當前鏈上或是向整個區塊鏈發起請求。

這是當節點遵循規定協議時的一些經典的通訊場景 

不使用自動對等探索。點的位置(即 URL) 必須被手動添加。


控制節點

2

從某種程度上說,用戶必須能夠控制他們的節點。這通過建立 HTTP 服務器來完成。

正如所見,用戶能夠通過以下方式與節點進行交互:

  • 列出所有的區塊

  • 創建一個新的區塊,區塊內容由用戶提供

  • 列出或是添加點

控制節點最直接了當的方法是通過 Curl :


架構


......

想要繼續閱讀,請移步至我們的AI研習社社區:https://club.leiphone.com/page/TextTranslation/834

更多精彩內容盡在 AI 研習社。

不同領域包括計算機視覺,語音語義,區塊鏈,自動駕駛,數據挖掘,智能控制,編程語言等每日更新。

雷鋒網雷鋒網(公眾號:雷鋒網)

2


想在手機閱讀更多Javascript資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems