آموزش ایجاد چندین تراکنش در بلاک چین پایتون
آموزش ایجاد چندین تراکنش در بلاک چین پایتون
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش ایجاد چندین تراکنش در بلاک چین پایتون خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون
تراکنش های انجام شده توسط مشتریان مختلف در سیستم در صف قرار می گیرند. ماینرها تراکنش ها را از این صف می گیرند و به بلوک اضافه می کنند. سپس آنها بلاک را ماین میکنند و ماینر برنده این امتیاز را خواهد داشت که بلاک را به بلاک چین اضافه کند و از این طریق مقداری پول برای خود به دست آورد.
ما بعداً هنگامی که در مورد ایجاد بلاک چین صحبت می کنیم، این فرآیند استخراج را شرح خواهیم داد. قبل از نوشتن کد برای چندین تراکنش، اجازه دهید یک تابع کاربردی کوچک برای چاپ محتویات یک تراکنش مشخص اضافه کنیم.
نمایش تراکنش
تابع display_transaction یک پارامتر واحد از نوع تراکنش را می پذیرد. شی دیکشنری در تراکنش دریافتی در یک متغیر موقت به نام dict کپی می شود و با استفاده از کلیدهای دیکشنری ، مقادیر مختلف روی کنسول چاپ می شود.
1 2 3 4 5 6 7 8 9 10 11 |
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 ('-----') |
در مرحله بعد، یک صف تراکنش برای ذخیره اشیاء تراکنش تعریف می کنیم.
صف معاملات
برای ایجاد یک صف، یک متغیر فهرست جهانی به نام تراکنش ها را به صورت زیر اعلام می کنیم
1 |
transactions = [] |
ما به سادگی هر تراکنش تازه ایجاد شده را به این صف اضافه می کنیم. لطفاً توجه داشته باشید که برای اختصار، منطق مدیریت صف را در این آموزش پیاده سازی نمی کنیم.
ایجاد چندین مشتری
اکنون، ما شروع به ایجاد تراکنش خواهیم کرد. ابتدا چهار مشتری ایجاد می کنیم که برای دریافت خدمات یا کالاهای مختلف از دیگران برای یکدیگر پول ارسال می کنند.
1 2 3 4 |
Dinesh = Client() Ramesh = Client() Seema = Client() Vijay = Client() |
در این مرحله ما چهار مشتری به نام های دینش، رامش، سیما و ویجی داریم. ما در حال حاضر فرض میکنیم که هر یک از این مشتریان مقداری TPCoin را برای تراکنش در کیف پول خود نگه میدارند. هویت هر یک از این مشتریان با استفاده از ویژگی هویت این اشیا مشخص می شود.
ایجاد اولین تراکنش
اکنون، اولین تراکنش خود را به صورت زیر آغاز می کنیم –
1 2 3 4 5 |
t1 = Transaction( Dinesh, Ramesh.identity, 15.0 ) |
در این تراکنش دینش 5 TPCoin برای رامش ارسال می کند. برای موفقیت آمیز بودن تراکنش، باید اطمینان حاصل کنیم که دینش برای این پرداخت پول کافی در کیف پول خود دارد. توجه داشته باشید که برای شروع گردش TPCoin در سیستم به یک تراکنش genesis نیاز داریم. با خواندن ادامه، در مدت کوتاهی کد تراکنش را برای این تراکنش پیدایش خواهید نوشت.
ما این تراکنش را با استفاده از کلید خصوصی Dinesh امضا می کنیم و به ترتیب زیر به صف تراکنش اضافه می کنیم –
1 2 |
t1.sign_transaction() transactions.append(t1) |
پس از اولین تراکنش انجام شده توسط دینش، چندین تراکنش دیگر بین کلاینت های مختلف که در بالا ایجاد کردیم ایجاد خواهیم کرد.
افزودن تراکنش های بیشتر
اکنون چندین تراکنش دیگر ایجاد خواهیم کرد، که هر تراکنش چند TPCoin به طرف دیگر می دهد. وقتی شخصی پول خرج می کند، لازم نیست که موجودی کافی در این کیف پول را بررسی کند. ماینر به هر حال هر تراکنش را برای موجودی که فرستنده در هنگام شروع تراکنش دارد اعتبار میبخشد.
در صورت عدم تعادل کافی، ماینر این تراکنش را به عنوان نامعتبر علامت گذاری می کند و آن را به این بلوک اضافه نمی کند.
کد زیر نه تراکنش دیگر را ایجاد کرده و به صف ما اضافه می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
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 را همانطور که در اینجا نشان داده شده است، فراخوانی کنید.
1 2 3 |
for transaction in transactions: display_transaction (transaction) print ('--------------') |
معاملات با یک خط چین برای تمایز از هم جدا می شوند. اگر کد بالا را اجرا کنید، لیست تراکنش ها را مانند شکل زیر مشاهده خواهید کرد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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 ----- -------------- |
برای اختصار، من فقط چند تراکنش اول را در لیست چاپ کرده ام. در کد بالا، همه تراکنشهایی که با اولین تراکنش شروع میشوند را چاپ میکنیم، به جز تراکنش پیدایش که هرگز به این لیست اضافه نشد. از آنجایی که تراکنشها به صورت دورهای به بلوکها اضافه میشوند، عموماً علاقهمند به مشاهده لیست تراکنشهایی هستید که هنوز استخراج نشدهاند. در آن صورت، باید یک حلقه مناسب برای تکرار از طریق تراکنشهایی که هنوز استخراج نشدهاند ایجاد کنید.
تا کنون، شما یاد گرفته اید که چگونه مشتری ایجاد کنید، به آنها اجازه دهید در بین خود حضور داشته باشند و صفی از تراکنش های معلق را که قرار است استخراج شوند، حفظ کنید. اکنون، مهمترین بخش این آموزش است و آن ایجاد یک بلاک چین است. این را در درس بعدی خواهید آموخت.
دیدگاه شما