اصل:https://jysperm.me/2016/05/blockchain-slides/
یہ مضمون میری مارچ کے آخر میں LeanCloud پر کی جانے والی ایک تکنیکی شیئرنگ سے نکلا ہے ، جس میں یہ فرض کیا گیا ہے کہ قارئین کو پہلے سے ہی بنیادی کوڈنگ کا علم ہے اور وہ بٹ کوائن کے نفاذ کے بارے میں ابتدائی معلومات رکھتے ہیں۔
بلاکچین ، جسے بلاکچین بھی کہا جاتا ہے ، کو ایک قسم کا ہیش ٹری سمجھا جاسکتا ہے ، اور اسی وجہ سے اس میں ہیش ٹری کی طرح کچھ خصوصیات ہیں:
تصویر:http://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html
یعنی ایک درخت کی ساخت میں ہر ٹرمینل نوڈس کے پاس ایک سیٹ ویلیو ہوتی ہے، جبکہ غیر ٹرمینل نوڈس کی سیٹ ویلیو اس کے تمام براہ راست سب نوڈس کی سیٹ ویلیو سے آتی ہے، لہذا ہر نوڈس میں براہ راست یا بالواسطہ طور پر اس کے تمام سب نوڈس کی معلومات ہوتی ہیں۔ اس کے بعد جب بھی کسی بھی ٹرمینل نوڈس کی سیٹ ویلیو میں تبدیلی ہوتی ہے تو اس کے تمام پیر نوڈس کی سیٹ ویلیو میں تبدیلی ہوتی ہے، روٹ نوڈس میں بھی تبدیلی ضرور ہوتی ہے۔
میں ہیش ٹری کے بارے میں ایک ایپلی کیشن پیش کر سکتا ہوں: "100٪ ذخائر کا ثبوت"۔ یہ "صفر علم کے ثبوت" کی قسم کا مسئلہ ہے۔ ہم اس منظر نامے پر غور کرسکتے ہیں کہ Bitcion کے ہولڈر کو ٹرانزیکشن کرنے کے لئے Bitcoin بھیجنے کی ضرورت ہے ، اور نظریاتی طور پر تبادلے اس رقم کو (تمام صارفین کے زیر التواء اکاؤنٹ کے توازن) منتقل کرسکتے ہیں ، جو صارفین نہیں دیکھنا چاہتے ہیں ، اور تبادلے خود کو صاف کرنا چاہتے ہیں: تبادلے نے پہلے اپنے پاس موجود Bitcoin ایڈریس کو شائع کیا ، جس کی تصدیق کرنے کے لئے کہ ٹرانزیکشن واقعی میں اتنا ہی Bitcoin ذخائر کے طور پر رکھتا ہے ، لیکن یہ کیسے ثابت کیا جاسکتا ہے کہ یہ رقم تمام صارفین کے مجموعی مجموعی سے زیادہ ہے۔ دوسرے لفظوں میں ، ہر صارف کو اس بات کا یقین کیسے کیا جاسکتا ہے کہ وہ ہر صارف کے توازن کو ظاہر کیے بغیر (جو صارف کی رازداری کو بے نقاب کرے گا) اپنے مجموعی توازن میں شامل کیا جاسکتا ہے۔
ہم ایک HashTree تشکیل دے سکتے ہیں جہاں تمام ٹرمینل نوڈس ایک صارف کی نمائندگی کرتے ہیں اور اس میں صارف کا بیلنس ہوتا ہے۔Σ
) اور صارف کی شناخت (جیسے ای میل ایڈریس) کی ایک سیریزh
), جبکہ والد نوڈس میں اس کے بچے نوڈس کے توازن کا مجموعہ شامل ہے ((sum
) اور تمام ذیلی نوڈس کی معلومات کا ایک مجموعہhash
) ؛ ہر صارف کے لئے ، اسے صرف اپنے ہی اختتامی نوڈس اور بھائی نوڈس ، اپنے تمام والدین نوڈس اور والدین نوڈس کے بھائی نوڈس دکھانے کی ضرورت ہے ، کیونکہ یہ صارف والد نوڈس کی طرف قدم بہ قدم پیچھے ہٹنے کے طریقہ کار کے ذریعہ اپنے توازن کی تصدیق کرسکتا ہے جس میں والد نوڈس میں شامل ہے ، اور آخر کار روٹ نوڈس میں شامل ہے۔
اس طرح، ہر صارف کو صرف اس کی اپنی معلومات دکھائی جاتی ہے اور کچھ معلومات کو جمع کیا جاتا ہے، اور ہر صارف اس بات کی تصدیق کرسکتا ہے کہ اس کا بیلنس روٹ نوڈ میں شامل ہے جب تک کہ دوسرے استعمال شدہ توازن کو معلوم نہ ہو.h
کے لئےe4df9d12
یہ نوڈس صارف کی نمائندگی کرنے والے اختتامی نوڈس نہیں ہونا چاہئے، بلکہ یہ ایک انفارمیشن نوڈس ہونا چاہئے جو ایک صارف کی رازداری کی معلومات کو لیک کرنے سے بچنے کے لئے مجموعی طور پر (یہ نوڈس ایک صارف 3333 توازن کے ساتھ، اور ایک 0 توازن کے ساتھ شامل ہوسکتا ہے) شامل ہوسکتا ہے.
اگلا ہم گٹ پر نظر ڈالیں گے، جو کہ ایک بہت ہی عام بلاکچین ایپلی کیشن ہے۔
تصویر:http://gitbook.liuhui998.com/1_2.html(GPL v2)
گٹ میں ، چاہے وہ فائل (بلب) ہو ، انڈیکس (ٹری) ہو یا کمیٹ (کمیٹ) ، ہر فائل میں اس کے مواد سے طے شدہ ہیش ہوتا ہے ، اگر دو اشیاء کا ایک ہی مواد ہے تو ، اس میں ایک ہی ہیش ہے۔ گٹ میں ، پورے مخزن کی تاریخ ایک بلاکچین ہے ، ہر کمیٹ ایک بلاک کے مترادف ہے ، جس میں پچھلے کمیٹ کا ہیش اور اس میں ترمیم شدہ متعلقہ اعتراض کا ہیش ہوتا ہے ، اور کمیٹ کا ہیش اس کے مواد اور ان بنیادی معلومات سے طے ہوتا ہے۔
گٹ بلاکچین کا استعمال کرتا ہے ذخیرہ کرنے کے لئے ایک منفرد تاریخ کا تعین کرنے کے لئے۔ اگر ایک Commit میں ترمیم کی جاتی ہے تو ، اس کے بعد آنے والے تمام Commits کی Hash بھی بدل جاتی ہے۔ یقینا، چونکہ گٹ صرف ایک ورژن کنٹرول ٹول ہے ، لہذا آپ کو تاریخ میں ترمیم کرنے سے نہیں روکتا ہے۔ (پھر بھی ، آپ ری بیس کرسکتے ہیں)push --force
اس کے علاوہ ، ہم نے اس کے بارے میں مزید معلومات حاصل کیں ، لیکن اس تبدیلی کو تمام شریک مصنفین نے محسوس کیا ہے۔
بلاکچین کا ایک اور کلاسک اطلاق بٹ کوائن ہے ، اور یہ بٹ کوائن ہے جس نے لفظ بلاکچین کو پھیلا دیا (اور یہ تصور ہمیشہ موجود رہا ہے):
تصویر:https://commons.wikimedia.org/wiki/File:Bitcoin_Block_Data.png(CC-BY-SA-3.0)
بٹ کوائن میں ، ہر بلاک میں ٹرانزیکشنز کی ایک سیریز اور پچھلے بلاک کا ہیش ہوتا ہے ، جبکہ پورے بلاکچین میں ایک واحد غیر مرکزی کتابچہ ہوتا ہے۔ چونکہ ہر دس منٹ میں ایک نیا بلاک پیدا ہوتا ہے ، اور ایک بار بلاک بننے کے بعد یہ ہمیشہ کے لئے بلاکچین پر رہتا ہے ، لہذا بلاکچین ٹرانزیکشنز کی ترتیب کو برقرار رکھتا ہے ، جس سے یہ معلوم ہوتا ہے کہ آیا کسی اکاؤنٹ میں ٹرانزیکشن شروع کرنے کے لئے کافی بیلنس ہے یا نہیں۔
اس شیئر کا پہلا حصہ بٹ کوائن کا ایک مختصر جائزہ ہے۔
بٹ کوائن میں بلاکس کی تخلیق "کام کی مقدار کا ثبوت" کے ذریعہ کی جاتی ہے ، یعنی "کان کنوں" میں شامل تمام "کان کنوں" کو کمپیوٹنگ کی طاقت سے متعلق ، بے ترتیب نوعیت کا ایک سلسلہ وار حساب کتاب کرنا پڑتا ہے ، جب تک کہ ایک بے ترتیب تعداد کو شمار نہیں کیا جاتا ہے جو مخصوص شرائط پر پورا اترتا ہے ، تاکہ بلاک جاری کرنے کا حق حاصل کیا جاسکے۔
اس ترتیب کے مطابق ، ہر کان کن ہمیشہ "طویل ترین سلسلہ" پر بھروسہ کرتا ہے اور اگلے بلاک کا حساب کتاب کرتا ہے ، جس کی بنیاد پر طویل ترین سلسلہ ہے جو معلوم ہے اور اس کے قواعد پر پورا اترتا ہے ، ورنہ آپ کی کمپیوٹنگ طاقت ضائع ہو جائے گی۔
بٹ کوائن کو ہر 10 منٹ میں ایک نیا بلاک تیار کرنے کے لئے ڈیزائن کیا گیا ہے ، جس کا نتیجہ یہ نکلا ہے کہ اگلے بلاک کی تخلیق کے حالات کو ایڈجسٹ کرنے کے لئے ہم سب نے گذشتہ چند بلاکس کے وقفے کو دیکھ کر کام کیا ہے۔ جب پچھلے چند بلاکس کی تخلیق کی رفتار متوقع سے زیادہ ہوتی ہے تو ، لوگ یہ سمجھتے ہیں کہ اگلے بلاک کی تخلیق زیادہ مشکل ہونی چاہئے۔
عام طور پر ، ہر بٹ کوائن نوڈ کو کسی ٹرانزیکشن کی قانونی حیثیت کی تصدیق کے ل complete مکمل بلاکچین ڈیٹا ذخیرہ کرنے کی ضرورت ہوتی ہے۔ اگر اس ٹرانزیکشن کو شروع کرنے کے لئے ٹرانزیکشن کے بانی کے پاس کافی توازن موجود ہے تو۔ لیکن اب مکمل بلاکچین میں 66 جی ہے ، اور یہ بھی روزانہ 0.1 جی کی شرح سے بڑھ رہا ہے۔ اگر بٹ کوائن کے ہر صارف کو مکمل بلاکچین کو ذخیرہ کرنے کی ضرورت ہے تو یہ بہت زیادہ نہیں ہے ، لہذا بٹ کوائن کے پاس "سادہ تصدیق ایس پی وی ، آسان ادائیگی کی تصدیق" کا ایک طریقہ کار ہے ، جسے "ہلکا پھلکا کلائنٹ" کہا جاتا ہے ، جس میں یہ انتخاب کیا جاسکتا ہے کہ پورے بلاکچین کو ذخیرہ نہ کیا جائے ، بلکہ ایک یا ایک سے زیادہ مکمل نوڈس کے ساتھ منسلک کیا جائے ، جس میں صرف تمام معلومات کو ذخیرہ کیا جائے۔ ہیش ، ٹرانزیکشن کی مقدار ، کام) ، اور پھر ہر بلاک کی تصدیق کی مقدار ، جب بھی تصدیق کی ضرورت ہو ، ٹرانزیکشن کے مقام کی جانچ پڑتال کریں ، تاکہ اس بات کی تصدیق کی جاسکے کہ بلاکچین میں ہی
حقیقت میں ، ہم بٹ کوائن کے بلاکچین کو ایک "حالت مشین" کے طور پر تصور کرسکتے ہیں ، پورے بلاکچین کو ایک "لیڈر" کے طور پر تصور کیا جاسکتا ہے ، جس میں ہر ٹرانزیکشن ریکارڈ کو محفوظ کیا جاتا ہے ، اور ان ٹرانزیکشن ریکارڈوں کے مطابق ، کسی بھی وقت پورے اکاؤنٹ کی "حالت" کا اندازہ لگایا جاسکتا ہے ، یعنی بٹ کوائن نیٹ ورک میں ہر اکاؤنٹ میں کتنا بیلنس ہے۔ ہر ٹرانزیکشن حالت میں ایک تبدیلی ہے ، اور ہر بلاک پورے بٹ کوائن نیٹ ورک کے کان کنوں کی موجودہ حالت کے بارے میں ایک "امتیاز" ہے ، کیونکہ بٹ کوائن ہر 10 منٹ میں ایک نیا بلاک تیار کرتا ہے ، جس کا مطلب ہے کہ ہر 10 منٹ میں ہر ایک اکاؤنٹ کے بیلنس پر اتفاق رائے ہوتا ہے ، اور اس دس منٹ کے درمیان ، اکاؤنٹ کی حالت دراصل "افراط و تفریط" کی حالت ہے۔
بٹ کوائن کی بنیاد پر بہت سی دوسری کریپٹو کرنسیاں بھی پیدا ہوئیں ، جن کو عام طور پر "الٹ سکے" کہا جاتا ہے ، اور عام طور پر اس طرح کے کرنسیوں میں دو نفاذ ہوتے ہیں:
پہلی بات یہ ہے کہ یہ اپنا نیٹ ورک استعمال کرتا ہے ، جو کہ بٹ کوائن سے الگ ہے ، اس کا فائدہ یہ ہے کہ زائرین اپنے پروٹوکول اور قوانین کو بہت لچکدار طریقے سے ڈیزائن کرسکتے ہیں ، لیکن چونکہ صارفین کی تعداد بٹ کوائن کے برابر تعداد میں پہنچنا مشکل ہے ، لہذا بدنیتی پر مبنی حملوں کے خلاف دفاع بہت کمزور ہوگا۔
دوسرا طریقہ یہ ہے کہ بٹ کوائن کے نیٹ ورک کو "میٹا پروٹوکول" کا استعمال کریں ، جس میں بٹ کوائن کے ٹرانزیکشن کے اوپر اپنی مرضی کے مطابق معلومات شامل ہیں تاکہ ان کے اپنے منطق کو نافذ کیا جاسکے۔ اس طرح کے فوائد کو استعمال کرنے کے لئے بٹ کوائن کے کمپیوٹنگ طاقت کے پیمانے کو حملے کا مقابلہ کرنے کے لئے استعمال کیا جاسکتا ہے ، لیکن اس کے ساتھ ہی بٹ کوائن نیٹ ورک پر منسلک ہونے کی وجہ سے ، تمام کان کنوں نے کوکیز کے اصولوں پر عمل نہیں کیا ، لہذا غیر قانونی بلاکس کو بلاکچین میں داخل ہونے سے روکنے کے قابل نہیں ، جو صرف کلائنٹ پر غیر قانونی ٹرانزیکشن کو فلٹر کرسکتا ہے ، اور اس سے پہلے ذکر کردہ بٹ کوائن کی طرف سے فراہم کردہ آسان تصدیق کی خصوصیت کا فائدہ نہیں اٹھاسکتا ہے۔
ان کوکیز کے لئے ، بٹ کوائن ایک ایسا بلاکچین فراہم کرسکتا ہے جس میں بہت سارے کان کنوں کی شرکت ہو ، جو بڑے پیمانے پر بدنیتی پر مبنی حملوں کا مقابلہ کرسکے ، اور بٹ کوائن کے لین دین پر اپنی مرضی کے مطابق اعداد و شمار بھی ہوسکتے ہیں ، جس سے کوکیز کے نفاذ کے لئے کچھ گنجائش باقی رہ جاتی ہے۔
بٹوکین بھی ایک فراہم کرتا ہےبٹکوئن اسکرپٹاس کے علاوہ، یہ ایک پیچیدہ ٹرانزیکشن کے لئے استعمال کیا جاتا ہے لیکن چونکہ یہ بٹ کوائن کا بنیادی فنکشن نہیں ہے، اس لئے صرف نسبتا آسان کارروائیوں کو انجام دینے کے لئے استعمال کیا جاتا ہے، اور بلاکچین پر ڈیٹا کو پڑھنے کے لئے بہت ہی محدود ہے، اور اس کی وجہ سے عام، ٹورنگ مکمل منطق لکھنے کے لئے مشکل ہے.
تصویر:https://www.ethereum.org/assets(CC 3.0)
ایتھرئم (Ethereum) ایک بلاکچین پر مبنی ، غیر مرکزی ایپلی کیشن پلیٹ فارم ہے جو بٹ کوائن کے بنیادی ڈھانچے کو ایک عام پلیٹ فارم کے طور پر تعمیر کرتا ہے ، اور بٹ کوائن نیٹ ورک کی کچھ لاپتہ خصوصیات کو پورا کرتا ہے تاکہ ڈویلپرز اپنی غیر مرکزی ایپلی کیشنز کو بلاکچین پر چلا سکیں۔
ایتھرئم کے بارے میں تفصیل سے بات کرنے سے پہلے ، مجھے پہلے (میرے خیال میں) غیر مرکزی نیٹ ورک کے دو بنیادی اصولوں کا تعارف کرانا چاہئے۔ کریپٹولوجی اور گیمنگ۔ یقینا cryپٹولوجی ریاضی کے لحاظ سے عوامی کلید انکرپشن ، ڈیجیٹل دستخط ، سیٹ اور خلاصہ کرنے والے الگورتھم کے ذریعہ سیکیورٹی کو یقینی بناتی ہے ، جبکہ گیمنگ کا مطلب یہ ہے کہ غیر مرکزی نیٹ ورک میں کوئی بھی ، بشمول وہ لوگ جو اس نیٹ ورک پر بدنیتی سے حملہ کرنا چاہتے ہیں ، اس میں حصہ لے سکتے ہیں ، اور غیر مرکزی نیٹ ورک کو ڈیزائن کرتے وقت ہر ایک کے مفاد کے بارے میں سوچنا چاہئے ، تاکہ اس بات کو یقینی بنایا جاسکے کہ قواعد کی پابندی کے مفادات کو زیادہ سے زیادہ کیا جاتا ہے ، اور قواعد کی خلاف ورزی میں نقصان یا خطرہ ہوتا ہے۔
تاہم ، ڈیجیٹل دنیا میں ، اعداد و شمار کا ایک ٹکڑا جاری کرنا کوئی لاگت نہیں ہے ، اور اس میں کوئی "فائدہ" یا "نقصان" نہیں ہے ، لہذا "فائدہ" کی وضاحت کرنے کے ل physical جسمانی دنیا سے کسی طرح کا تعلق قائم کرنا ضروری ہے۔ مثال کے طور پر ، بٹکوئن نیٹ ورک میں ، اگر حملہ آوروں کو بلیکچین کی سمت کو مصنوعی طور پر تبدیل کرنے کی خواہش ہے تو ، اس کے لئے دوسرے تمام کان کنوں سے زیادہ کمپیوٹنگ طاقت کی ضرورت ہوتی ہے ، جبکہ جسمانی دنیا میں ، کمپیوٹنگ طاقت کمپیوٹنگ آلات کی ضرورت ہوتی ہے ، اور کمپیوٹنگ آلات کو جسمانی دنیا سے خریدنے کی ضرورت ہوتی ہے۔
لہذا ، غیر مرکزی نیٹ ورک میں ، تمام مسائل کو "ٹیکنالوجی" کے ذریعہ حل نہیں کیا جاتا ہے ، جہاں تک ٹیکنالوجی نہیں پہنچ سکتی ہے ، اسے منافع کے ذریعہ ، معاشی ترغیبات کے ذریعہ حل کرنا پڑتا ہے۔ نیز ، "معاشی ترغیبات" کی ضرورت کی وجہ سے ، ایتھریم میں بھی پرس کا نظام (قومی یونٹ "ایتھر" کہا جاتا ہے) ہے) ، جس میں ہر صارف کا پرس ایڈریس اس کی واحد شناخت کے طور پر ہوتا ہے ، جو اس معاملے میں Bitcion کی طرح ہے۔
"معاہدہ" ایتھرئم کے ذریعہ متعارف کرایا جانے والا سب سے اہم تصور ہے۔ بٹ کوائن میں ، تمام پتے ایک صارف کے پاس ہوتے ہیں۔ جب ہم "صارف" کہتے ہیں تو ، ہم دراصل ایک جوڑی عوامی اور نجی چابیاں کہتے ہیں۔ لیکن ایتھرئم میں ، ایک کلید کے ساتھ ساتھ ایک پتے کے ساتھ ساتھ "کوڈ" کے پاس بھی ایک پتہ ہوتا ہے ، یعنی معاہدہ۔ معاہدہ صارف کے ذریعہ جاری کیا جاتا ہے ، اس کا جوہر ایک کوڈ ہے ، جسے جاری کرنے کے بعد تبدیل نہیں کیا جاسکتا ہے ، معاہدہ ، عام اکاؤنٹ کی طرح ، ایک پرس کا پتہ بھی ہے ، جب بھی یہ پتہ موصول ہوتا ہے تو ، اس سے وابستہ کوڈ پر عملدرآمد ہوتا ہے ، یہ کوڈز:
ایتھرئم کے سرکاری کلائنٹ میں ایک ایسی خصوصیت موجود ہے جس کے تحت متعدد لوگوں کے لیے بٹوے بنائے جا سکتے ہیں۔
مثال کے طور پر ، اس فنکشن کے ذریعہ ، ایک بٹوے کا پتہ بنایا جاسکتا ہے جس کی مشترکہ ملکیت 2 دوسرے افراد کے ساتھ ہے ، ہر ایک دن میں اس میں سے 100 ایتھر تک استعمال کرسکتا ہے ، اگر اس حد سے تجاوز کیا جائے تو ، دوسرے شخص کی رضامندی کے ساتھ۔
یہ فنکشن دراصل ایک معاہدہ بناتا ہے، اور یہ منطق معاہدے میں موجود کوڈ کے ذریعے بیان کی گئی ہے۔ جب آپ اس مشترکہ بٹوے سے رقم خرچ کرنا چاہتے ہیں تو آپ کو اس مشترکہ بٹوے کو ایک پیغام بھیجنے کی ضرورت ہوتی ہے (ایک ٹرانزیکشن پیغام ہے، ٹرانزیکشن کی رقم صفر ہوسکتی ہے، صرف ڈیٹا لے کر) ، اور پھر مشترکہ بٹوے میں کوڈ کو عمل میں لایا جائے گا، اگر یہ اخراجات کی درخواست مندرجہ بالا منطق کے مطابق ہے تو، حقیقی اخراجات کی ٹرانزیکشن شروع کریں، ورنہ اس اخراجات کی درخواست کو حقیقی اخراجات کے بغیر مسترد کر دیا جائے گا۔
ایک اور مثال "ہیجنگ کنٹریکٹ" ہے، جس کے بارے میں ہمیشہ کہا جاتا ہے کہ بٹ کوائن ایک ڈیجیٹل کرنسی ہے جس کی کرنسی کی قدر (اور قانونی کرنسی کی شرح تبادلہ) غیر مستحکم ہے ، اکثر دن کے دوران کرنسی کی قدر میں دوگنا اضافہ یا کمی ہوتی ہے ، لیکن اگر معاہدے کے ذریعہ ہیجنگ کنٹریکٹ کو نافذ کیا جائے تو اس مسئلے کو کسی حد تک حل کیا جاسکتا ہے۔
ہم اس شخص کو کہتے ہیں جو کرنسی کی قدر کو برقرار رکھنا چاہتا ہے "رسک ایوینٹر" اور دوسرے شخص کو کہتے ہیں جو کرنسی کی قدر میں اتار چڑھاؤ کا خطرہ مول لینے اور اس سے منافع کمانے کے لئے تیار ہے "رسک اٹھانے والا" تاکہ وہ ایک رقم (مثال کے طور پر 1000 CNY) اور ایک وقت کی ونڈو (مثال کے طور پر ایک مہینہ) پر معاہدہ کرسکیں اور ایک معاہدہ تخلیق کرسکیں جو مندرجہ ذیل منطق پر عمل کرے:
اگر ایتھر کی قیمت میں اضافہ ہوتا ہے تو ، خطرہ لینے والے کو منافع ملتا ہے ، اگر ایتھر کی قیمت میں کمی واقع ہوتی ہے تو ، خطرہ لینے والے کو نقصان ہوتا ہے ، لیکن خطرہ سے بچنے والے کو ہمیشہ نقصان نہیں ہوتا ہے۔ یقینا ، خطرہ سے بچنے والے اور خطرہ لینے والے پہلے سے ہی ایک "انشورنس فیس" پر اتفاق کرسکتے ہیں جس کی ادائیگی کرنے والے کو کرنا ہوگی ، یا یہ بھی کہ خطرہ لینے والے کو 1000 CNY سے کئی گنا زیادہ کی ضمانت فراہم کرنے کی ضرورت ہوگی (جتنا زیادہ ضارب ہوگا اتنا ہی زیادہ خطرہ برداشت کیا جاسکتا ہے) ۔
مندرجہ بالا مثال میں ایک اور مسئلہ بھی ہے جس کا حل بہت اچھا نہیں ہے ، یعنی ایتھر اور قانونی کرنسی کے مابین کس طرح تبادلہ طے کیا جائے۔ جیسا کہ ہم نے پہلے ذکر کیا ہے ، معاہدہ صرف بلاکچین پر موجود ڈیٹا تک رسائی حاصل کرسکتا ہے ، جبکہ قانونی کرنسی جسمانی دنیا میں موجود ڈیٹا ہے ، نہ کہ خفیہ دنیا میں۔ ہمیں کسی طرح کے طریقہ کار کے ذریعہ اس طرح کے "غیر خفیہ دنیا سے اعداد و شمار" کو بلاکچین میں لانے کی ضرورت ہے۔
ہم ایک اور معاہدہ ڈیزائن کر سکتے ہیں جو اس طرح کی منطق کی وضاحت کرے گا جس میں حقیقی دنیا سے ایتھر اور قانونی کرنسی کے مابین شرح تبادلہ حاصل کی جائے گی ، ہر وقت کی ونڈو میں (مثلا an ایک گھنٹہ):
کسی بھی شرکاء کے لئے ، کسی دوسرے کی پیش کش کو جاننے کے بغیر ، ایک حقیقی کرنسی کی پیش کش کرنے کا زیادہ امکان ہوتا ہے ، جبکہ ایک غیر معمولی کرنسی کی پیش کش کرنے سے ضمانت کی رقم ضائع ہونے کا بہت بڑا موقع ہوتا ہے۔
یقیناً اس اصول میں کچھ نقائص ہیں، جیسے کہ اگر کسی کے پاس بہت زیادہ کرنسی کا بیلنس ہے تو وہ اوسطاً ایک ایسی کرنسی کی قیمت کو کھینچ سکتا ہے جو حقیقی کرنسی کی شرح سے زیادہ یا کم ہو اور اس کے ساتھ ہی انعام بھی حاصل کر سکتا ہے اور اس کے نتیجے میں دوسرے لوگ جو درست کرنسی کی شرح پیش کرتے ہیں وہ اپنی کرنسی کا بیلنس کھو دیتے ہیں۔ لیکن حقیقت یہ ہے کہ اگر آپ کے پاس بہت زیادہ پیسہ ہے تو آپ جسمانی دنیا میں بھی کسی چیز کی قیمت کو بڑھا سکتے ہیں یا کم کر سکتے ہیں، لیکن جسمانی دنیا کے مقابلے میں یہ بہت چھوٹا ہے اور اس کے لئے بہت زیادہ رقم کی ضرورت نہیں ہے۔ لیکن حقیقت یہ ہے کہ بدنیتی سے اس طرح کی شرح کو بڑھانا یا کم کرنا بھی بہت بڑا خطرہ ہے، کیونکہ آپ کو یقین نہیں ہے کہ آپ نے جو بیلنس ادا کیا ہے وہ کافی ہے اور اگر آپ ناکام ہوجاتے ہیں تو آپ اپنی تمام کرنسی کا بیلنس کھو دیں گے۔
ایک اور خرابی یہ ہے کہ "ہر کوئی معاہدے میں ضمانت دے سکتا ہے اور ایک کرنسی فراہم کرسکتا ہے"۔ یہ قدم ٹرانزیکشنز بنانے کے ذریعہ کیا جاتا ہے ، اور تمام ٹرانزیکشنز بلاکچین پر لکھے جاتے ہیں ، لہذا آپ جو کرنسی پیش کرتے ہیں وہ دراصل دوسرے لوگوں کے لئے دکھائی دیتی ہے ، جو بدنیتی پر مبنی حملہ آوروں کے لئے مزید مواقع پیدا کرتی ہے۔ میں ایک مثال کے ساتھ اس مسئلے کو کیسے دور کروں گا "بے ترتیب تعداد پیدا کریں"۔
جیسا کہ ہم نے پہلے ذکر کیا ہے کہ Contract Blockchain پر موجود ڈیٹا کو پڑھ سکتا ہے، لیکن Blockchain پر موجود اعداد و شمار کا تعین کیا جاتا ہے، اگر ہم جوا کی طرح ایک ایپلی کیشن بنانا چاہتے ہیں، تو ہم ایک بے ترتیب نمبر کہاں سے حاصل کریں گے؟
ایک بے ترتیب اعداد و شمار کا ذریعہ جو آپ سوچ سکتے ہیں وہ اگلے بلاک کا ہیش ہے ، اور زیادہ تر معاملات میں ، اس کی بے ترتیبیت کافی ہے۔ لیکن حقیقت یہ ہے کہ کان کن اس بے ترتیب نمبر پر کچھ حد تک قابو پا سکتا ہے ، فرض کریں کہ ایک کان کن کسی قسم کی جوا میں حصہ لے رہا ہے ، اور جوا کی آمدنی ایک بلاک کی آمدنی سے زیادہ ہے ، تو اگر یہ کان کن ایک ایسا ٹکڑا کھودتا ہے جس کی وجہ سے وہ اپنا جوا کھو دے گا ، تو ظاہر ہے کہ یہ کان کن اس نئے بلاک کو شائع نہ کرنے کا انتخاب کرے گا ، جو انفرادی کان کن کی حساب کتاب کی طاقت کے معاملے میں زیادہ واضح ہے۔
اس لیے ہمیں زر مبادلہ جمع کرنے کی طرح ایک طریقہ کار متعارف کرانے کی ضرورت ہے جس کے تحت ہم بے ترتیب تعداد میں بیج جمع کرتے ہیں اور پھر ہر وقت کی کھڑکی کے اختتام پر ان بیجوں کا استعمال کرتے ہوئے ایک بے ترتیب تعداد کا حساب لگاتے ہیں۔ لیکن چونکہ زر مبادلہ جمع کرنے کی شرح کو شرکاء نے ٹرانزیکشنز بنانے کے ذریعے حاصل کیا ہے، لہذا ایک وقت کی کھڑکی کے درمیان ہر ایک کی طرف سے جمع کردہ بے ترتیب تعداد دوسروں کے لئے نظر آتی ہے، لہذا ایک شخص جو پہلے سے ہی ایک جوا کھیل میں حصہ لے رہا ہے وہ ایک بے ترتیب تعداد کو منتخب کرسکتا ہے تاکہ دوسرے لوگوں کی طرف سے جمع کردہ بیجوں کے علاوہ بے ترتیب نئے بیجوں کی تعداد پیدا ہو جو اس کی توقعات کے مطابق ہو۔
لہذا یہ ضروری ہے کہ ہم بیج جمع کرنے کی کھڑکی کو دو حصوں میں تقسیم کریں تاکہ ایک بے ترتیب تعداد حاصل کی جاسکے جس کی پیش گوئی اور مداخلت کوئی نہیں کرسکتا:
اس مرحلے میں آپ کو صرف دوسرے لوگوں کی جانب سے جمع کردہ بیجوں کی سیٹ ویلیو معلوم ہوتی ہے، لیکن اصل بیجوں کے بارے میں آپ کو معلوم نہیں ہوتا۔ اس لیے آپ کو کسی بیج کو تیار کرنے کی ضرورت نہیں ہوتی۔ دوسری مرحلے میں سبھی لوگ صرف پہلے مرحلے میں جمع کردہ بیجوں کی تصدیق کرتے ہیں، نہ ہی کوئی نیا بیج جمع کروا سکتے ہیں اور نہ ہی دوسرے لوگوں کو بیج جمع کرانے سے روک سکتے ہیں۔
ہم نے پہلے ذکر کیا ہے کہ بٹ کوائن اسکرپٹ میں لوپ ، ریگریشن ، چھلانگ وغیرہ کی صلاحیت نہیں ہے ، شاید بٹ کوائن اسکرپٹ کے عملدرآمد کے وقت پر قابو پانے کے لئے ہے ، کیونکہ ٹورنگ کے "اسٹاپ تھیوری" کے مطابق ، ٹورنگ مکمل پروگرامنگ زبان کے ذریعہ لکھے گئے پروگراموں کو صرف جامد تجزیہ کے نقطہ نظر سے ہمیشہ یہ فیصلہ نہیں کیا جاسکتا ہے کہ آیا وہ محدود اقدامات کے بعد ختم ہوجائیں گے ، تاکہ بدنیتی پر مبنی حملہ آور ایک ٹرانزیکشن تشکیل دے سکے جو مائنر کے کام میں خلل ڈالنے کے لئے موت کی لہر کا سبب بنے گا۔
ایتھرئم نے ایک بار پھر اس مسئلے کو "اقتصادی ترغیبات" کے ذریعہ گھیر لیا۔ معاہدہ آپریٹنگ کوڈ کی شکل میں ایک ورچوئل مشین پر چلتا ہے جسے ایتھریم ورچوئل مشین (ای وی ایم) کہا جاتا ہے ، ای وی ایم ایک خود کار طریقے سے "چارج" والا ورچوئل مشین ہے ، جس میں ای وی ایم کے معیار میں ، آپریشن کے لئے درکار میموری اور سی پی یو وقت کی بنیاد پر ، ہر آپریٹنگ کوڈ کے ذریعہ استعمال ہونے والے گیس کی وضاحت کی جاتی ہے ، جو ایتھر کے ذریعہ خریدا جانے والا ایک کمپیوٹنگ وسائل ہے۔ جیسا کہ پہلے ذکر کیا گیا ہے ، جب کسی ٹرانزیکشن کا مقصد معاہدہ ہوتا ہے تو ، معاہدہ کا کوڈ عمل میں لایا جاتا ہے ، معاہدے کے آغاز کنندہ کو معاہدے کے عملدرآمد کے دوران استعمال ہونے والی گیس کی ادائیگی کی ضرورت ہوتی ہے ، جبکہ ایک "زیادہ سے زیادہ مقدار" کا اعلان کیا جاتا ہے جس کے لئے وہ ادائیگی کرنے کے لئے تیار ہے ، اور اگر اس کا راستہ ختم ہوجاتا ہے تو ، معاہدہ ختم ہوجائے گا۔
اس کے بعد ہم "تفاهم وقفہ" کے بارے میں بات کرتے ہیں ، جس کا ذکر پہلے کیا گیا ہے کہ ہر 10 منٹ میں بٹ کوائن میں ایک نیا بلاک آتا ہے ، یعنی پورے نیٹ ورک میں ہر 10 منٹ میں ایک "تفاهم" ہوتی ہے ، لہذا عام بٹ کوائن ٹرانزیکشنز کی تصدیق کے لئے دس سے دس منٹ انتظار کرنا پڑتا ہے ، ابتدائی طور پر جب کمپیوٹنگ طاقت بہت زیادہ نہیں ہوتی ہے تو ، شاید ایک گھنٹہ انتظار کرنا پڑتا ہے ((6 بلاکس)) ، اور سبھی لوگ اس ٹرانزیکشن کو قابل اعتماد سمجھیں گے۔
واضح طور پر صارفین کے لئے اتفاق رائے کا مختصر وقت بہتر تجربہ ہوگا ، کیوں کہ بٹ کوائن نے بلاک وقت کو کم نہیں کیا؟ اس کی وجہ یہ ہے کہ تیزی سے اتفاق رائے کے وقفے سے "مرکزی کان کنی" کے فوائد میں کچھ حد تک اضافہ ہوگا۔ "کان کنی" کا مطلب یہ ہے کہ بٹ کوائن کے کان کنوں نے ایک ساتھ کان کنی کی ، کان کنوں نے بغیر کسی شرط کے کان کی ہدایات پر عمل کیا ، اور آخر کار کان کے ساتھ منافع کی تقسیم کا معاہدہ کیا ، واضح طور پر بٹ کوائن ایک غیر مرکزی نظام کے طور پر ، اس طرح کے مرکزی کان کنی کے اضافی فوائد کی توقع نہیں کرتا ہے۔
جب ایک مائنر اے ایک نیا بلاک کھودتا ہے تو وہ اس بلاک کو نشر کرتا ہے اور جب دوسرے لوگ اس پیغام کو وصول کرتے ہیں تو وہ فوری طور پر اس نئے بلاک پر کام شروع کردیتے ہیں۔ جبکہ دوسرے لوگوں کے لئے "اے نے نیا بلاک کھود لیا" اور "اے نے ریڈیو پیغام موصول کیا" کے مابین اس وقت کے درمیان کا حساب کتاب دراصل ضائع ہوجاتا ہے ، جبکہ مرکزی مائننگ پول میں دوسرے مائنرز کو یہ مسئلہ نہیں ہوگا کیونکہ وہ تیزی سے نئے پیدا ہونے والے بلاک کی معلومات حاصل کرسکتے ہیں اور فوری طور پر نئے بلاک کی بنیاد پر کام شروع کرسکتے ہیں۔
اس نشریات کا وقت شاید دس سیکنڈ کا ہو، 10 منٹ کے لیے یہ وقت بہت اہم نہیں ہے، لیکن اگر اتفاق رائے کے وقفے کو کم کیا جائے تو مرکزی کان کنی کے تالاب کے فوائد زیادہ واضح ہو جائیں گے۔ لیکن ایتھرئم نے "انکل بلاک" کے تصور کو متعارف کرانے کے ذریعے اس مسئلے کو حل کیا، اتفاق رائے کے وقفے کو کم کر کے 15 سیکنڈ کر دیا، جس سے ادائیگی کی تصدیق کی رفتار میں بٹ کوائن کے مقابلے میں بہتری آئی ہے۔
بٹ کوائن کے بلاکچین میں ، ایک بلاک میں صرف ایک پیر بلاک اور ایک سب بلاک ہوسکتا ہے۔ لیکن ایتھرئم میں ، ایک نیا پیدا ہونے والا بلاک پیر بلاک اور متعدد شلگوں کا حامل ہوسکتا ہے۔ اوپر کی مثال پر واپس جائیں ، اگر A میں ایک نیا بلاک کھودا جاتا ہے لیکن دوسروں نے ابھی تک نشریات نہیں موصول کیں ہیں ، اگر کسی نے نیا بلاک کھودا ہے ، لیکن چونکہ نشریات کی دیر سے قبول نہیں کی گئی ہے ، تو اس بلاک کو اگلے بلاک کا "شلگ" بننے کا امکان ہے۔ اس بلاک کی نمائندگی کی گئی مقدار کا ثبوت اگلے بلاک کا حصہ سمجھا جائے گا ((یعنی اس شخص نے اگلے بلاک کی کھدائی کی دشواری کو کم کردیا ہے) ، شلگ نے صرف مقدار کا ثبوت فراہم کیا ہے ، جس میں شامل ٹرانزیکشنز ناقابل عمل ہیں۔ اس طرح کم سے کم بلاک کے وقفے کے معاملے میں زیادہ دیر سے نشریات وصول کرنے والے کلائنٹ کے نقصان کی تلافی کی جاتی ہے ، خاص طور پر ، شلگ نے براہ راست کام کا ثبوت فراہم کیا ہے جس میں 25٪ شلگ کا ثبوت دیا گیا ہے ، تاکہ اس قسم کے کام کو کم سے کم 50٪
تصویر:https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
اس سیکشن میں میں نے ایتھرئم کے بارے میں کچھ مسائل کے بارے میں بات کی ہے جو ابھی تک حل نہیں ہوئے ہیں۔
پہلی بات یہ ہے کہ ایتھرئم کا موجودہ اتفاق رائے اب بھی بٹ کوائن کی طرح POW (کام کی مقدار کا ثبوت) کے ذریعہ محفوظ ہے ، جس میں صرف نوڈس جو کام کی ایک خاص مقدار کو مکمل کرتے ہیں وہ بلاک کی تخلیق میں حصہ لے سکتے ہیں۔ کام کی مقدار کا ثبوت اس مسئلے سے پیدا ہوتا ہے کہ نیٹ ورک کی حفاظت کو یقینی بنانے کے لئے بہت زیادہ کمپیوٹنگ طاقت ضائع ہوتی ہے ، حالانکہ یہ بھی ہمارے پہلے ذکر کردہ "معاشی ترغیب" کے خیال پر مبنی ہے ، لیکن حقیقت میں بہتر ہوسکتا ہے۔ ایتھرئم کا خیال ہے کہ POS (مالکانہ ثبوت) کے ذریعہ کام کی مقدار کا ثبوت تبدیل کرنے کا ایک بہتر طریقہ ہے ، جس سے اس نیٹ ورک کی کارکردگی میں بہتری آسکتی ہے ، اس لئے مزید بے معنی حساب کتاب کی ضرورت نہیں ہے۔
اگر ایتھر خود ہی قیمتی ہے تو پھر اس کا استعمال خود ہی معاشی ترغیب کے لیے کیوں نہیں کیا جاتا؟ POS کا مطلب یہ ہے کہ ہر کوئی اپنے پاس موجود ایتھر کو اس بات کی ضمانت کے لیے استعمال کرتا ہے کہ بلاک بنانے میں حصہ لینے کے خواہشمند ہر نوڈس (روایتی معنی میں کان کنی) کو تصدیق کنندہ کہا جاتا ہے۔ اس نظام کا مطلب یہ ہے کہ معاہدے میں یہ کہا گیا ہے کہ تمام نوڈس سمجھتے ہیں کہ یہ رقم "جمد" ہے اور اس کے بعد ہر کوئی اپنی ضمانت کے پیسے کے ساتھ اگلے بلاک کے ممکنہ بننے پر شرط لگاتا ہے۔ (ایک اہم شرط یہ ہے کہ "ممکنہ" کہا جاتا ہے کہ یہ بلاک معاہدے کے مطابق ہونا ضروری ہے) اگر یہ بلاک واقعی اگلا بلاک بن جاتا ہے تو ، تمام شرط لگائے جانے والے نوڈس کو انعام دیا جائے گا ، ورنہ ضمانت کی رقم ختم ہوجائے گی۔
یہ ماڈل POW کی طرح ہی ہے، POW میں کان کن اپنی کمپیوٹنگ طاقت کے ساتھ "بیٹ" کرتے ہیں، اور اگر ایک طویل سلسلہ ہے تو، اس سلسلے میں مائننگ جاری رکھنے کے لئے ضروری ہے، کیونکہ زیادہ سے زیادہ شرکاء کو صحیح سلسلہ بننے کا امکان زیادہ ہے، آخر میں اتفاق رائے تک پہنچ جاتا ہے. جبکہ POS میں، ہر کوئی اپنی ضمانت کا استعمال کرتا ہے، ہر کوئی اسی طرح کا انتخاب کرتا ہے جس میں بہت سے دوسرے لوگوں کی طرف سے پہلے سے ہی شرط لگا دی گئی ہے (اگر یہ قانونی ہے) ، آخر میں اتفاق رائے تک پہنچ جاتا ہے.
پی او ایس پورے نیٹ ورک کی ٹرانسمیشن کو بڑھانے کے لئے ضروری ہے. ہائے، کوئی بھی بے معنی حساب کتاب کی ایک بڑی تعداد کی طرف سے اتفاق رائے حاصل کرنے کی ضرورت نہیں ہے، ہر نوڈ کے لئے ٹرانسمیشن کا حجم معاہدے میں کوڈ کو انجام دینے اور اعداد و شمار کی توثیق کرنے کے لئے حساب کتاب کے قریب ہو جائے گا.
ظاہر ہے کہ پی او ایس کو ابھی تک اپنایا نہیں گیا ہے کیونکہ کچھ مسائل ابھی تک حل نہیں ہوئے ہیں ، جن میں سے ایک 51٪ حملے کا مسئلہ ہے ، جیسا کہ پی او ڈبلیو میں ، جس میں 51٪ کمپیوٹنگ طاقت کو پی او ڈبلیو میں مرکوز کیا گیا ہے ، اس کی ایک مخصوص جسمانی حد ہوتی ہے۔ کیونکہ کمپیوٹنگ طاقت کو کمپیوٹنگ آلات کی فراہمی کی ضرورت ہوتی ہے۔ اس کے مقابلے میں ، پی او ایس میں 51٪ ایتھر جمع کرنا نسبتا easy آسان ہے ، بشرطیکہ آپ کے پاس کافی رقم ہو۔
ایک اور موضوع "شگاف" ہے ، چاہے وہ بٹ کوائن ہو یا ایتھریم ، فی الحال تمام ٹرانزیکشنز کو ایک ہی بلاکچین پر تصدیق کی جاتی ہے ، جس سے تقسیم شدہ نیٹ ورک کی کمپیوٹنگ کی صلاحیت کو بہت حد تک محدود کیا جاتا ہے۔ ہاں ، ہر نوڈ کو ہر ٹرانزیکشن کو وصول کرنے ، اسٹور کرنے اور اس کی تصدیق کرنے کی ضرورت ہوتی ہے ، پورے نیٹ ورک کی پروسیسنگ کی صلاحیت ایک نوڈ کی پروسیسنگ کی صلاحیت کے برابر ہے۔
لہذا ایتھرئم مستقبل میں ایک "شگاف" کے طریقہ کار کو متعارف کرانے کی امید کرتا ہے تاکہ پورے نیٹ ورک کو کئی حصوں میں تقسیم کیا جاسکے ، اور ان کے درمیان آزادانہ طور پر ٹرانزیکشن کی تصدیق کی جاسکے۔ لیکن ٹکڑوں کے مابین اشارے کی ساخت کے ذریعہ دوسرے ٹکڑوں کے اعداد و شمار کا حوالہ دیا جائے گا ، غیر ہم آہنگی کال کے ذریعہ دوسرے ٹکڑوں پر اثر پڑے گا ، لہذا پورا نیٹ ورک صارف کی نظر میں ایک ہی رہے گا ، لیکن پورے نیٹ ورک کی پروسیسنگ کی صلاحیت میں بہت زیادہ توسیع ہوگی۔ فی الحال محدود ٹکڑوں سے متعلق عمل درآمد نسبتا early ابتدائی ترقی کے مرحلے میں ہے ، لہذا میں نے جو معلومات حاصل کیں وہ بہت زیادہ نہیں ہیں۔
اس سیکشن میں میں آپ کو کچھ عملی ، کام کرنے والے معاہدوں کا کوڈ دکھاؤں گا۔ معاہدوں کو بہت سی مختلف مثالوں کی زبانوں سے لکھا جاسکتا ہے ، اور آخر کار ان سب کو ای وی ایم پر آپ کوڈ میں مرتب کیا جاتا ہے۔ آج ہم سالڈٹی کی طرح جاوا اسکرپٹ زبان کا استعمال کرتے ہیں ، جو ای وی ایم کی زبانوں میں سے ایک ہے جو فی الحال سب سے بہتر برقرار ہے۔
contract Test {
uint storedData; // State variable
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
event HighestBidIncreased(address bidder, uint amount); // Event
function func() { // Function
if (msg.sender.balance < 10 finney) {
msg.sender.send(10 finney);
}
sha256("...");
address nameServer = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;
nameServer.delegatecall("isAvailable", "MyName");
nameServer.call("register", "MyName");
}
}
یہاں کچھ بنیادی نحو کا مظاہرہ کیا گیا ہے جو آپ Solidity میں حالت متغیر کا اعلان کرسکتے ہیں۔uint storedData;
اس کے علاوہ ، آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کے پاس کیا ہے ، یا آپ کے پاس کیا ہے۔struct
ایک معاہدہ پیچیدہ ڈیٹا ڈھانچے کا اعلان کرنے کے لئے استعمال کیا جاتا ہے۔ اس کے علاوہ ، اس میں افعال کی وضاحت کی جاسکتی ہے ، جو ٹرانزیکشن موصول ہونے پر انجام دیئے جاتے ہیں ، اور ٹرانزیکشن کے آغاز کرنے والے کو یہ منتخب کرنے کا اختیار ہوتا ہے کہ وہ کون سے افعال انجام دیتے ہیں ، لہذا ایک معاہدہ متعدد افعال پیش کرسکتا ہے ، جس میں فنکشن کے اندر منطقی فیصلے ، لوپ ، ترمیم کی قدر کو تبدیل کیا جاسکتا ہے۔
زبان میں کچھ بہت ہی آسان چھوٹی خصوصیات شامل ہیں ، جیسے عام خفیہ کاری کے الگورتھم (((sha256
یونٹ تبادلہ10 finney
♡ براہ راست اپنے بٹوے کا پتہ لکھیں♡0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2
◄ انتظار کریں۔msg
ایک بلٹ ان عالمی متغیر ہے جس سے اس ٹرانزیکشن سے متعلق معلومات پڑھائی جاسکتی ہیں ، جیسے آغاز کنندہ ، رقم ، وغیرہ۔ معاہدہ دوسرے معاہدوں کے کوڈ کو دو طریقوں سے کال کرسکتا ہے:delegatecall
اس کا مطلب یہ ہے کہ کسی دوسرے معاہدے کے کوڈ کو موجودہ سیاق و سباق میں انجام دینے کے مترادف ہے ، جیسے کہ کسی لائبریری فنکشن کو متعارف کرایا جائے۔call
اس کا مطلب یہ ہے کہ ایک نیا معاہدہ شروع کرنے کے لئے ایک اور معاہدہ شروع کرنے کی منطق ہے۔
تو ، معاہدہ بلاکچین سے ڈیٹا کو کیسے پڑھتا اور لکھتا ہے؟ یہ پیچیدہ کام "حالت متغیر" کے لئے خلاصہ کیا گیا ہے ، جس پر ذخیرہ کردہ ڈیٹا ایک حالت متغیر ہے۔ در حقیقت ، معاہدے کی پھانسی کے دوران حالت متغیر میں ہونے والی تبدیلیوں کو بلاکچین میں محفوظ نہیں کیا جاتا ہے ، کیونکہ معاہدہ یقینی طور پر حساب کتاب کرتا ہے۔ معاہدے کی پھانسی ٹرانزیکشن کے ذریعہ شروع کی جاتی ہے ، اور اس کے عمل میں صرف بلاکچین پر موجود ڈیٹا کو پڑھا جاتا ہے ، لہذا جب تک کہ ہم اس معاہدے سے متعلق ہر ٹرانزیکشن کی تاریخ کو جانتے ہیں ، ہم کسی بھی وقت کسی معاہدے کی قیمت کا اندازہ لگاسکتے ہیں ، ہر وقت اس وقت کے نقطہ پر ہر حالت متغیر۔
اب میں ایک قابل استعمال معاہدہ ٹوکری دکھاتا ہوں جو ایتھریم نیٹ ورک پر مبنی اپنے ٹوکن کو جاری کرنے کے لئے استعمال کیا جاتا ہے:
contract Coin {
// The keyword "public" makes those variables
// readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react on
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}
کوڈhttp://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#subcurrency-example(ایم آئی ٹی)
اس معاہدے کو Coin کہا جاتا ہے اور اس میں دو حالت متغیرات کا اعلان کیا جاتا ہے، جن میں سے ایک میں ایک متغیر کا نام ہوتا ہے اور دوسرا متغیر ایک متغیر کا نام ہوتا ہے۔minter
اس ٹوکن کو ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے جس کے تخلیق کاروں کو، فنکشن ((function Coin()
یہ اس متغیر کے لئے ابتدائی ٹرانزیکشن کی قدر دیتا ہے جو پہلے معاہدے کو تخلیق کرنے کے لئے استعمال کیا گیا تھا؛ یہ بھی ایک پرس ایڈریس کو اعداد میں نقشہ سازی کا اعلان کرتا ہے.balances
اس ٹوکن کے مالک کے لئے ، اس ٹوکن کے مالک کے ہر ایڈریس کا بیلنس ظاہر کرتا ہے۔
mint
اس فنکشن میں پہلے یہ فیصلہ کیا جاتا ہے کہ کیا ٹرانزیکشن کا آغاز کرنے والا اس ٹوکن کا خالق ہے ، اور اگر ایسا ہے تو ، فنکشن کے پیرامیٹرز کے مطابق ، ایک مخصوص تعداد میں ٹوکن کو مخصوص ایڈریس میں شامل کیا جاتا ہے۔send
اس فنکشن کو ہر کسی کے ذریعہ بلایا جاسکتا ہے ، اور یہ ٹرانزیکشن شروع کرنے والے کے ایڈریس سے ایک خاص رقم کا بیلنس (اگر کافی بیلنس موجود ہے) کٹوتی کرتا ہے ، جس میں ٹارگٹ ایڈریس میں اضافہ ہوتا ہے ، جو ایک ٹرانسفر کے مترادف ہے۔
ہم نے بھی ایک اعلان کیا ہے جس کا نام ہےSent
اس طرح کے واقعات کے ساتھ ، واقعات کا اصل میں کوئی عملی کردار نہیں ہوتا ہے ، صرف ڈیبگنگ کے وقت اہم واقعات کو پرنٹ کرنا آسان ہوتا ہے ، جو مستقبل میں ہلکے کلائنٹ کے نفاذ کو بھی آسان بنائے گا ((ہلکے کلائنٹ صرف واقعات کو قبول کرتے ہیں اور اصل میں معاہدہ نہیں کرتے ہیں) ۔)
ایتھرئم نے اس کوڈ کو ڈیبگ کرنے کے لئے مکس نامی ایک IDE مہیا کیا ہے ، مکس کے دائیں جانب آپ اپنے معاہدے کی جانچ کے لئے کچھ بلاکس اور اکاؤنٹس تشکیل دے سکتے ہیں ، اور اس عمل کے دوران ہر حالت متغیر کی قدر میں ہونے والی تبدیلیوں کو دیکھ سکتے ہیں۔ قابل ذکر ہے کہ معاہدہ ایک بار جاری ہونے کے بعد تبدیل نہیں ہوسکتا ہے ، اس کے بعد کا عمل مکمل طور پر دوسرے لوگوں کے لین دین سے شروع ہوتا ہے ، جو پروگرامرز کے لئے بہت تکلیف دہ ہے جو ہر روز بگ لکھتے ہیں ، لیکن معاہدے کا معنی "معاہدہ" ہے ، اور اگر آپ نے ایک بار معاہدہ جاری کیا ہے تو اسے قدرتی طور پر تبدیل نہیں کیا جاسکتا ہے۔ یقینا you آپ اپنے معاہدے پر اعتماد کرسکتے ہیں۔ (جیسا کہ پچھلے سکے میں ، صرف تخلیق کار ہی سکے تخلیق کرسکتے ہیں) ، لیکن یہ کوڈ بلاکچین پر موجود ہیں ، اور دوسرے صارفین کو بھی معلوم ہے۔
ایک بار جب ہم اس معاہدے کو لکھ چکے ہیں تو ہم اسے ایتھرینیم والیٹ کے ذریعے ویب پر شائع کر سکتے ہیں:
اس کے بعد آپ اس معاہدے پر نظر رکھ سکتے ہیں اور اس کے تفصیلی انٹرفیس پر جائیں:
بائیں جانب آپ کو دو حالت متغیرات کی قدر نظر آئے گی.minter
میں نے اپنے آپ کو ایک بار پھر اس کے بارے میں سوچا ہے.balances
کیونکہ یہ ایک میپنگ شیٹ ہے، لہذا آپ اس کے توازن کی تلاش کے لئے ایک ایڈریس درج کر سکتے ہیں۔ دائیں جانب آپ اس معاہدے کے لئے ایک نئی تجارت شروع کر سکتے ہیں، ایک ڈراپ ڈاؤن مینو ہے جس میں آپ منتخب کرسکتے ہیںsend
یاmint
آپ کو اس کے بارے میں معلومات حاصل کرنے کی ضرورت نہیں ہے۔ آپ اس کے بارے میں معلومات حاصل کرنے کے لئے اس کے بارے میں مزید معلومات حاصل کرسکتے ہیں۔ آپ اس کے بارے میں مزید معلومات حاصل کرسکتے ہیں۔
اس کے بعد میں ایک دلچسپ معاہدہ پیش کروں گا جس نے ایک "پونسی دھوکہ دہی" کا نتیجہ اخذ کیا ہے ، یعنی آپ اس معاہدے میں شامل ہونے کے لئے 1 ایتھر ادا کرسکتے ہیں ، اور اس کے بعد ہر تین افراد کو جوڑنے کے بعد ، پہلے آنے والے افراد کو 3 ایتھر ادا کیے جائیں گے:
contract Pyramid {
struct Participant {
address etherAddress;
}
Participant[] public participants;
uint public payoutIdx = 0;
// events make it easier to interface with the contract
event NewParticipant(uint indexed idx);
// fallback function - simple transactions trigger this
function() {
enter();
}
function enter() {
if (msg.value < 1 ether) {
msg.sender.send(msg.value);
return;
}
if (msg.value > 1 ether) {
msg.sender.send(msg.value - 1 ether);
}
uint idx = participants.length;
participants.length += 1;
participants[idx].etherAddress = msg.sender;
NewParticipant(idx);
// for every three new participants we can
// pay out to an earlier participant
if (idx != 0 && idx % 3 == 0) {
// payout is triple, minus 10 % fee
uint amount = 3 ether;
participants[payoutIdx].etherAddress.send(amount);
payoutIdx += 1;
}
}
function getNumberOfParticipants() constant returns (uint n) {
return participants.length;
}
}
کوڈ کو آسان بنایا گیاhttps://ethereumpyramid.com/contract.html
اور یہ کوڈ بہت سادہ ہے، یہ معاہدہ ایک اعلان کرتا ہے.participants
اعداد و شمار کو تمام شرکاء کے بٹوے کے پتے کو ترتیب میں ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے، یا ایک ہی اعلان کیا جاتا ہےpayoutIdx
یہ ریکارڈ کرنے کے لئے استعمال کیا جاتا ہے کہ پہلے کتنے شرکاء کو 3 ایتھر کی واپسی ملی ہے۔enter
اس معاہدے کو نافذ کرنے کے لئے بنیادی کام پہلے کچھ پیرامیٹرز کی جانچ پڑتال کرنا ہے ، اس بات کا یقین کرنا ہے کہ ہر شریک کو 1 ایتھر ادا کیا گیا ہے ، اور پھر نئے شریکوں کو ڈالنا ہے۔participants
آخر میں، اگر موجودہ شرکاء کا عدد 3 کا ضرب ہے تو، 3 ایتھر بھیجیں.payoutIdx
اس کے علاوہ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے.payoutIdx
اس کے علاوہ ، یہ بھی ممکن ہے کہ آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہو گی۔
ہیش ٹری:
بٹکوئن:
روکنے کا مسئلہ:
ایتھریم:
ایتھریم نیٹ ورک:
ایتھریم کے بعد:
معاہدہ:
معاہدہ IDE:
ایجاد کاروں کی مقدار - خوابمیں نے اس کو مکمل طور پر دیکھا ہے ، میں صرف سمجھ سکتا ہوں ، میں بہت کم سمجھتا ہوں
شوان شواناور یہ کہ وہ بی ٹی سی اور ای ٹی ایچ کے بارے میں تحقیق کرنے گئے تھے.
مومیکسسمجھ میں نہیں آتا