譯者注:隨著比特幣的不斷發展,它的底層技術區塊鏈也逐步走進公眾視野,引起大眾注意。本文用不到50行的Python代碼構建最小的數據區塊鏈,簡單介紹了區塊鏈去中心化的結構與其實現原理。

盡管一些人認為區塊鏈是一個等待問題的解決方案,但毫無疑問,這種新技術是計算機的奇跡。但是,區塊鏈到底是什么呢?
區塊鏈
它是比特幣或其他加密貨幣進行交易的數字賬本,賬本按時間順序記錄并對外公開。
在更一般的術語中,它是一個公共數據庫,新數據存儲在一個名為塊的容器中,并被添加到一個不可變鏈(后來的區塊鏈)中添加了過去的數據。在比特幣和其他加密貨幣的情況下,這些數據是一組交易記錄。當然,數據可以是任何類型的。
區塊鏈技術已經催生了新的、完全數字化的貨幣,如比特幣和萊特幣,這些貨幣并不是由中央政府發行或管理的。因此為那些認為今天的銀行系統是騙局或終將失敗的人帶來了新的自由。區塊鏈所包含的以太坊技術對分布式計算進行了變革創新,它引入了一些有趣的概念,比如智能合約。
在本文中,我將用不到50行的Python2代碼來做一個簡單的區塊鏈。我稱它為SnakeCoin。
首先將定義塊將是什么樣子。在區塊鏈中,每個塊都存儲一個時間戳和一個索引。在SnakeCoin中,需要把兩者都存儲起來。為了確保整個區塊鏈的完整性,每個塊都有一個自動識別散列。與比特幣一樣,每個塊的散列將是塊索引、時間戳、數據和前塊哈希的加密哈希。數據可以是你想要的任何東西。
import hashlib as hasherclass Block: def __init__(self, index, timestamp, data, previous_hash): self.index = index self.timestamp = timestamp self.data = data self.previous_hash = previous_hash self.hash = self.hash_block() def hash_block(self): sha = hasher.sha256() sha.update(str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash)) return sha.hexdigest()
這一步后有塊結構,但現在是創建區塊鏈,所以需要向實際的鏈中添加塊。如前所述,每個塊都需要上一個塊的信息。但是按照這個說法就有一個問題,區塊鏈的第一個區塊是如何到達那里的呢?不得不說,第一個塊,或者說是起源塊,它是一個特殊的塊。在很多情況下,它是手動添加的,或者有獨特的邏輯允許添加。
下面將創建一個函數簡單地返回一個起源塊以便產生第一個區塊。這個塊是索引0,它具有任意的數據值和“前一個哈希”參數中的任意值。
import datetime as datedef create_genesis_block(): # Manually construct a block with # index zero and arbitrary previous hash return Block(0, date.datetime.now(), "Genesis Block", "0")
新聞熱點
疑難解答