0
雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 Let's Build the Tiniest Blockchain,作者為 Gerald Nash 。
翻譯 | Lamaric 校對 | 余杭 整理 | MY
雖然有些人認為區(qū)塊鏈是等待問題的解決方案,但毫無疑問,這種新技術是計算的奇跡。 但是,區(qū)塊鏈究竟是什么?
區(qū)塊鏈
區(qū)塊鏈按時間順序記錄以比特幣或其他加密貨幣進行的交易并公開的數字賬本。
更一般地說,它是一個公共數據庫,其中新數據存儲在稱為區(qū)塊的容器中,并且被添加到過去添加了數據的不可變鏈(因此是區(qū)塊鏈)中。在比特幣和其他加密貨幣的情況下,這些數據是交易組。但是,數據可以是任何類型。
區(qū)塊鏈技術產生了新的不是由中央機構發(fā)行或管理的全數字貨幣,如比特幣和萊特幣。這為那些認為今天的銀行系統(tǒng)是騙局或遭遇失敗的個人帶來了新的自由。區(qū)塊鏈還以像以太坊這樣的技術形式徹底改變了分布式計算,并引入了智能合約等有趣的概念。
在本文中,我將用不到 50 行的 Python 2 代碼創(chuàng)建一個簡單的區(qū)塊鏈。它被稱為 SnakeCoin。
我們首先要定義區(qū)塊。在區(qū)塊鏈中,每個區(qū)塊都存儲時間戳和可選的索引。在 SnakeCoin 中,我們要同時存儲這兩部分。為了幫助確保整個區(qū)塊鏈的完整性,每個區(qū)塊都具有自我識別哈希。和比特幣一樣,每個區(qū)塊的哈希是區(qū)塊索引,時間戳,數據的加密哈希,和先前區(qū)塊的哈希散列。數據可以是想要的任何東西。
真棒!有了區(qū)塊結構,接下來是創(chuàng)建區(qū)塊鏈。我們需要開始向實際鏈添加區(qū)塊。正如我之前提到的,每個區(qū)塊都需要來自前一個區(qū)塊的信息。但話雖如此,出現(xiàn)了一個問題:如何創(chuàng)造第一個區(qū)塊?第一個區(qū)塊,或稱為創(chuàng)世區(qū)塊,它是一個特殊塊。在許多情況下,它是手動添加的,或者具有允許添加的獨特邏輯。
我們將創(chuàng)建一個函數,它只返回一個生成區(qū)塊以簡化操作。此區(qū)塊的索引為 0,并且它的參數為前一個哈希的任意值。
既然我們能夠創(chuàng)建一個創(chuàng)世區(qū)塊,我們需要一個能夠在區(qū)塊鏈中生成后續(xù)塊的函數。此函數將鏈中的前一個塊作為參數,為要生成的塊創(chuàng)建數據,并使用適當的數據返回新區(qū)塊。當新區(qū)塊哈希來自前一區(qū)塊的信息時,區(qū)塊鏈的完整性隨著每個新塊而增加。如果我們不這樣做,那么外界會更容易“改變過去”,并用他們自己的全新鏈替換我們的鏈。此哈希鏈充當加密證明,有助于確保一旦塊添加到區(qū)塊鏈中,就無法替換或刪除。
這是主要的難點工作。現(xiàn)在,我們可以創(chuàng)建我們的區(qū)塊鏈!在我們的例子中,區(qū)塊鏈本身就是一個簡單的 Python 列表。列表的第一個元素是創(chuàng)世塊。當然,我們需要添加后續(xù)塊。由于 SnakeCoin 是最小的區(qū)塊鏈,我們將只增加 20 個新區(qū)塊。我們可以用一個 for 循環(huán)做到這一點。
讓我們來檢驗一下我們迄今所取得的工作成效!
別擔心,它會上升到 20
漂亮!我們的區(qū)塊鏈是成功的。如果你想在控制臺中看到更多的信息,您可以編輯完整的源文件去打印每個塊的時間戳或數據。
......
想要繼續(xù)閱讀,請移步至我們的AI研習社社區(qū):http://www.gair.link/page/TextTranslation/835
更多精彩內容盡在 AI 研習社。
不同領域包括計算機視覺,語音語義,區(qū)塊鏈,自動駕駛,數據挖掘,智能控制,編程語言等每日更新。
雷鋒網(公眾號:雷鋒網)
雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。