نحوه کار گواه اثبات کار (PoW) چگونه است؟

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

در بیت کوین، گواه اثبات کار هم چنین زمان تقریبی بیت بلاک ها و در نتیجه نرخ ایجاد بیت کوین های جدید را مشخص می‌کند.

 

گواه اثبات کار

کد زیر چیزی بیشتر از بازی حدس زدنی برای رایانه می‌باشد. کاری که این رایانه انجام می‌دهد پیلود (payload) ثبت زمانی یا پیامی و تعیین مقدار نانس می‌باشد. نانس همان چیزی است که به شبکه امکان می‌دهد تا بدون مرور کردن مراحل قبلی، به بررسی کار انجام شده توسط شما بپردازد. کد زیر بیش از یک مثال معمولی است.

#!/bin/python

#Simple Proof-of-Work example
import sys
import time
import hashlib
from struct import unpack, pack

timestamp = str(time.time())
message = "This is a random message."
nonce = 0
guess = 99999999999999999999
payload = timestamp + message
throttle = 10000000
target = 2**64 / throttle

payloadHash = hashlib.sha512(payload).digest()

start = time.time()
while guess > target:
 nonce += 1
 guess, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + payloadHash).digest()).digest()[0:8])
end = time.time()

print "%s:%s:%s:%s:%s:%s:%s" % (timestamp, message, nonce, guess, payload, target, end-start)

[divider]CCN[/divider]

timestamp = str(time.time())            
message = "This is a random message."
nonce = 0
guess = 99999999999999999999
payload = timestamp + message
throttle = 10000000
target = 2**64 / throttle

 

  • ثبت زمانی (TIMESTAMP): نقطه شروع کار را ثبت می‌کند. به علاوه، منحصربه‌فرد بودن کار هر ماینر را مشخص می‌کند.
  • پیام (MESSAGE): فقط به عنوان مثال در این کد وجود دارد. هشینگ یک رشته می‌تواند کار مناسبی برای این پروژه باشد.
  • پیلود (PAYLOAD): ترکیب چیزهایی است که رمزنگاری خواهید کرد.
  • نانس (NONCE): از صفر تا N متغیر می‌باشد تا زمانی که به مقدار مورد نظر برسد.
  • حدس (GUESS): حدس ها را ذخیره می‌کند و تعداد آن بی نهایت است.
  • تراتل (THROTTLE): برابر با سختی بیت کوین است.
  • هدف (TARGET): حداکثر مقدار ۸ بایتی ها تقسیم بر سختی است.

ثبت زمانی، پیام و پیلود فقط مواردی هستند که به شبکه ارسال می‌کنید. این موارد می‌تواند اطلاعات بلاک باشد.

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

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

هنگامی که سیستم، کار را بررسی می‌کند لازم نیست تمام حدس ها را مرور کند، بلکه فقط نانس ضمیمه شده به اطلاعات را بررسی می‌کند.

 

بازی حدس زدن گواه اثبات کار

while guess > target:
 nonce += 1
 guess, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + payloadHash).digest()).digest()[0:8])

این سه خط، الگوریتم گواه اثبات کار ما می‌باشد که یک چرخه یا لوپ ساده است. این الگوریتم، اطلاعات ما را در دو مرحله SHA256 هش می‌کند. اولین ۸ بایتی ها تبدیل به عدد می‌شوند و بدین صورت رایانه،‌ حدس خود را بیان می‌کند.

هدف بر اساس تخمین هایی که با مقداری عملیات ریاضیاتی انجام شده است و چند مورد آزمون و خطا در اسکریپتی که برای متوجه شدن هش ریت CPU نوشته شده است محاسبه می‌شود. از این مورد برای تعیین معیارها به منظور آزمایش اسکریپت استفاده می‌کنیم.

Proof-of-Work-chart1

 

پس از هر ۲۰۱۶ حدس صحیح (استخراج ۲۰۱۶ بلاک) مقسوم علیه بیت کوین افزایش یا کاهش می‌یابد. این اسکریپت، سختی را مجددا محاسبه نمی‌کند و سختی به طور دستی تعیین می‌شود. شکل فوق نشان می‌دهد افزایش سختی تا چه میزان محدوده هدف را کاهش می‌دهد و احتمال حدس صحیح عدد را کم می‌کند.

nonce += 1

نانس اثبات می‌کند که کار انجام شده است. در این مثال، مقدار نانس بیانگر تلاش های CPU قبل از یافتن حدس معتبر است. از آنجایی که احتمال صحیح بودن هر حدس یکسان است، روش تولید نانس اهمیت ندارد. هرچند، افزایش دادن نانس کم هزینه تر از تولید عدد تصادفی است. هنگامی که کار در شبکه ثبت شد، نانس برای تایید صحت حدس مورد استفاده قرار می‌گیرد.

 guess, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + payloadHash).digest()).digest()[0:8])

حدس درست، اولین ۸ بایتی های هش SHA256 نانس و پیلود می‌باشد. از آنجایی که هدف بین صفر و حداکثر عدد ۸ بایتی ها می‌باشد، حدس نمی‌تواند بیش از حداکثر مقدار ممکن هدف برسد. در هر چرخه، نانس تنها موردی است که تغییر می‌کند. این همان چیزی است که به شما امکان می‌دهد تا کار منحصربه‌فرد خود را در شبکه ثبت کنید و بدون آنکه تمام نودها کار شما را کپی کنند، آن را تایید کنید. با ارائه نانس به نودها، پاسخ را به آنها اهدا می‌کنید. در بیت کوین، از نظر تئوری فارغ از اینکه چه کسی حدس صحیح زده است، تمام ماینرها بلاک مشابهی در شبکه ثبت می‌کنند. مهم‌ترین تفاوت ماینرها، کلید عمومی آنها در کوین بیس است.

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

 

آزمایش اسکریپت گواه اثبات کار

Proof-Of-Work-chart2

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

این موارد، نظریه های رفتار اسکریپت گواه اثبات کار ما بود.

ما این آزمایش را چندین بار انجام دادیم و نتایج به شرح زیر است.

Proof-Of-Work-Chart3

می‌توانید مشاهده کنید که نانس و مقیاس زمانی با یکدیگر ارتباط مستقیم دارند. حدس، مقدار واقعی حدس صحیح است.

۵ آزمایش برای هر سختی انجام شد. برای این تعداد نمونه اندک، نتیجه با پیش بینی های ما تفاوت زیادی نداشت، هرچند شرایط واقعی هرگز همانند تئوری پیش نمی‌روند. تصمیم گرفتیم ۵۰۰ آزمایش برای ردیف وسط و با سختی ۱۰,۰۰۰,۰۰۰ انجام دهیم. این آزمایش حدود ۴ ساعت و نیم طول کشید. ستون مجموع نانس ها و مجموع زمان، مجموع ۵۰۰ آزمایش را نشان می‌دهد. شکل زیر نمودار هر حدس را نشان می‌دهد.

Proof-of-Work-Chart4

 


54321
امتیاز 4.3 از 3 رای

منبع ccn
ممکن است شما دوست داشته باشید

ارسال نظر

  اشتراک  
اطلاع از
عضویت در کانال تلگرام میهن بلاکچین