การสร้างธุรกรรมหลายรายการ
ธุรกรรมที่ทำโดยลูกค้าหลายรายจะอยู่ในคิวในระบบ คนงานจะรับธุรกรรมจากคิวนี้และเพิ่มลงในบล็อก จากนั้นพวกเขาจะขุดบล็อกและนักขุดที่ชนะจะมีสิทธิพิเศษในการเพิ่มบล็อกลงในบล็อกเชนและจะได้รับเงินจำนวนหนึ่งสำหรับตัวเขาเอง
เราจะอธิบายกระบวนการขุดนี้ในภายหลังเมื่อเราพูดถึงการสร้างบล็อกเชน ก่อนที่เราจะเขียนโค้ดสำหรับธุรกรรมหลายรายการให้เราเพิ่มฟังก์ชันยูทิลิตี้ขนาดเล็กเพื่อพิมพ์เนื้อหาของธุรกรรมที่กำหนด
การแสดงธุรกรรม
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 ('-----')
ต่อไปเราจะกำหนดคิวธุรกรรมสำหรับจัดเก็บวัตถุธุรกรรมของเรา
คิวการทำธุรกรรม
ในการสร้างคิวเราประกาศทั่วโลก list ตัวแปรที่เรียกว่า transactions ดังต่อไปนี้ -
transactions = []
เราจะต่อท้ายธุรกรรมที่สร้างขึ้นใหม่แต่ละรายการเข้ากับคิวนี้ โปรดทราบว่าเพื่อความรวดเร็วเราจะไม่ใช้ตรรกะการจัดการคิวในบทช่วยสอนนี้
การสร้างลูกค้าหลายราย
ตอนนี้เราจะเริ่มสร้างธุรกรรม ขั้นแรกเราจะสร้างลูกค้าสี่รายที่จะส่งเงินให้กันเพื่อขอรับบริการหรือสินค้าต่างๆจากผู้อื่น
Dinesh = Client()
Ramesh = Client()
Seema = Client()
Vijay = Client()
ณ จุดนี้เรามีลูกค้า 4 รายชื่อ Dinesh, Ramesh, Seema และ Vijay ขณะนี้เราถือว่าลูกค้าแต่ละรายถือ TPCoins บางส่วนไว้ในกระเป๋าสตางค์เพื่อทำธุรกรรม ข้อมูลประจำตัวของแต่ละไคลเอ็นต์เหล่านี้จะถูกระบุโดยใช้คุณสมบัติเอกลักษณ์ของอ็อบเจ็กต์เหล่านี้
การสร้างธุรกรรมครั้งแรก
ตอนนี้เราเริ่มต้นการทำธุรกรรมครั้งแรกของเราดังนี้ -
t1 = Transaction(
Dinesh,
Ramesh.identity,
15.0
)
ในการทำธุรกรรมนี้ Dinesh จะส่ง 5 TPCoins ไปยัง Ramesh เพื่อให้การทำธุรกรรมประสบความสำเร็จเราจะต้องตรวจสอบให้แน่ใจว่า Dinesh มีเงินเพียงพอในกระเป๋าสตางค์ของเขาสำหรับการชำระเงินนี้ โปรดทราบว่าเราจำเป็นต้องมีการทำธุรกรรมขั้นต้นเพื่อเริ่มการหมุนเวียนของ TPCoin ในระบบ คุณจะเขียนรหัสธุรกรรมสำหรับธุรกรรมการกำเนิดนี้ในไม่ช้าเมื่อคุณอ่าน
เราจะลงนามในธุรกรรมนี้โดยใช้คีย์ส่วนตัวของ Dinesh และเพิ่มลงในคิวธุรกรรมดังนี้ -
t1.sign_transaction()
transactions.append(t1)
หลังจากการทำธุรกรรมครั้งแรกโดย Dinesh เราจะสร้างธุรกรรมอีกหลายรายการระหว่างลูกค้าต่างๆที่เราสร้างไว้ข้างต้น
การเพิ่มธุรกรรมเพิ่มเติม
ตอนนี้เราจะสร้างธุรกรรมเพิ่มขึ้นหลายรายการโดยแต่ละธุรกรรมจะให้ TPCoins สองสามรายการแก่บุคคลอื่น เมื่อมีคนใช้จ่ายเงินไม่จำเป็นที่เขาจะต้องตรวจสอบว่ามียอดคงเหลือเพียงพอในกระเป๋าเงินนี้หรือไม่ อย่างไรก็ตามผู้ขุดจะตรวจสอบความถูกต้องของธุรกรรมแต่ละรายการสำหรับยอดคงเหลือที่ผู้ส่งมีในขณะที่เริ่มต้นธุรกรรม
ในกรณีที่ยอดเงินไม่เพียงพอนักขุดจะทำเครื่องหมายธุรกรรมนี้ว่าไม่ถูกต้องและจะไม่เพิ่มลงในบล็อกนี้
รหัสต่อไปนี้สร้างและเพิ่มธุรกรรมอีกเก้ารายการในคิวของเรา
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ฟังก์ชันที่เราพัฒนาก่อนหน้านี้ ในการถ่ายโอนข้อมูลธุรกรรมทั้งหมดในคิวเพียงแค่วนซ้ำรายการธุรกรรมและสำหรับธุรกรรมที่อ้างถึงแต่ละรายการให้เรียกไฟล์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 วนซ้ำเพื่อทำธุรกรรมที่ยังไม่ได้ขุด
จนถึงตอนนี้คุณได้เรียนรู้วิธีการสร้างลูกค้าเปิดโอกาสให้พวกเขารวมตัวกันและรักษาคิวของธุรกรรมที่รอดำเนินการซึ่งจะถูกขุด ตอนนี้เป็นส่วนที่สำคัญที่สุดของบทช่วยสอนนี้และนั่นคือการสร้างบล็อกเชนเอง คุณจะได้เรียนรู้สิ่งนี้ในบทเรียนถัดไป