Python區(qū)塊鏈交易類教程
創(chuàng)建 Transaction 類
在本章中,讓我們創(chuàng)建一個(gè) Transaction 類,以便客戶能夠向某人匯款.請(qǐng)注意,客戶可以是貨幣的發(fā)件人或收件人.當(dāng)您想要收款時(shí),其他一些發(fā)件人將創(chuàng)建一個(gè)交易并在其中指定您的公開地址.我們將事務(wù)類的初始化定義如下 :
def?__init__(self,?sender,?recipient,?value): ???self.sender?=?sender ???self.recipient?=?recipient ???self.value?=?value ???self.time?=?datetime.datetime.now()
init 方法有三個(gè)參數(shù) : 發(fā)件人的公開鍵,收件人的公開鍵以及要發(fā)送的金額.它們存儲(chǔ)在實(shí)例變量中以供其他方法使用.另外,我們創(chuàng)建了一個(gè)用于存儲(chǔ)事務(wù)時(shí)間的變量.
接下來,我們編寫一個(gè)名為 to_dict 的實(shí)用程序方法,它結(jié)合了上述四個(gè)實(shí)例字典對(duì)象中的變量.這只是通過一個(gè)變量來訪問整個(gè)交易信息.
正如您在前面的教程中所知,區(qū)塊鏈中的第一個(gè)區(qū)塊是 Genesis 塊. Genesis塊包含區(qū)塊鏈創(chuàng)建者發(fā)起的第一個(gè)事務(wù).這個(gè)人的身份可能像比特幣一樣保密.因此,當(dāng)創(chuàng)建第一個(gè)交易時(shí),創(chuàng)建者可以將其身份發(fā)送為 Genesis .因此,在創(chuàng)建字典時(shí),我們檢查發(fā)件人是否 Genesis ,如果是,我們只需將一些字符串值賦給身份變量;否則,我們將發(fā)件人的身份分配給身份變量.
if?self.sender?==?"Genesis": ???identity?=?"Genesis" else: ???identity?=?self.sender.identity
我們使用以下構(gòu)建字典代碼行
return?collections.OrderedDict({ ???'sender':?identity, ???'recipient':?self.recipient, ???'value':?self.value, ???'time'?:?self.time})
整個(gè)代碼 to_dict 方法如下所示 :
def?to_dict(self): ???if?self.sender?==?"Genesis": ??????identity?=?"Genesis" ???else: ??????identity?=?self.sender.identity ???return?collections.OrderedDict({ ??????'sender':?identity, ??????'recipient':?self.recipient, ??????'value':?self.value, ??????'time'?:?self.time})
最后,我們將使用發(fā)件人的私鑰對(duì)此字典對(duì)象進(jìn)行簽名.和以前一樣,我們使用帶有SHA算法的內(nèi)置PKI.生成的簽名被解碼以獲得用于打印的ASCII表示并將其存儲(chǔ)在我們的區(qū)塊鏈中. sign_transaction 方法代碼顯示在這里 :
def?sign_transaction(self): ???private_key?=?self.sender._private_key ???signer?=?PKCS1_v1_5.new(private_key) ???h?=?SHA.new(str(self.to_dict()).encode('utf8')) ???return?binascii.hexlify(signer.sign(h)).decode('ascii')
我們現(xiàn)在將測(cè)試這個(gè) Transaction 類.
測(cè)試交易類
為此,我們將創(chuàng)建兩個(gè)用戶,名為 Dinesh 和 Ramesh . Dinesh將向Ramesh發(fā)送5個(gè)TPCoins.為此,我們首先創(chuàng)建名為Dinesh和Ramesh的客戶端.
Dinesh?=?Client() Ramesh?=?Client()
請(qǐng)記住,當(dāng)您實(shí)例化客戶端類時(shí),將創(chuàng)建客戶端唯一的公共和私鑰.當(dāng)Dinesh向Ramesh發(fā)送付款時(shí),他將需要使用客戶端的身份屬性獲得的Ramesh的公鑰.
因此,我們將使用以下代碼創(chuàng)建事務(wù)實(shí)例 :
t?=?Transaction( ???Dinesh, ???Ramesh.identity, ???5.0 )
請(qǐng)注意,第一個(gè)參數(shù)是發(fā)件人,第二個(gè)參數(shù)是收件人的公鑰,第三個(gè)參數(shù)是要傳輸?shù)慕痤~. sign_transaction 方法從第一個(gè)參數(shù)中檢索發(fā)件人的私鑰,用于演唱交易.
創(chuàng)建事務(wù)對(duì)象后,您將通過調(diào)用它來對(duì)其進(jìn)行簽名b> sign_transaction 方法.此方法以可打印格式返回生成的簽名.我們使用以下兩行代碼生成并打印簽名 :
signature?=?t.sign_transaction() print?(signature)
當(dāng)你運(yùn)行上面的代碼時(shí),你會(huì)看到類似于這個(gè) : 的輸出;
7c7e3c97629b218e9ec6e86b01f9abd8e361fd69e7d373c38420790b655b9abe3b575e343c7
13703ca1aee781acd7157a0624db3d57d7c2f1172730ee3f45af943338157f899965856f6b0
0e34db240b62673ad5a08c8e490f880b568efbc36035cae2e748f1d802d5e8e66298be826f5
c6363dc511222fb2416036ac04eb972
現(xiàn)在作為我們創(chuàng)建客戶端的基礎(chǔ)設(shè)施和如果交易準(zhǔn)備就緒,我們現(xiàn)在將有多個(gè)客戶在現(xiàn)實(shí)生活中進(jìn)行多筆交易.
以上就是Python區(qū)塊鏈交易類教程的詳細(xì)內(nèi)容,更多關(guān)于Python區(qū)塊鏈交易類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python對(duì)列進(jìn)行平移變換的方法(shift)
今天小編就為大家分享一篇python對(duì)列進(jìn)行平移變換的方法(shift),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01python實(shí)現(xiàn)Windows電腦定時(shí)關(guān)機(jī)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Windows電腦定時(shí)關(guān)機(jī)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06盤點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫神器打造數(shù)據(jù)魔法世界
數(shù)據(jù)科學(xué)家和分析師常常使用?Python?來處理數(shù)據(jù)、進(jìn)行分析和可視化,Python生態(tài)系統(tǒng)中有許多庫,但有一些庫是數(shù)據(jù)科學(xué)家日常工作中必不可少的,本文將深入介紹20個(gè)重要的Python?庫,包括示例代碼和用例2024-01-01