Python區(qū)塊鏈Creating?Miners教程
為了實現(xiàn)挖掘,我們需要開發(fā)一個挖掘功能.挖掘功能需要在給定的消息字符串上生成摘要并提供工作證明.讓我們在本章討論這個.
消息摘要函數(shù)
我們將編寫一個名為 sha256 的實用程序函數(shù)來創(chuàng)建給定消息的摘要 :
def?sha256(message): return?hashlib.sha256(message.encode('ascii')).hexdigest()
sha256 函數(shù)將消息作為參數(shù)進行編碼它為ASCII,生成十六進制摘要并將值返回給調(diào)用者.
挖掘函數(shù)
我們現(xiàn)在開發(fā) mine 實現(xiàn)我們自己的挖掘策略的功能.在這種情況下,我們的策略是在給定消息上生成一個前綴為給定數(shù)字1的散列.給定的1的數(shù)量被指定為 mine 函數(shù)的參數(shù),指定為難度級別.
例如,如果指定難度級別為2,則在給定消息上生成的散列應(yīng)該從兩個1開始 - 如11xxxxxxxx.如果難度級別為3,則生成的散列應(yīng)以三個1開始 - 如111xxxxxxxx.鑒于這些要求,我們現(xiàn)在將開發(fā)挖掘函數(shù),如下面給出的步驟所示.
第1步
挖掘函數(shù)有兩個參數(shù) - 消息和難度級別.
def mine(message, difficulty=1):
第2步
難度級別需要大于或等于1,我們使用以下斷言語句 : 確保這一點;
assert difficulty >= 1
第3步
我們創(chuàng)建前綴變量使用設(shè)定的難度級別.
prefix = '1' * difficulty
請注意,如果難度級別為2,則前綴為"11",如果難度級別為3,則前綴為"111",依此類推.我們將檢查生成的消息摘要中是否存在此前綴.為了消化消息本身,我們使用以下兩行代碼 :
for?i?in?range(1000): ???digest?=?sha256(str(hash(message))?+?str(i))
我們繼續(xù)添加一個新的數(shù)字 i 到每次迭代中的消息哈希并在組合消息上生成新摘要.由于 sha256 函數(shù)的輸入在每次迭代中都會發(fā)生變化,因此摘要值也會發(fā)生變化.我們檢查此摘要值是否高于前綴.
if digest.startswith(prefix):
如果條件滿足,我們將終止 for 循環(huán)并返回摘要給來電者的價值.
這里顯示的是整個我的代碼 :
def?mine(message,?difficulty=1): ???assert?difficulty?>=?1 ???prefix?=?'1'?*?difficulty ???for?i?in?range(1000): ??????digest?=?sha256(str(hash(message))?+?str(i)) ??????if?digest.startswith(prefix): ?????????print?("after?"?+?str(i)?+?"?iterations?found?nonce:?"+?digest) ??????return?digest
為了您的理解,我們添加了打印摘要的 print 語句值和在從函數(shù)返回之前滿足條件所需的迭代次數(shù).
測試挖掘函數(shù)
測試我們的迷你ng函數(shù),只需執(zhí)行以下語句 :
mine("test message",2)
當(dāng)你運行上面的代碼時,你會看到類似于下面和下面的輸出;
after 138 iterations found nonce:
11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c
請注意,生成的摘要以"11"開頭.如果將難度級別更改為3,則生成的摘要將以"111"開頭,當(dāng)然,它可能需要更多次迭代.如您所見,具有更強處理能力的礦工將能夠更早地挖掘給定的消息.這就是礦工們?yōu)榱速嵢∈杖攵嗷ジ偁幍姆绞?
現(xiàn)在,我們準(zhǔn)備為區(qū)塊鏈添加更多區(qū)塊.讓我們在下一章中學(xué)習(xí)這一點,更多關(guān)于Python區(qū)塊鏈Creating Miners的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python爬取w3shcool的JQuery課程并且保存到本地
本文主要介紹python爬取w3shcool的JQuery的課程并且保存到本地的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Python常見錯誤:IndexError:?list?index?out?of?range解決
最近在寫一個爬蟲程序,但是卻出現(xiàn)了錯誤提示IndexError:?list?index?out?of?range,所以下面這篇文章主要給大家介紹了關(guān)于Python常見錯誤:IndexError:?list?index?out?of?range的解決方法,需要的朋友可以參考下2023-01-01