摘要:區塊鏈技術催生了數字化的貨幣,如比特幣和,這些貨幣并不是由權威機構發行或管理的。在本文中,我用創建一個簡單的區塊鏈。為了幫助確保整個區塊鏈的完整性,每個塊都有一個值作為標識符。來看看運行結果全新的區塊鏈就這樣實現的。
簡評:區塊鏈如今大火大熱,如果你還不知道什么是區塊鏈,可以通過這 50 行代碼來幫助你的理解。
區塊鏈
在更通用的術語中,它是一個公共數據庫,在這個數據庫中,新數據存儲在一個名為 Block 的容器中,并將其添加到一個不可變鏈中。對于比特幣和其他加密貨幣,這些數據是一組交易。當然,數據也可以是任何類型。
區塊鏈技術催生了數字化的貨幣,如比特幣和 Litecoin,這些貨幣并不是由權威機構發行或管理的。區塊鏈還像 Ethereum 這樣的技術,革新了分布式計算,它引入了一些有趣的概念,比如智能合同。
在本文中,我用 Python 創建一個簡單的區塊鏈。我稱它為 SnakeCoin。
首先我們需要定義一個 Block。在區塊鏈中,每個塊都存儲了一個時間戳和一個索引。在 SnakeCoin 中,我們將存儲兩者。為了幫助確保整個區塊鏈的完整性,每個塊都有一個 hash 值作為標識符。與比特幣一樣,通過對 Block 的索引、時間戳、數據做哈希加密得到每個 Block 的哈希值。數據可以是任何內容。
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()
區塊鏈中我們已經定義了 Block,我們需要在實際的鏈中添加塊。正如我前面提到的,每個 Block 都需要前一個 Block 的信息(區塊鏈的第一個 Block 稱為起源 Block(genesis block),在很多情況下,它是需要手動添加的,或者有獨特的邏輯把它添加到鏈表頭)。
這里創建一個函數,它簡單地返回起源 Block。該塊是索引 0,他的數據可以是任意的值。
import datetime as date def create_genesis_block(): # Manually construct a block with # index zero and arbitrary previous hash return Block(0, date.datetime.now(), "Genesis Block", "0")
現在我們已經創建了一個起源 Block,我們還需要一個函數來生成塊鏈中的后續 Block。 該函數將鏈中的前一個 Block 作為參數,創建一個新的 Block(新的 Block 的 hash 值依賴于前一個 Block 的哈希值) ,并添加到不變鏈表中。 這個哈希鏈作為加密證明,有助于確保一旦塊被添加到塊鏈中,它不能被替換或刪除。
def next_block(last_block): this_index = last_block.index + 1 this_timestamp = date.datetime.now() this_data = "Hey! I"m block " + str(this_index) this_hash = last_block.hash return Block(this_index, this_timestamp, this_data, this_hash)
現在我們可以創建我們的區塊鏈了,在我們的例子中,區塊鏈本身就是一個簡單的 Python 列表。 列表的第一個元素是起源 Block(genesis block)。 當然,我們需要添加后續的塊。 因為 SnakeCoin 是一個小型的區塊鏈,所以我們只添加 20 個新的塊。 我們可以用 for 循環來做到這一點。
# Create the blockchain and add the genesis block blockchain = [create_genesis_block()] previous_block = blockchain[0] # How many blocks should we add to the chain # after the genesis block num_of_blocks_to_add = 20 # Add blocks to the chain for i in range(0, num_of_blocks_to_add): block_to_add = next_block(previous_block) blockchain.append(block_to_add) previous_block = block_to_add # Tell everyone about it! print "Block #{} has been added to the blockchain!".format(block_to_add.index) print "Hash: {} ".format(block_to_add.hash)
來看看運行結果
全新的區塊鏈 SnakeCoin 就這樣實現的 。 當然這里只是實現了區塊鏈最最基礎部分的代碼, 如果想讓 SnakeCoin 運作起來 ,我們必須添加更多的功能,如服務器層,以跟蹤多臺機器上鏈的變化,并提供工作證明算法,以限制在限定時間內允許添加 Block 的數量。
這項研究由三星,谷歌,Facebook 英特爾和華盛頓大學資助。研究團隊將于 8 月 2 日在洛杉磯的 SIGGRAPH 會議上詳細介紹他們的發現。
原文:Let’s Build the Tiniest Blockchain
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23922.html
摘要:在區塊鏈中,存儲有效信息的是區塊。存儲的是前一個塊的哈希。正是由于這個特性,才使得區塊鏈是安全的。這樣的結構,能夠讓我們快速地獲取鏈上的最新塊,并且高效地通過哈希來檢索一個塊。 翻譯的系列文章我已經放到了 GitHub 上:blockchain-tutorial,后續如有更新都會在 GitHub 上,可能就不在這里同步了。如果想直接運行代碼,也可以 clone GitHub 上的教程倉...
摘要:是一個用于連接以太坊區塊鏈的庫。網絡執行以太坊協議,該協議定義節點彼此之間的交互規則及網絡上的智能合約。數據庫設計下一步是設計數據庫。 關于區塊鏈介紹性的研討會通常以易于理解的點對點網絡和銀行分類賬這類故事開頭,然后直接跳到編寫智能合約,這顯得非常突兀。因此,想象自己走進叢林,想象以太坊區塊鏈是一個你即將研究的奇怪生物。今天我們將觀察該生物,并與其進行交互然后將有關它的所有數據收集到一...
閱讀 3486·2021-11-12 10:36
閱讀 2857·2021-09-22 15:35
閱讀 2807·2021-09-04 16:41
閱讀 1164·2019-08-30 15:55
閱讀 3574·2019-08-29 18:43
閱讀 2070·2019-08-23 18:24
閱讀 1412·2019-08-23 18:10
閱讀 1921·2019-08-23 11:31