下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第Python區(qū)塊鏈交易類教程目錄創(chuàng)建Transaction類測試交易類
創(chuàng)建Transaction類
在本章中,讓我們創(chuàng)建一個Transaction類,以便客戶能夠向某人匯款.請注意,客戶可以是貨幣的發(fā)件人或收件人.當您想要收款時,其他一些發(fā)件人將創(chuàng)建一個交易并在其中指定您的公開地址.我們將事務類的初始化定義如下:
def
__init__(self,
sender,
recipient,
value):
self.sender
=
sender
self.recipient
=
recipient
self.value
=
value
self.time
=
datetime.datetime.now()
init方法有三個參數(shù):發(fā)件人的公開鍵,收件人的公開鍵以及要發(fā)送的金額.它們存儲在實例變量中以供其他方法使用.另外,我們創(chuàng)建了一個用于存儲事務時間的變量.
接下來,我們編寫一個名為to_dict的實用程序方法,它結合了上述四個實例字典對象中的變量.這只是通過一個變量來訪問整個交易信息.
正如您在前面的教程中所知,區(qū)塊鏈中的第一個區(qū)塊是Genesis塊.Genesis塊包含區(qū)塊鏈創(chuàng)建者發(fā)起的第一個事務.這個人的身份可能像比特幣一樣保密.因此,當創(chuàng)建第一個交易時,創(chuàng)建者可以將其身份發(fā)送為Genesis.因此,在創(chuàng)建字典時,我們檢查發(fā)件人是否Genesis,如果是,我們只需將一些字符串值賦給身份變量;否則,我們將發(fā)件人的身份分配給身份變量.
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})
整個代碼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ā)件人的私鑰對此字典對象進行簽名.和以前一樣,我們使用帶有SHA算法的內(nèi)置PKI.生成的簽名被解碼以獲得用于打印的ASCII表示并將其存儲在我們的區(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)在將測試這個Transaction類.
測試交易類
為此,我們將創(chuàng)建兩個用戶,名為Dinesh和Ramesh.Dinesh將向Ramesh發(fā)送5個TPCoins.為此,我們首先創(chuàng)建名為Dinesh和Ramesh的客戶端.
Dinesh
=
Client()
Ramesh
=
Client()
請記住,當您實例化客戶端類時,將創(chuàng)建客戶端唯一的公共和私鑰.當Dinesh向Ramesh發(fā)送付款時,他將需要使用客戶端的身份屬性獲得的Ramesh的公鑰.
因此,我們將使用以下代碼創(chuàng)建事務實例:
t
=
Transaction(
Dinesh,
Ramesh.identity,
5.0
)
請注意,第一個參數(shù)是發(fā)件人,第二個參數(shù)是收件人的公鑰,第三個參數(shù)是要傳輸?shù)慕痤~.sign_transaction方法從第一個參數(shù)中檢索發(fā)件人的私鑰,用于演唱交易.
創(chuàng)建事務對象后,您將通過調(diào)用它來對其進行簽名bsign_transaction方法.此方法以可打印格式返回生成的簽名.我們使用以下兩行代碼生成并打印簽名:
signature
=
t.sign_transaction()
(signature)
當你運行上面的代碼時,你會看到類似于這個:的輸出;
7c7e3c97629b218e9ec6e86b01f9abd8e361fd69e7d373c38420790b655b9abe3b575e343c7
13703ca1aee781acd7157a0624db3d57d7c2f1172730ee3f45af943338157f899965856f6b0
0e34db240b62673ad5a08c8e490f880b568efbc36035cae2e748f1d802d5e8e66298be826f5
c6363dc511222fb241
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學學生社團活動經(jīng)費預算制度
- 養(yǎng)老院定期體檢制度
- 企業(yè)內(nèi)部保密工作責任追究制度
- 公共交通車輛安全檢查制度
- 2026年工業(yè)制造中的6S管理與效率提升題解
- 2026年公務員考試模擬題行政職業(yè)能力測驗與申論練習
- 2026年航空航天基礎知識學習入門與實踐題庫
- 2026年體育訓練與健康管理測試題目
- 2026年企業(yè)管理實務能力測試題
- 2026年版權侵權監(jiān)測協(xié)議(實時·發(fā)現(xiàn)版)
- 服務外包人員保密管理制度(3篇)
- 成都高新區(qū)桂溪街道公辦幼兒園招聘編外人員考試備考題庫及答案解析
- 2025年醫(yī)院病歷管理操作規(guī)范
- 2026云南保山電力股份有限公司校園招聘50人筆試備考題庫及答案解析
- GB 4053.2-2025固定式金屬梯及平臺安全要求第2部分:斜梯
- 2026屆上海市長寧區(qū)市級名校高一上數(shù)學期末學業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 2026年煙草公司筆試綜合試題及考點實操指引含答案
- 九年級寒假期末總結課件
- 壓鑄機作業(yè)人員安全培訓課件
- 新產(chǎn)品研發(fā)質(zhì)量管控流程詳解
- 我的Python世界(玩Minecraft我的世界學Python編程)
評論
0/150
提交評論