區塊鏈是一個公共數據庫,要放在一個塊內

想知道更多關於區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】
鏈客,有問必答!!

區塊鏈是一個公共數據庫,新的數據將要存在一個叫作塊的內容中裏面,而後塊會被添加到一個不能夠篡改的鏈中,所以就叫作區塊鏈,當咱們談到比特幣或者加密貨幣的時候,這些數據就是指交易記錄,固然了你能夠將任何類型的數據存入到相關的區塊鏈中。

區塊鏈技術已經催生了全新的、徹底數字化的貨幣,如比特幣和萊特幣,這些貨幣並非由 中央政府發行或管理的。這一技術給那些不承認當前銀行系統人帶來了新的自由。數據庫

區塊鏈同時也爲分佈式計算帶來了革命性的創新,例如,以太坊區塊鏈引入了一些有趣的概念, 好比智能合約。

咱們首先將定義「塊」的數據結構。在區塊鏈中,每一個塊都存儲一個時間戳和一個可選地索引。在SnakeCoin中,
咱們將把二者都存儲起來。爲了確保整個區塊鏈的完整性,每一個塊都有一個用於自我標識的哈希。數據結構

與比特幣同樣,每一個塊的哈希將是對塊索引、時間戳、數據和前塊哈希計算出的加密哈希值。其中

你能夠在數據中保存任何內容。
import hashlib as hasher
class Block:
def __init__(self, index, timestamp, data, previous_hash):app

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 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")
如今已經建立好了創世塊,接下來須要一個函數,以便在區塊鏈中生成後續的塊。這個函數將
以鏈中的前一個塊爲參數,生成並返回新塊。當新塊的哈希值計算利用了來自前面塊的信息時,
區塊鏈的完整性就會隨着每一個新塊而增長。若是不這樣的話,外部組織就更容易「改變過去」,用他們
僞造的塊來取代鏈中的塊。這一系列的塊哈希能夠做爲加密的證據,有助於確保一旦將塊添加到
區塊鏈,它就不能被替換或刪除。
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列表。列表的第一個元素是創世塊。固然,咱們還須要添加後續的塊。由於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 = 20this

Add blocks to the chainfor 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: {}n".format(block_to_add.hash) 加密

OK,這就是50行代碼來實現區塊鏈,你們看懂了嗎,能夠流線互相交流。code

相關文章
相關標籤/搜索