اسمارٹ کانٹریکٹس کو اپ گریڈ کرنا
صفحہ کی آخری اپ ڈیٹ: 21 اکتوبر، 2025
ایتھریم پر اسمارٹ کانٹریکٹس خودکار طور پر چلنے والے پروگرام ہیں جو Ethereum Virtual Machine (EVM) میں چلتے ہیں۔ یہ پروگرام ڈیزائن کے لحاظ سے ناقابلِ تغیر (immutable) ہوتے ہیں، جو کانٹریکٹ کے ڈیپلائے ہونے کے بعد بزنس لاجک میں کسی بھی قسم کی اپ ڈیٹس کو روکتا ہے۔
اگرچہ اسمارٹ کانٹریکٹس کی ٹرسٹ لیسنیس (trustlessness)، ڈی سینٹرلائزیشن، اور سیکیورٹی کے لیے ناقابلِ تغیر ہونا ضروری ہے، لیکن بعض صورتوں میں یہ ایک خامی بھی ہو سکتی ہے۔ مثال کے طور پر، ناقابلِ تغیر کوڈ ڈیولپرز کے لیے کمزور (vulnerable) کانٹریکٹس کو ٹھیک کرنا ناممکن بنا سکتا ہے۔
تاہم، اسمارٹ کانٹریکٹس کو بہتر بنانے کے لیے بڑھتی ہوئی تحقیق نے کئی اپ گریڈ پیٹرنز متعارف کرائے ہیں۔ یہ اپ گریڈ پیٹرنز ڈیولپرز کو بزنس لاجک کو مختلف کانٹریکٹس میں رکھ کر اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے (ناقابلِ تغیر کو برقرار رکھتے ہوئے) کے قابل بناتے ہیں۔
بنیادی شرائط
آپ کو اسمارٹ کانٹریکٹس، اسمارٹ کانٹریکٹ کی ساخت، اور Ethereum Virtual Machine (EVM) کی اچھی سمجھ ہونی چاہیے۔ یہ گائیڈ یہ بھی فرض کرتی ہے کہ قارئین اسمارٹ کانٹریکٹس کی پروگرامنگ پر عبور رکھتے ہیں۔
اسمارٹ کانٹریکٹ اپ گریڈ کیا ہے؟
اسمارٹ کانٹریکٹ اپ گریڈ میں کانٹریکٹ کی اسٹیٹ (state) کو برقرار رکھتے ہوئے اسمارٹ کانٹریکٹ کی بزنس لاجک کو تبدیل کرنا شامل ہے۔ یہ واضح کرنا ضروری ہے کہ اپ گریڈ ایبلٹی (upgradeability) اور میوٹیبلٹی (mutability) ایک جیسی نہیں ہیں، خاص طور پر اسمارٹ کانٹریکٹس کے تناظر میں۔
آپ اب بھی ایتھریم نیٹ ورک پر کسی ایڈریس پر ڈیپلائے کیے گئے پروگرام کو تبدیل نہیں کر سکتے۔ لیکن آپ اس کوڈ کو تبدیل کر سکتے ہیں جو اس وقت ایگزیکیوٹ ہوتا ہے جب صارفین کسی اسمارٹ کانٹریکٹ کے ساتھ تعامل (interact) کرتے ہیں۔
یہ درج ذیل طریقوں سے کیا جا سکتا ہے:
-
اسمارٹ کانٹریکٹ کے متعدد ورژنز بنانا اور پرانے کانٹریکٹ سے اسٹیٹ (یعنی ڈیٹا) کو کانٹریکٹ کے نئے انسٹینس (instance) میں منتقل کرنا۔
-
بزنس لاجک اور اسٹیٹ کو اسٹور کرنے کے لیے الگ الگ کانٹریکٹس بنانا۔
-
ایک ناقابلِ تغیر پراکسی کانٹریکٹ سے قابلِ ترمیم لاجک کانٹریکٹ میں فنکشن کالز کو ڈیلیگیٹ کرنے کے لیے پراکسی پیٹرنز کا استعمال کرنا۔
-
ایک ناقابلِ تغیر مین کانٹریکٹ بنانا جو مخصوص فنکشنز کو ایگزیکیوٹ کرنے کے لیے لچکدار سیٹلائٹ کانٹریکٹس کے ساتھ انٹرفیس کرتا ہے اور ان پر انحصار کرتا ہے۔
-
پراکسی کانٹریکٹ سے لاجک کانٹریکٹس میں فنکشن کالز کو ڈیلیگیٹ کرنے کے لیے ڈائمنڈ پیٹرن کا استعمال کرنا۔
اپ گریڈ میکانزم 1: کانٹریکٹ مائیگریشن
کانٹریکٹ مائیگریشن ورژنگ (versioning) پر مبنی ہے—ایک ہی سافٹ ویئر کی منفرد اسٹیٹس بنانے اور ان کا انتظام کرنے کا خیال۔ کانٹریکٹ مائیگریشن میں موجودہ اسمارٹ کانٹریکٹ کا ایک نیا انسٹینس ڈیپلائے کرنا اور اسٹوریج اور بیلنس کو نئے کانٹریکٹ میں منتقل کرنا شامل ہے۔
نئے ڈیپلائے کیے گئے کانٹریکٹ میں خالی اسٹوریج ہوگی، جس سے آپ پرانے کانٹریکٹ سے ڈیٹا بازیافت کر سکیں گے اور اسے نئی امپلیمنٹیشن میں لکھ سکیں گے۔ اس کے بعد، آپ کو ان تمام کانٹریکٹس کو اپ ڈیٹ کرنے کی ضرورت ہوگی جنہوں نے پرانے کانٹریکٹ کے ساتھ تعامل کیا تھا تاکہ نیا ایڈریس ظاہر ہو سکے۔
کانٹریکٹ مائیگریشن کا آخری مرحلہ صارفین کو نئے کانٹریکٹ کے استعمال پر منتقل ہونے کے لیے قائل کرنا ہے۔ نیا کانٹریکٹ ورژن صارف کے بیلنس اور ایڈریسز کو برقرار رکھے گا، جو ناقابلِ تغیر کو محفوظ رکھتا ہے۔ اگر یہ ٹوکن پر مبنی کانٹریکٹ ہے، تو آپ کو ایکسچینجز سے بھی رابطہ کرنا ہوگا تاکہ پرانے کانٹریکٹ کو ترک کر کے نیا کانٹریکٹ استعمال کیا جائے۔
کانٹریکٹ مائیگریشن صارف کے تعاملات کو توڑے بغیر اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کا ایک نسبتاً سیدھا اور محفوظ اقدام ہے۔ تاہم، صارف کے اسٹوریج اور بیلنس کو دستی طور پر نئے کانٹریکٹ میں منتقل کرنا وقت طلب ہے اور اس میں گیس کی زیادہ لاگت آ سکتی ہے۔
کانٹریکٹ مائیگریشن کے بارے میں مزید۔ (opens in a new tab)
اپ گریڈ میکانزم 2: ڈیٹا کی علیحدگی
اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کا ایک اور طریقہ بزنس لاجک اور ڈیٹا اسٹوریج کو الگ الگ کانٹریکٹس میں تقسیم کرنا ہے۔ اس کا مطلب ہے کہ صارفین لاجک کانٹریکٹ کے ساتھ تعامل کرتے ہیں، جبکہ ڈیٹا اسٹوریج کانٹریکٹ میں اسٹور ہوتا ہے۔
لاجک کانٹریکٹ میں وہ کوڈ ہوتا ہے جو اس وقت ایگزیکیوٹ ہوتا ہے جب صارفین ایپلیکیشن کے ساتھ تعامل کرتے ہیں۔ اس میں اسٹوریج کانٹریکٹ کا ایڈریس بھی ہوتا ہے اور یہ ڈیٹا حاصل کرنے اور سیٹ کرنے کے لیے اس کے ساتھ تعامل کرتا ہے۔
دریں اثنا، اسٹوریج کانٹریکٹ اسمارٹ کانٹریکٹ سے وابستہ اسٹیٹ کو رکھتا ہے، جیسے صارف کے بیلنس اور ایڈریسز۔ نوٹ کریں کہ اسٹوریج کانٹریکٹ لاجک کانٹریکٹ کی ملکیت ہوتا ہے اور ڈیپلائمنٹ کے وقت اسے مؤخر الذکر کے ایڈریس کے ساتھ کنفیگر کیا جاتا ہے۔ یہ غیر مجاز کانٹریکٹس کو اسٹوریج کانٹریکٹ کو کال کرنے یا اس کا ڈیٹا اپ ڈیٹ کرنے سے روکتا ہے۔
بائی ڈیفالٹ، اسٹوریج کانٹریکٹ ناقابلِ تغیر ہوتا ہے—لیکن آپ اس لاجک کانٹریکٹ کو نئی امپلیمنٹیشن سے بدل سکتے ہیں جس کی طرف یہ اشارہ کرتا ہے۔ یہ EVM میں چلنے والے کوڈ کو تبدیل کر دے گا، جبکہ اسٹوریج اور بیلنس کو برقرار رکھے گا۔
اس اپ گریڈ کے طریقے کو استعمال کرنے کے لیے اسٹوریج کانٹریکٹ میں لاجک کانٹریکٹ کے ایڈریس کو اپ ڈیٹ کرنے کی ضرورت ہوتی ہے۔ آپ کو پہلے بتائی گئی وجوہات کی بنا پر نئے لاجک کانٹریکٹ کو اسٹوریج کانٹریکٹ کے ایڈریس کے ساتھ بھی کنفیگر کرنا ہوگا۔
ڈیٹا کی علیحدگی کا پیٹرن کانٹریکٹ مائیگریشن کے مقابلے میں لاگو کرنا بلاشبہ آسان ہے۔ تاہم، آپ کو متعدد کانٹریکٹس کا انتظام کرنا ہوگا اور اسمارٹ کانٹریکٹس کو بدنیتی پر مبنی اپ گریڈز سے بچانے کے لیے پیچیدہ اجازت (authorization) کی اسکیمیں لاگو کرنی ہوں گی۔
اپ گریڈ میکانزم 3: پراکسی پیٹرنز
پراکسی پیٹرن بھی بزنس لاجک اور ڈیٹا کو الگ الگ کانٹریکٹس میں رکھنے کے لیے ڈیٹا کی علیحدگی کا استعمال کرتا ہے۔ تاہم، پراکسی پیٹرن میں، اسٹوریج کانٹریکٹ (جسے پراکسی کہا جاتا ہے) کوڈ کے ایگزیکیوشن کے دوران لاجک کانٹریکٹ کو کال کرتا ہے۔ یہ ڈیٹا کی علیحدگی کے طریقے کا الٹ ہے، جہاں لاجک کانٹریکٹ اسٹوریج کانٹریکٹ کو کال کرتا ہے۔
پراکسی پیٹرن میں یہ ہوتا ہے:
-
صارفین پراکسی کانٹریکٹ کے ساتھ تعامل کرتے ہیں، جو ڈیٹا اسٹور کرتا ہے، لیکن اس میں بزنس لاجک نہیں ہوتی۔
-
پراکسی کانٹریکٹ لاجک کانٹریکٹ کا ایڈریس اسٹور کرتا ہے اور
delegatecallفنکشن کا استعمال کرتے ہوئے تمام فنکشن کالز کو لاجک کانٹریکٹ (جس میں بزنس لاجک ہوتی ہے) کو ڈیلیگیٹ کرتا ہے۔ -
کال کو لاجک کانٹریکٹ میں فارورڈ کرنے کے بعد، لاجک کانٹریکٹ سے واپس آنے والا ڈیٹا بازیافت کیا جاتا ہے اور صارف کو واپس کر دیا جاتا ہے۔
پراکسی پیٹرنز کو استعمال کرنے کے لیے delegatecall فنکشن کو سمجھنے کی ضرورت ہوتی ہے۔ بنیادی طور پر، delegatecall ایک اوپ کوڈ (opcode) ہے جو ایک کانٹریکٹ کو دوسرے کانٹریکٹ کو کال کرنے کی اجازت دیتا ہے، جبکہ اصل کوڈ کا ایگزیکیوشن کال کرنے والے کانٹریکٹ کے سیاق و سباق میں ہوتا ہے۔ پراکسی پیٹرنز میں delegatecall استعمال کرنے کا ایک مطلب یہ ہے کہ پراکسی کانٹریکٹ اپنے اسٹوریج میں پڑھتا اور لکھتا ہے اور لاجک کانٹریکٹ میں اسٹور شدہ لاجک کو اس طرح ایگزیکیوٹ کرتا ہے جیسے کسی اندرونی فنکشن کو کال کر رہا ہو۔
Solidity کی دستاویزات (opens in a new tab) سے:
میسج کال کی ایک خاص قسم موجود ہے، جس کا نام delegatecall ہے جو میسج کال سے بالکل مشابہ ہے سوائے اس حقیقت کے کہ ٹارگٹ ایڈریس پر موجود کوڈ کال کرنے والے کانٹریکٹ کے سیاق و سباق (یعنی ایڈریس پر) میں ایگزیکیوٹ ہوتا ہے اور
msg.senderاورmsg.valueاپنی ویلیوز کو تبدیل نہیں کرتے ہیں۔ اس کا مطلب ہے کہ ایک کانٹریکٹ رن ٹائم پر مختلف ایڈریس سے متحرک طور پر کوڈ لوڈ کر سکتا ہے۔ اسٹوریج، موجودہ ایڈریس اور بیلنس اب بھی کال کرنے والے کانٹریکٹ کا حوالہ دیتے ہیں، صرف کوڈ کال کیے گئے ایڈریس سے لیا جاتا ہے۔
پراکسی کانٹریکٹ جانتا ہے کہ جب بھی کوئی صارف کسی فنکشن کو کال کرتا ہے تو delegatecall کو کیسے شروع کرنا ہے کیونکہ اس میں ایک fallback فنکشن شامل ہوتا ہے۔ Solidity پروگرامنگ میں فال بیک فنکشن (opens in a new tab) اس وقت ایگزیکیوٹ ہوتا ہے جب کوئی فنکشن کال کانٹریکٹ میں بتائے گئے فنکشنز سے میل نہیں کھاتی۔
پراکسی پیٹرن کو کام کرنے کے لیے ایک کسٹم فال بیک فنکشن لکھنے کی ضرورت ہوتی ہے جو یہ بتاتا ہے کہ پراکسی کانٹریکٹ کو ان فنکشن کالز کو کیسے ہینڈل کرنا چاہیے جنہیں وہ سپورٹ نہیں کرتا۔ اس صورت میں پراکسی کے فال بیک فنکشن کو ایک delegatecall شروع کرنے اور صارف کی درخواست کو موجودہ لاجک کانٹریکٹ کی امپلیمنٹیشن کی طرف موڑنے کے لیے پروگرام کیا جاتا ہے۔
پراکسی کانٹریکٹ بائی ڈیفالٹ ناقابلِ تغیر ہوتا ہے، لیکن اپ ڈیٹ شدہ بزنس لاجک کے ساتھ نئے لاجک کانٹریکٹس بنائے جا سکتے ہیں۔ پھر اپ گریڈ کرنا پراکسی کانٹریکٹ میں حوالہ دیے گئے لاجک کانٹریکٹ کے ایڈریس کو تبدیل کرنے کا معاملہ ہے۔
پراکسی کانٹریکٹ کو نئے لاجک کانٹریکٹ کی طرف اشارہ کر کے، وہ کوڈ تبدیل ہو جاتا ہے جو اس وقت ایگزیکیوٹ ہوتا ہے جب صارفین پراکسی کانٹریکٹ کے فنکشن کو کال کرتے ہیں۔ یہ ہمیں صارفین کو نئے کانٹریکٹ کے ساتھ تعامل کرنے کا کہے بغیر کانٹریکٹ کی لاجک کو اپ گریڈ کرنے کی اجازت دیتا ہے۔
پراکسی پیٹرنز اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کا ایک مقبول طریقہ ہیں کیونکہ یہ کانٹریکٹ مائیگریشن سے وابستہ مشکلات کو ختم کرتے ہیں۔ تاہم، پراکسی پیٹرنز استعمال کرنے میں زیادہ پیچیدہ ہیں اور اگر انہیں غلط طریقے سے استعمال کیا جائے تو یہ اہم خامیاں متعارف کرا سکتے ہیں، جیسے کہ فنکشن سلیکٹر کلاشنز (function selector clashes) (opens in a new tab)۔
پراکسی پیٹرنز کے بارے میں مزید (opens in a new tab)۔
اپ گریڈ میکانزم 4: اسٹریٹجی پیٹرن
یہ تکنیک اسٹریٹجی پیٹرن (opens in a new tab) سے متاثر ہے، جو مخصوص خصوصیات کو لاگو کرنے کے لیے دوسرے پروگرامز کے ساتھ انٹرفیس کرنے والے سافٹ ویئر پروگرام بنانے کی حوصلہ افزائی کرتی ہے۔ ایتھریم ڈیولپمنٹ پر اسٹریٹجی پیٹرن کو لاگو کرنے کا مطلب ایک ایسا اسمارٹ کانٹریکٹ بنانا ہوگا جو دوسرے کانٹریکٹس سے فنکشنز کو کال کرے۔
اس صورت میں مین کانٹریکٹ میں بنیادی بزنس لاجک ہوتی ہے، لیکن یہ کچھ فنکشنز کو ایگزیکیوٹ کرنے کے لیے دوسرے اسمارٹ کانٹریکٹس ("سیٹلائٹ کانٹریکٹس") کے ساتھ انٹرفیس کرتا ہے۔ یہ مین کانٹریکٹ ہر سیٹلائٹ کانٹریکٹ کا ایڈریس بھی اسٹور کرتا ہے اور سیٹلائٹ کانٹریکٹ کی مختلف امپلیمنٹیشنز کے درمیان سوئچ کر سکتا ہے۔
آپ ایک نیا سیٹلائٹ کانٹریکٹ بنا سکتے ہیں اور مین کانٹریکٹ کو نئے ایڈریس کے ساتھ کنفیگر کر سکتے ہیں۔ یہ آپ کو اسمارٹ کانٹریکٹ کے لیے حکمت عملیوں (strategies) (یعنی نئی لاجک لاگو کرنے) کو تبدیل کرنے کی اجازت دیتا ہے۔
اگرچہ یہ پہلے زیر بحث آنے والے پراکسی پیٹرن سے ملتا جلتا ہے، لیکن اسٹریٹجی پیٹرن مختلف ہے کیونکہ مین کانٹریکٹ، جس کے ساتھ صارفین تعامل کرتے ہیں، بزنس لاجک رکھتا ہے۔ اس پیٹرن کا استعمال آپ کو بنیادی انفراسٹرکچر کو متاثر کیے بغیر اسمارٹ کانٹریکٹ میں محدود تبدیلیاں متعارف کرانے کا موقع فراہم کرتا ہے۔
بنیادی خامی یہ ہے کہ یہ پیٹرن زیادہ تر معمولی اپ گریڈز کو رول آؤٹ کرنے کے لیے مفید ہے۔ اس کے علاوہ، اگر مین کانٹریکٹ سے سمجھوتہ کیا جاتا ہے (مثلاً، ہیک کے ذریعے)، تو آپ اس اپ گریڈ کے طریقے کو استعمال نہیں کر سکتے۔
اپ گریڈ میکانزم 5: ڈائمنڈ پیٹرن
ڈائمنڈ پیٹرن کو پراکسی پیٹرن میں بہتری سمجھا جا سکتا ہے۔ ڈائمنڈ پیٹرنز پراکسی پیٹرنز سے مختلف ہوتے ہیں کیونکہ ڈائمنڈ پراکسی کانٹریکٹ ایک سے زیادہ لاجک کانٹریکٹس کو فنکشن کالز ڈیلیگیٹ کر سکتا ہے۔
ڈائمنڈ پیٹرن میں لاجک کانٹریکٹس کو facets کے نام سے جانا جاتا ہے۔ ڈائمنڈ پیٹرن کو کام کرنے کے لیے، آپ کو پراکسی کانٹریکٹ میں ایک میپنگ بنانے کی ضرورت ہے جو فنکشن سلیکٹرز (opens in a new tab) کو مختلف facet ایڈریسز پر میپ کرے۔
جب کوئی صارف فنکشن کال کرتا ہے، تو پراکسی کانٹریکٹ اس فنکشن کو ایگزیکیوٹ کرنے کے ذمہ دار facet کو تلاش کرنے کے لیے میپنگ چیک کرتا ہے۔ پھر یہ delegatecall کو شروع کرتا ہے (فال بیک فنکشن کا استعمال کرتے ہوئے) اور کال کو مناسب لاجک کانٹریکٹ کی طرف ری ڈائریکٹ کرتا ہے۔
ڈائمنڈ اپ گریڈ پیٹرن کے روایتی پراکسی اپ گریڈ پیٹرنز پر کچھ فوائد ہیں:
-
یہ آپ کو تمام کوڈ کو تبدیل کیے بغیر کانٹریکٹ کے ایک چھوٹے سے حصے کو اپ گریڈ کرنے کی اجازت دیتا ہے۔ اپ گریڈز کے لیے پراکسی پیٹرن کا استعمال کرنے کے لیے مکمل طور پر نیا لاجک کانٹریکٹ بنانے کی ضرورت ہوتی ہے، یہاں تک کہ معمولی اپ گریڈز کے لیے بھی۔
-
تمام اسمارٹ کانٹریکٹس (بشمول پراکسی پیٹرنز میں استعمال ہونے والے لاجک کانٹریکٹس) کی سائز کی حد 24KB ہوتی ہے، جو ایک حد ہو سکتی ہے—خاص طور پر پیچیدہ کانٹریکٹس کے لیے جنہیں زیادہ فنکشنز کی ضرورت ہوتی ہے۔ ڈائمنڈ پیٹرن فنکشنز کو متعدد لاجک کانٹریکٹس میں تقسیم کر کے اس مسئلے کو حل کرنا آسان بناتا ہے۔
-
پراکسی پیٹرنز ایکسیس کنٹرولز کے لیے کیچ آل (catch-all) نقطہ نظر اپناتے ہیں۔ اپ گریڈ فنکشنز تک رسائی رکھنے والی کوئی اینٹیٹی پورے کانٹریکٹ کو تبدیل کر سکتی ہے۔ لیکن ڈائمنڈ پیٹرن ماڈیولر پرمیشنز کے نقطہ نظر کو قابل بناتا ہے، جہاں آپ اینٹیٹیز کو اسمارٹ کانٹریکٹ کے اندر مخصوص فنکشنز کو اپ گریڈ کرنے تک محدود کر سکتے ہیں۔
ڈائمنڈ پیٹرن کے بارے میں مزید (opens in a new tab)۔
اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کے فوائد اور نقصانات
| فوائد | نقصانات |
|---|---|
| اسمارٹ کانٹریکٹ اپ گریڈ ڈیپلائمنٹ کے بعد کے مرحلے میں دریافت ہونے والی کمزوریوں کو ٹھیک کرنا آسان بنا سکتا ہے۔ | اسمارٹ کانٹریکٹس کو اپ گریڈ کرنا کوڈ کے ناقابلِ تغیر ہونے کے خیال کی نفی کرتا ہے، جس کے ڈی سینٹرلائزیشن اور سیکیورٹی پر اثرات مرتب ہوتے ہیں۔ |
| ڈیولپرز ڈی سینٹرلائزڈ ایپلیکیشنز میں نئی خصوصیات شامل کرنے کے لیے لاجک اپ گریڈز کا استعمال کر سکتے ہیں۔ | صارفین کو ڈیولپرز پر بھروسہ کرنا چاہیے کہ وہ من مانی طور پر اسمارٹ کانٹریکٹس میں ترمیم نہیں کریں گے۔ |
| اسمارٹ کانٹریکٹ اپ گریڈز آخری صارفین کے لیے حفاظت کو بہتر بنا سکتے ہیں کیونکہ بگز کو تیزی سے ٹھیک کیا جا سکتا ہے۔ | اسمارٹ کانٹریکٹس میں اپ گریڈ کی فعالیت کو پروگرام کرنا پیچیدگی کی ایک اور تہہ کا اضافہ کرتا ہے اور اہم خامیوں کے امکان کو بڑھاتا ہے۔ |
| کانٹریکٹ اپ گریڈز ڈیولپرز کو مختلف خصوصیات کے ساتھ تجربہ کرنے اور وقت کے ساتھ ساتھ dapps کو بہتر بنانے کے لیے زیادہ گنجائش دیتے ہیں۔ | اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کا موقع ڈیولپرز کو ڈیولپمنٹ کے مرحلے کے دوران مناسب جانچ پڑتال کیے بغیر پروجیکٹس کو تیزی سے لانچ کرنے کی ترغیب دے سکتا ہے۔ |
| اسمارٹ کانٹریکٹس میں غیر محفوظ ایکسیس کنٹرول یا سینٹرلائزیشن بدنیتی پر مبنی عناصر کے لیے غیر مجاز اپ گریڈز انجام دینا آسان بنا سکتی ہے۔ |
اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کے لیے تحفظات
-
غیر مجاز اسمارٹ کانٹریکٹ اپ گریڈز کو روکنے کے لیے محفوظ ایکسیس کنٹرول/اجازت کے میکانزم کا استعمال کریں، خاص طور پر اگر پراکسی پیٹرنز، اسٹریٹجی پیٹرنز، یا ڈیٹا کی علیحدگی کا استعمال کر رہے ہوں۔ ایک مثال اپ گریڈ فنکشن تک رسائی کو محدود کرنا ہے، تاکہ صرف کانٹریکٹ کا مالک ہی اسے کال کر سکے۔
-
اسمارٹ کانٹریکٹس کو اپ گریڈ کرنا ایک پیچیدہ سرگرمی ہے اور کمزوریوں کے تعارف کو روکنے کے لیے اعلیٰ سطح کی مستعدی کی ضرورت ہوتی ہے۔
-
اپ گریڈز کو لاگو کرنے کے عمل کو ڈی سینٹرلائز کر کے اعتماد کے مفروضوں کو کم کریں۔ ممکنہ حکمت عملیوں میں اپ گریڈز کو کنٹرول کرنے کے لیے ملٹی سگ (multi-sig) والیٹ کانٹریکٹ کا استعمال کرنا، یا اپ گریڈ کی منظوری پر ووٹ دینے کے لیے DAO کے اراکین کی ضرورت شامل ہے۔
-
کانٹریکٹس کو اپ گریڈ کرنے میں شامل اخراجات سے آگاہ رہیں۔ مثال کے طور پر، کانٹریکٹ مائیگریشن کے دوران پرانے کانٹریکٹ سے نئے کانٹریکٹ میں اسٹیٹ (مثلاً، صارف کے بیلنس) کاپی کرنے کے لیے ایک سے زیادہ ٹرانزیکشنز کی ضرورت پڑ سکتی ہے، جس کا مطلب ہے زیادہ گیس فیس۔
-
صارفین کی حفاظت کے لیے ٹائم لاکس (timelocks) کو لاگو کرنے پر غور کریں۔ ٹائم لاک سے مراد کسی سسٹم میں تبدیلیوں پر لاگو ہونے والی تاخیر ہے۔ اپ گریڈز کو کنٹرول کرنے کے لیے ٹائم لاکس کو ملٹی سگ گورننس سسٹم کے ساتھ ملایا جا سکتا ہے: اگر کوئی مجوزہ کارروائی مطلوبہ منظوری کی حد تک پہنچ جاتی ہے، تو یہ اس وقت تک ایگزیکیوٹ نہیں ہوتی جب تک کہ پہلے سے طے شدہ تاخیر کی مدت ختم نہ ہو جائے۔
ٹائم لاکس صارفین کو سسٹم سے باہر نکلنے کے لیے کچھ وقت دیتے ہیں اگر وہ کسی مجوزہ تبدیلی (مثلاً، لاجک اپ گریڈ یا نئی فیس اسکیموں) سے متفق نہیں ہیں۔ ٹائم لاکس کے بغیر، صارفین کو ڈیولپرز پر بھروسہ کرنے کی ضرورت ہوتی ہے کہ وہ پیشگی اطلاع کے بغیر اسمارٹ کانٹریکٹ میں من مانی تبدیلیاں لاگو نہیں کریں گے۔ یہاں خامی یہ ہے کہ ٹائم لاکس کمزوریوں کو تیزی سے پیچ (patch) کرنے کی صلاحیت کو محدود کرتے ہیں۔
وسائل
OpenZeppelin Upgrades Plugins - اپ گریڈ ایبل اسمارٹ کانٹریکٹس کو ڈیپلائے اور محفوظ کرنے کے لیے ٹولز کا ایک مجموعہ۔
ٹیوٹوریلز
- اپنے اسمارٹ کانٹریکٹس کو اپ گریڈ کرنا | یوٹیوب ٹیوٹوریل (opens in a new tab) از Patrick Collins
- ایتھریم اسمارٹ کانٹریکٹ مائیگریشن ٹیوٹوریل (opens in a new tab) از Austin Griffith
- اسمارٹ کانٹریکٹس کو اپ گریڈ کرنے کے لیے UUPS پراکسی پیٹرن کا استعمال (opens in a new tab) از Pranesh A.S
- ویب 3 ٹیوٹوریل: OpenZeppelin کا استعمال کرتے ہوئے اپ گریڈ ایبل اسمارٹ کانٹریکٹ (پراکسی) لکھیں (opens in a new tab) از fangjun.eth
مزید مطالعہ
- اسمارٹ کانٹریکٹ اپ گریڈز کی حالت (opens in a new tab) از Santiago Palladino
- Solidity اسمارٹ کانٹریکٹ کو اپ گریڈ کرنے کے متعدد طریقے (opens in a new tab) - Crypto Market Pool بلاگ
- سیکھیں: اسمارٹ کانٹریکٹس کو اپ گریڈ کرنا (opens in a new tab) - OpenZeppelin Docs
- Solidity کانٹریکٹس کی اپ گریڈ ایبلٹی کے لیے پراکسی پیٹرنز: Transparent بمقابلہ UUPS پراکسیز (opens in a new tab) از Naveen Sahu
- ڈائمنڈ اپ گریڈز کیسے کام کرتے ہیں (opens in a new tab) از Nick Mudge