注意:本教程的第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這樣我們就完成了主要工作了。現在,我們可以開始打造我們自己的區塊鏈!在我們的例子中,區塊鏈本身就是乙個簡單的python列表。列表的第乙個元素是起源區塊。當然,我們需要新增後續的區塊。因為snakecoin是最小的區塊鏈,所以我們只新增20個新區塊就行了。我們可以用for迴圈來做到這一點。(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)
# 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林宣名為主要牽頭人,聯合業內眾多區塊鏈技術愛好者共同發起,創始成員還包括上海對外經貿大學 廈門大學嘉庚學院 集美大學以及閩南師範大學等國...