آموزش ایجاد ماینرها در بلاک چین پایتون
آموزش ایجاد ماینرها در بلاک چین پایتون
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش ایجاد ماینرها در بلاک چین پایتون خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش پایتون
برای فعال کردن ماینینگ، باید تابع استخراج را توسعه دهیم. عملکرد استخراج نیاز به ایجاد خلاصه در یک رشته پیام داده شده و ارائه اثبات کار دارد. اجازه دهید در این فصل در مورد این موضوع بحث کنیم.
ما یک تابع کاربردی به نام sha256 برای ایجاد خلاصه در یک پیام داده شده می نویسیم
1 2 |
def sha256(message): return hashlib.sha256(message.encode('ascii')).hexdigest() |
تابع sha256 یک پیام را به عنوان پارامتر می گیرد، آن را به ASCII رمزگذاری می کند، یک خلاصه هگزادسیمال تولید می کند و مقدار را به تماس گیرنده برمی گرداند.
تابع ماینینگ
ما اکنون تابع ماینینگ را توسعه میدهیم که استراتژی استخراج خودمان را پیادهسازی میکند. استراتژی ما در این مورد این است که یک هش بر روی پیام داده شده ایجاد کنیم که با یک عدد معین 1 پیشوندی دارد. عدد 1 داده شده به عنوان پارامتری برای تابع استخراج مشخص شده به عنوان سطح دشواری مشخص می شود.
برای مثال، اگر سطح دشواری 2 را مشخص کنید، هش ایجاد شده در یک پیام داده شده باید با دو 1 شروع شود – مانند 11xxxxxxxx. اگر سطح دشواری 3 باشد، هش ایجاد شده باید با سه 1 شروع شود – مانند 111xxxxxxxx. با توجه به این الزامات، اکنون تابع استخراج را همانطور که در مراحل زیر نشان داده شده است، توسعه خواهیم داد.
مرحله 1
تابع استخراج دو پارامتر دارد – پیام و سطح دشواری.
1 |
def mine(message, difficulty=1): |
مرحله 2
سطح دشواری باید بزرگتر یا مساوی 1 باشد، ما این را با عبارت زیر تضمین می کنیم –
1 |
assert difficulty >= 1 |
مرحله 3
با استفاده از سطح دشواری تنظیم شده، یک متغیر پیشوند ایجاد می کنیم.
1 |
prefix = '1' * difficulty |
توجه داشته باشید که اگر سطح دشواری 2 باشد، پیشوند “11” و اگر سطح دشواری 3 باشد، پیشوند “111” خواهد بود و به همین ترتیب. بررسی می کنیم که آیا این پیشوند در خلاصه تولید شده پیام وجود دارد یا خیر. برای هضم خود پیام، از دو خط کد زیر استفاده می کنیم
1 2 |
for i in range(1000): digest = sha256(str(hash(message)) + str(i)) |
ما به اضافه کردن یک عدد جدید i به هش پیام در هر تکرار ادامه می دهیم و یک خلاصه جدید در پیام ترکیبی ایجاد می کنیم. همانطور که ورودی تابع sha256 در هر تکرار تغییر می کند، مقدار هضم نیز تغییر می کند. بررسی میکنیم که آیا این مقدار خلاصه دارای پیشوند بالاتر از مجموعه است.
1 |
if digest.startswith(prefix): |
اگر شرط برآورده شود، حلقه for را خاتمه می دهیم و مقدار digest را به تماس گیرنده برمی گردانیم.
کل کد معدن در اینجا نشان داده شده است –
1 2 3 4 5 6 7 8 |
def mine(message, difficulty=1): assert difficulty >= 1 prefix = '1' * difficulty for i in range(1000): digest = sha256(str(hash(message)) + str(i)) if digest.startswith(prefix): print ("after " + str(i) + " iterations found nonce: "+ digest) return digest |
برای درک شما، دستور چاپ را اضافه کردهایم که مقدار خلاصه و تعداد تکرارهایی را که برای برآورده کردن شرایط قبل از بازگشت از تابع انجام میشود، چاپ میکند.
تست عملکرد ماینینگ
برای آزمایش تابع استخراج، به سادگی عبارت زیر را اجرا کنید –
1 |
mine ("test message", 2) |
وقتی کد بالا را اجرا می کنید، خروجی مشابه زیر را خواهید دید
1 2 |
after 138 iterations found nonce: 11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c |
توجه داشته باشید که خلاصه تولید شده با “11” شروع می شود. اگر سطح دشواری را به 3 تغییر دهید، خلاصه تولید شده با “111” شروع می شود و البته احتمالاً به تعداد بیشتری تکرار نیاز دارد. همانطور که می بینید، یک ماینر با قدرت پردازش بیشتر می تواند پیام داده شده را زودتر استخراج کند. اینگونه است که ماینرها برای کسب درآمد خود با یکدیگر رقابت می کنند.
اکنون، ما آماده ایم تا بلاک های بیشتری را به بلاک چین خود اضافه کنیم. اجازه دهید این را در درس بعدی خود بیاموزیم.
لیست جلسات قبل آموزش بلاک چین پایتون
- آموزش بلاک چین پایتون
- آموزش مقدماتی بلاک چین پایتون
- آموزش کلاینت در حال توسعه در بلاک چین پایتون
- آموزش کلاس مشتری در بلاک چین پایتون
- آموزش کلاس تراکنش در بلاک چین پایتون
- آموزش ایجاد چندین تراکنش در بلاک چین پایتون
- آموزش کلاس بلوک در بلاک چین پایتون
- آموزش ایجاد بلوک جنسیس در بلاک چین پایتون
- آموزش ایجاد بلاک چین پایتون
- آموزش اضافه کردن بلوک جنسیس در بلاک چین پایتون
دیدگاه شما