There are three types of smart contracts which have been segregated on the basis of the execution engine that runs them:
Native contracts: Ontology's ONT and ONG contracts that govern all the OEP token protocols and their corresponding functioning.
NeoVM contracts: Smart contracts that are compiled to AVM bytecode, which is then run on the NeoVM engine. Currently supported in Python and C#.
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.
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.
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.