
- Python區塊鏈教程
- Python區塊鏈 - 首頁
- Python區塊鏈 - 簡介
- 區塊鏈 - 開發客戶端
- 區塊鏈 - 客戶端類
- 區塊鏈 - 交易類
- 建立多個交易
- 區塊鏈 - 區塊類
- 區塊鏈 - 建立創世區塊
- 區塊鏈 - 建立區塊鏈
- 區塊鏈 - 新增創世區塊
- 區塊鏈 - 建立礦工
- 區塊鏈 - 新增區塊
- 區塊鏈 - 範圍與結論
- Python區塊鏈資源
- Python區塊鏈 - 快速指南
- Python區塊鏈 - 資源
- Python區塊鏈 - 討論
建立多個交易
各個客戶端進行的交易會排隊進入系統;礦工會從這個佇列中提取交易並將其新增到區塊中。然後他們會挖掘該區塊,獲勝的礦工將有權將該區塊新增到區塊鏈中,從而為自己賺取一些錢。
我們稍後在討論區塊鏈建立時會描述這個挖掘過程。在我們編寫多個交易的程式碼之前,讓我們新增一個小的實用函式來列印給定交易的內容。
顯示交易
display_transaction 函式接受一個交易型別的單個引數。接收到的交易中的字典物件被複制到名為 dict 的臨時變數中,並使用字典鍵在控制檯上列印各種值。
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 ('-----')
接下來,我們定義一個交易佇列來儲存我們的交易物件。
交易佇列
要建立一個佇列,我們宣告一個名為 transactions 的全域性 list 變數,如下所示:
transactions = []
我們將簡單地將每個新建立的交易新增到此佇列中。請注意,為簡潔起見,我們不會在此教程中實現佇列管理邏輯。
建立多個客戶端
現在,我們將開始建立交易。首先,我們將建立四個客戶端,他們將互相傳送錢以從他人那裡獲得各種服務或商品。
Dinesh = Client() Ramesh = Client() Seema = Client() Vijay = Client()
此時,我們有四個名為 Dinesh、Ramesh、Seema 和 Vijay 的客戶端。我們目前假設這些客戶端中的每一個都在他們的錢包中持有一些 TPCoin 用於交易。這些客戶端的身份將使用這些物件的 identity 屬性來指定。
建立第一筆交易
現在,我們啟動我們的第一筆交易,如下所示:
t1 = Transaction( Dinesh, Ramesh.identity, 15.0 )
在這筆交易中,Dinesh 向 Ramesh 傳送 5 個 TPCoin。為了使交易成功,我們必須確保 Dinesh 的錢包中有足夠的錢進行此付款。請注意,我們將需要一筆創世交易來啟動系統中的 TPCoin 流通。您將在閱讀過程中很快編寫這筆創世交易的程式碼。
我們將使用 Dinesh 的私鑰簽署此交易,並將其新增到交易佇列中,如下所示:
t1.sign_transaction() transactions.append(t1)
在 Dinesh 進行第一筆交易後,我們將建立更多在上面建立的不同客戶端之間的交易。
新增更多交易
現在,我們將建立更多交易,每筆交易都向另一方支付少量 TPCoin。當有人花錢時,他不必檢查其錢包中是否有足夠的餘額。無論如何,礦工在發起交易時都會驗證傳送者擁有的餘額。
如果餘額不足,礦工會將此交易標記為無效,並且不會將其新增到此區塊中。
以下程式碼建立並向我們的佇列添加了九個交易。
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)
執行上述程式碼後,佇列中將有十個交易供礦工建立他們的區塊。
轉儲交易
作為區塊鏈管理員,您可能需要定期檢視交易佇列的內容。為此,您可以使用我們之前開發的 display_transaction 函式。要轉儲佇列中的所有交易,只需迭代 transactions 列表,併為每個引用的交易呼叫 display_transaction 函式,如下所示:
for transaction in transactions: display_transaction (transaction) print ('--------------')
交易之間用虛線隔開以示區分。如果您執行上述程式碼,您將看到如下所示的交易列表:
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 ----- --------------
為簡潔起見,我只列印了列表中的前幾筆交易。在上面的程式碼中,我們列印從第一筆交易開始的所有交易,除了從未新增到此列表中的創世交易。由於交易會定期新增到區塊中,您通常只對尚未挖掘的交易列表感興趣。在這種情況下,您需要建立一個適當的 for 迴圈來迭代尚未挖掘的交易。
到目前為止,您已經學習瞭如何建立客戶端、允許他們在彼此之間進行交易以及維護待挖掘的未決交易佇列。現在,本教程最重要的部分來了,那就是建立區塊鏈本身。您將在下一課中學習這一點。