آموزش ساخت بلاکچین | چگونه شبکه Blockchain بسازیم؟
فناوری بلاکچین از زمان ظهور خود تا به امروز، بهشکل مداوم راه خود را در صنایع مختلف باز کرده است. بسیاری هنوز بلاکچین را با بیت کوین و ارزهای دیجیتال میشناسند؛ درحالیکه ماهیت غیرمتمرکز، شفاف و تغییرناپذیر بلاکچین باعث شده است کاربردهای زیادی در زندگی واقعی ما داشته باشد. به همین دلیل است که افراد زیادی مشتاق یادگیری نحوه ساخت یک بلاکچین از ابتدا هستند. شاید بپرسید مگر ساخت یک بلاکچین به همین سادگی است؟
مسلماً ساده نیست! ولی لزومی ندارد از آن یک غول بسازید. اگر با زبانهای برنامهنویسی آشنا هستید و کمی دانش فنی دارید، میتوانید با تلاش و کار تیمی یک بلاکچین ایجاد کنید. در این مقاله، فرایند ساخت یک شبکه بلاکچین را از صفر بهصورت گام به گام توضیح میدهیم. زبان این مقاله را آنقدر ساده کردهایم که نه فقط برای توسعهدهندگان باتجربه بلکه برای مبتدیان کدنویسی هم مناسب باشد.
بلاک چین چیست؟
بلاکچین یک دفتر کل توزیعشده غیرمتمرکز است که دادهها را در شبکهای از رایانهها به نام نود (Node) بهصورت کاملاً امن ذخیره میکند. به این دلیل نام آن را بلاکچین (Blockchain) گذاشتهاند که همه اطلاعات آن در واحدهایی بهنام بلاک ثبت میشوند و هر بلاک، به بلاک قبل و بعد از خود بهصورت زنجیر متصل است.
این ساختار زنجیرهای باعث میشود حتی یک تغییر کوچک در بلاکها ازنظر محاسباتی تقریباً غیرممکن باشد؛ زیرا اگر بخواهید اطلاعات یک بلاک را دستکاری کنید، باید اطلاعات تمام بلاکهای متصل به آن از دو طرف را تغییر دهید. به همین دلیل است که بلاکچین برای پرداختهای دیجیتال، مدیریت سوابق، ذخیره امن دادهها و حتی رأیگیری الکترونیکی در انتخابات کشورها تا این اندازه محبوب است.
بلاکچین چگونه کار میکند؟
بلاکچین درست مانند یک پایگاه داده سنتی عمل میکند، با این تفاوت که دادهها و اطلاعات آن بهجای جدول در واحدهایی به نام بلاک ذخیره میشوند. برخلاف جدولها، حذف یا بهروزرسانی بلاکها ممکن نیست و شما نمیتوانید دادههای ثبتشده در آن را تغییر دهید.
بلاکچین ازطریق یک شبکه همتا به همتا بین تعداد زیادی از نودها در سراسر شبکه توزیع میشود. بنابراین، در اینجا با یک پایگاه داده متمرکز مواجه نیستیم؛ اما این غیرمتمرکز بودن خدشهای به امنیت بلاکچین وارد نمیکند. بلاکچین با کمک هش رمزنگاری و امضای دیجیتال، امنیت دادهها را تضمین میکند و برای جلوگیری از هرج و مرج، با استفاده از یک الگوریتم اجماع (Consensus) وضعیت شبکه را به تأیید همه نودها میرساند. مکانیزم اجماع اطمینان میدهد که همه نودها نسخه یکسانی از بلاکچین را در اختیار دارند.
مراحل ساخت بلاک چین
حالا که بهطور مختصر با بلاکچین آشنا شدیم، بیایید ببینیم چگونه میتوان یک بلاکچین ایجاد کرد. در این بخش ابتدا نمای کلی مراحل ساخت بلاکچین از ابتدا تا انتها را بررسی میکنیم و سپس یک نمونه عملی از بلاکچین را با هم میسازیم.
مرحله اول: مشخصکردن هدفتان از ساخت بلاکچین
در اولین گام، هدف خود را از ایجاد یک بلاکچین مشخص کنید. چرا میخواهید بلاکچین بسازید؟ قصد دارید از آن بهعنوان بستری برای ایجاد ارز دیجیتال استفاده کنید؟ آیا میخواهید روی آن یک اپلیکیشن غیرمتمرکز (dApp) پیاده کنید؟ یا میخواهید از آن بهعنوان پلتفرمی برای ثبت و ذخیره امن دادههای یک شرکت یا سازمان استفاده کنید؟
هدف شما از ایجاد بلاکچین تعیین میکند که ساختار، مکانیزم اجماع و میزان مقیاسپذیری آن به چه صورت باشد.
مرحله دوم: تعیین کاربرد بلاکچین
در این مرحله باید صنایع مختلف را تجزیهوتحلیل کنید تا ببینید بلاکچینی که میخواهید بسازید برای کدام کسبوکار مناسب است. البته این زمانی است که شرکت یا سازمان خاصی شما را برای ساخت یک شبکه بلاکچینی استخدام نکرده باشد و خودتان تصمیم به عرضه یک بلاکچین داشته باشید. برخی از صنایعی که میتوانید برای آنها بلاکچین بسازید عبارتاند از:
بانکداری و مالی
بلاکچین پتانسیل زیادی در صنایع مالی دارد. کارآیی، شفافیت و قابلیتاستفاده آن در تراکنشها میتواند این فناوری مدرن را به جایگزین مناسبی برای خدمات بانکها ازجمله واریز، برداشت یا انتقال پول تبدیل کند. درحالحاضر برخی بانکها و مؤسسات مالی ازجمله جیپی مورگان چیس (JP Morgan Chase)، کردیت سوئیس (Credit Suisse) و وسترن یونیون (Western Union) درحال استفاده از بلاکچین هستند.
بیمه
بلاکچین برای صنعت بیمه مانند یک فناوری جادویی نیست که بخواهد همهچیز را تغییر دهد. بنابراین، بلاکچینی که برای صنعت بیمه میسازید باید قابلیت ادغام با سیستمهای IT فعلی در شرکتهای بیمه را داشته باشد. شرکتهای بیمه درگیر کاغذبازی و فرایندهای دستی زیادی هستند. بنابراین، بلاکچین میتواند با کاهش هزینهها، پردازش سریعتر عملیات، شفافیت قراردادها، کوتاهکردن زمان عرضه محصولات بیمه جدید به بازار و کاهش خطای انسانی به افزایش رضایت مشتری کمک کند.
زنجیره تأمین
بخش زنجیره تأمین مدتهاست از فناوری بلاکچین استفاده میکند. با کمک بلاکچین میتوان همه مراحل زنجیره تأمین را پیگیری کرد. کسبوکارها میتوانند با سطح شفافیتی که بلاکچین ارائه میدهد، از منشأ محصولاتی که خریداری میکنند اطمینان یابند و هر زمانی که بخواهند، مسیر این محصولات از تولیدکننده به مصرفکننده نهایی را رهگیری کنند.
بهداشت و درمان
یکی از جنبههای چالشبرانگیز صنعت بهداشت و درمان، مدیریت و ذخیره دادهها در چندین سیستم و برقراری ارتباط مؤثر بین آن پلتفرمها است. ایجاد یک سیستم واحد که دادهها را با هر مؤسسهای به اشتراک میگذارد، خطرناک خواهد بود. مشکل دیگر، حساسیت دادهها و اطلاعات این صنعت ازجمله اطلاعات هویتی اشخاص است که بهراحتی میتواند درمعرض خطر حملات سایبری قرار گیرد.
بلاکچین شما میتواند سیستمی به سازمانهای بهداشت و درمان ارائه کند که بدون بهخطرانداختن امنیت و محرمانگی دادههای مربوط به بیماران، آنها را ثبت و ذخیره کند و با سایر نهادهای مربوطه بهاشتراک بگذارد.
املاک و مستغلات
یکی از مشکلات مربوط به خرید یا فروش املاک و مستغلات وجود تقلب و کلاهبرداری، کاغذبازی بیش از حد و واردکردن اطلاعات اشتباه در اسناد مالکیت است. با فناوری بلاکچین میتوان نیاز به ثبت سوابق روی کاغذ را برطرف کرد و بهشکل دقیق و معتبر و بدون اتلاف وقت کارهای مربوط به ثبت، رهگیری و انتقال سند زمین و املاک را انجام داد.
علاوه بر آن، قراردادهای اجاره و مدیریت داراییها ازطریق قراردادهای هوشمند سادهتر میشود. درنتیجه، بلاکچینهایی که برای این کاربرد طراحی میشوند بهتر است از نوع بلاکچینهایی باشند که از قراردادهای هوشمند پشتیبانی میکنند.
امنیت سایبری
ماهیت غیرمتمرکز بلاکچین و مقاومت آن دربرابر حملات دیداس (DDos) به تیمهای امنیتی سازمانها و کسبوکارها کمک میکند راهکارهای خود را برای جلوگیری از هکها و حملات سایبری تقویت کنند.
صنعت بازی
صنعت بازیهای ویدئویی از یک سرگرمی به یک فعالیت حرفهای تبدیل شده است؛ تا حدی که بسیاری افراد با انجام بازیهای بلاکچینی درآمد کسب میکنند. فناوری بلاکچین میتواند از سرقت داراییها، تجهیزات، مهارتها و سایر منابعی که بازیکنان در بازی به دست میآورند جلوگیری کند. برای مثال، فرض کنید در بازی World of Warcraft کلی زحمت کشیدهاید تا کاراکتر یا آیتم خاصی را به دست آورید. بدون بلاکچین، این کاراکترها یا آیتمها ممکن است در طی هکشدن سرور بازی به سرقت برود یا گم شود. این در حالی است که با کمک یک بلاکچین که از قرارداد هوشمند پشتیبانی میکند، میتوانید این داراییها را به ان اف تی (NFT) تبدیل کنید. مالکیت NFTها در اختیار شماست و میتوانید آنها را در هر بازی دیگری بفروشید یا استفاده کنید. کسی هم نمیتواند آنها را از شما بدزدد.
دولت
امروزه دولتها هم از فناوری بلاکچین برای ثبت و ذخیره اسناد و سوابق ملی و تسهیل دریافت کمکهای مالی از کشورهای خارجی استقبال میکنند. علاوه بر آن، میتوان از بلاکچین برای شفافیت فرایند رأیگیری در انتخابات کمک گرفت.
آموزش
مدارس و مؤسسات دانشگاهی میتوانند اطلاعات مربوط به دانشآموزان و دانشجویان را برای تأیید نمرات و مدرک تحصیلی آنها ذخیره کنند. بلاکچینهای خصوصی و کنسرسیومی برای این منظور مناسب به نظر میرسند.
مرحله سوم: انتخاب مکانیزم اجماع
در همه شبکهها و سیستمهای متمرکز، یک نهاد واحد تصمیمات را اتخاذ میکند و همه باید روی آنها توافق کنند. اما در شبکههای غیرمتمرکزی مانند بلاکچین که نهاد واحدی وجود ندارد و اداره آن برعهده تعداد زیادی رایانه در سراسر جهان است، توافق چگونه حاصل میشود؟ راهحل آن مکانیزمی موسوم به اجماع است. بنابراین، بلاکچینی که میسازید باید شامل یک الگوریتم اجماع باشد.
انواع مختلفی از الگوریتمهای اجماع وجود دارد و انتخاب نوع مناسب آن بر امنیت، بهرهوری انرژی و میزان تمرکززدایی بلاکچین شما تأثیر میگذارد. برخی از الگوریتمهای اجماع محبوب عبارتاند از:
اثبات کار (PoW)
این همان مکانیزمی است که در بلاکچین بیت کوین به کار رفته است. در چنین بلاکچینهایی که از اثبات کار استفاده میکنند، وجود نودهایی موسوم به ماینر برای اعتبارسنجی بلاکها ضروری است. این ماینرها با حل مسائل پیچیده ریاضی تراکنشها را اعتبارسنجی کرده و بلاکهای جدید را به بلاکچین اضافه میکنند. این مکانیزم از امنیت بسیار بالایی برخوردار است اما برق زیادی مصرف میکند.
اثبات سهام (PoS)
این مکانیزم اجماعی است که در بلاکچین اتریوم ۲.۰ به کار رفته است. در بلاکچینهای اثبات سهام بهجای ماینرها اعتبارسنجها را داریم. برای تبدیلشدن به اعتبارسنج، نودها باید مقدار مشخصی از توکنهای بومی شبکه را استیک یا سهامگذاری (Stake) کنند. برای مثال، در شبکه اتریوم لازم است حداقل ۳۲ اتر (ETH) بهعنوان وثیقه قفل کنید تا در اعتبارسنجی شرکت داده شوید.
بلاکچینهای اثبات سهام ازنظر مصرف انرژی کارآمدتر از بلاکچین اثبات کار هستند. بااینحال، تمرکززدایی آنها کمتر است زیرا فقط نودهایی که شرایط شبکه را رعایت کرده باشند میتوانند بهعنوان اعتبارسنج انتخاب شوند.
اثبات سهام نمایندگیشده (DPoS)
این مکانیزم اجماعی است که در بلاکچینهایی مانند ایاس (EOS) به کار رفته است. نسخه متفاوتی از اثبات سهام که به دارندگان توکنهای بومی شبکه اجازه میدهد بهجای اینکه خودشان اعتبارسنج باشند، به اعتبارسنجهای منتخب خود رأی دهند تا آنها بهنمایندگی از این افراد کارهای مربوط به اعتبارسنجی را انجام دهند. این الگوریتم ازنظر بهرهوری کارآمدتر و مقیاسپذیرتر از الگوریتم اثبات سهام است.
مرحله چهارم: انتخاب نوع بلاکچین
بلاکچینها انواع مختلفی دارند و هریک از آنها برای کاربردهای خاصی مناسباند. بنابراین، بسیار مهم است که انواع بلاکچینها و ویژگیهای آنها را بشناسید و بدانید که کدامیک با اهداف شما سازگاری دارد. چهار نوع اصلی بلاکچین عبارتاند از:
بلاکچین عمومی (Public Blockchain)
این یک شبکه کاملاً غیرمتمرکز است که هر کسی میتواند در اعتبارسنجی تراکنشها و افزودن بلاکهای جدید به آن مشارکت کند. بلاکچینهای بیت کوین و اتریوم از نوع عمومی هستند. شفافیت و امنیت این بلاکچینها بسیار بالاست اما بهدلیل نیاز به اجماع (مثل اثبات کار و اثبات سهام) بین تعداد زیادی نود، سرعت تراکنش آنها کمتر است.
بلاکچینهای عمومی منبع باز هستند و از کاربران دربرابر توسعهدهندگان محافظت میکنند. این بدان معناست که سازندگان برنامهها و اپلیکیشنها روی بلاکچین عمومی نمیتوانند بر اقدامات خاصی که کاربران در آنها انجام میدهند کنترل داشته باشند. علاوه بر آن، در چنین بلاکچینهایی کاربران نیازی به افشای هویت واقعی خود ندارند. درنتیجه، اگر هدفتان ایجاد یک سیستم پرداخت یا ساخت یک پلتفرم برای طراحی ارز دیجیتال و اپلیکیشنهای غیرمتمرکز است، این بلاکچین میتواند مناسب باشد.
بلاکچین خصوصی (Private Blockchain)
برخلاف بلاکچینهای عمومی، بلاکچینهای خصوصی دسترسی محدودی دارند و بنابراین، هرکسی نمیتواند در آنها مشارکت داشته باشد. در چنین شبکههایی یک مرجع مرکزی تعیین میکند که چه کسی میتواند بهعنوان یک نود فعالیت کند و چه میزان دسترسی به دادهها داشته باشد. حتی نودهای انتخابشده ممکن است مجوزهای یکسانی برای دسترسی به دادهها نداشته باشند.
درنتیجه، بلاکچینهای خصوصی متمرکزتر از بلاکچینهای عمومی هستند و ایرادی هم ندارد؛ زیرا محرمانگی دادهها و سرعت در برخی سازمانها مهمتر از تمرکززدایی است و به همین دلیل نمیتوانند از بلاکچین عمومی استفاده کنند. بلاکچینهای خصوصی بهدلیل مشخصبودن اعتبارسنجها نگرانی از بابت خطر حمله ۵۱درصدی هم ندارند.
ریپل، کوردا (Corda) و هایپرلجر (Hyperledger) سه نمونه از بلاکچینهای خصوصی هستند. اگر هدف شما از ساخت یک بلاکچین ایجاد یک شبکه متمرکز درونسازمانی برای ثبت و ذخیره امن دادهها است که برای دسترسی به آنها به مجوز نیاز باشد، این مدل مناسب است.
بلاکچین کنسرسیومی (Consortium Blockchain)
بلاکچین کنسرسیومی یک مدل نیمهغیرمتمرکز از بلاکچینها است و بهجای یک نهاد واحد، گروهی از سازمانها آن را کنترل میکنند. اغلب در صنایعی مانند بانکداری کاربرد دارد؛ جایی که چندین سازمان و نهاد باید با هم همکاری کنند تا در عین حفظ کنترل، تراکنشها را تأیید کنند.
بلاک چین ترکیبی (Hybrid Blockchain)
این نوع بلاکچین، ترکیبی از بلاکچینهای عمومی و خصوصی است و انعطافپذیری بالایی ارائه میدهد. برای سازمانهایی مناسب است که هم به بلاکچین خصوصی برای دادههای حساس خود نیاز دارند و هم میخواهند مانند یک بلاکچین عمومی عملیات شفاف داشته باشند. دراگنچین (Dragonchain) نمونه خوبی از یک بلاکچین هیبریدی است.
مرحله پنجم: طراحی معماری بلاکچین
حالا که بخشهای مختلف بلاکچین خود را انتخاب کردهاید، وقت آن است که معماری آن را طراحی کنید. برای این کار موارد زیر را در نظر بگیرید:
- نوع بلاک چین: عمومی، خصوصی، کنسرسیوم یا ترکیبی.
- سرعت تراکنش: تعیین سرعت پردازش تراکنشها در هر ثانیه (TPS).
- اندازه بلاک: تعیین حجم اطلاعاتی که هر بلاک میتواند در خود جای دهد. برای مثال، اندازه هر بلاک بیت کوین ۱ مگابایت است ولی بیت کوین کش و اتریوم اندازه بزرگتری دارند.
- معیارهای امنیتی: مشخصکردن تکنیکهای رمزنگاری مثل الگوریتم SHA-256 برای هشینگ که امنیت دادههای بلاکچین را تأمین کند.
مرحله ششم: ایجاد بلاکچین و انجام کارهای فنی مربوط به آن
حالا باید معماری بلاکچین خود را که در مرحله قبل طراحی کردید پیادهسازی کنید. این همان بخش فنی ساخت بلاکچین است. برای انجام آن به مهارتهای کدنویسی در زبانهایی مانند C++، پایتون، جاوا اسکریپت یا Go نیاز دارید. مراحل زیر را طی کنید:
- تنظیمات محیط: نرمافزارهای لازم مانند Geth را برای اتریوم یا مجموعهابزار مربوط به هایپرلجر فابریک (Hyperledger Fabric SDK) را برای بلاکچین مبتنی بر هایپرلجر نصب کنید.
- نوشتن کد: کدی که برای بلاکچین خود مینویسید شامل دستورات لازم برای اضافهکردن تراکنشها، اعتبارسنجی آنها، استخراج (در بلاکچینهای اثبات کار) و… است.
- ساخت بلاکها: بلاکچین شما باید برای ساخت بلاکهای جدید برنامهریزی شود. برای این کار باید کدهای مربوط به گنجاندن تایم استمپ، دادهها، هش بلاک و هش بلاک قبلی را در کد اصلی بلاکچین اضافه کنید.
- ساخت قرارداد هوشمند (اختیاری): این مرحله فقط زمانی مورد نیاز است که بلاکچین شما از قراردادهای هوشمند پشتیبانی کند. در این صورت باید دستورات مربوط به قراردادهای خوداجراشونده را با استفاده از زبانهایی مانند سالیدیتی (Solidity) در کد بلاکچین خود بنویسید.
مرحله هفتم: راهاندازی شبکه و نودها
بلاکچین غیرمتمرکز است؛ بنابراین به نودهای متعددی نیاز دارد. این نودها باید در اعتبارسنجی تراکنشها و حفظ شبکه بلاکچین شما شرکت کنند. اگر بلاکچین شما عمومی است هرکسی میتواند به یک نود تبدیل شود اما در بلاکچینهای خصوصی و کنسرسیومی، خودتان باید مشخص کنید که چه کسی مجوز دسترسی به دادهها را داشته باشد.
مرحله هشتم: آزمایش بلاکچین
اگر یک بلاکچین کاملاً جدید ساختهاید و از ابتدا آن را طراحی کردهاید، این مرحله بسیار مهم است. باید سناریوهایی را که در دنیای واقعی اتفاق میافتند شبیهسازی کنید تا اگر مشکلات احتمالی در آن وجود دارد قبل از راهاندازی شبکه اصلی آن برطرف شود. برای این کار از تستنتها یا شبکههای آزمایشی استفاده کنید. هر نوع آسیبپذیری امنیتی، وقفههای احتمالی در شبکه یا باگهای کد را بررسی کنید. از آن مهمتر، مقیاسپذیری بلاکچین خود را ارزیابی کنید تا ببینید که آیا از عهده پردازش تعداد زیادی تراکنش برمیآید یا نه.
مرحله نهم: راهاندازی شبکه اصلی بلاکچین
درصورتیکه نتایج آزمایشها رضایتبخش بود، میتوانید بلاکچین خود را اجرا کنید. فرقی نمیکند که بلاکچین خود را برای ایجاد یک ارز دیجیتال ساختهاید یا میخواهید یک برنامه غیرمتمرکز بلاکچینی روی آن اجرا کنید یا حتی قرار است آن را در یک سیستمِ موجود ادغام کنید؛ در هر صورت باید بهشکل مستمر بلاکچین خود را ازنظر عملکرد و مسائل امنیتی مورد پایش قرار دهید و بهصورت دورهای آن را بهروزرسانی کنید.
روشهای مختلف ساخت بلاکچین
دو روش کلی برای ساخت بلاکچین وجود دارد:
۱. استفاده از بلاکچینهای ازپیشساختهشده. در این روش از بلاکچینهای موجود مانند اتریوم، فابریک، ایاس یا کوردا استفاده میکنید. برای نمونه، اتریوم برای ایجاد برنامههای غیرمتمرکز، امور مالی غیرمتمرکز (DeFi) و NFTها مناسب است ولی فابریک بیشتر بهدرد پیکربندی بلاکچینهای خصوصی میخورد. این روش سادهتر است و مجبور نیستید با موتور اصلی کار کنید.
۲. ساخت بلاکچین از ابتدا. اگر بلاکچینهای آماده با نیازهای شما مطابقت ندارند، میتوانید از ابتدا یکی بسازید یا کد منبع باز یک بلاکچین را اصلاح کنید. برای مثال، لایت کوین و بیت کوین کش هردو فورکی از بیت کوین بودند و با هدف اصلاح مشکلات بیت کوین ساخته شدند. فراموش نکنید که ساخت یک بلاک چین از ابتدا نیاز به کار و تلاش زیادی دارد و حتماً تیمی از توسعهدهندگان باید روی آن کار کنند. اصلاح بلاکچین هم نهتنها سخت و زمانبر است، به کار زیاد و یک تیم قوی نیاز دارد.
زبانهای موردنیاز برای ایجاد بلاک چین
بیشتر موتورهای اصلی بلاکچین برای سرعت، پایداری و امنیت از زبانهای برنامهنویسی زیر استفاده میکنند:
- C یا C++ (بیت کوین و ایاس)
- Go (هایپرلجر فابریک و اتریوم)
- جاوا (اتریوم)
- Rust
- Haskell (کاردانو)
- Ruby (اتریوم).
البته زبانهای برنامهنویسی فوق اغلب برای مبتدیان سخت هستند. به همین دلیل، موتورهای بلاکچین را طوری طراحی میکنند که امکان برقراری تعامل با سایر زبانهای برنامهنویسی آسانتر مثل پایتون و جاوا اسکریپت فراهم باشد. برخی از موتورهای بلاکچین ازجمله اتریوم هم زبانهای برنامهنویسی را برای سهولت استفاده توسعهدهندگان با هم ترکیب میکنند.
ساخت یک نمونه از بلاکچین
درباره مراحل ساخت بلاکچین صحبت کردیم. حال برای اینکه بهصورت عملی فرایند آن را ببینید، یک بلاکچین ساده و ابتدایی را از نقطه شروع طراحی میکنیم. برای این کار میخواهیم از زبان گولنگ (Golang) که بهاختصار Go نامیده میشود استفاده کنیم. این زبان برنامهنویسی را شرکت گوگل ارائه کرده است. اگر با زبان Go آشنا نیستید، خوب است ابتدا برخی مفاهیم پایه آن شامل توابع، روشها، انواع داده، ساختارها، شرطها و حلقهها را یاد بگیرید. این کار را در پنج مرحله پیش میبریم (شما میتوانید از پایتون یا جاوا اسکریپت هم استفاده کنید):
۱. بررسی پیشنیازها
ابتدا بررسی کنید که این پیشنیازها را داشته باشید:
- ایجاد شبکهای از نودها
- یادگیری مفاهیم رمزنگاری (Cryptography)
- آشنایی با ساختار داده و الگوریتمها
- آشنایی با سیستمهای غیرمتمرکز
- یادگیری دانش زبانهای برنامهنویسی که سادهترین آنها جاوا اسکریپت، Go یا پایتون هستند.
۲. ساخت یک بلاک
کار را با ساختن یک پوشه شروع میکنیم که حاوی دو فایل است: main.go و block.go.
ساختار پوشه
go // the folder
main.go // file 1
block.go // file 2
فایل Main.go
// use the main package
package main
//import the fmt package
import (
"fmt"
)
func main(){
fmt.Println("I am building my first blockchain") // print this
CreateBlock("The header will be shown here", "the body will be shown here") // call the function that will create the block and pass some parameters in it.
}
اگر این برنامه را اجرا (run) کنید، خطا میدهد؛ زیرا تابع CreateBlock هنوز تعریف نشده است. بنابراین، ابتدا آن را در فایل block.go تعریف کنید:
package main
import (
"fmt" // this will help us to print on the screen
)
func CreateBlock(Header, Body string){
fmt.Println(Header ,"\n", Body) // Show me the block content
}
۳. اضافهکردن دادهها به بلاک
یکی از زیباییهای زبان Go این است که لازم نیست توابع را import و export کنید. کافی است نام تابع را با حرف بزرگ بنویسید، Go خودش آن را برایتان پیدا میکند. حالا یک ترمینال باز کنید، به پوشهای که ساختید بروید و دستور go build را اجرا کنید. سپس .\go را در ویندوز یا ./go را در لینوکس و مک اجرا کنید.
در اینجا یک برنامه ساده با Go ساختهایم که یک تابع را فراخوانی میکند و یک سری داده متنی (رشته) را به آن میفرستد. بیایید دو فایل دیگر را به آن اضافه کنیم: blockchain.go و structures.go. درنتیجه، تا بدینجا باید چهار فایل داشته باشیم:
- main.go
- block.go
- structures.go
- blockchain.go
۴. هشکردن بلاک
در این مرحله باید کد هشکردن بلاک را بنویسیم. به هر خط کد یک سری توضیحات اضافه کردهایم که بفهمید داریم چه کار میکنیم.
Structures.go
package main //Import the main package
// Create the Block data structure
// A block contains this info:
type Block struct {
Timestamp int64 // the time when the block was created
PreviousBlockHash []byte // the hash of the previous block
MyBlockHash []byte // the hash of the current block
AllData []byte // the data or transactions (body info)
}
// Prepare the Blockchain data structure :
type Blockchain struct {
Blocks []*Block // remember a blockchain is a series of blocks
}
Block.go
package main
import (
// We will need these libraries:
"bytes" // need to convert data into byte in order to be sent on the network, computer understands better the byte(8bits)language
"crypto/sha256" //crypto library to hash the data
"strconv" // for conversion
"time" // the time for our timestamp
)
// Now let's create a method for generating a hash of the block
// We will just concatenate all the data and hash it to obtain the block hash
func (block *Block) SetHash() {
timestamp := []byte(strconv.FormatInt(block.Timestamp, 10)) // get the time and convert it into a unique series of digits
headers := bytes.Join([][]byte{timestamp, block.PreviousBlockHash, block.AllData}, []byte{}) // concatenate all the block data
hash := sha256.Sum256(headers) // hash the whole thing
block.MyBlockHash = hash[:] // now set the hash of the block
}
// Create a function for new block generation and return that block
func NewBlock(data string, prevBlockHash []byte) *Block {
block := &Block{time.Now().Unix(), prevBlockHash, []byte{}, []byte(data)} // the block is received
block.SetHash() // the block is hashed
return block // the block is returned with all the information in it
}
/* let's now create the genesis block function that will return the first block. The genesis block is the first block on the chain */
func NewGenesisBlock() *Block {
return NewBlock("Genesis Block", []byte{}) // the genesis block is made with some data in it
}
Blockchain.go
package main
// create the method that adds a new block to a blockchain
func (blockchain *Blockchain) AddBlock(data string) {
PreviousBlock := blockchain.Blocks[len(blockchain.Blocks)-1] // the previous block is needed, so let's get it
newBlock := NewBlock(data, PreviousBlock.MyBlockHash) // create a new block containing the data and the hash of the previous block
blockchain.Blocks = append(blockchain.Blocks, newBlock) // add that block to the chain to create a chain of blocks
}
/* Create the function that returns the whole blockchain and add the genesis to it first. the genesis block is the first ever mined block, so let's create a function that will return it since it does not exist yet */
func NewBlockchain() *Blockchain { // the function is created
return &Blockchain{[]*Block{NewGenesisBlock()}} // the genesis block is added first to the chain
}
Main.go
//Time to put everything together and test
package main
import (
"fmt" // just for printing something on the screen
)
func main() {
newblockchain := NewBlockchain() // Initialize the blockchain
// create 2 blocks and add 2 transactions
newblockchain.AddBlock("first transaction") // first block containing one tx
newblockchain.AddBlock("Second transaction") // second block containing one tx
// Now print all the blocks and their contents
for _, block := range newblockchain.Blocks { // iterate on each block
fmt.Printf("Hash of the block %x\n", block.MyBlockHash) // print the hash of the block
fmt.Printf("Hash of the previous Block: %x\n", block.PreviousBlockHash) // print the hash of the previous block
fmt.Printf("All the transactions: %s\n", block.AllData) // print the transactions
} // our blockchain will be printed
}
حالا بیایید آن را اجرا کنیم: اول go build و بعد ./go.
۵. زنجیرکردن بلاکها به یکدیگر
بلاکهای ما هنوز شناسه (ID) و برچسب زمان (Timestamp) را ندارند. بنابراین، بیایید یکسری اطلاعات را با تغییر فایل main.go اضافه کنیم. در حلقه for این دو خط را اضافه کنید:
fmt.Printf("Block ID : %d \n", i)
fmt.Printf("Timestamp : %d \n", block.Timestamp+int64(i))
//Time to put everything together and test
package main
import (
"fmt" // just for printing something on the screen
)
func main() {
newblockchain := NewBlockchain() // Initialize the blockchain
// create 2 blocks and add 2 transactions
newblockchain.AddBlock("first transaction") // first block containing one tx
newblockchain.AddBlock("Second transaction") // second block containing one tx
// Now print all the blocks and their contents
for i, block := range newblockchain.Blocks { // iterate on each block
fmt.Printf("Block ID : %d \n", i) // print the block ID
fmt.Printf("Timestamp : %d \n", block.Timestamp+int64(i)) // print the timestamp of the block, to make them different, we just add a value i
fmt.Printf("Hash of the block : %x\n", block.MyBlockHash) // print the hash of the block
fmt.Printf("Hash of the previous Block : %x\n", block.PreviousBlockHash) // print the hash of the previous block
fmt.Printf("All the transactions : %s\n", block.AllData) // print the transactions
} // our blockchain will be printed
}
حالا کد را ذخیره کنیم و دوباره آن را اجرا کنیم: اول go build و بعد ./go.
همانطور که میبینید، بلاکچین ما بهخوبی ساختار یافته است. بهجز بلاک جنسیس هر بلاک حاوی هش خودش و هش بلاک قبلی است. اگر دادههای بلاک تغییر کند، هش آن بهشکل خودکار تغییر میکند و بنابراین آن بلاک نامعتبر اعلام میشود. بلاک جنسیس چون اولین بلاک است، هش بلاک قبلی ندارد.
دو نقش اصلی در ساخت بلاکچین
در ساخت بلاکچین دو نقش اصلی وجود دارد: مهندس بلاکچین و توسعهدهنده بلاکچین. مهندس بلاکچین فردی حرفهای است که در درک کامل اصول بلاک چین، امنیت و مهندسی نرمافزار برای طراحی، توسعه، نگهداری، تست و ارزیابی موتورها و نرمافزارهای اصلی بلاکچین (مثل Bitcoin Core) مهارت دارد. توسعهدهنده بلاکچین شخص حرفهای دیگری است که برنامههای غیرمتمرکز را روی بلاکچین ایجاد میکند.
سخن پایانی
در این مطلب درباره مراحل ساخت یک بلاکچین صحبت کردیم و یک نمونه عملی از آن را به شما نشان دادیم. به یاد داشته باشید این نمونه کاملاً ابتدایی و ساده بود. درواقع ساخت یک بلاکچین میتواند بسیار پیچیده باشد و به همین دلیل، یک تیم از توسعهدهندگان باید باشند تا بتوانند یک بلاکچین کامل را ایجاد کنند. ساخت بلاکچین فقط شامل کدنویسی نیست و کارهای زیادی وجود دارند که اگر بخواهید همه آنها را بهتنهایی انجام دهید زمان زیادی از شما خواهد گرفت.
سؤالات متداول
بلاکچین یک دفتر کل توزیعشده غیرقابلتغییر از تراکنشها است که با یک شبکه همتا به همتا از نودها کار میکند و دادهها در آن بهشکل امن ذخیره میشوند.
خیر. بلاکچین نه بیت کوین است و نه ارز دیجیتال؛ بلکه فناوری زیربنایی آنها است. این بدان معناست که بلاکچین کاربردهای دیگری به جز ارز دیجیتال هم دارد.
بلاکچین مزایای زیادی نسبت به سیستمهای سنتی دارد که ازجمله آنها میتوان به سرعت تراکنش، شفافیت و امنیت دادهها اشاره کرد.
بله میتوانید. اگر از دانش فنی برخوردارید و با زبانهای برنامهنویسی آشنایی دارید میتوانید بهراحتی یک بلاکچین بسازید. البته ساخت بلاکچین صرفاً شامل کدنویسی نیست و باید کارهای زیادی ازجمله تحقیق درباره بازار انجام دهید که همه این کارها به یک تیم نیاز دارد.
خیر. میتوانید از بلاکچینهای ازقبلساختهشده مثل اتریوم یا هایپرلجر فابریک استفاده کنید. این پلتفرمها ابزارهایی در اختیار شما قرار میدهند تا بلاکچین خودتان را بسازید.
معمولاً موتورهای اصلی بلاکچین از C، C++، جاوا، Rust و هسکل استفاده میکنند اما اغلب آنها طوری طراحی شدهاند که مبتدیان بتوانند از زبانهای برنامهنویسی سادهتری مثل پایتون، جاوا اسکریپت و Go هم استفاده کنند.