اگر ہم پچھلے چند سالوں کے رجحانات پر نظر ڈالیں، تو ہم نے ہر وقت بلاک چین کے بارے میں سنا ہے، لیکن تفصیلات کے بارے میں زیادہ کچھ نہیں۔
ہم سب اس بات سے واقف ہیں کہ کریپٹو کرنسیز جیسے کہ Bitcoin، Ethereum، Dogecoin، Matic، اور دیگر بلاکچین ٹیکنالوجی پر انحصار کرتے ہیں۔ Blockchain نے ان اہم واقعات کی قیادت کی جنہوں نے 2021 میں متعدد صنعتوں میں انقلاب برپا کیا اور نئی کامیابیوں کی راہ ہموار کی۔
Blockchain ڈیٹا کو اس طرح ذخیرہ کرنے کا ایک ذریعہ ہے جس میں ترمیم کرنا، ہیک کرنا یا دھوکہ دینا مشکل یا ناممکن ہے۔ یہ لین دین کا ایک ڈیجیٹل لیجر ہے جو نقل کیا جاتا ہے اور بلاک چین کے کمپیوٹر سسٹمز کے پورے نیٹ ورک میں پھیلا ہوا ہے۔
یہ زمین کو توڑ دینے والی ڈیٹا بیس ٹیکنالوجی ہے جو عملی طور پر تمام کریپٹو کرنسیوں کو طاقت دیتی ہے۔ بلاکچین پورے نیٹ ورک میں ڈیٹا بیس کی ایک جیسی کاپیاں پھیلا کر سسٹم کو ہیک کرنا یا دھوکہ دینا ناقابل یقین حد تک مشکل بنا دیتا ہے۔
اگرچہ Bitcoin اب بلاکچین کے لیے سب سے نمایاں استعمال ہے، لیکن یہ ٹیکنالوجی بہت وسیع اقسام کی ایپلی کیشنز کی خدمت کر سکتی ہے۔
حالیہ برسوں میں کریپٹو کرنسیز اور بلاک چینز تیزی سے مقبول ہو رہے ہیں، اور یہ رجحان جاری رہنے کی توقع ہے۔
ہم اس ٹیوٹوریل میں جاوا اسکرپٹ کے ساتھ ایک سادہ بلاک چین بنائیں گے۔ یہ آپ کو ایک بنیادی تفہیم فراہم کرے گا کہ بلاکچین کیسے کام کرتا ہے۔
آئیے اسے MelodyCoin کہتے ہیں اور ایکشن میں شامل ہوں!
ایک بلاک بنانا
شروع کرنے کے لیے، ہم ایک نئی JavaScript فائل بنائیں گے جس میں ہم اپنا تمام کوڈ رکھیں گے۔
آئیے اسے main.js کہتے ہیں اور اس کی وضاحت کے ساتھ شروع کرتے ہیں کہ بلاک چین اور بلاکس کیسا ہونا چاہیے۔
ایک بلاک کلاس بنائیں اور اسے شروع کرنے کے لیے ایک فنکشن Object() { [مقامی کوڈ] } دیں۔
نیا بلاک بناتے وقت آپ کو ایک تاریخ، اور پچھلے بلاک کی ہیش دینا ہوگی:
یہاں ہر پراپرٹی کی تعریفیں ہیں:
- ٹائم اسٹیمپ اشارہ کرتا ہے کہ بلاک کب بنایا گیا تھا۔ آپ جو بھی فارمیٹ منتخب کرتے ہیں اسے استعمال کر سکتے ہیں (اس معاملے میں، UNIX ٹائم سٹیمپ)۔
- ڈیٹا کی کوئی بھی شکل جسے آپ اس بلاک سے جوڑنا چاہتے ہیں ڈیٹا پیرامیٹر میں شامل کیا جا سکتا ہے۔ اگر آپ ایک کریپٹو کرنسی بنانا چاہتے ہیں، تو آپ لین دین کا ڈیٹا رکھ سکتے ہیں جیسے بھیجنے والے/ وصول کنندہ اور رقم کی رقم یہاں منتقل کی گئی ہے۔
- پچھلی ہیش ایک سٹرنگ ہے جو پہلے والے بلاک کی ہیش کو رکھتی ہے۔ یہ وہی ہے جو بلاکس کا سلسلہ تیار کرے گا، جو بعد میں ہمارے بلاکچین کی سالمیت فراہم کرنے میں اہم ہوگا۔
ہیش بنانا
ہر بلاک پچھلے بلاک سے لنک کرتا ہے (اس طرح پچھلی ہیش پراپرٹی)۔ یعنی ہر بلاک کو ایک ہیش کی ضرورت ہوتی ہے۔ ایک ہیش فنگر پرنٹ کی طرح ہے۔ یہ ہر بلاک کے لیے الگ ہے۔
بلاک کی ہیش کی گنتی اس کے تمام مواد کو ہیش فنکشن کے ذریعے منتقل کر کے کی جا سکتی ہے۔
تو، آئیے ایک فنکشن کو لاگو کرکے شروع کرتے ہیں جو موجودہ بلاک کے ہیش کی گنتی کرتا ہے۔
لہذا، بلاک کلاس کے تحت، ہم calculateHash فنکشن کی وضاحت کرتے ہیں:
تاہم، SHA256 ہیش جاوا اسکرپٹ سے تعاون یافتہ نہیں ہے اور اسے بیرونی لائبریری سے حاصل کیا جانا چاہیے۔
Crypto-js ایک شاندار پیکج ہے جس میں کئی ہیش الگورتھم کے محفوظ نفاذ شامل ہیں۔
پھر ہم اسے اپنے main.js کوڈ میں امپورٹ کر سکتے ہیں۔
اب جب کہ ہمارے پاس calculateHash() فنکشن ہے، آئیے اسے اپنے بلاک کے فنکشن میں استعمال کرنے کے لیے ڈالیں:
یہ بتانے کے بعد کہ بلاک کیسا دکھتا ہے، ہم اس بات کی وضاحت کر سکتے ہیں کہ بلاکچین کیسا ہونا چاہیے۔ تو آئیے ایک نئی کلاس بنائیں۔
اس منظر نامے میں، بلاکچین ایک بہت ہی سادہ چیز ہے جس میں پراپرٹی چین ہے۔ یہ ایک صف ہے جس میں زنجیر کے تمام بلاکس ہیں۔
اس سے پہلے کہ ہم بلاکس کو شامل کر سکیں، ہمیں سب سے پہلے وہ تخلیق کرنا چاہیے جسے "جینسس بلاک" کہا جاتا ہے۔ یہ سلسلہ کا پہلا بلاک ہے، اور یہ اس لحاظ سے منفرد ہے کہ یہ پہلے والے بلاک کی طرف اشارہ نہیں کر سکتا (یہ پہلا ہے!)
لہذا، جینیسس بلاک بنانے کے لیے، میں اپنی کلاس میں ایک فنکشن شامل کروں گا جس کا نام createGenesisBlock () ہے۔ ہماری بلاکچین کلاس کے فنکشن Object() { [مقامی کوڈ] } میں واپس۔
اب ہم کسی بھی وقت جینیسس بلاک کو شامل کر سکتے ہیں جب ہم ایک نیا بلاکچین مثال بناتے ہیں:
بلاک چین کے طریقے
اب، آئیے اپنی بلاکچین کلاس میں ایسے طریقے شامل کریں جو ہمیں نئے بلاکس شامل کرنے اور تازہ ترین بلاک لانے جیسے کام کرنے کی اجازت دیں گے۔
getLatestBlock فنکشن سب سے بنیادی ہے۔ یہ آسانی سے سلسلہ سرنی کے آخری ممبر کو واپس کرتا ہے:
ایڈ بلاک تکنیک کچھ زیادہ ہی شامل ہے۔
اس سے پہلے کہ ہم اپنی چین میں ایک نیا بلاک شامل کر سکیں، ہمیں پہلے اس بلاک کی پچھلی ہیش فیلڈ کو مناسب طریقے سے سیٹ کرنا چاہیے۔
اسے ہماری چین میں حالیہ شامل کردہ بلاک کے ہیش پر سیٹ ہونا چاہیے۔ ہمیں نئے بلاک کے ہیش کی گنتی کرنے کی بھی ضرورت ہے:
ٹیسٹنگ
آئیے دیکھتے ہیں کہ ہمارا MelodyCoin کیسے نکلا ہے۔
اس کو پورا کرنے کے لیے ایک بلاکچین مثال بنائیں۔ آئیے کچھ مزید بلاکس شامل کریں:
ہم نے وہاں دو نئے بلاکس بنائے ہیں۔ آئیے ایک جھانکتے ہیں کہ ہمارا بلاک چین اس وقت کیسا لگتا ہے۔
MelodyCoin کو چار جگہوں کے ساتھ سٹرنگ اور فارمیٹ کیا جائے گا:
بلاکچین کی سالمیت کی تصدیق کریں۔
بلاک چینز لاجواب ہیں کیونکہ ایک بار بلاک کو شامل کرنے کے بعد، باقی زنجیر کو باطل کیے بغیر اس میں ترمیم نہیں کی جا سکتی۔
تاہم، میرے پاس اس نفاذ کے ساتھ ہمارے بلاکچین کی سالمیت کو جانچنے کا کوئی طریقہ نہیں ہے۔
آئیے اپنے بلاکچین میں ایک isChainValid فنکشن متعارف کراتے ہیں۔ اگر سلسلہ جائز ہے، تو یہ درست ہو جائے گا۔ دوسری صورت میں، یہ غلط واپس آ جائے گا:
سالمیت کی جانچ
اب ہم اپنے بلاکچین کی سالمیت کو جانچ سکتے ہیں۔ اگر ہم ابھی اس پر عمل کرتے ہیں، تو یہ تصدیق کرے گا کہ ہمارا سلسلہ حقیقی ہے۔
آئیے اب اپنے بلاکچین کے ساتھ چھیڑ چھاڑ کرنے کی کوشش کرتے ہیں۔ آئیے بلاک 2 کو تبدیل کریں اور اس کے مواد کو اوور رائٹ کریں (فرض کریں کہ ہم نے چار کے بجائے 100 سکے منتقل کیے ہیں)۔
جب ہم اسے انجام دیتے ہیں، تو ہم دیکھ سکتے ہیں کہ سافٹ ویئر چین کے ساتھ چھیڑ چھاڑ کرنے کی ہماری کوشش کو تسلیم کرتا ہے۔
تاہم، آپ یقین کر سکتے ہیں کہ میرے پاس اس میں مداخلت کرنے کا ایک اور طریقہ ہے۔ میں نے بلاک میں مواد کو تبدیل کیا لیکن ہیش کو دوبارہ شمار نہیں کیا۔ لہذا آپ ہوشیار ہونے کی کوشش کر سکتے ہیں اور اسی بلاک کے ہیش کو دوبارہ گن سکتے ہیں۔
ہمارے چھوٹے بلاکچین سیٹ اپ میں بس اتنا ہی تھا! یہ ہمیں نئے بلاکس کو شامل کرنے اور سلسلہ میں ڈیٹا کے ساتھ چھیڑ چھاڑ کا پتہ لگانے کے قابل بناتا ہے۔
ہمارے چھوٹے بلاکچین کے ساتھ دو مسائل ہیں جن کو حل کرنا ضروری ہے:
- جدید کمپیوٹرز انتہائی تیز ہیں اور ہماری زنجیر میں سیکنڈوں میں ہزاروں بلاکس کا اضافہ کر سکتے ہیں۔ ہم واضح طور پر نہیں چاہتے ہیں کہ کوئی ہمارے بلاک چین کو سپیم کرے۔
- ہمارا بلاک چین اب بھی چھیڑ چھاڑ کا شکار ہے۔ آپ کسی بلاک کے مواد کو اپ ڈیٹ کر سکتے ہیں اور پھر صرف مندرجہ ذیل تمام بلاکس کے لیے ہیش (اور پہلے کی ہیشز) کا دوبارہ حساب لگا سکتے ہیں۔ یہاں تک کہ اگر آپ اس کے ساتھ گڑبڑ کرتے ہیں، تو آپ ایک جائز سلسلہ کے ساتھ ختم ہوجائیں گے۔
ان خدشات کو دور کرنے کے لیے، بلاک چین ایک تکنیک کا استعمال کرتے ہیں جسے "کام کا ثبوت" کہا جاتا ہے۔ آپ کو یہ ظاہر کرنا ہوگا کہ آپ نے اس نقطہ نظر کو استعمال کرتے ہوئے ایک بلاک بنانے کے لیے کافی مقدار میں کمپیوٹیشنل وسائل استعمال کیے ہیں۔ اسے بھی کہتے ہیں۔ کان کنی.
پروف آف کام کے لیے ضروری ہے کہ بلاک کی ہیش صفر کی مخصوص مقدار سے شروع ہو۔ لیکن آپ کیسے جان سکتے ہیں کہ آیا آپ کی ہیش اس اصول کے مطابق ہے؟
بلاک کے مواد اس کی ہیش کا تعین کرتے ہیں۔ لہذا ہم ہمیشہ ایک ہی ہیش حاصل کرتے ہیں، بشرطیکہ ہم مواد میں ترمیم نہ کریں۔
ہر بلاک کو حل کے طور پر اس میں غیر معمولی قدر شامل کرنی چاہیے۔ یہ بنیادی طور پر کچھ بے ترتیب ڈیٹا ہے جسے ہم اس وقت تک اپ ڈیٹ کر سکتے ہیں جب تک کہ ہمارے بلاک کی ہیش کافی صفر کے ساتھ شروع نہ ہو جائے۔ چونکہ آپ ہیش فنکشن کے آؤٹ پٹ کو تبدیل نہیں کر سکتے، آپ کو بہت سارے مختلف امتزاج کی جانچ کرنی ہوگی اور بہترین کی امید کرنی ہوگی۔
بلاکچین میں کان کنی کو متعارف کروائیں۔
آئیے اپنی بلاک کلاس میں نانس کو شامل کرکے شروع کریں۔ نونس ہمارے بلاک کے اندر واحد قدر ہے جسے ہم بلاک کے ہیش کو متاثر کرنے کے لیے تبدیل کر سکتے ہیں۔
ہم ٹائم اسٹیمپ یا ڈیٹا کو تبدیل کرنے سے قاصر ہیں۔
اگلا، ایک mineBlock() فنکشن لکھتے ہیں جو بلاک کی اصل کان کنی کرے گا۔ اس فنکشن کو ایک پیرامیٹر کے طور پر مطلوبہ مشکل بھیجا جائے گا اور اس وقت تک عمل جاری رہے گا جب تک کہ ہمارے بلاک کا ہیش کافی زیرو کے ساتھ شروع نہ ہو۔
میں نے ابھی ایک بنیادی جبکہ لوپ بنایا ہے جو اس وقت تک چلے گا جب تک کہ ہماری ہیش کافی زیرو کے ساتھ شروع نہ ہو۔ ہم مشکل کا استعمال اس بات کا تعین کرنے کے لیے کرتے ہیں کہ کتنے صفر کی ضرورت ہے۔ 5 کی مشکل کے ساتھ، ہماری ہیش کو 5 زیرو سے شروع ہونا چاہیے۔
جب ہماری ہیش میں کافی صفر نہیں ہوتے ہیں، تو ہم نونس کو ایک سے بڑھاتے ہیں اور ہیش کا دوبارہ حساب لگاتے ہیں۔ اور اگر ہمیں کوئی ایسی ہیش ملتی ہے جو مشکل سے مطابقت رکھتی ہے، تو ہم اسے کنسول میں لاگ کرتے ہیں۔
ہمیں ایک اور کام کرنے کی ضرورت ہے۔ ہم اپنے calculateHash کے طریقہ کار میں واقعی غیر متغیر کو مدنظر نہیں رکھتے، تو یہ ہے:
بلاکچین کلاس
آئیے اس نئے انداز کو اپنی بلاکچین کلاس میں آزماتے ہیں اور دیکھتے ہیں کہ یہ کیسے چلتا ہے۔
شروع کرنے کے لیے، میں فنکشن Object() میں اپنے بلاکچین کی مشکل کی وضاحت کروں گا۔ ہم اسے یہاں بیان کرتے ہیں کیونکہ ہم اسے بعد میں کہیں استعمال کر سکتے ہیں۔
اس کے بعد ایڈ بلاک فنکشن میں اس طرح ترمیم کی جانی چاہیے کہ یہ بلاک کو ہماری زنجیر میں شامل کرنے سے پہلے اسے مائن کر لے۔
بلاکچین استعمال کریں۔
اب، آئیے اپنے نئے بلاکچین کو پروف آف ورک الگورتھم کے ساتھ استعمال کرنے کے لیے رکھیں۔ یہاں، کچھ console.log بیانات شامل کریں۔
جب ہم اس کوڈ پر عمل کرتے ہیں، تو ہم مشاہدہ کر سکتے ہیں کہ کان کنی کا عمل اب زیادہ تیز نہیں ہے۔
الگورتھم کو ہیش کے ساتھ بلاکس بنانے میں کچھ وقت لگتا ہے جو تین زیرو سے شروع ہوتے ہیں (جیسا کہ مشکل سے ترتیب دیا گیا ہے)۔
تو یہ ہمارے بنیادی بلاکچین سیٹ اپ کا اختتام تھا۔
ہم یہ ریگولیٹ کر سکتے ہیں کہ پروف آف ورک میکانزم کی بدولت ہمارے بلاک چین میں کتنی جلدی نئے بلاکس شامل کیے جاتے ہیں۔
یہ بلاک چینز پر سب سے اہم حفاظتی خصوصیت ہے۔ اور اب جب آپ سمجھ گئے ہیں کہ یہ کیسے کام کرتا ہے، تو اپنا اپنا تخلیق کریں!
جواب دیجئے