فائدہ:
- مصنوعی ذہانت کا استعمال ثابت شدہ لائبریریوں (جیسے OpenZeppelin) پر مبنی فریم ورک، ٹیسٹ اور جائزہ ڈرافٹ تیار کرنے کے لیے اور یہ سمجھنا کہ انسان پیداوار کی حفاظت کی ضمانت دیتے ہیں۔
- تالیف، جانچ اور ٹیسٹ نیٹ کے ذریعے مصنوعی ذہانت سے تیار کردہ کوڈ ورژن، پیٹرن اور رسائی کنٹرول کی تصدیق کرنے کی اہلیت
- تمیز کرنے کے قابل ہونے کا مطلب یہ نہیں ہے کہ تالیف محفوظ ہے اور یہ کہ ٹیسٹ نیٹ اور آڈیٹنگ ضروری ہے۔
سمارٹ کنٹریکٹ لکھنا عام سافٹ ویئر سے مختلف ہے: آپ جو کوڈ لکھتے ہیں وہ عوامی، ناقابل تغیر، اور ایسا پروگرام ہے جو براہ راست رقم منتقل کرتا ہے۔ اس یونٹ میں، آپ سیکھیں گے کہ AI کو ایک سمارٹ کنٹریکٹ ڈویلپمنٹ اسسٹنٹ کے طور پر کیسے استعمال کرنا ہے۔ ہم ڈرافٹ پروڈکشن سے لے کر ٹیسٹ رائٹنگ تک، پیٹرن ریکال سے لے کر گیس (ٹرانزیکشن فیس) کی اصلاح تک سیکھیں گے۔ لیکن آئیے شروع سے ہی واضح ہو جائیں: AI بلیو پرنٹ تیار کرتا ہے۔ انسان محفوظ کوڈ کو یقینی بناتا ہے جو پیداوار میں جاتا ہے۔
پہلی بنیاد: زبان اور ماحول
سب سے عام سمارٹ کنٹریکٹ لینگویج سالیڈٹی ہے (ایتھیریم اور ای وی ایم کی زبان — ایتھریم ورچوئل مشین، ورچوئل مشین جس پر کنٹریکٹ چلتے ہیں — موافق زنجیریں)۔ متبادل ہے وائپر (ایک ازگر جیسی زبان جس کا مقصد زیادہ محدود اور پڑھنے کے قابل ہونا ہے)۔ آپ کا کوڈ گیس استعمال کرتا ہے (بلاکچین میں ہر لین دین کی قیمت)؛ غیر موثر کوڈ مہنگا ہے۔ ان شرائط کو اس تناظر میں واضح رکھنا کہ آپ اسے AI کو دیتے ہیں درست آؤٹ پٹ حاصل کرنے کی کلید ہے۔
جہاں AI سب سے زیادہ قیمتی ہے وہ "شروع سے لکھنے" میں نہیں ہے بلکہ فریم ورک + اچھا مولڈ تیار کرنے میں ہے: ایک معیار کے مطابق آغاز، ایک بلیو پرنٹ جس پر آپ کی مہارت شامل کی جائے۔
کوڈنگ میں AI کے استعمال کی پرتیں۔
1. کنکال پیدا کرنا۔ AI تیزی سے ایک معیاری ٹوکن (ERC-20) یا NFT (ERC-721 — ایک منفرد ڈیجیٹل اثاثہ معیار) کے کنکال کی کان کنی کرتا ہے۔ لیکن یقینی بنائیں کہ AI کو ثابت شدہ لائبریری کا استعمال کریں: مثال کے طور پر، OpenZeppelin (کمیونٹی کی قابل اعتماد، آڈٹ شدہ معیاری معاہدہ کرنے والی لائبریری)۔ اصول یہ ہے کہ شروع سے سیکیورٹی لکھنے کے بجائے ٹیسٹ شدہ بلاک کا استعمال کریں۔
2. فنکشن کی تفصیل اور جائزہ۔ AI کو موجودہ فنکشن کی وضاحت کرنے سے آپ کو منطقی غلطیوں کی جلد نشاندہی کرنے کی اجازت ملتی ہے۔
3. ٹیسٹ نسل. AI ایج کیسز کے لیے ٹیسٹ کیسز بنانے میں اچھا ہے: صفر ان پٹ، بہت بڑی تعداد، غیر مجاز کالر، بار بار کال۔ یہ ان منظرناموں میں سے ایک کو یاد دلاتا ہے جو ایک چھوڑ دیتا ہے۔
4. گیس اور پڑھنے کی اہلیت۔ AI مہنگے نمونوں کو جھنڈا دیتا ہے جیسے کہ غیر ضروری اسٹوریج لکھتا ہے اور متبادل تجویز کرتا ہے۔
اشارہ: AI کو ہدایت کریں کہ "OpenZeppelin کے آڈٹ شدہ معاہدوں پر تعمیر کریں، سیکورٹی کو شروع سے دوبارہ لکھیں۔" آزمائشی لائبریری استعمال کرنے کے مقابلے میں AI کے لیے اصل سیکیورٹی کوڈ لکھنا زیادہ خطرناک ہے۔
کمزور فوری / مضبوط اشارہ
کمزور اشارہ:
مجھے ایک ٹوکن معاہدہ لکھیں۔
یہ اشارہ خطرناک ہے: یہ واضح نہیں ہے کہ کون سا معیار، کون سا سلسلہ، کون سی لائبریری، کون سی سیکیورٹی کی ضرورت ہے۔ AI بے ترتیب، ممکنہ طور پر پرانا یا غیر محفوظ کوڈ تیار کرتا ہے۔
طاقتور اشارہ:
آپ کا کردار: سینئر سولیڈیٹی ڈویلپر۔ EVM کے موافق چین کے لیے ERC-20 ٹوکن ڈرافٹ تیار کریں۔ قواعد:- OpenZeppelin کے آڈٹ شدہ ERC20 اور مالکانہ معاہدوں کی بنیاد پر۔- سالیڈیٹی ورژن اور لائسنس (SPDX) لائن کو واضح طور پر لکھیں۔- صرف مالک کو ٹکسال کی اجازت ہے؛ لامحدود دبانے کے خلاف ایک ٹوپی شامل کریں۔ - ہر فنکشن میں NatSpec تبصرہ شامل کریں۔ - شروع سے سیکورٹی لکھیں؛ معیاری بلاک استعمال کریں۔ - آخر میں ایک انتباہ شامل کریں: "یہ ایک مسودہ ہے؛ آڈیٹنگ اور جانچ کی ضرورت ہے"۔ ان علاقوں کو نشان زد کریں جن کے بارے میں آپ کو یقین نہیں ہے // TODO کے ساتھ۔
فرق: مضبوط پرامپٹ واضح کردار، معیاری، لائبریری، سیکورٹی باؤنڈری، دستاویزات اور توثیق کی توقعات دیتا ہے۔
چار کاپی کرنے کے قابل ٹیمپلیٹس
1) معیار پر مبنی کنکال:
آپ کا کردار: سالیڈٹی ڈویلپر۔ OpenZeppelin آڈٹ شدہ لائبریری پر مبنی [ERC-20/ERC-721/staking] معاہدہ کا فریم ورک تیار کریں۔ SPDX لائسنس اور پراگما ورژن لکھیں۔ ہر ایک بیرونی فنکشن میں رسائی کنٹرول (جو کال کر سکتا ہے) شامل کریں۔ سیکورٹی کو بحال کرنا؛ معیاری بلاکس استعمال کریں۔ یہ ایک مسودہ ہے۔
2) فنکشن کا جائزہ:
ایک سینئر ڈویلپر کی طرح درج ذیل فنکشن کا جائزہ لیں: یہ کیا کرتا ہے، اس کی کیا حالتیں بدلتی ہیں، کون اسے کال کرسکتا ہے؟ ممکنہ منطقی غلطیوں اور حفاظتی خطرات کو HYPOTHESIS کے بطور نشان زد کریں، ہر ایک کو کوڈ میں ایک لائن سے جوڑتے ہوئے بالکل "محفوظ" نہ کہیں۔ صرف توجہ کے نکات کی فہرست بنائیں۔
3) ٹیسٹ منظر نامے کا مسودہ:
اس معاہدے کے لیے ٹیسٹ کیسز تجویز کریں (فاؤنڈری/ہاردھت کے لیے ایک مسودہ ہو سکتا ہے)۔ خاص طور پر حد کے معاملات کا احاطہ کریں: صفر ان پٹ، بہت بڑی تعداد، غیر مجاز کال، دوبارہ داخل ہونے والی کال، ناکافی فنڈز۔ لکھیں کہ ہر ٹیسٹ کیا تصدیق کرتا ہے۔
4) گیس اور پڑھنے کے قابل جائزہ:
اس معاہدے میں، ان نمونوں کو نشان زد کریں جو گیس کی قیمت کو کم کر سکتے ہیں: غیر ضروری سٹوریج رائٹنگ، لوپ میں بیرونی کال، بار بار کیلکولیشن۔ ہر تجویز میں پہلے/بعد کے فرق کی وضاحت کریں۔ سیکورٹی کو توڑنے والی اصلاح کی تجویز کریں؛ اگر یہ واضح نہیں ہے تو، "آڈیٹر سے پوچھیں" کہیں۔
تین چھوٹے کیسز (تعداد میں)
کیس 1 - کنکال نے 4 گھنٹے بچائے۔ ایک ٹیم نے 30 منٹ میں AI کے ساتھ آڈٹ شدہ لائبریری پر مبنی ویسٹنگ کنٹریکٹ کے ڈھانچے کی کان کنی کی۔ اس میں دستی طور پر ~ 4 گھنٹے لگے۔ ٹیم نے سیکیورٹی اور جانچ کے لیے وقت مختص کیا۔ فائدہ سیکیورٹی کی منتقلی سے نہیں بلکہ تکلیف دہ فریم ورک کو تیز کرنے سے حاصل ہوا۔
کیس 2 - پرانا ورژن ٹریپ۔ AI نے ایک ایسا نمونہ تیار کیا جو خام ایتھر کو منتقلی کے ذریعے بھیجتا ہے، جس کی مزید سفارش نہیں کی جاتی کیونکہ تربیت کا ڈیٹا پرانا ہے۔ ڈویلپر نے اسے محسوس کیا اور اسے موجودہ کال پر مبنی اور دوبارہ داخلہ سے محفوظ شدہ پیٹرن میں تبدیل کردیا۔ سبق: AI کی لائبریری/پیٹرن ہمیشہ اپ ٹو ڈیٹ ہونے کی تصدیق کی جاتی ہے۔ AI ٹریننگ کٹ آف کی تاریخ سے آگے نہیں جانتا ہے۔
کیس 3 - ٹیسٹ ڈرافٹ میں پوپ چھپا ہوا بگ۔ AI کی طرف سے تیار کردہ "غیر مجاز کالر" ٹیسٹ سے پتہ چلتا ہے کہ ڈویلپر ایک فنکشن میں رسائی کنٹرول کو بھول گیا تھا۔ صرف مالک 1 لائن غائب، ٹیسٹ نیٹ پر 5 منٹ میں پکڑا گیا۔ مین نیٹ پر فنڈز کا نقصان ہو سکتا تھا۔ سبق: AI جانچ میں انسانی اندھے مقام کا احاطہ کرتا ہے۔
AI کے ساتھ حفاظتی نمونوں کو یاد رکھنا
AI آپ کو ایک چیک لسٹ جیسے معلوم خطرے کے نمونوں کی یاد دلانے میں اچھا ہے۔ سب سے زیادہ عام پیٹرن:
- Reentrancy: اسٹیٹس کو اپ ڈیٹ کیے بغیر ایک بیرونی کال کرنا۔ حل: چیک-اثرات-انٹرایکشن آرڈر، ری اینٹرینسی گارڈ۔
- رسائی کنٹرول کی کمی: کوئی بھی اہم فنکشن کو کال کرسکتا ہے۔
- انٹیجر اوور فلو/انڈرفال: ماڈرن سولیڈیٹی ان میں سے بیشتر کو پکڑتی ہے، لیکن پھر بھی کم سطحی کوڈ میں خطرہ ہے۔
- ناکافی ان پٹ کی توثیق: صفر پتہ، صفر مقدار کنٹرول۔
- اوریکل انحصار: بیرونی ڈیٹا (جیسے قیمت) پر اندھا اعتماد۔
دھیان دیں: AI اس فہرست کو یاد کر سکتا ہے، لیکن یہ اس بات کی ضمانت نہیں دے سکتا کہ آیا فہرست میں موجود کوئی آئٹم آپ کے مخصوص کوڈ میں ہے۔ چیک لسٹ ایک آغاز ہے۔ یہ کنٹینر کنٹرول کا متبادل نہیں ہے۔
سیاق و سباق کو درست کرنا: AI سے اچھے کوڈ کا راز
AI جو کوڈ تیار کرتا ہے اس کا معیار براہ راست اس سیاق و سباق کے معیار پر منحصر ہوتا ہے جو آپ اسے دیتے ہیں۔ Web3 میں یہ خاص طور پر اہم ہے کیونکہ ایک چھوٹی سی تفصیل (کون سا سلسلہ، کون سا سالیڈٹی ورژن، کون سا ٹوکن اسٹینڈرڈ) پورے آؤٹ پٹ کو بدل دیتا ہے۔ ایک اچھے سیاق و سباق میں شامل ہیں:
- ٹارگٹ چین اور ماحول: ایتھریم مینیٹ یا ایک پرت 2 (سستا سائڈ چین جو مین چین کے اوپر چلتا ہے)؟ گیس کی قیمت اور کچھ خصوصیات سلسلہ کے لحاظ سے مختلف ہوتی ہیں۔
- ورژن اور لائبریری: کون سا سالیڈٹی ورژن، کون سا اوپن زیپلین ورژن؟ اگر کوئی ورژن متعین نہیں کیا گیا ہے، تو AI پرانے، فرسودہ نمونے تیار کر سکتا ہے۔
- حفاظتی تقاضے: کیا کوئی ٹوپی ہے، کیا اسے روکا جا سکتا ہے، کیا اسے بڑھایا جا سکتا ہے؟ یہ بات شروع سے ہی کہنی چاہیے۔
- پابندیاں: واضح حدود جیسے "اسمبلی استعمال نہ کریں"، "بیرونی کال سے گریز کریں"، "گیس کو بہتر بنائیں لیکن پڑھنے کی اہلیت کو برقرار رکھیں"۔
ایک اور طاقتور تکنیک یہ ہے کہ پہلے AI سے پلان پوچھیں، پھر کوڈ: "پہلے اس معاہدے کے افعال کی فہرست بنائیں اور ہر ایک کیا کرے گا؛ ایک بار جب میں اسے منظور کر دوں تو کوڈ لکھیں۔" یہ غلط سمت میں جانے والے AI کو جلد پکڑتا ہے اور آپ کو تعمیراتی فیصلے کو برقرار رکھنے کی اجازت دیتا ہے۔
اشارہ: AI سے پوچھیں "آپ نے یہ کوڈ اس طرح کیوں لکھا؟" پوچھنا استدلال کی وضاحت آپ کے سیکھنے کی رفتار کو تیز کرے گی اور کسی بھی منطقی غلطی کو سامنے لائے گی (مثلاً ایک غلط حفاظتی مفروضہ)۔ ایسے AI کے آؤٹ پٹ پر بھروسہ نہ کریں جو اپنے کوڈ کا دفاع نہیں کر سکتا۔
عام غلطیاں
- شروع سے AI میں سیکیورٹی ڈالنا۔ آزمائشی لائبریری کا استعمال کریں۔
- AI کے ذریعہ تیار کردہ ورژن/پیٹرن کی تصدیق نہیں کرنا۔ ٹریننگ ڈیٹا پرانا ہو سکتا ہے۔
- ٹیسٹ نیٹ کو نظرانداز کرنا۔ لائیو جانے سے پہلے ہر ڈرافٹ کو ٹیسٹ نیٹ ورک پر چلنا چاہیے۔
- NatSpec/دستاویزات شامل نہیں کرنا۔ معائنہ اور دیکھ بھال مشکل ہو جاتی ہے۔
- "یہ مرتب کیا گیا ہے، لہذا یہ محفوظ ہے" غلط فہمی۔ مرتب ہونے کا مطلب محفوظ ہونا نہیں ہے۔
- رسائی کنٹرول کو بھولنا۔ یہ سب سے عام اور مہنگی غلطیوں میں سے ایک ہے۔
خلاصہ میں
- سمارٹ کنٹریکٹ رائٹنگ میں، AI فریم ورک، ٹیسٹ اور جائزہ ڈرافٹ تیار کرتا ہے۔ انسان پیداوار کی حفاظت کی ضمانت دیتا ہے۔
- سیکیورٹی کو شروع سے نہیں بلکہ ثابت شدہ لائبریریوں کی بنیاد پر بنائیں (جیسے OpenZeppelin)۔
- YZ کی طرف سے تیار کردہ ورژن اور نمونوں کی تازہ ترین ہونے کی ہمیشہ تصدیق ہوتی ہے۔
- ٹیسٹ سٹبس انسانی اندھے دھبوں کو پکڑنے میں قیمتی ہیں (لمیٹ کیسز، ایکسیس کنٹرول)۔
- مرتب ہونے کا مطلب محفوظ ہونا نہیں ہے۔ ٹیسٹ نیٹ اور آڈیٹنگ ضروری ہے۔
درخواست کا کام
ایک سادہ ERC-20 ٹوکن کے لیے، اوپر دیئے گئے "معیاروں پر مبنی سکیلیٹن" پرامپٹ کا استعمال کرتے ہوئے ایک مسودہ تیار کریں۔ پھر: (1) چیک کریں کہ آیا یہ چیک شدہ لائبریری کا استعمال کرتا ہے، (2) رسائی کے کنٹرول کو چیک کریں، (3) "ٹیسٹ کیس ڈرافٹ" پرامپٹ کے ساتھ ٹیسٹ تیار کریں اور درحقیقت کم از کم ایک بدمعاش کال کرنے والا ٹیسٹ چلائیں۔ کم از کم ایک سیکیورٹی پوائنٹ تلاش کریں اور نوٹ کریں جو AI سے چھوٹ گیا ہے۔
چیک لسٹ
- میں نے واضح طور پر پرامپٹ میں معیار اور سلسلہ بیان کیا ہے۔
- میں لائبریری پر مبنی ثابت شدہ پروڈکشن چاہتا تھا۔
- SPDX لائسنس اور پراگما ورژن دستیاب ہے۔
- ہر اہم فنکشن میں ایکسیس کنٹرول ہوتا ہے۔
- میں نے حد کے معاملات کے لیے ٹیسٹ بنائے اور چلائے۔
- میں نے تصدیق کی کہ لائبریری/پیٹرن اپ ٹو ڈیٹ ہے۔
- میں نے آڈٹ اور جانچ کے لیے کوڈ کو نشان زد کیا ہے۔ میں نے اسے مین نیٹ پر بغیر نگرانی کے حاصل نہیں کیا۔