اگر به روندهای چند سال گذشته نگاه کنیم، همیشه در مورد بلاکچین شنیده ایم، اما در مورد جزئیات آن چیز زیادی شنیده ایم.
همه ما می دانیم که ارزهای رمزنگاری شده مانند بیت کوین، اتریوم، دوج کوین، Matic و سایرین به فناوری بلاک چین متکی هستند. بلاک چین رویدادهای مهمی را رهبری کرد که در سال 2021 صنایع متعددی را متحول کرد و راه را برای دستاوردهای جدید هموار کرد.
بلاک چین وسیله ای برای ذخیره داده ها به روشی است که ویرایش، هک یا کلاهبرداری آن سخت یا غیرممکن است. این یک دفتر دیجیتالی از تراکنشها است که کپی شده و در کل شبکه سیستمهای کامپیوتری بلاک چین پخش میشود.
این فناوری پایگاه داده پیشگام است که عملاً همه ارزهای دیجیتال را قدرت می دهد. بلاک چین هک یا تقلب سیستم را با پخش کپی های یکسان از یک پایگاه داده در کل شبکه بسیار دشوار می کند.
در حالی که بیت کوین در حال حاضر برجسته ترین کاربرد برای بلاک چین است، این فناوری می تواند کاربردهای بسیار گسترده ای را ارائه دهد.
رمزارزها و بلاک چین ها در سال های اخیر به طور فزاینده ای محبوب شده اند و انتظار می رود این روند ادامه یابد.
ما در این آموزش یک بلاک چین ساده با جاوا اسکریپت می سازیم. این به شما یک درک اساسی از نحوه عملکرد یک بلاک چین را ارائه می دهد.
بیایید آن را MelodyCoin بنامیم و مستقیماً وارد عمل شویم!
ایجاد یک بلوک
برای شروع، یک فایل جاوا اسکریپت جدید ایجاد می کنیم که تمام کدهای خود را در آن قرار می دهیم.
بیایید آن را main.js بنامیم و با توضیحی در مورد چگونگی ظاهر یک بلاک چین و بلوک ها شروع کنیم.
یک کلاس Block ایجاد کنید و برای شروع به آن یک تابع Object() { [کد بومی] } بدهید.
هنگام ایجاد یک بلوک جدید باید تاریخ و هش بلوک قبلی را مشخص کنید:
در اینجا تعاریف هر یک از ویژگی ها آمده است:
- مهر زمانی نشان می دهد که بلوک چه زمانی ساخته شده است. شما می توانید از هر قالبی که انتخاب می کنید استفاده کنید (در این مورد، یک مهر زمانی یونیکس).
- هر نوع داده ای که بخواهید به این بلوک متصل شود می تواند در پارامتر داده گنجانده شود. اگر میخواهید یک ارز رمزنگاری شده ایجاد کنید، میتوانید دادههای تراکنش مانند فرستنده/گیرنده و مقدار پول منتقل شده را در اینجا نگه دارید.
- PreviousHash رشته ای است که هش بلوک قبلی را نگه می دارد. این همان چیزی است که زنجیره بلوکها را تولید میکند، که بعداً در تأمین یکپارچگی بلاکچین ما حیاتی خواهد بود.
ایجاد هش
هر بلوک به بلوک قبلی (بنابراین خاصیت Hash قبلی) پیوند دارد. یعنی هر بلوک به یک هش نیاز دارد. هش شبیه اثر انگشت است. برای هر بلوک متمایز است.
هش یک بلوک را می توان با عبور دادن تمام محتویات آن از طریق یک تابع هش محاسبه کرد.
بنابراین، اجازه دهید با پیاده سازی تابعی که هش بلوک فعلی را محاسبه می کند، شروع کنیم.
بنابراین، در زیر کلاس Block، تابع accountHash را تعریف می کنیم:
با این حال، هش SHA256 توسط جاوا اسکریپت پشتیبانی نمی شود و باید از یک کتابخانه خارجی دریافت شود.
Crypto-js یک بسته فوق العاده است که شامل پیاده سازی ایمن چندین الگوریتم هش است.
سپس می توانیم آن را به کد main.js خود وارد کنیم.
اکنون که تابع ()calculateHash خود را داریم، بیایید آن را برای استفاده در تابع Block خود قرار دهیم:
پس از تشریح ظاهر یک بلاک، میتوانیم تعریف کنیم که یک بلاک چین چگونه باید باشد. پس بیایید یک کلاس جدید ایجاد کنیم.
در این سناریو، بلاک چین یک شی بسیار ساده است که دارای یک زنجیره خصوصیت است. این آرایه ای است که تمام بلوک های زنجیره را در خود نگه می دارد.
قبل از اینکه بتوانیم بلوک ها را اضافه کنیم، ابتدا باید چیزی را ایجاد کنیم که به عنوان "بلوک پیدایش" شناخته می شود. این اولین بلوک در زنجیره است و از این نظر منحصر به فرد است که نمی تواند به بلوک قبلی اشاره کند (اولین بلوک است!).
بنابراین، برای ساخت بلوک genesis، تابعی به نام createGenesisBlock () به کلاس خود اضافه می کنم. بازگشت به تابع Object() { [کد بومی] } کلاس Blockchain ما.
اکنون میتوانیم هر زمان که یک نمونه بلاک چین جدید میسازیم، بلوک پیدایش را اضافه کنیم:
روش های بلاک چین
اکنون، بیایید روش هایی را به کلاس Blockchain خود اضافه کنیم که به ما امکان می دهد کارهایی مانند افزودن بلوک های جدید و واکشی جدیدترین بلوک را انجام دهیم.
تابع getLatestBlock اساسی ترین است. به سادگی عضو نهایی آرایه زنجیره ای را برمی گرداند:
تکنیک addBlock کمی بیشتر درگیر است.
قبل از اینکه بتوانیم یک بلوک جدید به زنجیره خود اضافه کنیم، ابتدا باید فیلد Hash قبلی آن بلوک را به درستی تنظیم کنیم.
باید روی هش آخرین بلوک اضافه شده به زنجیره ما تنظیم شود. همچنین باید هش بلوک جدید را محاسبه کنیم:
تست
بیایید ببینیم MelodyCoin ما چگونه بیرون آمده است.
برای انجام این کار یک نمونه بلاک چین ایجاد کنید. بیایید چند بلوک دیگر اضافه کنیم:
ما دو بلوک جدید در آنجا ساخته ایم. بیایید نگاهی بیاندازیم به اینکه بلاک چین ما در حال حاضر چگونه است.
MelodyCoin با چهار فاصله رشته و قالب بندی می شود:
یکپارچگی بلاک چین را تأیید کنید
بلاکچینها فوقالعاده هستند، زیرا هنگامی که یک بلوک اضافه شد، نمیتوان آن را بدون باطل کردن بقیه زنجیره تغییر داد.
با این حال، هیچ روشی وجود ندارد که بتوانم یکپارچگی بلاک چین خود را با این پیاده سازی بررسی کنم.
بیایید یک تابع isChainValid را به بلاک چین خود معرفی کنیم. اگر زنجیره مشروع باشد، به درستی باز خواهد گشت. در غیر این صورت، false برمی گردد:
تست یکپارچگی
اکنون میتوانیم یکپارچگی بلاک چین خود را آزمایش کنیم. اگر اکنون آن را اجرا کنیم، تایید می کند که زنجیره ما واقعی است.
اکنون بیایید سعی کنیم بلاک چین خود را دستکاری کنیم. بیایید بلوک 2 را تغییر دهیم و محتویات آن را بازنویسی کنیم (فرض کنیم به جای چهار سکه، 100 سکه منتقل کرده ایم).
وقتی این را اجرا می کنیم، می بینیم که نرم افزار تلاش ما برای دستکاری زنجیره را تشخیص می دهد.
با این حال، می توانید باور کنید که روش دیگری برای دخالت من در این مورد وجود دارد. من محتویات بلوک را تغییر دادم اما هش را دوباره محاسبه نکردم. بنابراین می توانید باهوش باشید و هش همان بلوک را دوباره محاسبه کنید.
این تمام چیزی است که در راه اندازی بلاک چین کوچک ما وجود داشت! این به ما امکان می دهد بلوک های جدیدی اضافه کنیم و دستکاری داده ها را در زنجیره تشخیص دهیم.
دو مشکل در بلاک چین کوچک ما وجود دارد که باید به آنها رسیدگی کنیم:
- کامپیوترهای مدرن بسیار سریع هستند و می توانند هزاران بلوک را در چند ثانیه به زنجیره ما اضافه کنند. بدیهی است که نمی خواهیم کسی بلاک چین ما را اسپم کند.
- بلاک چین ما هنوز در برابر دستکاری آسیب پذیر است. می توانید محتویات یک بلوک را به روز کنید و سپس به سادگی هش ها (و هش های قبلی) را برای همه بلوک های بعدی دوباره محاسبه کنید. حتی اگر با آن قاطی کنید، در نهایت با یک زنجیره مشروع روبرو خواهید شد.
برای رفع این نگرانی ها، بلاک چین ها از تکنیکی به نام «اثبات کار» استفاده می کنند. شما باید نشان دهید که از مقدار قابل توجهی از منابع محاسباتی برای ایجاد یک بلوک با استفاده از این رویکرد استفاده کرده اید. این نیز نامیده می شود استخراج معدن.
اثبات کار مستلزم آن است که هش یک بلوک با مقدار مشخصی از صفر شروع شود. اما چگونه می توانید بدانید که هش شما با این قانون مطابقت دارد یا خیر؟
محتویات یک بلوک هش آن را تعیین می کند. بنابراین ما همیشه همان هش را به دست می آوریم، مشروط بر اینکه محتویات را تغییر ندهیم.
هر بلوک باید یک مقدار nonce به عنوان راه حل به آن اضافه شود. این اساساً برخی از دادههای تصادفی است که میتوانیم آنها را تا زمانی که هش بلوک ما با صفرهای کافی شروع شود، بهروزرسانی کنیم. از آنجایی که شما نمی توانید خروجی یک تابع هش را تغییر دهید، باید تعداد زیادی ترکیب مختلف را آزمایش کنید و به بهترین ها امیدوار باشید.
ماینینگ را به بلاک چین معرفی کنید
بیایید با وارد کردن یک nonce در کلاس Block خود شروع کنیم. nonce تنها مقدار درون بلوک ما است که میتوانیم آن را تغییر دهیم تا بر هش بلوک تأثیر بگذاریم.
ما نمی توانیم مهر زمانی یا داده ها را تغییر دهیم.
سپس، اجازه دهید یک تابع ()mineBlock بنویسیم که استخراج واقعی یک بلوک را انجام دهد. این تابع سختی مورد نیاز را به عنوان پارامتر ارسال می کند و تا زمانی که هش بلوک ما با صفرهای کافی شروع شود به اجرا ادامه خواهد داد.
من فقط یک حلقه while اولیه ایجاد کردم که تا زمانی که هش ما با صفرهای کافی شروع شود اجرا می شود. ما از سختی برای تعیین تعداد صفر مورد نیاز استفاده می کنیم. با سختی 5، هش ما باید با 5 صفر شروع شود.
وقتی هش ما حاوی صفرهای کافی نباشد، nonce را یک افزایش می دهیم و هش را دوباره محاسبه می کنیم. و اگر هش متناسب با سختی پیدا کنیم، آن را به کنسول وارد می کنیم.
یه کار دیگه هم باید انجام بدیم ما واقعاً متغیر nonce را در روش محاسبه هش خود در نظر نمی گیریم، بنابراین در اینجا آمده است:
کلاس بلاک چین
بیایید این رویکرد جدید را در کلاس بلاک چین خود آزمایش کنیم و ببینیم چگونه پیش می رود.
برای شروع، من سختی بلاک چین خود را در تابع Object() تعریف می کنم. ما آن را در اینجا تعریف می کنیم زیرا بعداً می توانیم از آن در جایی استفاده کنیم.
سپس تابع addBlock باید طوری اصلاح شود که بلوک را قبل از اضافه کردن آن به زنجیره ما استخراج کند.
از بلاک چین استفاده کنید
اکنون، بیایید بلاک چین جدید خود را با الگوریتم اثبات کار استفاده کنیم. در اینجا، چند عبارت console.log اضافه کنید.
وقتی این کد را اجرا می کنیم، می توانیم مشاهده کنیم که فرآیند استخراج دیگر سریع نیست.
مدتی طول میکشد تا الگوریتم بلوکهایی با هش تولید کند که با سه صفر شروع میشود (همانطور که سختی پیکربندی شده است).
بنابراین این پایان راه اندازی اولیه بلاک چین ما بود.
به لطف مکانیزم اثبات کار، میتوانیم سرعت اضافه شدن بلوکهای جدید به بلاک چین را تنظیم کنیم.
این مهم ترین ویژگی امنیتی در بلاک چین است. و اکنون که میدانید چگونه کار میکند، خودتان را بسازید!
پاسخ دهید