بلاکچین چطور کار میکند؟ توضیح عملی و واضح در سایت
بر طبق تعریف ویکیپدیا:
بلاکچین (Blockchain) فناوری است که اطلاعات را به صورت غیرمتمرکز بر روی سیستمهای متفاوت به صورت رکوردهای کاملی از بلاکها نگهداری میکند.
به نظر خیلی عالی میاد، ولی چطور کار میکند؟
برای واضح کردن این موضوع از یک برنامه اپن سورس به نام Blockchain CLI استفاده می کنیم که شما میتوانید از آدرس http://blockchaindemo.io/ به نسخه تحت وب آن دسترسی داشته باشید.
نصب نسخه Blockchain CLI
اگر برنامه Node.js را نصب ندارید، ابتدا نصب نمایید.
حالا این خط فرمان را در ترمینال اجرا کنید:
npm install blockchain-cli -g
blockchain
شما باید پیام Welcome to Blockchain CLI! و یک blockchain آماده دریافت فرمان است را مشاهده کنید.
یک بلاک چه شکلی است؟
برای مشاهده بلاکچینی که در حال حاضر موجود است شما باید کلمه blockchain و یا bc را وارد خط فرمان کرده و اینتر را بزنید. شما باید تصویری مانند زیر را مشاهده کنید:
- Index (Block #): این بلاک چیست
- Hash: این بلاک معتبر است؟
- Previous Hash: آیا بلاک قبلی معتبر بوده است؟
- Timestamp: کی بلاک اضافه شده است؟
- Data: چه اطلاعاتی در بلاک ذخیره شده است؟
- Nonce: چه تعدادی کلمه تصادفی را باید امتحان کنیم تا به یک بلاک معتبر برسیم؟
بلاک جنسیس (Genesis Block)
هر بلاکچینی با یک بلاک جنسیس آغاز میشود. همانطور که خواهید دید در بلاکچین هر بلاکی به بلاک قبلی خود مربوط است. بنابراین بلاک جنسیس نیاز است تا به عنوان اولین بلاک برای بلاکهای بعدی مورد استفاده قرار گیرد.
وقتی یک بلاک جدید ماین (mine) میشود چه اتفاقی رخ میدهد؟
ابتدا دستور mine freecodecamp را در خط فرمان وارد میکنیم.
بلاکچین به دنبال آخرین بلاک براساس ایندکس آن میگردد که در اینجا آخرین همان بلاک اولی یعنی بلاک جنسیس است.
Index: 0+1=1
Previus Hash: 0000018035a828da0…
Timestamp: زمانی که بلاک اضافه گشته
Data (اطلاعات): freecodecamp
Hash: ??
Nounce: ??
چطور هش محاسبه میگردد؟
مقدار هش یک عدد یا ترکیبی از عدد و حرف است که به طور خاص اطلاعات خاصی را مشخص میکند. هش با محاسبه از ایندکس، هش بلاک قبلی، زمان اضافه شدن بلاک، اطلاعات بلاک، و عدد Nonce، حساب میشود.
با استفاده از الگوریتم SHA256 یا الگوریتمهای مشابه این مقدار خاص هش با استفاده از ورودیها محاسبه میشود. تعداد 0 اولیه مورد نیاز را تحت عنوان سختی سیستم نام میبرند.
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 به چه معنی است؟
یک نونس (nounce) به عددی گفته میشود که باعث پیدا کردن یک هش معتبر شده است:
let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {
nonce = nonce + 1;
input = index + previousHash + timestamp + data + nonce;
hash = CryptoJS.SHA256(input)
}
نونس آنقدر تکرار میشود تا عدد یا کلمه مورد نیاز برای یک هش معتبر پیدا شود. در موردی که بررسی میکنیم یک هش معتبر باید حداقل دارای چهار عدد 0 در ابتدای خود باشد. فرایند پیدا کردن یک نونس مناسب مربوط به یک هش معتبر را ماینینگ (mining) مینامند.
چرا این مسئله مهم است؟
این مسئله از آنجا بسیار مهم است که باعث میشود بلاکچین غیرقابل نفوذ شود.
اگر ما بلاکچینی به ترتیب الف > ب > ج داشته باشیم، و کسی بخواهد اطلاعاتی را در بلاک الف تغییر دهد این اتفاق رخ میدهد:
- اطلاعات بلاک الف تغییر میکند.
- هش مربوط به بلاک الف تغییر کرده چون اطلاعات آن تغییر پیدا کرده است.
- بلاک الف بیمصرف میشود زیرا که دارای هش با چهار عدد صفر در ابتدای هش نیست.
- بلاک ب تغییر میکند زیرا که هش مربوط به بلاک الف که برای محاسبه بلاک ب استفاده شده تغییر کرده است.
- بلاک ب بیمصرف و غیرقابل قبول میشود بدلیل اینکه دیگر دارای چهار عدد صفر در ابتدای هش خود نیست.
- بلاک ج تغییر میکند زیرا که بلاک ب که برای محاسبه آن استفاده شده است، تغییر پیدا کرده است.
- بلاک ج بیمصرف شده زیرا که دارای چهار عدد صفر در ابتدای هش خود نیست.
تنها راهی که میشود یک بلاکچین را تغییر داد این است که هرچه اطلاعات که تابحال در آن ثبت شده است را از ابتدا تغییر داده و بین همهی سیستمها یکسان کرد، و از آنجایی که اطلاعات و بلاک دایما در حال اضافه شدن به سیستم هستند و همچنین تعداد زیادی سیستم این اطلاعات را دارند تقریبا امری غیر ممکن است.