---
title: "ইথেরিয়াম ভার্চুয়াল মেশিন (⁦EVM⁩)"
description: "ইথেরিয়াম ভার্চুয়াল মেশিনের একটি ভূমিকা এবং এটি কীভাবে স্টেট, ট্রানজ্যাকশন এবং স্মার্ট কন্ট্রাক্টের সাথে সম্পর্কিত।"
lang: bn
---

ইথেরিয়াম ভার্চুয়াল মেশিন (EVM) হলো একটি বিকেন্দ্রীকৃত ভার্চুয়াল পরিবেশ যা সমস্ত [ইথেরিয়াম](/) নোড জুড়ে ধারাবাহিকভাবে এবং নিরাপদে কোড এক্সিকিউট করে। নোডগুলো স্মার্ট কন্ট্রাক্ট এক্সিকিউট করার জন্য EVM চালায়, [অপারেশনগুলোর](/developers/docs/evm/opcodes/) জন্য প্রয়োজনীয় কম্পিউটেশনাল প্রচেষ্টা পরিমাপ করতে "[গ্যাস](/developers/docs/gas/)" ব্যবহার করে, যা দক্ষ রিসোর্স বরাদ্দ এবং নেটওয়ার্ক নিরাপত্তা নিশ্চিত করে।

## পূর্বশর্ত {#prerequisites}

EVM বোঝার জন্য কম্পিউটার বিজ্ঞানের সাধারণ পরিভাষা যেমন [বাইট](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)। ইথেরিয়ামের স্টেট হলো একটি বিশাল ডেটা স্ট্রাকচার যা কেবল সমস্ত অ্যাকাউন্ট এবং ব্যালেন্সই ধারণ করে না, বরং একটি _মেশিন স্টেট_ ধারণ করে, যা পূর্বনির্ধারিত নিয়মের সেট অনুযায়ী ব্লক থেকে ব্লকে পরিবর্তিত হতে পারে এবং যা যেকোনো মেশিন কোড এক্সিকিউট করতে পারে। ব্লক থেকে ব্লকে স্টেট পরিবর্তনের নির্দিষ্ট নিয়মগুলো EVM দ্বারা সংজ্ঞায়িত করা হয়।

![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}

EVM একটি গাণিতিক ফাংশনের মতোই আচরণ করে: একটি ইনপুট দেওয়া হলে, এটি একটি ডিটারমিনিস্টিক (নির্ধারিত) আউটপুট তৈরি করে। তাই ইথেরিয়ামকে একটি **স্টেট ট্রানজিশন ফাংশন** হিসেবে আরও আনুষ্ঠানিকভাবে বর্ণনা করা বেশ সহায়ক:

```
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}

EVM 1024 আইটেমের গভীরতা সহ একটি [স্ট্যাক মেশিন](https://wikipedia.org/wiki/Stack_machine) হিসেবে এক্সিকিউট হয়। প্রতিটি আইটেম হলো একটি 256-বিট ওয়ার্ড, যা 256-বিট ক্রিপ্টোগ্রাফির (যেমন কেক্যাক-২৫৬ হ্যাশ বা secp256k1 সিগনেচার) সাথে ব্যবহারের সুবিধার জন্য বেছে নেওয়া হয়েছিল।

এক্সিকিউশনের সময়, EVM একটি ক্ষণস্থায়ী _মেমরি_ (একটি ওয়ার্ড-অ্যাড্রেসড বাইট অ্যারে হিসেবে) বজায় রাখে, যা ট্রানজ্যাকশনগুলোর মধ্যে স্থায়ী হয় না।

### ট্রানজিয়েন্ট স্টোরেজ {#transient-storage}

ট্রানজিয়েন্ট স্টোরেজ হলো একটি প্রতি-ট্রানজ্যাকশন কী-ভ্যালু স্টোর যা `TSTORE` এবং `TLOAD` অপকোডের মাধ্যমে অ্যাক্সেস করা হয়। এটি একই ট্রানজ্যাকশনের সময় সমস্ত অভ্যন্তরীণ কল জুড়ে স্থায়ী হয় তবে ট্রানজ্যাকশনের শেষে মুছে ফেলা হয়। মেমরির বিপরীতে, ট্রানজিয়েন্ট স্টোরেজকে এক্সিকিউশন ফ্রেমের পরিবর্তে EVM স্টেটের অংশ হিসেবে মডেল করা হয়, তবুও এটি গ্লোবাল স্টেটে কমিট করা হয় না। ট্রানজিয়েন্ট স্টোরেজ একটি ট্রানজ্যাকশনের সময় অভ্যন্তরীণ কলগুলো জুড়ে গ্যাস-সাশ্রয়ী অস্থায়ী স্টেট শেয়ারিং সক্ষম করে।

### স্টোরেজ {#storage}

কন্ট্রাক্টগুলোতে একটি মার্কেল প্যাট্রিসিয়া _স্টোরেজ_ ট্রাই (একটি ওয়ার্ড-অ্যাড্রেসেবল ওয়ার্ড অ্যারে হিসেবে) থাকে, যা সংশ্লিষ্ট অ্যাকাউন্টের সাথে যুক্ত এবং গ্লোবাল স্টেটের অংশ। এই স্থায়ী স্টোরেজটি ট্রানজিয়েন্ট স্টোরেজ থেকে আলাদা, যা শুধুমাত্র একটি একক ট্রানজ্যাকশনের সময়কালের জন্য উপলব্ধ থাকে এবং অ্যাকাউন্টের স্থায়ী স্টোরেজ ট্রাইয়ের অংশ গঠন করে না।

### অপকোড {#opcodes}

কম্পাইল করা স্মার্ট কন্ট্রাক্ট বাইটকোড বেশ কয়েকটি EVM [অপকোড](/developers/docs/evm/opcodes) হিসেবে এক্সিকিউট হয়, যা `XOR`, `AND`, `ADD`, `SUB` ইত্যাদির মতো স্ট্যান্ডার্ড স্ট্যাক অপারেশনগুলো সম্পাদন করে। EVM বেশ কয়েকটি ব্লকচেইন-নির্দিষ্ট স্ট্যাক অপারেশনও প্রয়োগ করে, যেমন `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}

EVM-এর সমস্ত ইমপ্লিমেন্টেশনকে অবশ্যই ইথেরিয়াম ইয়েলো পেপারে বর্ণিত স্পেসিফিকেশন মেনে চলতে হবে।

ইথেরিয়ামের 10 বছরের ইতিহাসে, EVM বেশ কয়েকটি রিভিশনের মধ্য দিয়ে গেছে এবং বিভিন্ন প্রোগ্রামিং ভাষায় EVM-এর বেশ কয়েকটি ইমপ্লিমেন্টেশন রয়েছে।

[ইথেরিয়াম এক্সিকিউশন ক্লায়েন্টগুলোতে](/developers/docs/nodes-and-clients/#execution-clients) একটি EVM ইমপ্লিমেন্টেশন অন্তর্ভুক্ত থাকে। উপরন্তু, একাধিক স্বতন্ত্র ইমপ্লিমেন্টেশন রয়েছে, যার মধ্যে রয়েছে:

- [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/)
- [দ্য বেইজপেপার](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/) _– ইথেরিয়াম ইয়েলো পেপার থেকে আনুষ্ঠানিক EVM স্পেকের একটি নির্দেশিত ওয়াকথ্রু।_
- [একটি কন্ট্রাক্ট রিভার্স ইঞ্জিনিয়ারিং করা](/developers/tutorials/reverse-engineering-a-contract/) _– EVM অপকোড ব্যবহার করে কীভাবে একটি কম্পাইল করা স্মার্ট কন্ট্রাক্ট রিভার্স-ইঞ্জিনিয়ার করতে হয়।_

<QuizWidget quizKey="evm" />
