這是我在一個外文網(wǎng)站上看到的一篇博文,作者通過50行代碼寫出了區(qū)塊鏈的簡化版本.麻雀雖小,但是五臟俱全.我覺得通過實踐,這是了解區(qū)塊鏈的一個好的方式.于是我將代碼實現(xiàn)了下.并且通過這篇文章,說說我讀這個代碼的時候的思路.
在這串代碼里我們主要使用了兩個庫.這兩個庫都是python里邊自帶的,一個是hashlib,這個庫里邊提供了主要的摘要算法.比如MD5和SHA等.另外一個庫是datatime模塊.這個模塊是python里提供時間日期的模塊.在區(qū)塊鏈里邊,每個區(qū)塊都需要儲存一個時間戳(也就是當(dāng)前的時間)和一個索引.因此這個庫為我們提供了使用的工具.
1:初始化函數(shù)
首先我們定義區(qū)塊鏈的初始參數(shù),我們這里因為是最基本的區(qū)塊鏈,這里只包含我們需要的幾個參數(shù),但是這些參數(shù)是大部分區(qū)塊鏈所需要的.比如每個鏈的索引位置,時間數(shù)據(jù)以及哈希值.
2:加密函數(shù)
區(qū)塊鏈說到底就是產(chǎn)生一堆數(shù)值讓大家去計算,看誰算的快,而計算的時候我們需要的一個算法就是在這個加密函數(shù)里產(chǎn)生.
這里我們使用的是hashlib里邊的sha256加密,然后將其進(jìn)行更新,為了確保整個區(qū)塊鏈的完整性,每個區(qū)塊都會有一個自我識別的散列。和比特幣一樣,每個塊的散列將是塊的索引,時間戳,數(shù)據(jù)和前一個塊散列的散列的加密散列.然后我們?nèi)ナ褂胔exdigest返回一個16進(jìn)制的加密結(jié)果.
3:初始化函數(shù)
這個創(chuàng)建一個起源塊,起始的鏈的數(shù)目是0,這個應(yīng)該要注意一下.其他就是你想給定的參數(shù),具體傳遞的參數(shù)參照函數(shù)1.
4:后續(xù)函數(shù)
這個函數(shù)是為以后的區(qū)塊鏈產(chǎn)生做準(zhǔn)備,這里邊的規(guī)則是可以我們認(rèn)為給定的,所以我們現(xiàn)在看很多的山寨幣或者空氣幣光憑發(fā)行方的一口說法是不可信的,因為他們既做裁判有做莊家,一旦改變了規(guī)則,散戶被套牢的風(fēng)險極大.
5:調(diào)用函數(shù)區(qū)塊鏈本身就是一個簡單的Python列表。列表的第一個元素是創(chuàng)世區(qū)塊。當(dāng)然,我們需要添加后續(xù)的塊。由于這個例子是最小的區(qū)塊鏈,我們只會添加100個新區(qū)塊。我們可以用for循環(huán)來做到這一點。
接下來無非就是調(diào)用上邊的參數(shù),然后輸入你想要產(chǎn)生的塊鏈就可以.
6:運行結(jié)果
這就是這個小程序所提供的一切。如果想要讓這個規(guī)模達(dá)到當(dāng)今生產(chǎn)區(qū)塊鏈的規(guī)模,我們必須添加更多功能,如服務(wù)器層來追蹤多臺機器上鏈塊的變化,以及工作量驗證算法,以限制添加到給定的時間段。
如果你想了解更多地關(guān)于區(qū)塊鏈的技術(shù),可以查看原始比特幣白皮書。祝你好運!
新聞熱點
疑難解答
圖片精選