雖然有些人認為區(qū)塊鏈是一個早晚會出現(xiàn)問題的解決方案,但是毫無疑問,這個創(chuàng)新技術(shù)是一個計算機技術(shù)上的奇跡。那么,究竟什么是區(qū)塊鏈呢?
區(qū)塊鏈
以比特幣(Bitcoin)或其它加密貨幣按時間順序公開地記錄交易的數(shù)字賬本。
更通俗的說,它是一個公開的數(shù)據(jù)庫,新的數(shù)據(jù)存儲在被稱之為區(qū)塊(block)的容器中,并被添加到一個不可變的鏈(chain)中(因此被稱為區(qū)塊鏈(blockchain)),之前添加的數(shù)據(jù)也在該鏈中。對于比特幣或其它加密貨幣來說,這些數(shù)據(jù)就是一組組交易,不過,也可以是其它任何類型的數(shù)據(jù)。
區(qū)塊鏈技術(shù)帶來了全新的、完全數(shù)字化的貨幣,如比特幣和萊特幣(Litecoin),它們并不由任何中心機構(gòu)管理。這給那些認為當今的銀行系統(tǒng)是騙局并將最終走向失敗的人帶來了自由。區(qū)塊鏈也革命性地改變了分布式計算的技術(shù)形式,如以太坊(Ethereum)就引入了一種有趣的概念:智能合約(smart contract)。
在這篇文章中,我將用不到 50 行的 Python 2.x 代碼實現(xiàn)一個簡單的區(qū)塊鏈,我把它叫做 SnakeCoin。
不到 50 行代碼的區(qū)塊鏈
我們首先將從定義我們的區(qū)塊是什么開始。在區(qū)塊鏈中,每個區(qū)塊隨同時間戳及可選的索引一同存儲。在 SnakeCoin 中,我們會存儲這兩者。為了確保整個區(qū)塊鏈的完整性,每個區(qū)塊都會有一個自識別的哈希值。如在比特幣中,每個區(qū)塊的哈希是該塊的索引、時間戳、數(shù)據(jù)和前一個區(qū)塊的哈希值等數(shù)據(jù)的加密哈希值。這里提及的“數(shù)據(jù)”可以是任何你想要的數(shù)據(jù)。
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()import hashlib as hasher class 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()
現(xiàn)在我們有了區(qū)塊的結(jié)構(gòu)了,不過我們需要創(chuàng)建的是一個區(qū)塊鏈。我們需要把區(qū)塊添加到一個實際的鏈中。如我們之前提到過的,每個區(qū)塊都需要前一個區(qū)塊的信息。但問題是,該區(qū)塊鏈中的第一個區(qū)塊在哪里?好吧,這個第一個區(qū)塊,也稱之為創(chuàng)世區(qū)塊,是一個特別的區(qū)塊。在很多情況下,它是手工添加的,或通過獨特的邏輯添加的。
新聞熱點
疑難解答
圖片精選