---
title: "آلة إيثيريوم الافتراضية (⁦EVM⁩)"
description: "مقدمة عن آلة إيثيريوم الافتراضية وكيفية ارتباطها بالحالة والمعاملات والعقود الذكية."
lang: ar
---

آلة إيثيريوم الافتراضية (<span dir="ltr">EVM</span>) هي بيئة افتراضية لامركزية تنفذ التعليمات البرمجية بشكل متسق وآمن عبر جميع عقد [إيثيريوم](/). تقوم العقد بتشغيل <span dir="ltr">EVM</span> لتنفيذ العقود الذكية، باستخدام "[الغاز](/developers/docs/gas/)" لقياس الجهد الحسابي المطلوب [للعمليات](/developers/docs/evm/opcodes/)، مما يضمن تخصيص الموارد بكفاءة وأمان الشبكة.

## المتطلبات الأساسية {#prerequisites}

بعض الإلمام الأساسي بالمصطلحات الشائعة في علوم الكمبيوتر مثل [البايتات](https://wikipedia.org/wiki/Byte)، و[الذاكرة](https://wikipedia.org/wiki/Computer_memory)، و[المكدس](<https://wikipedia.org/wiki/Stack_(abstract_data_type)>) ضروري لفهم <span dir="ltr">EVM</span>. سيكون من المفيد أيضًا أن تكون على دراية بمفاهيم علم التشفير/سلسلة الكتل مثل [دوال التجزئة](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)
_مخطط مقتبس من [آلة إيثيريوم الافتراضية المصورة](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_

## دالة انتقال حالة إيثيريوم {#the-ethereum-state-transition-function}

تتصرف <span dir="ltr">EVM</span> كما تفعل الدالة الرياضية: بالنظر إلى مدخلات، فإنها تنتج مخرجات حتمية. لذلك من المفيد جدًا وصف إيثيريوم بشكل أكثر رسمية بأنها تمتلك **دالة انتقال حالة**:

```
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> (مثل تجزئات كيكاك-256 أو توقيعات <span dir="ltr">secp256k1</span>).

أثناء التنفيذ، تحتفظ <span dir="ltr">EVM</span> بـ _ذاكرة_ عابرة (كمصفوفة بايتات معنونة بالكلمات)، والتي لا تستمر بين المعاملات.

### التخزين العابر {#transient-storage}

التخزين العابر هو مخزن مفتاح-قيمة لكل معاملة يتم الوصول إليه من خلال رموز التشغيل `TSTORE` و`TLOAD`. يستمر عبر جميع الاستدعاءات الداخلية خلال نفس المعاملة ولكن يتم مسحه في نهاية المعاملة. على عكس الذاكرة، يُصمم التخزين العابر كجزء من حالة <span dir="ltr">EVM</span> بدلاً من إطار التنفيذ، ومع ذلك لا يتم الالتزام به في الحالة العالمية. يتيح التخزين العابر مشاركة الحالة المؤقتة بكفاءة في استهلاك الغاز عبر الاستدعاءات الداخلية أثناء المعاملة.

### التخزين {#storage}

تحتوي العقود على تراي _تخزين_ ميركل باتريشيا (كمصفوفة كلمات قابلة للعنونة بالكلمات)، مرتبطة بالحساب المعني وجزء من الحالة العالمية. يختلف هذا التخزين الدائم عن التخزين العابر، والذي يتوفر فقط طوال مدة معاملة واحدة ولا يشكل جزءًا من تراي التخزين الدائم للحساب.

### رموز التشغيل {#opcodes}

يُنفذ رمز البايت المترجم للعقد الذكي كعدد من [رموز التشغيل](/developers/docs/evm/opcodes) الخاصة بـ <span dir="ltr">EVM</span>، والتي تؤدي عمليات المكدس القياسية مثل `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)
_مخططات مقتبسة من [آلة إيثيريوم الافتراضية المصورة](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>. بالإضافة إلى ذلك، هناك العديد من التطبيقات المستقلة، بما في ذلك:

- [Py-EVM](https://github.com/ethereum/py-evm) - _بايثون_
- [evmone](https://github.com/ethereum/evmone) - _C++_
- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _جافا سكريبت_
- [revm](https://github.com/bluealloy/revm) - _رست_

## قراءة إضافية {#further-reading}

- [الورقة الصفراء لإيثيريوم](https://ethereum.github.io/yellowpaper/paper.pdf)
- [Jellopaper المعروفة أيضًا باسم KEVM: دلالات EVM في K](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" />
