آموزش کلاس تراکنش در بلاک چین پایتون

2 سال پیش

آموزش کلاس تراکنش در بلاک چین پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کلاس تراکنش در بلاک چین پایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون و جنگو

در این درس، اجازه دهید یک کلاس Transaction ایجاد کنیم تا مشتری بتواند برای کسی پول ارسال کند. توجه داشته باشید که مشتری می تواند هم فرستنده و هم گیرنده پول باشد. وقتی می خواهید پول دریافت کنید، فرستنده دیگری تراکنش ایجاد می کند و آدرس عمومی شما را در آن مشخص می کند. مقداردهی اولیه یک کلاس تراکنش را به صورت زیر تعریف می کنیم

def __init__(self, sender, recipient, value):
   self.sender = sender
   self.recipient = recipient
   self.value = value
   self.time = datetime.datetime.now()

 

متد init سه پارامتر دارد – کلید عمومی فرستنده، کلید عمومی گیرنده و مقداری که باید ارسال شود. اینها در متغیرهای نمونه برای استفاده توسط روش های دیگر ذخیره می شوند. علاوه بر این، یک متغیر دیگر برای ذخیره زمان تراکنش ایجاد می کنیم.

در مرحله بعد، یک متد کاربردی به نام to_dict می نویسیم که هر چهار متغیر نمونه ذکر شده در بالا را در یک شی دیکشنری ترکیب می کند. این فقط برای قرار دادن کل اطلاعات تراکنش از طریق یک متغیر است.

همانطور که از آموزش قبلی می دانید که اولین بلاک در بلاک چین یک بلوک Genesis است. بلوک Genesis شامل اولین تراکنش است که توسط خالق بلاک چین آغاز شده است. هویت این شخص ممکن است مانند مورد بیت کوین مخفی بماند. بنابراین وقتی اولین تراکنش ایجاد شد، خالق ممکن است هویت خود را به عنوان Genesis ارسال کند. بنابراین، در حین ایجاد فرهنگ لغت، بررسی می کنیم که آیا فرستنده Genesis است یا خیر و اگر چنین است، به سادگی مقداری رشته را به متغیر هویت اختصاص می دهیم. در غیر این صورت، هویت فرستنده را به متغیر هویت اختصاص می دهیم.

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})

 

در نهایت، این شی دیکشنری را با استفاده از کلید خصوصی فرستنده امضا می کنیم. مانند قبل، ما از PKI داخلی با الگوریتم SHA استفاده می کنیم. امضای تولید شده برای دریافت نمایش ASCII برای چاپ و ذخیره آن در بلاک چین رمزگشایی می شود. کد روش 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')

 

تست کلاس تراکنش

برای این منظور دو کاربر به نام های دینش و رامش ایجاد می کنیم. دینش ۵ TPCoin به رامش ارسال خواهد کرد. برای این کار ابتدا کلاینت هایی به نام دینش و رامش ایجاد می کنیم.

Dinesh = Client()
Ramesh = Client()

 

به یاد داشته باشید که وقتی یک کلاس Client را نمونه‌سازی می‌کنید، کلیدهای عمومی و خصوصی منحصر به فرد مشتری ایجاد می‌شوند. از آنجایی که دینش در حال ارسال پرداخت به رامش است، به کلید عمومی رامش نیاز دارد که با استفاده از ویژگی هویت مشتری به دست آمده است.

بنابراین، نمونه تراکنش را با استفاده از کد زیر ایجاد خواهیم کرد

t = Transaction(
   Dinesh,
   Ramesh.identity,
   ۵٫۰
)

 

توجه داشته باشید که پارامتر اول فرستنده، پارامتر دوم کلید عمومی گیرنده و پارامتر سوم مبلغی است که باید منتقل شود. روش sign_transaction کلید خصوصی فرستنده را از اولین پارامتر برای آهنگسازی تراکنش بازیابی می کند.

پس از ایجاد شی تراکنش، با فراخوانی متد sign_transaction آن را امضا می کنید. این روش امضای تولید شده را در قالب قابل چاپ برمی گرداند. ما امضا را با استفاده از دو خط کد زیر تولید و چاپ می کنیم

signature = t.sign_transaction()
print (signature)

 

وقتی کد بالا را اجرا می کنید، خروجی مشابه این − را خواهید دید

۷c7e3c97629b218e9ec6e86b01f9abd8e361fd69e7d373c38420790b655b9abe3b575e343c7
۱۳۷۰۳ca1aee781acd7157a0624db3d57d7c2f1172730ee3f45af943338157f899965856f6b0
۰e34db240b62673ad5a08c8e490f880b568efbc36035cae2e748f1d802d5e8e66298be826f5
c6363dc511222fb2416036ac04eb972

 

اکنون که زیرساخت اصلی ما برای ایجاد یک مشتری و یک تراکنش آماده است، اکنون چندین مشتری خواهیم داشت که چندین تراکنش را مانند یک موقعیت واقعی انجام می دهند.

 

منبع.

 

لیست جلسات قبل آموزش بلاک چین پایتون

  1. آموزش بلاک چین پایتون
  2. آموزش مقدماتی بلاک چین پایتون
  3. آموزش کلاینت در حال توسعه در بلاک چین پایتون
  4. آموزش کلاس مشتری در بلاک چین پایتون
0
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه