Python區(qū)塊鏈Creating?Miners教程
為了實(shí)現(xiàn)挖掘,我們需要開(kāi)發(fā)一個(gè)挖掘功能.挖掘功能需要在給定的消息字符串上生成摘要并提供工作證明.讓我們?cè)诒菊掠懻撨@個(gè).
消息摘要函數(shù)
我們將編寫(xiě)一個(gè)名為 sha256 的實(shí)用程序函數(shù)來(lái)創(chuàng)建給定消息的摘要 :
def?sha256(message):
return?hashlib.sha256(message.encode('ascii')).hexdigest()sha256 函數(shù)將消息作為參數(shù)進(jìn)行編碼它為ASCII,生成十六進(jìn)制摘要并將值返回給調(diào)用者.
挖掘函數(shù)
我們現(xiàn)在開(kāi)發(fā) mine 實(shí)現(xiàn)我們自己的挖掘策略的功能.在這種情況下,我們的策略是在給定消息上生成一個(gè)前綴為給定數(shù)字1的散列.給定的1的數(shù)量被指定為 mine 函數(shù)的參數(shù),指定為難度級(jí)別.
例如,如果指定難度級(jí)別為2,則在給定消息上生成的散列應(yīng)該從兩個(gè)1開(kāi)始 - 如11xxxxxxxx.如果難度級(jí)別為3,則生成的散列應(yīng)以三個(gè)1開(kāi)始 - 如111xxxxxxxx.鑒于這些要求,我們現(xiàn)在將開(kāi)發(fā)挖掘函數(shù),如下面給出的步驟所示.
第1步
挖掘函數(shù)有兩個(gè)參數(shù) - 消息和難度級(jí)別.
def mine(message, difficulty=1):
第2步
難度級(jí)別需要大于或等于1,我們使用以下斷言語(yǔ)句 : 確保這一點(diǎn);
assert difficulty >= 1
第3步
我們創(chuàng)建前綴變量使用設(shè)定的難度級(jí)別.
prefix = '1' * difficulty
請(qǐng)注意,如果難度級(jí)別為2,則前綴為"11",如果難度級(jí)別為3,則前綴為"111",依此類(lèi)推.我們將檢查生成的消息摘要中是否存在此前綴.為了消化消息本身,我們使用以下兩行代碼 :
for?i?in?range(1000): ???digest?=?sha256(str(hash(message))?+?str(i))
我們繼續(xù)添加一個(gè)新的數(shù)字 i 到每次迭代中的消息哈希并在組合消息上生成新摘要.由于 sha256 函數(shù)的輸入在每次迭代中都會(huì)發(fā)生變化,因此摘要值也會(huì)發(fā)生變化.我們檢查此摘要值是否高于前綴.
if digest.startswith(prefix):
如果條件滿足,我們將終止 for 循環(huán)并返回摘要給來(lái)電者的價(jià)值.
這里顯示的是整個(gè)我的代碼 :
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 語(yǔ)句值和在從函數(shù)返回之前滿足條件所需的迭代次數(shù).
測(cè)試挖掘函數(shù)
測(cè)試我們的迷你ng函數(shù),只需執(zhí)行以下語(yǔ)句 :
mine("test message",2)當(dāng)你運(yùn)行上面的代碼時(shí),你會(huì)看到類(lèi)似于下面和下面的輸出;
after 138 iterations found nonce:
11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c
請(qǐng)注意,生成的摘要以"11"開(kāi)頭.如果將難度級(jí)別更改為3,則生成的摘要將以"111"開(kāi)頭,當(dāng)然,它可能需要更多次迭代.如您所見(jiàn),具有更強(qiáng)處理能力的礦工將能夠更早地挖掘給定的消息.這就是礦工們?yōu)榱速嵢∈杖攵嗷ジ?jìng)爭(zhēng)的方式.
現(xiàn)在,我們準(zhǔn)備為區(qū)塊鏈添加更多區(qū)塊.讓我們?cè)谙乱徽轮袑W(xué)習(xí)這一點(diǎn),更多關(guān)于Python區(qū)塊鏈Creating Miners的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
win7上tensorflow2.2.0安裝成功 引用DLL load failed時(shí)找不到指定模塊 tensorflo
這篇文章主要介紹了win7上tensorflow2.2.0安裝成功 引用時(shí)DLL load failed找不到指定模塊 tensorflow has no attribute xxx 解決方法,需要的朋友可以參考下2020-05-05
haskell實(shí)現(xiàn)多線程服務(wù)器實(shí)例代碼
這篇文章主要介紹了haskell實(shí)現(xiàn)的多線程服務(wù)器,大家參考使用吧2013-11-11
詳解在Python中創(chuàng)建條形圖追趕動(dòng)畫(huà)
動(dòng)畫(huà)是使可視化更具吸引力和用戶吸引力的好方法。它幫助我們以有意義的方式展示數(shù)據(jù)可視化。Matplotlib是一個(gè)非常流行的數(shù)據(jù)可視化庫(kù),通常用于數(shù)據(jù)的圖形表示以及使用內(nèi)置函數(shù)的動(dòng)畫(huà)。本文將用Matplotlib繪制條形圖追趕動(dòng)畫(huà),需要的可以參考一下2022-03-03
使用Python docx修改word關(guān)鍵詞顏色的操作
這篇文章主要介紹了使用Python docx修改word關(guān)鍵詞顏色的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python+Pygame實(shí)戰(zhàn)之詩(shī)詞填空游戲的實(shí)現(xiàn)
成語(yǔ)接龍大家都玩過(guò),但詩(shī)詞填空大家玩過(guò)嗎?把成語(yǔ)接龍變成填空題。難度可上漲了不止一個(gè)檔次呢!本文就來(lái)用Python和Pygame實(shí)現(xiàn)詩(shī)詞填空游戲,需要的可以參考一下2022-12-12
Windows系統(tǒng)中將Python添加到系統(tǒng)環(huán)境詳細(xì)圖文教程
當(dāng)在命令行使用python或pip指令時(shí),可能會(huì)遇到pip不是內(nèi)部命令的報(bào)錯(cuò),這通常是因?yàn)樵诎惭bPython時(shí)未將其添加至系統(tǒng)環(huán)境變量,或者有多個(gè)Python環(huán)境導(dǎo)致路徑不一致,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10

