0
本文作者: AI研習(xí)社-譯站 | 2018-08-27 10:06 |
雷鋒網(wǎng)按:本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 A blockchain in 200 lines of code,作者為 Lauri Hartikka。
翻譯 | 余杭 校對 | 祁曉君 整理 | 凡江
區(qū)塊鏈的基礎(chǔ)概念是非常簡單的:一個(gè)有序遞增記錄列表的分布式數(shù)據(jù)庫。然而,當(dāng)我們在談?wù)搮^(qū)塊鏈時(shí)很容易和用區(qū)塊鏈來解決問題的過程混淆。這在如今較流行的以區(qū)塊鏈為底層技術(shù)的項(xiàng)目,如比特幣以及以太坊中也會存在這樣的問題。“區(qū)塊鏈”這個(gè)概念經(jīng)常會和以下幾個(gè)概念聯(lián)系起來,比如交易,智能合約,或者加密貨幣。
這使得理解區(qū)塊鏈變得更加艱難,特別是從源代碼角度。在這篇文章中我會用 200 行的 Javascript 代碼構(gòu)建一個(gè)簡單的區(qū)塊鏈, 叫做 NaiveChain。
區(qū)塊構(gòu)造
第一個(gè)邏輯上的步驟是決定區(qū)塊的構(gòu)造。為了盡可能簡單,只包含了必要 的幾個(gè)部分:索引,時(shí)間戳,數(shù)據(jù),哈希以及前一個(gè)區(qū)塊的哈希。
區(qū)塊中必須包含前一個(gè)區(qū)塊的哈希值來保證鏈的完整性。
區(qū)塊哈希
需要對區(qū)塊進(jìn)行哈希運(yùn)算來保持?jǐn)?shù)據(jù)的完整性。對區(qū)塊內(nèi)容進(jìn)行 SHA-256 散列。這里的哈希運(yùn)算與挖礦毫無關(guān)聯(lián),因?yàn)檫@里不包含工作量證明問題。
生成一個(gè)區(qū)塊
為了生成一個(gè)區(qū)塊,我們必須知道前一個(gè)區(qū)塊的哈希值以及創(chuàng)建區(qū)塊內(nèi)容要求的剩余部分(即索引,哈希,數(shù)據(jù),以及時(shí)間戳)。區(qū)塊數(shù)據(jù)由最后一個(gè)使用者提供。
存儲區(qū)塊
內(nèi)存中的 Javascript 用來存儲區(qū)塊鏈。區(qū)塊鏈中的第一個(gè)區(qū)塊被稱作 “成因塊”,它是采用硬編碼編寫的。
驗(yàn)證區(qū)塊的完整性
在任意一個(gè)時(shí)間點(diǎn)我們必須能夠驗(yàn)證一個(gè)區(qū)塊或區(qū)塊鏈的數(shù)據(jù)完整性。特別是有其他節(jié)點(diǎn)的新區(qū)塊接入時(shí)需決定是否接受它們。
選擇最長鏈
無論在什么時(shí)間點(diǎn),都應(yīng)該只有一條明確的區(qū)塊鏈。在有沖突的情況下,選擇最大數(shù)值區(qū)塊所在的那條鏈。
和其他節(jié)點(diǎn)溝通
節(jié)點(diǎn)的一個(gè)重要部分是與鏈上的其他節(jié)點(diǎn)共享信息并在鏈上同步。下面的規(guī)則是用來確保鏈上節(jié)點(diǎn)的同步。
當(dāng)一個(gè)節(jié)點(diǎn)生成一個(gè)新的區(qū)塊,會在網(wǎng)絡(luò)上進(jìn)行廣播。
當(dāng)一個(gè)節(jié)點(diǎn)鏈接到一個(gè)新的點(diǎn)時(shí),它會對最后一個(gè)區(qū)塊發(fā)起請求。
當(dāng)一個(gè)新的節(jié)點(diǎn)碰見一個(gè)區(qū)塊的索引大于當(dāng)前已知區(qū)塊時(shí),它會把這個(gè)區(qū)塊添加到當(dāng)前鏈上或是向整個(gè)區(qū)塊鏈發(fā)起請求。
這是當(dāng)節(jié)點(diǎn)遵循規(guī)定協(xié)議時(shí)的一些經(jīng)典的通訊場景
不使用自動(dòng)對等探索。點(diǎn)的位置(即 URL) 必須被手動(dòng)添加。
控制節(jié)點(diǎn)
從某種程度上說,用戶必須能夠控制他們的節(jié)點(diǎn)。這通過建立 HTTP 服務(wù)器來完成。
正如所見,用戶能夠通過以下方式與節(jié)點(diǎn)進(jìn)行交互:
列出所有的區(qū)塊
創(chuàng)建一個(gè)新的區(qū)塊,區(qū)塊內(nèi)容由用戶提供
列出或是添加點(diǎn)
控制節(jié)點(diǎn)最直接了當(dāng)?shù)姆椒ㄊ峭ㄟ^ Curl :
架構(gòu)
......
想要繼續(xù)閱讀,請移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/834
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計(jì)算機(jī)視覺,語音語義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語言等每日更新。
雷鋒網(wǎng)雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。