# Types of smart contracts

There are three types of smart contracts with different execution engines that are invoked via a dispatch center:

1. **Native contracts:** Ontology's ONT and ONG contracts that govern all the OEP token protocols and their corresponding functioning.
2. **NeoVM contracts:** Smart contracts that are compiled to **AVM** bytecode, which is then run on the **NeoVM** engine. Currently supported in **Python** and **C#**.
3. **WebAssembly (WASM) VM contracts:** Smart contracts that are compiled to a portable binary code format that can be read and executed by the WebAssembly engine. Currently supported in **Rust** and **C++.**

Let us take a closer look at the flow of control for a smart contract execution cycle.

![](https://1077617372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LvPXC4l2V4Z8gRDNIoZ%2F-LwSbg4g3VGW_iXa_QHl%2F-LwScRKDr2SKk4EI-ZiU%2Fsmartcontract_executionflow.jpg?alt=media\&token=e8595479-6b26-40dd-bd05-09b354d7eb58)

#### Smart contract invocation mechanism

Once a smart contract has been compiled to **AVM bytecode** and the stack `opcode` is obtained, the contract is transmitted to the chain along with some relevant information regarding the contract. This is involves a transaction that consumes a certain amount of gas, and this is the state where a contract is considered to be deployed on the chain.

Next, when a smart contract is **invoked**, the **layer dispatch** center determines the nature of the contract. The three types of contracts all run on **different engines** and so the flow of control is transferred to the respective contract layer.

For every subsequent invocation from app calls the same procedure is followed.

## EVM Contracts

Solidity smart contracts that run in an **Ethereum Virtual Machine (EVM)** environment in the Ethereum  network can be also deployed on Ontology. All the same development and testing tools, such as the MetaMask wallet, the web3.js library, Truffle and Hardhat development frameworks, etc. can be used for writing, testing, deploying, and running EVM contracts on the Ontology testnet and mainnet.

Solidity contracts are compiled to bytecode and executed in the form of EVM opcodes.

You are now familiar with what smart contracts are, what they can be used to achieve, and how they are executed on the **Ontology** platform. Follow the link below to refer to our smart contract development guides.

{% content-ref url="../../guides-and-tutorials/development-guides/smart-contract-dev" %}
[smart-contract-dev](https://docs.ont.io/guides-and-tutorials/development-guides/smart-contract-dev)
{% endcontent-ref %}
