مقدمه ای بر معرفی فناوری بلاک چین و اجرای آن در پایتون

فناوری بلاک چین که در سال ۲۰۰۹ و توسط فرد یا افراد ناشناسی به اسم ساتوشی ناکاموتو تاسیس شده است، پتانسیل چشمگیری به عنوان یک روش سریع، ایمن و آسان برای انتقال یا دریافت سرمایه دارد. شاید برایتان این سوال پیش آمده باشد که نحوه کار این فناوری چگونه است؟

برای مبتدیان می‌توان گفت که در بلاک چین برخلاف بانک‌ها هیچگونه نهاد مرکزی که تراکنش‌ها را نظارت کند وجود ندارد. تمام جزییات تراکنش بین دریافت‌کننده و ارسال‌کننده به صورت خصوصی باقی می‌ماند و به هیچگونه واسطه‌ای نیاز نیست. به علاوه، سهولت دسترسی به ویژگی‌های بلاک چین بسیار شگفت‌انگیز است. برای مثال کشورهایی وجود دارند که دسترسی به وب‌سایت‌های پرداخت نظیر پی‌پال ممنوع شده‌ است و این موضوع، موانع بسیار زیادی برای افرادی به وجود می‌آورد که در صدد دریافت یا ارسال سرمایه به کشورهای دیگر هستند. از طرف دیگر، ارزهای دیجیتال هیچگونه مرزی ندارند. می‌توان ارزهای دیجیتال را از هر نقطه از جهان به هر مکان دیگری ارسال کرد.

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

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

نحوه کار بلاک چین چگونه است؟

نمودار بلاک چین پایه

نحوه کار بلاک چین چگونه است؟ چه عاملی باعث ایمن شدن آن است؟ در این مقاله به نحوه کار بلاک چین خواهیم پرداخت و نوشتن کد بلاک چین را قدم به قدم بیان خواهیم کرد.

بلاک چین، زنجیره‌ای از بلاک‌ها است. هر بلاک شامل یک هش (hash)، یک شاخص (index) و اطلاعاتی درباره تراکنش خاصی است که صورت گرفته است.

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

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

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

1

سپس تابعی تعریف خواهیم کرد که از ارسال‌کننده درخواست می‌کند تا اطلاعات خود نظیر مقدار تراکنش و آدرس دریافت‌کننده را وارد کند.

2

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

3

نکته: اطلاعات تراکنش در لغت‌نامه ذخیره می‌شوند، بنابراین در صورت نیاز می‌توانیم با استفاده از “کلیدها” به مقادیر موردنظر دسترسی یابیم.

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

الگوریتم SHA-256

الگوریتم هشینگ SHA-256 در سال ۲۰۰۱ توسط NSA (آژانس امنیت ملی آمریکا) ایجاد شده است. این الگوریتم، ورودی با هر اندازه‌ای را دریافت می‌کند و آن را به یک خروجی با اندازه ثابت تبدیل می‌کند. نکته جالب در خصوص SHA-256 این است که کدگشایی خروجی تقریبا غیرممکن است و به همین دلیل، امنیت بلاک چین تامین می‌گردد.

بخش هش بلاک در بلاک چین همان خروجی الگوریتم SHA-256 است که در آن، ورودی همان هش بلاک قبلی، شاخص و اطلاعات تراکنش است که به فرمت یک رشته ترکیب شده‌اند.

در ادامه به بررسی این کد می‌پردازیم:

ما از قبل کتابخانه hashlib را ایمپورت کرده‌ایم.

سپس تابعی ایجاد خواهیم کرد که هش، شاخص و اطلاعات تراکنش بلاک قبلی را دریافت کرده و آنها را به هش بلاک بعدی تبدیل می‌کند. از آنجایی که بلاک چین ما با بلاک جنسیس شروع می‌شود، مقدار XYZ را برای هش بلاک قبلی (previous_hash) تعیین می‌کنیم.

4

گواه اثبات کار

این نکته را می‌دانیم که هش با استفاده از الگوریتم SHA-256 و مجموعه‌ای از ورودی‌ها ایجاد می‌شود. اما این موضوع، افزودن بلاک به بلاک چین را اندکی آسان می‌کند.

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

گواه اثبات کار از الگوریتم SHA-256 مشابه استفاده می‌کند، اما به جای دریافت ورود و ارائه یک خروجی، شرایط خاصی برقرار است. برای مثال، دو کاراکتر اول هش خروجی باید صفر باشد.

هش با استفاده از الگوریتم SHA-256 با ورودی‌های مشابه به علاوه عددی به اسم گواه (proof) محاسبه می‌شود. بنابراین، گواه اساسا با فاصله یک واحدی افزایش می‌یابد تا شرایطی که تعیین کردیم برقرار شود.

پس از مهیا شدن شرایط، هش حاصل شده از hash_block به بلاک و بلاک به بلاک چین اضافه خواهد شد.

اکنون به بررسی کد تابع گواه اثبات کار می‌پردازیم:

5

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

استخراج بلاک

تا اینجای کار نحوه عملکرد الگوریتم گواه اثبات کار را بیان کردیم. اما بلاک چگونه استخراج می‌شود. به کد زیر دقت کنید:

6

همانطور که از کد فوق می‌توان مشاهده کرد، ابتدا تابع hash_block را تعریف می‌کنیم که یک رشته خالی به اسم previous_hash دریافت می‌کند و سایر مقادیر بلاک نظیر شاخص‌ها و اطلاعات تراکنش را به عنوان رشته به آن می‌افزاید و یک رشته بزرگ شکل می‌دهد. سپس این رشته به عنوان یک رشته رمزگذاری‌شده با استفاده از الگوریتم SHA-256 برگردانده می‌شود.

سپس از تابع mine_block که از تابع hash_block برای برگرداندن هش استفاده می‌کند و از گواه اثبات کار برای محاسبه هش استفاده می‌کنیم.

سپس نتایج (عدد گواه و هش) با اسم block به لغت‌نامه اضافه می‌شود که در ادامه به فهرست بلاک‌چین ضمیمه خواهد شد.

این اقدامات، اولین بلاک را ایجاد می‌کند. اما یک نکته هم‌چنان جا مانده است.

اگر فردی در صدد دستکاری بلاک چین باشد چه اتفاقی رخ می‌دهد؟ برای مثال اگر فردی بخواهد مقادیر موجود در بلاک را تغییر دهد، چگونه می‌توانیم مانع از انجام این کار شویم؟ پاسخ این پرسش بسیار ساده است. یک تابع بررسی در زنجیره قرار می‌دهیم که previous_hash یک زنجیره را با هش محاسبه‌شده بلاک قبلی مقایسه می‌کند. به کد زیر دقت کنید:

7

سپس شرایطی را اضافه می‌کنیم که تابع فوق را اجرا می‌کند:

8

اگر هرکدام از مقادیر داخل بلاک چین دستکاری شود، تابع فوق نتیجه Invalid chain (زنجیره نامعتبر) ایجاد خواهد کرد.

در آخر می‌توان گفت که کدهای زیر برای تعامل کاربر با زنجیره است:

9

کد فوق کاملا گویا و مشخص است. ورودی 1 برای دریافت تراکنش از تابع ورودی (input) استفاده می‌شود. ورودی 2 برای استخراج بلاک و ورودی 3 برای تابع تغییر بلاک مورد استفاده قرار می‌گیرند.

از تابع alter_block (تغییر بلاک) برای آزمایش عملکرد تابع verify_chain (تایید زنجیره) استفاده می‌کنیم.

کد تابع alter_block به صورت زیر است:

10

نکته: در تابع فوق، بلاک اول را با تغییر previous_hash از XYZ به ABC تغییر می‌دهیم. این اقدام منکر به هش نادرست و اشتباه می‌شود و در نتیجه، شرایط اجرای تابع verify_hash فعال خواهد شد.

نتیجه‌گیری

در این مقاله، به بررسی مفاهیم پایه فناوری بلاک چین با نسخه ساده‌ای از پایتون پرداختیم. قطعا مطالب بسیار بیشتری نظیر شبکه نودها، API ها و OOP در خصوص بلاک چین وجود دارد.

در آخر می‌توان گفت که فناوری بلاک چین دارای پتانسیل بسیار زیادی است و آینده نویدبخشی را نشان می‌دهد.


54321
امتیاز 5 از 3 رای

منبع medium
ممکن است شما دوست داشته باشید

ارسال نظر