淺嚐區塊鏈

2022-07-22 04:24:13 字數 2908 閱讀 8259

它是位元幣或其他加密貨幣進行交易的數字賬本,賬本按時間順序記錄並對外公開。

在更一般的術語中,它是乙個公共資料庫,新資料儲存在乙個名為塊的容器中,並被新增到乙個不可變鏈(後來的區塊鏈)中新增了過去的資料。在位元幣和其他加密貨幣的情況下,這些資料是一組交易記錄。當然,資料可以是任何型別的。

區塊鏈技術已經催生了新的、完全數位化的貨幣,如位元幣和萊特幣,這些貨幣並不是由****發行或管理的。因此為那些認為今天的銀行系統是**或終將失敗的人帶來了新的自由。區塊鏈所包含的以太坊技術對分布式計算進行了變革創新,它引入了一些有趣的概念,比如智慧型合約。

在本文中,我將用不到50行的python2**來做乙個簡單的區塊鏈。我稱它為snakecoin。

首先將定義塊將是什麼樣子。在區塊鏈中,每個塊都儲存乙個時間戳和乙個索引。在snakecoin中,需要把兩者都儲存起來。為了確保整個區塊鏈的完整性,每個塊都有乙個自動識別雜湊。與位元幣一樣,每個塊的雜湊將是塊索引、時間戳、資料和前塊雜湊的加密雜湊。資料可以是你想要的任何東西。

python12

3456

78910

1112

1314

1516

17importhashlibashasher

classblock:

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()

defhash_block(self):

sha=hasher.sha256()

sha.update(str(self.index)+

str(self.timestamp)+

str(self.data)+

str(self.previous_hash))

returnsha.hexdigest()

這一步後有塊結構,但現在是建立區塊鏈,所以需要向實際的鏈中新增塊。如前所述,每個塊都需要上乙個塊的資訊。但是按照這個說法就有乙個問題,區塊鏈的第乙個區塊是如何到達那裡的呢?不得不說,第乙個塊,或者說是起源塊,它是乙個特殊的塊。在很多情況下,它是手動新增的,或者有獨特的邏輯允許新增。

下面將建立乙個函式簡單地返回乙個起源塊以便產生第乙個區塊。這個塊是索引0,它具有任意的資料值和「前乙個雜湊」引數中的任意值。

python12

3456

importdatetimeasdate

defcreate_genesis_block():

# manually construct a block with

# index zero and arbitrary previous hash

returnblock(0,date.datetime.now(),"genesis block","0")

現在已經建立好了起源塊,接下來需要乙個函式,以便在區塊鏈中生成後續的塊。這個函式將把鏈中的前乙個塊作為引數,建立要生成的塊的資料,並使用適當的資料返回新塊。當新的塊雜湊資訊來自前面的塊時,區塊鏈的完整性會隨著每個新塊而增加。如果不這樣做,外部組織就更容易「改變過去」,用全新的方式取代已有的鏈條。這一系列的雜湊可以作為加密的證據,有助於確保一旦將塊新增到區塊鏈,它就不能被替換或刪除。

python12

3456

defnext_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

returnblock(this_index,this_timestamp,this_data,this_hash)

大部分的工作已經完成,現在可以建立區塊鏈了。在這次的示例中,區塊鏈本身是乙個簡單的python列表。列表的第乙個元素是起源塊。當然,還需要新增後續的塊,因為snakecoin是最小的區塊鏈,這裡只新增20個新的塊。可以用for迴圈來生成新塊。

python12

3456

78910

1112

1314

1516

# 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

foriinrange(0,num_of_blocks_to_add):

block_to_add=next_block(previous_block)

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)

下面來測試一下目前產生的區塊鏈。

這就是snakecoin要提供的所有東西。為了使snakecoin規模達到今天生產區塊鏈的規模,必須新增更多的功能,比如伺服器層,以跟蹤多台機器上的鏈變化,以及在給定的時間段內限制新增的塊數量的工作演算法。

區塊鏈 區塊鏈雜湊演算法

雜湊演算法是區塊鏈中保證交易資訊不被篡改的單向密碼機制。雜湊演算法接收一段明文後,以一種不可逆的方式將其轉化為一段長度較短 位數固定的雜湊資料。它有兩個特點 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最...

區塊鏈節點和區塊區別 區塊鏈的「區塊」和「鏈」

2017年以來,區塊鏈大火,但是其技術相對生澀。很多 紛紛用通俗易懂的漫畫方式,簡單明瞭的體現出來了區塊鏈的區別和特點。區塊鏈由以前的一人記賬,變成了大家一起記賬的模式,讓賬目和交易更加安全,這就是分布式資料儲存。此外,區塊鏈相關的技術除了分布式儲存,還有去中心化 智慧型合約 加密演算法等等。分布式...

區塊鏈 資料區塊

目錄 資料區塊記錄了整個位元幣網路上的交易記錄資料,並且這些資料是被所有位元幣節點共享的。位元幣的交易記錄會儲存在資料區塊之中,位元 幣系統中大約每10分鐘會產生乙個區塊,每個資料區塊一般包含區塊頭 header 和區塊體 body 兩部分,位元幣源 分析 區塊 區塊頭封裝了當前的版本號 versi...