作者認(rèn)為最快的學(xué)習(xí)區(qū)塊鏈的方式是自己創(chuàng)建一個(gè),本文就跟隨作者用Python來(lái)創(chuàng)建一個(gè)區(qū)塊鏈。
對(duì)數(shù)字貨幣的崛起感到新奇的我們,并且想知道其背后的技術(shù)——區(qū)塊鏈?zhǔn)窃鯓訉?shí)現(xiàn)的。
但是完全搞懂區(qū)塊鏈并非易事,我喜歡在實(shí)踐中學(xué)習(xí),通過(guò)寫代碼來(lái)學(xué)習(xí)技術(shù)會(huì)掌握得更牢固。通過(guò)構(gòu)建一個(gè)區(qū)塊鏈可以加深對(duì)區(qū)塊鏈的理解。
準(zhǔn)備工作
本文要求讀者對(duì)Python有基本的理解,能讀寫基本的Python,并且需要對(duì)HTTP請(qǐng)求有基本的了解。
我們知道區(qū)塊鏈?zhǔn)怯蓞^(qū)塊的記錄構(gòu)成的不可變、有序的鏈結(jié)構(gòu),記錄可以是交易、文件或任何你想要的數(shù)據(jù),重要的是它們是通過(guò)哈希值(hashes)鏈接起來(lái)的。
如果你還不是很了解哈希,可以查看這篇文章
環(huán)境準(zhǔn)備
環(huán)境準(zhǔn)備,確保已經(jīng)安裝Python3.6+, pip , Flask, requests
安裝方法:
pip install Flask==0.12.2 requests==2.18.4
同時(shí)還需要一個(gè)HTTP客戶端,比如Postman,cURL或其它客戶端。
參考源代碼(原代碼在我翻譯的時(shí)候,無(wú)法運(yùn)行,我fork了一份,修復(fù)了其中的錯(cuò)誤,并添加了翻譯,感謝star)
開始創(chuàng)建Blockchain
新建一個(gè)文件 blockchain.py,本文所有的代碼都寫在這一個(gè)文件中,可以隨時(shí)參考源代碼
Blockchain類
首先創(chuàng)建一個(gè)Blockchain類,在構(gòu)造函數(shù)中創(chuàng)建了兩個(gè)列表,一個(gè)用于儲(chǔ)存區(qū)塊鏈,一個(gè)用于儲(chǔ)存交易。
以下是Blockchain類的框架:
class Blockchain(object): def __init__(self): self.chain = [] self.current_transactions = [] def new_block(self): # Creates a new Block and adds it to the chain pass def new_transaction(self): # Adds a new transaction to the list of transactions pass @staticmethod def hash(block): # Hashes a Block pass @property def last_block(self): # Returns the last Block in the chain pass
Blockchain類用來(lái)管理鏈條,它能存儲(chǔ)交易,加入新塊等,下面我們來(lái)進(jìn)一步完善這些方法。
塊結(jié)構(gòu)
每個(gè)區(qū)塊包含屬性:索引(index),Unix時(shí)間戳(timestamp),交易列表(transactions),工作量證明(稍后解釋)以及前一個(gè)區(qū)塊的Hash值。
以下是一個(gè)區(qū)塊的結(jié)構(gòu):
block = { 'index': 1, 'timestamp': 1506057125.900785, 'transactions': [ { 'sender': "8527147fe1f5426f9dd545de4b27ee00", 'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f", 'amount': 5, } ], 'proof': 324984774000, 'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"}到這里,區(qū)塊鏈的概念就清楚了,每個(gè)新的區(qū)塊都包含上一個(gè)區(qū)塊的Hash,這是關(guān)鍵的一點(diǎn),它保障了區(qū)塊鏈不可變性。如果攻擊者破壞了前面的某個(gè)區(qū)塊,那么后面所有區(qū)塊的Hash都會(huì)變得不正確。不理解的話,慢慢消化,可參考{% post_link whatbc 區(qū)塊鏈技術(shù)原理 %}
新聞熱點(diǎn)
疑難解答
圖片精選