ایتھیریم ورچوئل مشین (EVM)
ایتھیریم ورچوئل مشین (EVM) ایک لامركزی ورچوئل ماحول ہے جو تمام ایتھیریم نوڈز پر مستقل اور محفوظ طریقے سے کوڈ کو چلاتا ہے۔ نوڈز سمارٹ کنٹریکٹس کو چلانے کے لیے EVM کو چلاتے ہیں، اور آپریشنز کے لیے درکار کمپیوٹیشنل محنت کو ماپنے کے لیے "گیس" کا استعمال کرتے ہیں، جس سے وسائل کی موثر تقسیم اور نیٹ ورک کی سیکیورٹی کو یقینی بنایا جاتا ہے۔
پیشگی شرائط
EVM کو سمجھنے کے لیے کمپیوٹر سائنس کی عام اصطلاحات جیسے بائٹس (opens in a new tab)، میموری (opens in a new tab)، اور اسٹیک (opens in a new tab) سے کچھ بنیادی واقفیت ضروری ہے۔ علمِ تشفیر/بلاک چین کے تصورات جیسے ہیش فنکشنز (opens in a new tab) اور مرکل ٹری (opens in a new tab) سے واقف ہونا بھی مددگار ثابت ہوگا۔
لیجر سے حالت کی مشین تک
بٹ کوائن جیسی بلاک چینز کو بیان کرنے کے لیے اکثر 'ڈسٹری بیوٹڈ لیجر' (تقسیم شدہ کھاتہ) کی تشبیہ استعمال کی جاتی ہے، جو علمِ تشفیر کے بنیادی ٹولز کا استعمال کرتے ہوئے ایک لامركزی کرنسی کو فعال کرتی ہیں۔ لیجر سرگرمیوں کا ایک ریکارڈ برقرار رکھتا ہے جسے ان اصولوں کے مجموعے کی پابندی کرنی چاہیے جو یہ طے کرتے ہیں کہ کوئی شخص لیجر میں ترمیم کرنے کے لیے کیا کر سکتا ہے اور کیا نہیں کر سکتا۔ مثال کے طور پر، ایک بٹ کوائن کا پتہ اس سے زیادہ بٹ کوائن خرچ نہیں کر سکتا جتنا اس نے پہلے وصول کیا ہو۔ یہ اصول بٹ کوائن اور بہت سی دوسری بلاک چینز پر تمام ٹرانزیکشنز کی بنیاد ہیں۔
اگرچہ ایتھیریم کی اپنی مقامی کرپٹو کرنسی (ایتھر) ہے جو تقریباً انہی بدیہی اصولوں کی پیروی کرتی ہے، لیکن یہ ایک بہت زیادہ طاقتور فنکشن کو بھی فعال کرتی ہے: سمارٹ کنٹریکٹس۔ اس زیادہ پیچیدہ خصوصیت کے لیے، ایک زیادہ نفیس تشبیہ کی ضرورت ہے۔ ایک ڈسٹری بیوٹڈ لیجر کے بجائے، ایتھیریم ایک ڈسٹری بیوٹڈ حالت کی مشین (opens in a new tab) ہے۔ ایتھیریم کی حالت ایک بڑا ڈیٹا اسٹرکچر ہے جو نہ صرف تمام اکاؤنٹس اور بیلنسز کو محفوظ رکھتا ہے، بلکہ ایک مشین کی حالت کو بھی، جو پہلے سے طے شدہ اصولوں کے مطابق ایک بلاک سے دوسرے بلاک میں تبدیل ہو سکتی ہے، اور جو صوابدیدی مشین کوڈ کو چلا سکتی ہے۔ ایک بلاک سے دوسرے بلاک میں حالت کو تبدیل کرنے کے مخصوص اصول EVM کے ذریعے طے کیے جاتے ہیں۔
یہ خاکہ Ethereum EVM illustrated (opens in a new tab) سے ماخوذ ہے
ایتھیریم کی حالت کی منتقلی کا فنکشن
EVM بالکل ایک ریاضیاتی فنکشن کی طرح برتاؤ کرتی ہے: ایک ان پٹ دیے جانے پر، یہ ایک حتمی آؤٹ پٹ تیار کرتی ہے۔ اس لیے ایتھیریم کو زیادہ رسمی طور پر ایک حالت کی منتقلی کا فنکشن (state transition function) رکھنے کے طور پر بیان کرنا کافی مددگار ہے:
Y(S, T)= S'
ایک پرانی درست حالت (S) اور درست ٹرانزیکشنز کا ایک نیا سیٹ (T) دیے جانے پر، ایتھیریم کی حالت کی منتقلی کا فنکشن Y(S, T) ایک نئی درست آؤٹ پٹ حالت S' تیار کرتا ہے۔
حالت
ایتھیریم کے تناظر میں، حالت ایک بہت بڑا ڈیٹا اسٹرکچر ہے جسے ترمیم شدہ مرکل پیٹریشیا ٹرائی کہا جاتا ہے، جو تمام اکاؤنٹس کو ہیشز کے ذریعے منسلک رکھتا ہے اور اسے بلاک چین پر محفوظ کردہ ایک واحد روٹ ہیش تک کم کیا جا سکتا ہے۔
ٹرانزیکشنز
ٹرانزیکشنز اکاؤنٹس کی جانب سے علمِ تشفیر کے ذریعے سائن کی گئی ہدایات ہیں۔ ٹرانزیکشنز کی دو اقسام ہیں: وہ جن کے نتیجے میں پیغام کی کالز ہوتی ہیں اور وہ جن کے نتیجے میں کنٹریکٹ کی تخلیق ہوتی ہے۔
کنٹریکٹ کی تخلیق کے نتیجے میں ایک نیا کنٹریکٹ اکاؤنٹ بنتا ہے جس میں مرتب شدہ سمارٹ کنٹریکٹ بائٹ کوڈ ہوتا ہے۔ جب بھی کوئی دوسرا اکاؤنٹ اس کنٹریکٹ کو پیغام کی کال کرتا ہے، تو یہ اپنا بائٹ کوڈ چلاتا ہے۔
EVM کی ہدایات
EVM ایک اسٹیک مشین (opens in a new tab) کے طور پر کام کرتی ہے جس کی گہرائی 1024 آئٹمز ہے۔ ہر آئٹم ایک 256-bit ورڈ ہے، جسے 256-bit علمِ تشفیر (جیسے کیچاک-۲۵۶ ہیشز یا secp256k1 سگنیچرز) کے ساتھ استعمال میں آسانی کے لیے منتخب کیا گیا تھا۔
عمل درآمد کے دوران، EVM ایک عارضی میموری (ورڈ-ایڈریسڈ بائٹ سرنی کے طور پر) برقرار رکھتی ہے، جو ٹرانزیکشنز کے درمیان برقرار نہیں رہتی۔
عارضی ذخیرہ
عارضی ذخیرہ (Transient storage) فی ٹرانزیکشن کلید-قدر (key-value) کا ایک اسٹور ہے جس تک TSTORE اور TLOAD آپ کوڈز کے ذریعے رسائی حاصل کی جاتی ہے۔ یہ ایک ہی ٹرانزیکشن کے دوران تمام اندرونی کالز میں برقرار رہتا ہے لیکن ٹرانزیکشن کے اختتام پر صاف ہو جاتا ہے۔ میموری کے برعکس، عارضی ذخیرے کو ایگزیکیوشن فریم کے بجائے EVM حالت کے حصے کے طور پر ماڈل کیا گیا ہے، پھر بھی یہ عالمی حالت میں شامل نہیں ہوتا ہے۔ عارضی ذخیرہ ایک ٹرانزیکشن کے دوران اندرونی کالز میں گیس کے لحاظ سے موثر عارضی حالت کے اشتراک کو قابل بناتا ہے۔
ذخیرہ
کنٹریکٹس میں ایک مرکل پیٹریشیا ذخیرہ ٹرائی (ورڈ-ایڈریس ایبل ورڈ سرنی کے طور پر) ہوتی ہے، جو متعلقہ اکاؤنٹ سے وابستہ ہوتی ہے اور عالمی حالت کا حصہ ہوتی ہے۔ یہ مستقل ذخیرہ عارضی ذخیرے سے مختلف ہے، جو صرف ایک ٹرانزیکشن کے دورانیے کے لیے دستیاب ہوتا ہے اور اکاؤنٹ کی مستقل ذخیرہ ٹرائی کا حصہ نہیں بنتا۔
آپ کوڈز
مرتب شدہ سمارٹ کنٹریکٹ بائٹ کوڈ متعدد EVM آپ کوڈز کے طور پر چلتا ہے، جو معیاری اسٹیک آپریشنز انجام دیتے ہیں جیسے XOR، AND، ADD، SUB، وغیرہ۔ EVM متعدد بلاک چین کے لیے مخصوص اسٹیک آپریشنز بھی نافذ کرتی ہے، جیسے ADDRESS، BALANCE، BLOCKHASH، وغیرہ۔ آپ کوڈ سیٹ میں TSTORE اور TLOAD بھی شامل ہیں، جو عارضی ذخیرے تک رسائی فراہم کرتے ہیں۔
یہ خاکے Ethereum EVM illustrated (opens in a new tab) سے ماخوذ ہیں
EVM امپلیمینٹیشنز
EVM کی تمام امپلیمینٹیشنز کو ایتھیریم یلو پیپر میں بیان کردہ تصریحات کی پابندی کرنی چاہیے۔
ایتھیریم کی دس سالہ تاریخ میں، EVM میں کئی ترامیم کی گئی ہیں، اور مختلف پروگرامنگ زبانوں میں EVM کی کئی امپلیمینٹیشنز موجود ہیں۔
ایتھیریم ایگزیکیوشن کلائنٹس میں ایک EVM امپلیمینٹیشن شامل ہوتی ہے۔ اس کے علاوہ، متعدد اسٹینڈ اکیلے (standalone) امپلیمینٹیشنز بھی موجود ہیں، جن میں شامل ہیں:
- Py-EVM (opens in a new tab) - Python
- evmone (opens in a new tab) - C++
- ethereumjs-vm (opens in a new tab) - JavaScript
- revm (opens in a new tab) - Rust
مزید مطالعہ
- ایتھیریم یلو پیپر (opens in a new tab)
- جیلو پیپر عرف KEVM: کے (K) میں EVM کی اصطلاحات (opens in a new tab)
- دی بیج پیپر (The Beigepaper) (opens in a new tab)
- ایتھیریم ورچوئل مشین کے آپ کوڈز (opens in a new tab)
- ایتھیریم ورچوئل مشین آپ کوڈز کا انٹرایکٹو حوالہ (opens in a new tab)
- Solidity کی دستاویزات میں ایک مختصر تعارف (opens in a new tab)
- ماسٹرنگ ایتھیریم - ایتھیریم ورچوئل مشین (opens in a new tab)
متعلقہ موضوعات
ٹیوٹوریلز: ایتھیریم ورچوئل مشین (EVM) / ایتھیریم پر آپ کوڈز
- یلو پیپر کی EVM تصریحات کو سمجھنا – ایتھیریم یلو پیپر سے رسمی EVM تصریحات کا ایک رہنمائی شدہ جائزہ۔
- ایک کنٹریکٹ کی ریورس انجینئرنگ – EVM آپ کوڈز کا استعمال کرتے ہوئے مرتب شدہ سمارٹ کنٹریکٹ کو ریورس انجینئر کرنے کا طریقہ۔