مقالات بلاکچین

طراحی یک اپ برای نشان دادن چگونگی عملکرد بلاکچین

با توجه و استناد به ویکی پدیا، یک بلاکچین پایگاه داده توزیع شده ای ست که برای نگهداری و مراقبت از فهرستی دائمأ در حال رشد از سوابق و مدارک در بلاک ها، استفاده می شود.

جالب به نظر می رسد، اما چگونه کار می کند؟

برای روشن شدن مفهوم بلاکچین، از روش فرمان تِکستی متن باز توسط کاربر   (command-line interface)، به نام Blockchain CLI  استفاده می کنیم. (برای این کار،  ورژن مبتنی بر مرورگر  آن را نیز ساخته ام)

نصب ورژن  CLI

ابتدا  Node.js را نصب کرده وسپس فرمان زیر را اجرا کنید:

npm install blockchain-cli –g
blockchain

سپس این متن را که آماده گرفتن فرمان است، مشاهده خواهید کرد:

—›  Blockchain  و  ! ? Welcome to Blockchain CLI

 

یک بلاک چه شکلی ست؟

برای دیدن بلاکچین فعلی خود، عبارت blockchain ویا bc را در بخش اعلان فرمان وارد کنید. یک بلاک همانند تصویر زیر مشاهده خواهید کرد:

 

یک بلاک در بلاکچین

  • شاخص یا index (شماره بلاک): این کدام بلاک می باشد؟ (به عنوان مثال بلاک آغازین دارای شاخص ۰ است.)
  • هش: آیا بلاک معتبر است؟
  • هش قبلی: آیا بلاک قبلی معتبر است؟
  • زمان درج( Timestamp): کِی این بلاک اضافه شده است؟
  • داده: چه اطلاعاتی در بلاک ذخیره گردیده است؟
  • Nonce: تا قبل از یافتن یک بلاک معتبر،چند مرحلۀ تکرار(iterations) انجام داده ایم؟

 بلاک آغازین

هر بلاکچین با بلاک آغازین «Genesis Block» شروع می شود. همانطور که متعاقبا مشاهده خواهید کرد، هر بلاک در بلاکچین به بلاک قبلی وابسته است، بنابراین برای استخراج اولین بلاک خود، به بلاک آغازین نیازمندیم.

 

وقتی یک بلاک جدید استخراج می شود چه اتفاقی می افتد؟

برای استخراج اولین بلاک، عبارت mine freeCodeCamp♥ را در قسمت فرمان وارد کنید.

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

Index: o+1 = 1

Previous Hash: ۰۰۰۰۰۱۸۰۳۵a828da0…

Timestamp: When the block is added

Data: freeCodeCamp❤

Hash: ??

Nonce: ??

هش چگونه محاسبه می شود؟

یک هش، یک مقدار عددی با طول ثابت است که یک داده انحصاری را شناسایی و مشخص می کند.

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

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)

با داده های فوق، الگوریتم SHA256 یک هش یکتا را محاسبه می کند. داده های مشابه همواره به هش های مشابه منجر خواهند شد.

 

آیا به چهار صفرِ در ابتدای هش ِ بلاک توجه کردید؟

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

}function isValidHashDifficulty(hash, difficulty)
} for (var i = 0, b = hash.length; i < b; i ++)
} if (hash[i] !== ‘0’)
; break
{
{
;   return i >= difficulty

{

این به عنوان سیستم اثبات گواه کار (Proof-of-Work) نیز شناخته می شود.

Nonceچیست؟

Nonce عددی است که از آن برای پیدا کردن یک هش معتبر استفاده می شود.

;let nonce = 0
; let hash
; let input

 }  while(!isValidHashDifficulty(hash))
; nonce = nonce + 1
;  input = index + previousHash + timestamp + data + nonce
hash = CryptoJS.SHA256(input)
{

 

Nonce  تا رسیدن به هشِ معتبر، مرتبا تکرار می شود. در بحث ما، یک هش معتبر حداقل چهار صفر (۰) دارد. پردازش مربوط به پیدا کردن یک nonce که با یک هش معتبر مرتبط باشد را استخراج (mining) می گویند.

با افزایش سختی، امکان این ارتباط با هش های معتبر کاهش می یابد. با کم شدن این امکان، پردازشگر قدرتمندتری برای پیدا کردن یک هش معتبر نیاز است.

اهمیت موضوع در چیست؟

اهمیت موضوع در «تغییر ناپذیر بودن بلاکچین» است.

اگر ما بلاکچین C-B-A، شامل سه بلاک A  و B و Cرا داشته باشیم و شخصی بخواهد اطلاعات بلاک A  را تغییر دهد، این اتفاقی ست که می افتد:

  1. اطلاعات بلاک A تغییر خواهد کرد.
  2. هش بلاک A تغییر خواهد کرد، چرا که از داده ها برای محاسبه این هش استفاده شده است.
  3. بلاک A غیر معتبر می شود چون هش آن دیگر چهار صفر ابتدایی را ندارد.
  4. هش بلاک B تغییر پیدا می کند، چرا که از هش بلاک A برای محاسبه آن استفاده شده بود.
  5. بلاک B غیر معتبر می شود و دلیل آن این است که هش آن دیگر چهار صفر اولیه را ندارد.
  6. هش بلاک C عوض می شود، چرا که از هش بلاک  Bبرای محاسبه آن استفاده گردیده بود.
  7. بلاک C غیر معتبر می شود به این دلیل که هش آن دیگر چهار صفر آغازین را ندارد.

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

امیدوارم این آموزش برای شما مفید واقع شده باشد.



دیدگاه هایی که در این مقاله ارائه شده اند، متعلق به نویسنده می باشند و لزوماً مربوط به Coiniran نمی باشد و نباید به آن نسبت داده شود.



image  & source

نویسنده : حسین

https://coiniran.com/?p=8528
0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
1 دیدگاه
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
رسول غلامی
رسول غلامی
6 سال قبل

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

دکمه بازگشت به بالا
1
0
دیدگاه خود را با کوین ایران به اشتراک بگذارید!x