python區(qū)塊鏈創(chuàng)建多個(gè)交易教程
創(chuàng)建多個(gè)交易
各個(gè)客戶進(jìn)行的交易在系統(tǒng)中排隊(duì);礦工從這個(gè)隊(duì)列中獲取交易并將其添加到塊中.然后他們將挖掘區(qū)塊,獲勝的礦工將有權(quán)將區(qū)塊添加到區(qū)塊鏈中,從而為自己賺取一些錢.
我們將在稍后討論這個(gè)挖掘過(guò)程區(qū)塊鏈的創(chuàng)建.在我們?yōu)槎鄠€(gè)事務(wù)編寫代碼之前,讓我們添加一個(gè)小實(shí)用程序函數(shù)來(lái)打印給定事務(wù)的內(nèi)容.
顯示事務(wù)
display_transaction 函數(shù)接受事務(wù)類型的單個(gè)參數(shù).接收到的事務(wù)中的字典對(duì)象被復(fù)制到名為 dict 的臨時(shí)變量,并使用字典鍵,各種值將打印在控制臺(tái)上.
def?display_transaction(transaction): ???#for?transaction?in?transactions: ???dict?=?transaction.to_dict() ???print?("sender:?"?+?dict['sender']) ???print?('-----') ???print?("recipient:?"?+?dict['recipient']) ???print?('-----') ???print?("value:?"?+?str(dict['value'])) ???print?('-----') ???print?("time:?"?+?str(dict['time'])) ???print?('-----')
接下來(lái),我們定義一個(gè)事務(wù)隊(duì)列來(lái)存儲(chǔ)我們的事務(wù)對(duì)象.
交易隊(duì)列
要?jiǎng)?chuàng)建隊(duì)列,我們聲明一個(gè)名為 transactions 列表變量>如下
transactions = []
我們將只需將每個(gè)新創(chuàng)建的事務(wù)附加到此隊(duì)列.請(qǐng)注意,為簡(jiǎn)潔起見(jiàn),我們不會(huì)在本教程中實(shí)現(xiàn)隊(duì)列管理邏輯.
創(chuàng)建多個(gè)客戶端
現(xiàn)在,我們將開(kāi)始創(chuàng)建事務(wù).首先,我們將創(chuàng)建四個(gè)客戶,他們將相互匯款以從其他人那里獲得各種服務(wù)或商品.
Dinesh?=?Client() Ramesh?=?Client() Seema?=?Client() Vijay?=?Client()
此時(shí),我們有四個(gè)客戶叫Dinesh,Ramesh,Seema和Vijay.我們目前假設(shè)這些客戶中的每一個(gè)都在他們的錢包中持有一些TPCoins用于交易.通過(guò)使用這些對(duì)象的標(biāo)識(shí)屬性來(lái)指定每個(gè)客戶端的標(biāo)識(shí).
創(chuàng)建第一個(gè)事務(wù)
現(xiàn)在,我們首先啟動(dòng)交易如下 :
t1?=?Transaction( ???Dinesh, ???Ramesh.identity, ???15.0 )
在此交易中,Dinesh向Ramesh發(fā)送了5個(gè)TPCoins.為了使交易成功,我們必須確保Dinesh在他的錢包里有足夠的錢來(lái)支付這筆款項(xiàng).請(qǐng)注意,我們需要一個(gè)genesis事務(wù)來(lái)啟動(dòng)系統(tǒng)中的TPCoin循環(huán).您將在閱讀時(shí)很快編寫此genesis事務(wù)的事務(wù)代碼.
我們將使用Dinesh的私鑰對(duì)此事務(wù)進(jìn)行簽名,并將其添加到事務(wù)隊(duì)列中,如下所示 :
t1.sign_transaction() transactions.append(t1)
在Dinesh做出的第一筆交易之后,我們將在上面創(chuàng)建的不同客戶之間創(chuàng)建更多交易.
添加更多交易
我們現(xiàn)在將創(chuàng)建幾個(gè)以上的交易,每個(gè)交易都會(huì)向另一方發(fā)放一些TPCoins.當(dāng)有人花錢時(shí),他沒(méi)有必要在這個(gè)錢包中檢查是否有足夠的余額.無(wú)論如何,礦工將在發(fā)起交易時(shí)驗(yàn)證發(fā)件人所擁有的余額的每筆交易.
如果余額不足,礦工會(huì)將此交易標(biāo)記為無(wú)效且不會(huì)添加這個(gè)塊.
以下代碼創(chuàng)建并添加了九個(gè)以上的事務(wù).
t2?=?Transaction( ???Dinesh, ???Seema.identity, ???6.0 ) t2.sign_transaction() transactions.append(t2) t3?=?Transaction( ???Ramesh, ???Vijay.identity, ???2.0 ) t3.sign_transaction() transactions.append(t3) t4?=?Transaction( ???Seema, ???Ramesh.identity, ???4.0 ) t4.sign_transaction() transactions.append(t4) t5?=?Transaction( ???Vijay, ???Seema.identity, ???7.0 ) t5.sign_transaction() transactions.append(t5) t6?=?Transaction( ???Ramesh, ???Seema.identity, ???3.0 ) t6.sign_transaction() transactions.append(t6) t7?=?Transaction( ???Seema, ???Dinesh.identity, ???8.0 ) t7.sign_transaction() transactions.append(t7) t8?=?Transaction( ???Seema, ???Ramesh.identity, ???1.0 ) t8.sign_transaction() transactions.append(t8) t9?=?Transaction( ???Vijay, ???Dinesh.identity, ???5.0 ) t9.sign_transaction() transactions.append(t9) t10?=?Transaction( ???Vijay, ???Ramesh.identity, ???3.0 ) t10.sign_transaction() transactions.append(t10)
當(dāng)你運(yùn)行上面的代碼,你將在隊(duì)列中有十個(gè)交易來(lái)讓礦工創(chuàng)建他們的塊.
轉(zhuǎn)儲(chǔ)交易
作為區(qū)塊鏈經(jīng)理,您可能會(huì)定期查看事務(wù)隊(duì)列的內(nèi)容.為此,您可以使用我們之前開(kāi)發(fā)的 display_transaction 函數(shù).要轉(zhuǎn)儲(chǔ)隊(duì)列中的所有事務(wù),只需迭代事務(wù)列表,并為每個(gè)引用的事務(wù)調(diào)用 display_transaction 函數(shù),如下所示 :
for?transaction?in?transactions: ???display_transaction?(transaction) ???print?('--------------')
事務(wù)由虛線分隔以區(qū)分.如果你運(yùn)行上面的代碼,你會(huì)看到如下所示的交易清單 :
sender: 30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214 4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b 47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311 c4d866c12d79d3fc3034563dfb0203010001 ----- recipient: 30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e 674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977 04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484 d805f874260dfc2d1627473b910203010001 ----- value:?15.0 ----- time:?2019-01-14?16:18:01.859915 ----- -------------- sender: 30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214 4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b 47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311 c4d866c12d79d3fc3034563dfb0203010001 ----- recipient: 30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae14 3cbe59b3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fb d9ee74b9e7ea12334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0 961b4f212d1fd5b5e49ae09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d0623 75799742a359b8f22c5362e5650203010001 ----- value:?6.0 ----- time:?2019-01-14?16:18:01.860966 ----- -------------- sender: 30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e 674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977 04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484 d805f874260dfc2d1627473b910203010001 ----- recipient: 30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876 f41338c62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cc e25be99452a81df4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47 452590137869c25d9ff83d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f0 0e321b65e4c33acaf6469e18e30203010001 ----- value:?2.0 ----- time:?2019-01-14?16:18:01.861958 ----- --------------
為簡(jiǎn)潔起見(jiàn),我只先打印列表中的交易很少.在上面的代碼中,我們打印了從第一個(gè)事務(wù)開(kāi)始的所有事務(wù),除了從未添加到此列表的genesis事務(wù).由于事務(wù)定期添加到塊中,您通常只想查看尚未開(kāi)采的事務(wù)列表.在這種情況下,您需要?jiǎng)?chuàng)建一個(gè)適當(dāng)?shù)?nbsp;for 循環(huán)來(lái)迭代尚未開(kāi)采的事務(wù).
到目前為止,您已經(jīng)學(xué)會(huì)了如何創(chuàng)建客戶端,允許它們相互之間并維護(hù)要挖掘的待處理事務(wù)的隊(duì)列.現(xiàn)在,這是本教程最重要的部分,也就是創(chuàng)建一個(gè)區(qū)塊鏈,更多關(guān)于python區(qū)塊鏈創(chuàng)建交易的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法
今天小編就為大家分享一篇將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08python通過(guò)cookie模擬已登錄狀態(tài)的初步研究
對(duì)于那些需要在登錄環(huán)境下進(jìn)行的爬蟲操作,模擬登陸或偽裝已登錄狀態(tài)是一個(gè)剛性需求。這篇文章主要介紹了python通過(guò)cookie模擬已登錄狀態(tài)的相關(guān)資料,需要的朋友可以參考下2016-11-11Python中使用裝飾器來(lái)優(yōu)化尾遞歸的示例
這里我們用典型的斐波那契數(shù)列作為例子,來(lái)展示Python中使用裝飾器來(lái)優(yōu)化尾遞歸的示例,需要的朋友可以參考下2016-06-06Python獲取接口請(qǐng)求耗時(shí)的方法詳解
你想知道我們請(qǐng)求一個(gè)url的時(shí)候,握手和請(qǐng)求資源分別占用多長(zhǎng)時(shí)間么?今天我們就來(lái)使用python寫個(gè)小案例來(lái)看看,感興趣的可以跟隨小編一起了解一下2023-04-04python?matplotlib用面積填充實(shí)現(xiàn)lmplot的代碼示例
這篇文章主要介紹了python?matplotlib如何用面積填充實(shí)現(xiàn)lmplot,文章通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考閱讀2023-07-07

利用Python編寫一個(gè)注冊(cè)機(jī)用于生成卡密

python語(yǔ)法教程之def()函數(shù)定義及用法