وایت پیپر اتریوم- قسمت دوم

استخراج (Mining )

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

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

استخراج
استخراج


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

در شرایطی که بلاکی معتبر باشد الگوریتم وارسی طبق الگوی زیر تعریف میشود:

1. Check if the previous block referenced by the block exists and is valid
2. Check that the timestamp of the block is greater than that of the previous block [2] and less than 2 hours into the future.
3. Check that the proof of work on the block is valid.
4. Let S[0] be the state at the end of the previous block.
5. Suppose TX is the block’s transaction list with n transactions. For all i in 0…n-1, set S[i+1] =APPLY(S[i],TX[i]) If any application returns an error, exit and return false.
6. Return true, and register S[n] as the state at the end of this block

اساساً، هرتراکنش در بلاک باید یک وضعیت انتقال داشته باشد. توجه داشته باشید که این وضعیت به هیچ وجه در بلاک رمزگذاری نمیشود.  فقط خلاصه ایست که نود اعتبار سنج آن را به خاطر میسپارد و برای هر بلاک قابل محاسبه میباشد. کافیست از وضعیت بلاک genesis (اولین بلاک هر زنجیره)  و اضافه کردن متوالی هر تراکنش به هر بلاک ،شروع کرد.

البته توجه داشته باشید ، ترتیب تراکنش هایی که استخراج کننده به بلاک میفرستد بسیار مهم است. اگر دو تراکنش A  و B  در یک بلاک داشته باشیم به طوری که B یک UTXO(خروجی خرج نشده) ایجاد شده توسط A را خرج کند، اگر A  قبل از B باشد، بلاک معتبر خواهد بود در غیر این صورت نامعتبر است.

قسمت جالب الگوریتم اعتبار بلاک ، مفهوم ” گواه اثبات کار” است. شرایط باید به گونه ای باشد که هش SHA256 هر بلاک به عنوان یک عدد 256 بیتی ، کمتر از سختی شبکه باشد. در زمان نوشتن این مقاله این عدد تقریبا 2 به توان 190 است.

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

SHA256

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

در ابتدای کار برای جبران خسارت این کار محاسباتی ،به ماینر ها در ازای حل هر بلاک 25 بیتکوین پاداش داده میشد . به علاوه  اگر هر تراکنش در کل، ورودی های بیشتری نسبت به خروجی های خود داشت، اختلاف این دو به عنوان هزینه به استخراج کننده میرسید.

ضمنا این تنها مکانیزمی است که بیتکوین از طریق آن منتشر میشود. در اصل بلاک genesis  اصلاً هیچ کوینی ندارد.

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

درخت درهم سازی ( مرکل)   Merkle Trees

درخت مرکل
درخت مرکل


ویژگی مهم مقیاس پذیری بیتکوین این است که بلاک در یک ساختار داده ای چند سطحی ذخیره می شود. هش یک بلاک در حقیقت هش هدر بلاک است. قسمتی از داده ی تقریباً 200 بیتی است که حاوی برچسب زمان، نانس، هش بلاک قبلی و روت هشی است که داده های همه تراکنش ها در آنجا موجود است.

  1. Send 100 BTC to a merchant in exchange for some product (preferably a rapid-delivery digital go
  2. Wait for the delivery of the product
  3. Produce another transaction sending the same 100 BTC to himself
  4. Try to convince the network that his transaction to himself was the one that came firs

درخت دودویی

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

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

اگر یک کاربر مخرب بخواهد یک تراکنش را به پایین درخت مرکل بفرستد ، این عمل منجر به تغییری در نود بالایی میشود وپله پله این تغییر به نودهای بالاتر هم اعمال میشود. و در آخر ریشه درخت را عوض میکند پس هش بلاک هم عوض میشود و نهایتاً پروتکل، یک بلاک کاملاً متفاوتی ثبت خواهد کرد. (  که حتماً الگوریتم اثبات کار آن نا معتبر خواهد شد)

نود کامل

وجود پروتکل درخت مرکل برای دستیابی به تداوم طولانی مدت ضروری است. در شبکه بیتکوین یک “نود کامل ” ، نودی که پردازش و ذخیره همه بلاک ها را به عهده دارد، از آوریل 2014 تقریبا  15 گیگا بایت از فضای کل شبکه را اشغال کرده است که این حجم ماهانه بیشتر از 1 گیگا بایت افزایش می یابد.

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

simplified payment verification

پروتکل معروف به ” تأییدیه پرداخت ساده”  (simplified payment verification” (SPV”شرایط را برای وجود دسته دیگری از نودها به  اسم نودهای ” لایت”(light nodes)،  فراهم میکند. این نودها هدرهای بلاک را دانلود و الگوریتم اثبات کار را روی آنها چک میکند و در آخر تنها “شاخه های” مربوط به تراکنش های مرتبط را دانلود میکنند.

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

منبع: factcoins.com