استخراج با یافتن هش صحیح که دارای تعداد صفر از پیش تعیین شده در ابتدا است به دست می آید و همچنین سطح دشواری را نشان می دهد. در این مثال از اسکریپت ما ابتدا کتابخانه های لازم را ایمپورت می کنیم.

from bitcoin import *

اگر بسته را ندارید ، می توانید آن را از طریق pip نصب کنید:

pip install bitcoin

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

#Generate private key
my_private_key = random_key()
#display private key
print("Private Key: %sn" % my_private_key)
#Generate public key
my_public_key = privtopub(my_private_key)
print("Public Key: %sn" % my_public_key)
#Create a bitcoin address
my_bitcoin_address = pubtoaddr(my_public_key)
print("Bitcoin Address: %sn" % my_bitcoin_address)

خروجی

Private Key: 82bd4291ebaa6508001600da1fea067f4b63998ed85d996aed41df944c3762be
Public Key: 04f85fa7c009dba8d1e6b7229949116f03cb3de0dfaf4d6ef3e6320a278dfc8dd91baf058fcafe0b5fbf94d09d79412c629d19cc9debceb1676d3c6c794630943d
Bitcoin Address: 1FtaFRNgxVqq4s4szhC74EZkJyShmeH5AU

اکنون به قسمت محاسباتی می رویم که در آن از رمزگذاری SHA256 برای یافتن هش درست استفاده می کنیم. ما کتابخانه را وارد می کنیم و سپس معنای واقعی SHA256 را آزمایش می کنیم.

from hashlib import sha256
sha256("ABC".encode("ascii")).hexdigest()

خروجی

b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78

هنگامی که یک کد را اجرا می کنید، کد هش یکسانی را برای یک رشته خاص دریافت می کنید و بنابراین همیشه یک خروجی مشخص برای یک ورودی مشخص می دهد. طول هش 64 است و هر رقم هگزادسیمال است، که آن را معادل 4 بیت می کند و از این رو کل عدد در واقع 256 بیت است و به همین دلیل است که به SHA256 نیز معروف است.

 

بیت کوین از پروتکلی پیروی می کند که اولین عدد n از آن باید صفر باشد. در حال حاضر مقدار ‘n’ برابر 20 است، اما من آن را با استفاده از ‘n’ کوچکتر به شما نشان می دهم تا در واقع اجرای کد در زمان خطی به پایان برسد. متنی که SHA256 بر روی آن اعمال می کنید از شماره بلوک، جزئیات انتقال، مقدار هش قبلی تشکیل شده است و از آنجا که هر 3 مقدار قبلی برای یک بلوک ثابت است و قابل تغییر نیست، مقدار جدیدی به نام “Nonce” معرفی می شود. هدف ما این است که مقدار Nonce را پیدا کنیم تا هش بلوک در ابتدا طبق پروتکل تعداد صفرهای مورد نیاز را تولید کند.

 

ما با در نظر گرفتن یک تراکنش ساختگی همراه با آخرین شماره بلاک و مقدار هش قبلی شروع به کدگذاری می کنیم. ما در ابتدا با 4 صفر شروع کرده و راه خود را ادامه می دهیم و متوجه خواهید شد که چرا استخراج بیت کوین کار سختی است. ما ابتدا با تعریف SHA256 و Mine Function که ما آنها را call میکنیم، شروع می کنیم.

def SHA256(text):
  return sha256(text.encode("ascii")).hexdigest()

سپس جزئیات مورد نیاز را ارائه می دهیم و استخراج را با 4 صفر در ابتدای هش شروع می کنیم.

transactions='''
A->B->10
B->c->5
'''
difficulty = 4
import time as t
begin=t.time()
new_hash = mine(684260,transactions,"000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad",difficulty)
print("Hash value : ",new_hash)
time_taken=t.time()- begin
print("The mining process took ",time_taken,"seconds")

به همین ترتیب می توانید تغییرات شدید در زمان صرف شده توسط همان کد را مشاهده کنید، زمانی که سختی از 4 به 5 افزایش می یابد و فقط به صورت تصاعدی ادامه می یابد. بنابراین این دلیل اصلی است که استخراج یک بیت کوین اینقدر انرژی و قدرت محاسباتی می گیرد. اگر این کافی نبود، شما باید اولین کسی باشید که هش را پیدا می کنید وگرنه پاداشی دریافت نمی کنید. بنابراین شما همچنین با همه معدنچیان دیگر در آنجا رقابت می کنید و کل این سیستم بر روی مفهوم “PoW” یا “اثبات کار” کار می کند.