---
title: "ایتھیریم ورچوئل مشین (⁦EVM⁩)"
description: "ایتھیریم ورچوئل مشین کا تعارف اور اس کا حالت، ٹرانزیکشنز، اور سمارٹ کنٹریکٹس سے کیا تعلق ہے۔"
lang: ur
---

ایتھیریم ورچوئل مشین (<span dir="ltr">EVM</span>) ایک لامركزی ورچوئل ماحول ہے جو تمام [ایتھیریم](/) نوڈز پر مستقل اور محفوظ طریقے سے کوڈ کو چلاتا ہے۔ نوڈز سمارٹ کنٹریکٹس کو چلانے کے لیے <span dir="ltr">EVM</span> کو چلاتے ہیں، اور [آپریشنز](/developers/docs/evm/opcodes/) کے لیے درکار کمپیوٹیشنل محنت کو ماپنے کے لیے "[گیس](/developers/docs/gas/)" کا استعمال کرتے ہیں، جس سے وسائل کی موثر تقسیم اور نیٹ ورک کی سیکیورٹی کو یقینی بنایا جاتا ہے۔

## پیشگی شرائط {#prerequisites}

<span dir="ltr">EVM</span> کو سمجھنے کے لیے کمپیوٹر سائنس کی عام اصطلاحات جیسے [بائٹس](https://wikipedia.org/wiki/Byte)، [میموری](https://wikipedia.org/wiki/Computer_memory)، اور [اسٹیک](<https://wikipedia.org/wiki/Stack_(abstract_data_type)>) سے کچھ بنیادی واقفیت ضروری ہے۔ علمِ تشفیر/بلاک چین کے تصورات جیسے [ہیش فنکشنز](https://wikipedia.org/wiki/Cryptographic_hash_function) اور [مرکل ٹری](https://wikipedia.org/wiki/Merkle_tree) سے واقف ہونا بھی مددگار ثابت ہوگا۔

## لیجر سے حالت کی مشین تک {#from-ledger-to-state-machine}

بٹ کوائن جیسی بلاک چینز کو بیان کرنے کے لیے اکثر 'ڈسٹری بیوٹڈ لیجر' (تقسیم شدہ کھاتہ) کی تشبیہ استعمال کی جاتی ہے، جو علمِ تشفیر کے بنیادی ٹولز کا استعمال کرتے ہوئے ایک لامركزی کرنسی کو فعال کرتی ہیں۔ لیجر سرگرمیوں کا ایک ریکارڈ برقرار رکھتا ہے جسے ان اصولوں کے مجموعے کی پابندی کرنی چاہیے جو یہ طے کرتے ہیں کہ کوئی شخص لیجر میں ترمیم کرنے کے لیے کیا کر سکتا ہے اور کیا نہیں کر سکتا۔ مثال کے طور پر، ایک بٹ کوائن کا پتہ اس سے زیادہ بٹ کوائن خرچ نہیں کر سکتا جتنا اس نے پہلے وصول کیا ہو۔ یہ اصول بٹ کوائن اور بہت سی دوسری بلاک چینز پر تمام ٹرانزیکشنز کی بنیاد ہیں۔

اگرچہ ایتھیریم کی اپنی مقامی کرپٹو کرنسی (ایتھر) ہے جو تقریباً انہی بدیہی اصولوں کی پیروی کرتی ہے، لیکن یہ ایک بہت زیادہ طاقتور فنکشن کو بھی فعال کرتی ہے: [سمارٹ کنٹریکٹس](/developers/docs/smart-contracts/)۔ اس زیادہ پیچیدہ خصوصیت کے لیے، ایک زیادہ نفیس تشبیہ کی ضرورت ہے۔ ایک ڈسٹری بیوٹڈ لیجر کے بجائے، ایتھیریم ایک ڈسٹری بیوٹڈ [حالت کی مشین](https://wikipedia.org/wiki/Finite-state_machine) ہے۔ ایتھیریم کی حالت ایک بڑا ڈیٹا اسٹرکچر ہے جو نہ صرف تمام اکاؤنٹس اور بیلنسز کو محفوظ رکھتا ہے، بلکہ ایک _مشین کی حالت_ کو بھی، جو پہلے سے طے شدہ اصولوں کے مطابق ایک بلاک سے دوسرے بلاک میں تبدیل ہو سکتی ہے، اور جو صوابدیدی مشین کوڈ کو چلا سکتی ہے۔ ایک بلاک سے دوسرے بلاک میں حالت کو تبدیل کرنے کے مخصوص اصول <span dir="ltr">EVM</span> کے ذریعے طے کیے جاتے ہیں۔

![A diagram showing the make up of the EVM](./evm.png)
_یہ خاکہ [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) سے ماخوذ ہے_

## ایتھیریم کی حالت کی منتقلی کا فنکشن {#the-ethereum-state-transition-function}

<span dir="ltr">EVM</span> بالکل ایک ریاضیاتی فنکشن کی طرح برتاؤ کرتی ہے: ایک ان پٹ دیے جانے پر، یہ ایک حتمی آؤٹ پٹ تیار کرتی ہے۔ اس لیے ایتھیریم کو زیادہ رسمی طور پر ایک **حالت کی منتقلی کا فنکشن** (state transition function) رکھنے کے طور پر بیان کرنا کافی مددگار ہے:

```
Y(S, T)= S'
```

ایک پرانی درست حالت `(S)` اور درست ٹرانزیکشنز کا ایک نیا سیٹ `(T)` دیے جانے پر، ایتھیریم کی حالت کی منتقلی کا فنکشن `Y(S, T)` ایک نئی درست آؤٹ پٹ حالت `S'` تیار کرتا ہے۔

### حالت {#state}

ایتھیریم کے تناظر میں، حالت ایک بہت بڑا ڈیٹا اسٹرکچر ہے جسے [ترمیم شدہ مرکل پیٹریشیا ٹرائی](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) کہا جاتا ہے، جو تمام [اکاؤنٹس](/developers/docs/accounts/) کو ہیشز کے ذریعے منسلک رکھتا ہے اور اسے بلاک چین پر محفوظ کردہ ایک واحد روٹ ہیش تک کم کیا جا سکتا ہے۔

### ٹرانزیکشنز {#transactions}

ٹرانزیکشنز اکاؤنٹس کی جانب سے علمِ تشفیر کے ذریعے سائن کی گئی ہدایات ہیں۔ ٹرانزیکشنز کی دو اقسام ہیں: وہ جن کے نتیجے میں پیغام کی کالز ہوتی ہیں اور وہ جن کے نتیجے میں کنٹریکٹ کی تخلیق ہوتی ہے۔

کنٹریکٹ کی تخلیق کے نتیجے میں ایک نیا کنٹریکٹ اکاؤنٹ بنتا ہے جس میں مرتب شدہ [سمارٹ کنٹریکٹ](/developers/docs/smart-contracts/anatomy/) بائٹ کوڈ ہوتا ہے۔ جب بھی کوئی دوسرا اکاؤنٹ اس کنٹریکٹ کو پیغام کی کال کرتا ہے، تو یہ اپنا بائٹ کوڈ چلاتا ہے۔

## EVM کی ہدایات {#evm-instructions}

<span dir="ltr">EVM</span> ایک [اسٹیک مشین](https://wikipedia.org/wiki/Stack_machine) کے طور پر کام کرتی ہے جس کی گہرائی <span dir="ltr">1024</span> آئٹمز ہے۔ ہر آئٹم ایک <span dir="ltr">256-bit</span> ورڈ ہے، جسے <span dir="ltr">256-bit</span> علمِ تشفیر (جیسے کیچاک-۲۵۶ ہیشز یا <span dir="ltr">secp256k1</span> سگنیچرز) کے ساتھ استعمال میں آسانی کے لیے منتخب کیا گیا تھا۔

عمل درآمد کے دوران، <span dir="ltr">EVM</span> ایک عارضی _میموری_ (ورڈ-ایڈریسڈ بائٹ سرنی کے طور پر) برقرار رکھتی ہے، جو ٹرانزیکشنز کے درمیان برقرار نہیں رہتی۔

### عارضی ذخیرہ {#transient-storage}

عارضی ذخیرہ (Transient storage) فی ٹرانزیکشن کلید-قدر (key-value) کا ایک اسٹور ہے جس تک `TSTORE` اور `TLOAD` آپ کوڈز کے ذریعے رسائی حاصل کی جاتی ہے۔ یہ ایک ہی ٹرانزیکشن کے دوران تمام اندرونی کالز میں برقرار رہتا ہے لیکن ٹرانزیکشن کے اختتام پر صاف ہو جاتا ہے۔ میموری کے برعکس، عارضی ذخیرے کو ایگزیکیوشن فریم کے بجائے <span dir="ltr">EVM</span> حالت کے حصے کے طور پر ماڈل کیا گیا ہے، پھر بھی یہ عالمی حالت میں شامل نہیں ہوتا ہے۔ عارضی ذخیرہ ایک ٹرانزیکشن کے دوران اندرونی کالز میں گیس کے لحاظ سے موثر عارضی حالت کے اشتراک کو قابل بناتا ہے۔

### ذخیرہ {#storage}

کنٹریکٹس میں ایک مرکل پیٹریشیا _ذخیرہ ٹرائی_ (ورڈ-ایڈریس ایبل ورڈ سرنی کے طور پر) ہوتی ہے، جو متعلقہ اکاؤنٹ سے وابستہ ہوتی ہے اور عالمی حالت کا حصہ ہوتی ہے۔ یہ مستقل ذخیرہ عارضی ذخیرے سے مختلف ہے، جو صرف ایک ٹرانزیکشن کے دورانیے کے لیے دستیاب ہوتا ہے اور اکاؤنٹ کی مستقل ذخیرہ ٹرائی کا حصہ نہیں بنتا۔

### آپ کوڈز {#opcodes}

مرتب شدہ سمارٹ کنٹریکٹ بائٹ کوڈ متعدد <span dir="ltr">EVM</span> [آپ کوڈز](/developers/docs/evm/opcodes) کے طور پر چلتا ہے، جو معیاری اسٹیک آپریشنز انجام دیتے ہیں جیسے `XOR`، `AND`، `ADD`، `SUB`، وغیرہ۔ <span dir="ltr">EVM</span> متعدد بلاک چین کے لیے مخصوص اسٹیک آپریشنز بھی نافذ کرتی ہے، جیسے `ADDRESS`، `BALANCE`، `BLOCKHASH`، وغیرہ۔ آپ کوڈ سیٹ میں `TSTORE` اور `TLOAD` بھی شامل ہیں، جو عارضی ذخیرے تک رسائی فراہم کرتے ہیں۔

![A diagram showing where gas is needed for EVM operations](../gas/gas.png)
_یہ خاکے [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) سے ماخوذ ہیں_

## EVM امپلیمینٹیشنز {#evm-implementations}

<span dir="ltr">EVM</span> کی تمام امپلیمینٹیشنز کو ایتھیریم یلو پیپر میں بیان کردہ تصریحات کی پابندی کرنی چاہیے۔

ایتھیریم کی دس سالہ تاریخ میں، <span dir="ltr">EVM</span> میں کئی ترامیم کی گئی ہیں، اور مختلف پروگرامنگ زبانوں میں <span dir="ltr">EVM</span> کی کئی امپلیمینٹیشنز موجود ہیں۔

[ایتھیریم ایگزیکیوشن کلائنٹس](/developers/docs/nodes-and-clients/#execution-clients) میں ایک <span dir="ltr">EVM</span> امپلیمینٹیشن شامل ہوتی ہے۔ اس کے علاوہ، متعدد اسٹینڈ اکیلے (standalone) امپلیمینٹیشنز بھی موجود ہیں، جن میں شامل ہیں:

- [Py-EVM](https://github.com/ethereum/py-evm) - _Python_
- [evmone](https://github.com/ethereum/evmone) - _C++_
- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_
- [revm](https://github.com/bluealloy/revm) - _Rust_

## مزید مطالعہ {#further-reading}

- [ایتھیریم یلو پیپر](https://ethereum.github.io/yellowpaper/paper.pdf)
- [جیلو پیپر عرف KEVM: کے (K) میں EVM کی اصطلاحات](https://jellopaper.org/)
- [دی بیج پیپر (The Beigepaper)](https://github.com/chronaeon/beigepaper)
- [ایتھیریم ورچوئل مشین کے آپ کوڈز](https://www.ethervm.io/)
- [ایتھیریم ورچوئل مشین آپ کوڈز کا انٹرایکٹو حوالہ](https://www.evm.codes/)
- [Solidity کی دستاویزات میں ایک مختصر تعارف](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6)
- [ماسٹرنگ ایتھیریم - ایتھیریم ورچوئل مشین](https://github.com/ethereumbook/ethereumbook/blob/openedition/13evm.asciidoc)

## متعلقہ موضوعات {#related-topics}

- [گیس](/developers/docs/gas/)

## ٹیوٹوریلز: ایتھیریم ورچوئل مشین (EVM) / ایتھیریم پر آپ کوڈز {#tutorials}

- [یلو پیپر کی EVM تصریحات کو سمجھنا](/developers/tutorials/yellow-paper-evm/) _– ایتھیریم یلو پیپر سے رسمی <span dir="ltr">EVM</span> تصریحات کا ایک رہنمائی شدہ جائزہ۔_
- [ایک کنٹریکٹ کی ریورس انجینئرنگ](/developers/tutorials/reverse-engineering-a-contract/) _– <span dir="ltr">EVM</span> آپ کوڈز کا استعمال کرتے ہوئے مرتب شدہ سمارٹ کنٹریکٹ کو ریورس انجینئر کرنے کا طریقہ۔_

<QuizWidget quizKey="evm" />
