打造乙個最小區塊鏈

2021-09-20 12:04:50 字數 3537 閱讀 7551

注意:本教程的第2部分可以在

這個鏈結

找到。

雖然有人認為區塊鏈本身仍有很多問題需要解決,但毫無疑問,這種新穎的技術是計算機界的奇蹟。 但是,究竟什麼是區塊鏈?

區塊鏈

區塊鏈是一種數字賬本,它會按照時間順序公開地記錄位元幣等數字貨幣產生的交易記錄。

通俗點來說,它就是乙個公共資料庫。新的資料被儲存到乙個稱為區塊的容器中,接著會被不可逆地新增到已經有很多資料的資料鏈中,(這時候就可以叫它區塊鏈了)。在對位元幣和其他加密貨幣來說,這些資料型別就是是交易資料組。當然,這些資料當然可以是任何其他型別。

區塊鏈技術帶來了全新數字貨幣的崛起,如位元幣和萊特幣,而這些貨幣並非由**機構發行或管理。這為一些認為當今的銀行體系是一種**或失敗品的人帶來了福音。區塊鏈中的新技術,以太坊也為分布式計算帶來了革新,以太坊引入了智慧型合約等有趣的概念。

在本文中,我將用少於50行的python 2**創造乙個簡單的區塊鏈。我叫他snakecoin(蛇皮幣)。

首先讓我們想想我們的區塊是怎樣的。在區塊鏈中,每個區塊都會儲存乙個時間戳和乙個可選的索引號。在snakecoin中,我們打算把這兩種資料都儲存下來。為了確保整個區塊鏈的完整性,每個區塊都會有乙個自我標識雜湊值。和位元幣一樣,每個塊的雜湊值是有區塊的索引號,時間戳,資料和前乙個區塊的雜湊值共同生成的雜湊值。對了,你可以往區塊裡放任何型別的資料。

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

()

搞定!現在我們有區塊結構了,但我們要的是區塊。所以我們就得把區塊新增到資料鏈中。正如我前面提到的,每個區塊需要來自前乙個區塊的資訊。那麼問題就來了:區塊鏈中的第乙個區塊是怎樣產生的?其實首個區塊是乙個特殊的區塊,他也被稱為起源區塊。一般它會有獨特的邏輯以允許新增,或者我們直接手動新增。

為了簡化,我們將建立乙個只需返回起源區塊的函式,該起源區塊的索引為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 =

20# add blocks to the chain

for i in

range(0

, num_of_blocks_to_add)

: block_to_add =

next_block

(previous_block)

blockchain.

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

讓我們來檢驗下工作成果:

別擔心,雖然後面的圖沒截到,但它確實增長到20個了。

完美!我們的區塊鏈已經能正常運轉了。如果您想在控制台介面中看到更多資訊,你可編輯完整的原始檔並輸出每個區塊的時間戳或資料。

這就是snakecoin目前所能做到的一切了。如果要讓snakecoin的規模增長跟一些已經被廣泛應用的區塊鏈一樣的話,我們必須新增更多元素,比如服務層來跟蹤在多台機器上的區塊鏈的變化,以及工作量驗證演算法,以限制一定時間內可以新增的新區塊總數。

祝您好運!

區塊鏈 乙個完整的區塊鏈入門學習整理

1.位元幣 這是一切的開始 2.精通位元幣 講位元幣很詳細的一本書,看完基本對位元幣的認識就清楚了。3.theproof of work concept pow機制理論介紹,英文 4.位元幣的原理及運作機制 這篇是新手向,適合向圈外人介紹什麼是位元幣什麼是區塊鏈 5.位元幣pow難度調節機制 pow...

GAIAWORLD打造區塊鏈第一遊戲公鏈(上篇)

仍在全球熱映票房突破5億美元的電影 頭號玩家 讓觀眾做了個很美的夢,不願醒來。在片中 綠洲 的遊戲創造了乙個虛擬烏托邦,在這裡想象力主宰一切,你可以去任何地方,做任何想做的事,成為任何想成為的人。你可以和蜘蛛俠去埃及金字塔攀岩 你可以在空中走路 舞蹈,用意念兩秒鐘創造出一輛豪車在空中極速狂飆 你甚至...

如何經營乙個區塊鏈社群 元磁之力區塊鏈社群正式上線

近日,廈門區塊鏈行業又迎來一件喜事 元磁之力區塊鏈社群正式上線了!經過精心的開發除錯,社群敞開大門,歡迎各位區塊鏈愛好者們加入體驗!元磁之力社群由廈門雜湊科技cto林宣名為主要牽頭人,聯合業內眾多區塊鏈技術愛好者共同發起,創始成員還包括上海對外經貿大學 廈門大學嘉庚學院 集美大學以及閩南師範大學等國...