diff --git a/smart-contract-tutorial/README.md b/smart-contract-tutorial/README.md
new file mode 100644
index 00000000..43ef7d33
--- /dev/null
+++ b/smart-contract-tutorial/README.md
@@ -0,0 +1,95 @@
+
Ontology Smart Contract
+Version V0.6.0
+
+## What is a smart contract?
+
+A smart contract is a set of commitments that are defined in digital form, including the agreement on how contract participants shall fulfill these commitments. Blockchain technology gives us a decentralized, non-tampering, highly reliable system in which smart contracts are extremely useful. Smart contracts is one of the most important characteristics of blockchain technologies and the reason why blockchains can be called disruptive technology. It is increasing the efficiency of our social structure by each passing day.
+
+## Characteristics of Ontology smart contracts
+
+//TODO
+
+## Write smart contracts in any language
+
+//TODO
+
+## How to make a effective smart contract?
+
+![Workflow of smart contract](https://s1.ax1x.com/2018/03/24/9q9vx1.png)
+
+There are few things as below.
+
+First, you should choose a language to write your smart contract, lets's suppose it's C#. Then you need to compile your code. At last, you can deploy your smart contract to the blockchain and invoke it.
+
+Don't worry, we have built a simple tool to help you with all these things. It's a [online IDE]() for Ontology smart contract. You can write smart contract with popular languages on it, and deploy ,invoke contracts easily.
+
+For more information, please check the [Smart Contract IDE user guide]().
+
+### Step1 - Write & Compile
+
+We now support smart contracts that run in **NEOVM** and **WASMVM**.
+
+
+* **For NeoVM**, We supply you Smart Contract IDE to help your write, compile,deploy and invoke smart contracts.
+* **For WASMVM**, Please enter [>> Wasm Smart Contract](README_wasm.md).
+
+Firstly , you should create a project, and you can choose the language to write smart contract as you want.
+
+![Select language](https://s1.ax1x.com/2018/03/24/9bxJYR.png)
+
+Then you can see the main editor page.
+
+The left side is the file structure of your smart contract.
+
+The right side is the operation panel.
+
+The middle area is the editor and the logs output box.
+
+![](https://s1.ax1x.com/2018/03/24/9bzj2t.md.png)
+
+#### Write smart contract
+
+You can enjoy coding your smart contracts now. We also provide some userful contract templates for you to start writing easily.
+
+You can check more specific examples here:
+
+[ C# Smart Contract](docs/en/csharp.md)
+
+[Python Smart Contract](docs/en/python.md)
+
+#### Compile smart contract
+
+After you have written your smart contract, you can click the **Compile** button on the right side to compile your code.
+
+If your code is correct, your smart contract will be compiled to the ABI and AVM file , and display on the right side.
+
+
+
+### Step2 - Deploy smart contract
+
+Next, you can deploy the smart contract to the blockchain. This step costs some fee so you have to select one of your local wallet with enough balance. Then click the **Deploy** button to deploy the contract.
+
+Besides IDE, you can use ONT SDK to deploy smart contract. Please check the sdks to see more detailed information.
+
+[>> Java SDK](https://opendoc.ont.io/javasdk/en/chapter5/smartcontract.html)
+
+
+![](https://s1.ax1x.com/2018/03/24/9qp10S.png)
+
+
+### Step3 - Invoke smart contract
+
+Last, you can run the method of your contract. The step costs some fee, too. You can select the method and input the params to invoke. The result will display on the right side.
+
+![Invoke smart contract](https://s1.ax1x.com/2018/03/24/9qpLct.png)
+
+Besides IDE, you can use [>> Java SDK](https://opendoc.ont.io/javasdk/en/chapter5/smartcontract.html) to invoke smart contract. Please check the sdks to see more detailed information.
+
+
+
+
+
+
+
+
+
diff --git a/smart-contract-tutorial/README_wasm.md b/smart-contract-tutorial/README_wasm.md
new file mode 100644
index 00000000..29399f37
--- /dev/null
+++ b/smart-contract-tutorial/README_wasm.md
@@ -0,0 +1,229 @@
+# Wasm Smart Contract
+
+## Introduction
+Wasm (WebAssembly) is a binary instruction format for stack-based virtual machines. Wasm is designed to be a portable target for compiling high-level languages such as C/C++/Rust, and supports deployment of client and server applications on the Web. Ontology supports smart contracts written in the wasm format.
+
+![WASM](./images/WASM.png)
+
+## Compilation
+
+1. First, we will prepare a simple c language contract that calculates the sum of two integers or concatenates two strings.
+
+```c
+char * JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(char *a);
+void * malloc(int size);
+int ReadInt32Param(char *addr);
+char * ReadStringParam(char *addr);
+
+int add(int a, int b ){
+ return a + b;
+}
+
+char * concat(char * a, char * b){
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+ char * res = (char *)malloc((lena + lenb)*sizeof(char));
+ for (int i = 0 ;i < lena ;i++){
+ res[i] = a[i];
+ }
+
+ for (int j = 0; j < lenb ;j++){
+ res[lenb + j] = b[j];
+ }
+ return res;
+}
+
+char * invoke(char * method,char * args){
+
+ if (strcmp(method ,"init")==0 ){
+ return "init success!";
+ }
+
+ if (strcmp(method, "add")==0){
+ int a = ReadInt32Param(args);
+ int b = ReadInt32Param(args);
+ int res = add(a,b);
+ char * result = JsonMashal(res,"int");
+ return result;
+ }
+
+ if(strcmp(method,"concat")==0){
+
+ char * a = ReadStringParam(args);
+ char * b = ReadStringParam(args);
+ char * res = concat(a,b);
+ char * result = JsonMashal(res,"string");
+ return result;
+ }
+
+}
+
+
+```
+
+The following functions are provided by the virtual machine API and need to be declared at the head of the file.
+
+```c
+char * JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(char *a);
+void * malloc(int size);
+int ReadInt32Param(char *addr);
+char * ReadStringParam(char *addr);
+
+```
+
+The entry of WASM contract is unified as ```char * invoke(char * method, char * args)```.
+
+**method** is the method’s name that needs to be called
+
+**args** are the incoming parameters, raw bytes
+
+API ```int strcmp(char *a,char *b)``` :String comparison function, which can be used to judge the method’s name that needs to be called
+
+API ```char * JsonMashal(void * val,char * types)``` : It can serialize results to Json format
+
+API ```int ReadInt32Param(char *addr)``` and ```char * JsonMashal(void * val,char * types);``` can read string or int param from input bytes
+
+
+
+2. Compile the above C file into a smart contract in wasm format.
+ * Emscripten tool [http://kripken.github.io/emscripten-site/](http://http://kripken.github.io/emscripten-site/)
+ * Use the online compiler WasmFiddle [https://wasdk.github.io/WasmFiddle](https://wasdk.github.io/WasmFiddle)
+
+ Use WasmFiddle as an Example
+
+
+Paste the C code into the edit window of "c". Please ignore the contents of the "JS" window and click the "Build" button. If the compilation is correct, you can see the compiled wast format code in the "Text Format" window. If the compilation is wrong, an error message will be displayed in the "output" window.
+
+![fiddle](images/fiddle.png)
+
+If you are familiar with [wast syntax](http://webassembly.org/docs/binary-encoding/),you can modify the wast file yourself.
+
+And use the [wabt](https://github.com/WebAssembly/wabt) tool to compile the wast file into wasm format.
+
+
+
+3. Click the "wasm" button to download the compiled wasm file
+
+
+### Passing parameters in Json format
+
+Incoming parameters can be in Json format:
+
+```
+void JsonUnmashal(void * addr,int size,char * arg);
+char * JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(void *a);
+void * malloc(int size);
+
+int add(int a, int b ){
+ return a + b;
+}
+
+char * concat(char * a, char * b){
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+ char * res = (char *)malloc((lena + lenb)*sizeof(char));
+ for (int i = 0 ;i < lena ;i++){
+ res[i] = a[i];
+ }
+
+ for (int j = 0; j < lenb ;j++){
+ res[lenb + j] = b[j];
+ }
+ return res;
+}
+
+
+int sumArray(int * a, int * b){
+
+ int res = 0;
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+
+ for (int i = 0;i {file}.wast command to view.
+
+
+* You can see that the method names are compiled into names that start with ```_``` , which needs to be modified manually.
+
+* We only want to export the ```invoke``` method and need to delete the other "export"
+* ```(import "env" "memory" (memory (;0;) 256))``` memory size is set to 256 pages, according to Webassembly [spec](https://github.com/WebAssembly/design/blob/27ac254c854994103c24834a994be16f74f54186/Semantics.md#linear-memory), each page is 64K. Our contract does not require so much memory. So we can change 256 to 1.
+* Use```wat2wasm {file}.wast ```to compile the wasm format file
+
+
+### Get the binary contents of the wasm file
+Use the online tool [http://tomeko.net/online_tools/file_to_hex.php?lang=en](http://tomeko.net/online_tools/file_to_hex.php?lang=en)
+![hexadecimal](images/hexadecimal.png)
diff --git a/smart-contract-tutorial/docs/en/csharp.md b/smart-contract-tutorial/docs/en/csharp.md
new file mode 100644
index 00000000..498c8259
--- /dev/null
+++ b/smart-contract-tutorial/docs/en/csharp.md
@@ -0,0 +1,145 @@
+# C# Smart Contract
+
+
+> Note:These are the simplest intelligent contracts,In addition to the TODO part and the Class name, the other parts do not recommend changes.
+
+### example 1: HelloWorld smart contract
+
+```
+using Neo.SmartContract.Framework.Services.Neo;
+
+namespace Neo.SmartContract
+{
+ public class HelloWorld : Framework.SmartContract
+ {
+ public static void Main()
+ {
+ // TODO
+ Storage.Put(Storage.CurrentContext, "Hello", "World");
+ }
+ }
+}
+```
+
+
+
+### example 2:Smart contract template
+
+```
+using Neo.SmartContract.Framework;
+using Neo.SmartContract.Framework.Services.Neo;
+using Neo.SmartContract.Framework.Services.System;
+using System;
+using System.ComponentModel;
+using System.Numerics;
+
+namespace Neo.SmartContract
+{
+ public class contract1 : Framework.SmartContract
+ {
+ public static Object Main(string operation, params object[] args)
+ {
+ if (Runtime.Trigger == TriggerType.Application)
+ {
+ if (operation == "add")
+ {
+ if (args.Length != 2) return false;
+ int a = (int)args[0];
+ int b = (int)args[1];
+ return Add(a, b);
+ }
+ if (operation == "compare")
+ {
+ if (args.Length != 2) return false;
+ int a = (int)args[0];
+ int b = (int)args[1];
+ return Compare(a, b);
+ }
+ }
+ return false;
+ }
+
+ public static int Add(int a, int b)
+ {
+ return a + b;
+ }
+
+ public static int Compare(int a, int b)
+ {
+ if (a > b)
+ {
+ return a;
+ }
+ return b;
+ }
+ }
+}
+```
+
+### example 3:Domain service smart contract
+
+```
+using Neo.SmartContract.Framework;
+using Neo.SmartContract.Framework.Services.Neo;
+using Neo.SmartContract.Framework.Services.System;
+using System;
+using System.ComponentModel;
+using System.Numerics;
+
+namespace Neo.SmartContract
+{
+ public class Domain : Framework.SmartContract
+ {
+ public static object Main(string operation, params object[] args)
+ {
+ switch (operation)
+ {
+ case "query":
+ return Query((string)args[0]);
+ case "register":
+ return Register((string)args[0], (byte[])args[1]);
+ case "transfer":
+ return Transfer((string)args[0], (byte[])args[1]);
+ case "delete":
+ return Delete((string)args[0]);
+ default:
+ return false;
+ }
+ }
+
+ private static byte[] Query(string domain)
+ {
+ return Storage.Get(Storage.CurrentContext, domain);
+ }
+
+ private static bool Register(string domain, byte[] owner)
+ {
+ if (!Runtime.CheckWitness(owner)) return false;
+ byte[] value = Storage.Get(Storage.CurrentContext, domain);
+ if (value != null) return false;
+ Storage.Put(Storage.CurrentContext, domain, owner);
+ return true;
+ }
+
+ private static bool Transfer(string domain, byte[] to)
+ {
+ byte[] from = Storage.Get(Storage.CurrentContext, domain);
+ if (from == null) return false;
+ if (!Runtime.CheckWitness(from)) return false;
+ Storage.Put(Storage.CurrentContext, domain, to);
+ return true;
+ }
+
+ private static bool Delete(string domain)
+ {
+ byte[] owner = Storage.Get(Storage.CurrentContext, domain);
+ if (owner == null) return false;
+ if (!Runtime.CheckWitness(owner)) return false;
+ Storage.Delete(Storage.CurrentContext, domain);
+ return true;
+ }
+ }
+}
+
+```
+
diff --git a/smart-contract-tutorial/docs/en/ont sc ide user guide.md b/smart-contract-tutorial/docs/en/ont sc ide user guide.md
new file mode 100644
index 00000000..7942fbdb
--- /dev/null
+++ b/smart-contract-tutorial/docs/en/ont sc ide user guide.md
@@ -0,0 +1,19 @@
+# Ont Smart Contract IDE
+
+## Introduction
+
+It is a open source and user friendly online editor for Ontology contract IDE. It supports three popular programme languages for now, and will supports more in the future. Users can easily compile ,deploy and invoke their contracts with it.
+
+## Register
+
+## Login
+
+## Create Project
+
+## Editor
+
+## Compile Smart Contract
+
+## Deploy Smart Contract
+
+## Invoke Smart Contract
\ No newline at end of file
diff --git a/smart-contract-tutorial/docs/en/python.md b/smart-contract-tutorial/docs/en/python.md
new file mode 100644
index 00000000..ea2fd57f
--- /dev/null
+++ b/smart-contract-tutorial/docs/en/python.md
@@ -0,0 +1,155 @@
+# Python Smart Contract
+
+
+## Compile
+
+
+### example 1:HelloWorld smart contract
+
+```
+from boa.blockchain.vm.Ont.Storage import GetContext, Put
+
+
+def Main():
+ context = GetContext()
+
+ Put(context, 'hello', 'world')
+
+```
+
+### example 2:Smart contract template
+
+```
+from boa.blockchain.vm.Ont.Runtime import Log, Notify
+from boa.blockchain.vm.System.ExecutionEngine import GetScriptContainer, GetExecutingScriptHash
+from boa.blockchain.vm.Ont.Transaction import *
+from boa.blockchain.vm.Ont.Blockchain import GetHeight, GetHeader
+from boa.blockchain.vm.Ont.Action import RegisterAction
+from boa.blockchain.vm.Ont.Runtime import GetTrigger, CheckWitness
+from boa.blockchain.vm.Ont.TriggerType import Application, Verification
+from boa.blockchain.vm.Ont.Output import GetScriptHash, GetValue, GetAssetId
+from boa.blockchain.vm.Ont.Storage import GetContext, Get, Put, Delete
+from boa.blockchain.vm.Ont.Header import GetTimestamp, GetNextConsensus
+
+def Main(operation, args):
+ trigger = GetTrigger()
+
+ if trigger == Application():
+ if operation == 'add':
+ a = args[0]
+ b = args[1]
+ return Add(a, b)
+
+ if operation == 'compare':
+ a = args[0]
+ b = args[1]
+ return Compare(a, b)
+
+ return False
+
+
+def Add(a, b):
+ return a + b
+
+
+def Compare(a, b):
+ if a > b:
+ return a
+
+ return b
+```
+
+### example 3:Domain service smart contract
+
+```
+from boa.blockchain.vm.Ont.Runtime import Log, Notify
+from boa.blockchain.vm.System.ExecutionEngine import GetScriptContainer, GetExecutingScriptHash
+from boa.blockchain.vm.Ont.Transaction import *
+from boa.blockchain.vm.Ont.Blockchain import GetHeight, GetHeader
+from boa.blockchain.vm.Ont.Action import RegisterAction
+from boa.blockchain.vm.Ont.Runtime import GetTrigger, CheckWitness
+from boa.blockchain.vm.Ont.TriggerType import Application, Verification
+from boa.blockchain.vm.Ont.Output import GetScriptHash, GetValue, GetAssetId
+from boa.blockchain.vm.Ont.Storage import GetContext, Get, Put, Delete
+from boa.blockchain.vm.Ont.Header import GetTimestamp, GetNextConsensus
+
+def Main(operation, args):
+ trigger = GetTrigger()
+
+ if trigger == Application():
+ if operation == 'query':
+ domain = args[0]
+ return Query(domain)
+
+ if operation == 'register':
+ domain = args[0]
+ owner = args[1]
+ return Register(domain, owner)
+
+ if operation == 'transfer':
+ domain = args[0]
+ to = args[1]
+ return Transfer(domain, to)
+
+ if operation == 'delete':
+ domain = args[0]
+ return Delete(domain)
+
+ return False
+
+
+def Query(domain):
+ context = GetContext()
+ owner = Get(context, domain);
+
+ if owner != None:
+ return False
+
+ return owner
+
+def Register(domain, owner):
+ context = GetContext()
+ occupy = Get(context, domain);
+ if occupy != None:
+ return False;
+ Put(context, domain, owner);
+ return True
+
+def Transfer(domain, to):
+ if to == None:
+ return False
+
+ context = GetContext()
+ owner = Get(context, domain)
+ if owner == None:
+ return False
+ if owner == to:
+ return True
+
+ is_owner = CheckWitness(owner)
+
+ if not is_owner:
+ return False
+
+ Put(context, domain, to)
+
+ return True
+
+def Delete(domain):
+ context = GetContext()
+ owner = Get(context, domain)
+
+ if owner == None:
+ return False
+
+ is_owner = CheckWitness(owner)
+
+ if not is_owner:
+ return False
+
+ Delete(context, domain)
+
+ return True;
+
+
+```
diff --git a/smart-contract-tutorial/docs/en/wasm.md b/smart-contract-tutorial/docs/en/wasm.md
new file mode 100644
index 00000000..eb5347bb
--- /dev/null
+++ b/smart-contract-tutorial/docs/en/wasm.md
@@ -0,0 +1,233 @@
+# Wasm Smart Contract
+
+## Introduction
+wasm (WebAssembly),是基于堆栈的虚拟机的二进制指令格式。Wasm被设计为可编译C/C++/Rust等高级语言的可移植目标,支持在Web上为客户端和服务器应用程序进行部署。 Ontology支持 wasm 格式编写的智能合约。
+
+![WASM](https://git.ont.io/Ontology_Open_Platform/sc-examples-wasm/raw/178085bdd0ec8265ac67d76e05982d93e125ddc7/images/WASM.png)
+
+## 编译
+
+1. 首先我们准备一个简单的c 语言的合约,计算两个整数之和或连接两个字符串。
+
+```
+void JsonUnmashal(void * addr,int size,char * arg);
+char * JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(char *a);
+void * malloc(int size);
+int ReadInt32Param(char *addr);
+char * ReadStringParam(char *addr);
+
+int add(int a, int b ){
+ return a + b;
+}
+
+char * concat(char * a, char * b){
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+ char * res = (char *)malloc((lena + lenb)*sizeof(char));
+ for (int i = 0 ;i < lena ;i++){
+ res[i] = a[i];
+ }
+
+ for (int j = 0; j < lenb ;j++){
+ res[lenb + j] = b[j];
+ }
+ return res;
+}
+
+char * invoke(char * method,char * args){
+
+ if (strcmp(method ,"init")==0 ){
+ return "init success!";
+ }
+
+ if (strcmp(method, "add")==0){
+ int a = ReadInt32Param(args);
+ int b = ReadInt32Param(args);
+ int res = add(a,b);
+ char * result = JsonMashal(res,"int");
+ return result;
+ }
+
+ if(strcmp(method,"concat")==0){
+
+ char * a = ReadStringParam(args);
+ char * b = ReadStringParam(args);
+ char * res = concat(a,b);
+ char * result = JsonMashal(res,"string");
+ return result;
+ }
+
+}
+
+
+```
+
+下列函数为虚拟机的提供的API,需要在文件头部声明
+```
+char* JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(char *a);
+void* malloc(int size);
+
+```
+
+ONT 的WASM 合约入口统一为```char * invoke(char * method,char * args)``` 。
+
+**method** 为需要调用的方法名
+
+**args** 为传入参数,raw bytes
+
+API ```int strcmp(char *a,char *b)``` :字符串比较函数,可以用来判断需要调用的方法名
+
+API ```char * JsonMashal(void * val,char * types)``` : 可以把结果序列化为Json格式
+
+
+
+
+
+2. 把上面的C 文件编译成wasm格式的智能合约。
+ * 可以使用Emscripten 工具 [http://kripken.github.io/emscripten-site/](http://http://kripken.github.io/emscripten-site/)
+ * 使用在线编译器 WasmFiddle [https://wasdk.github.io/WasmFiddle](https://wasdk.github.io/WasmFiddle)
+
+ 使用WasmFiddle为例
+
+ 将C代码粘贴到"c"的编辑窗口内,请忽律"JS"窗口的内容,点击 "Build" 按钮,如果编译正确,可以在"Text Format"窗口中看到编译好的wast格式代码,如果编译错误,会在"output"窗口显示错误信息。
+
+ ![fiddle](https://git.ont.io/Ontology_Open_Platform/sc-examples-wasm/raw/17ab03daa27715188fc728383793c8cdf259355f/images/fiddle.png)
+
+ 如果熟悉[wast语法](http://webassembly.org/docs/binary-encoding/),您可以自行修改wast文件,
+
+ 并使用[wabt](https://github.com/WebAssembly/wabt)工具将wast 文件编译成wasm格式。
+
+
+3. 点击"wasm"按钮,下载编译后的wasm 文件
+
+
+### 使用Json格式传递参数
+
+传入参数可以为Json格式:
+
+```
+void JsonUnmashal(void * addr,int size,char * arg);
+char * JsonMashal(void * val,char * types);
+int strcmp(char *a,char *b);
+int arrayLen(void *a);
+void * malloc(int size);
+
+int add(int a, int b ){
+ return a + b;
+}
+
+char * concat(char * a, char * b){
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+ char * res = (char *)malloc((lena + lenb)*sizeof(char));
+ for (int i = 0 ;i < lena ;i++){
+ res[i] = a[i];
+ }
+
+ for (int j = 0; j < lenb ;j++){
+ res[lenb + j] = b[j];
+ }
+ return res;
+}
+
+
+int sumArray(int * a, int * b){
+
+ int res = 0;
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+
+ for (int i = 0;i {file}.wast 命令查看
+
+
+* 可以看到方法名称都被编译成 ```_```开头的名称,需要进行手动修改。
+
+* 我们只希望导出```invoke```方法,需要删掉其他的"export"
+* ```(import "env" "memory" (memory (;0;) 256))``` 内存大小被设置为 256页,根据Webassembly [spec](https://github.com/WebAssembly/design/blob/27ac254c854994103c24834a994be16f74f54186/Semantics.md#linear-memory),每页大小为 64K ,我们的合约不需要这么多内存,可以将256 修改为1.
+* 使用```wat2wasm {file}.wast ```编译生成 wasm格式文件
+
+
+### 取得wasm文件的二进制内容
+可以使用在线工具[http://tomeko.net/online_tools/file_to_hex.php?lang=en](http://tomeko.net/online_tools/file_to_hex.php?lang=en)
+![hexadecimal](https://git.ont.io/Ontology_Open_Platform/sc-examples-wasm/raw/b4c98c07a5ef7d07577ea863e2eecf95f445c178/images/hexadecimal.png)
+
+## 部署合约
+
+
+
+## 调用合约
+
diff --git a/smart-contract-tutorial/examples/array.c b/smart-contract-tutorial/examples/array.c
new file mode 100644
index 00000000..adcbd93b
--- /dev/null
+++ b/smart-contract-tutorial/examples/array.c
@@ -0,0 +1,30 @@
+int sumArray(int * a, int * b){
+
+ int res = 0;
+ int lena = arrayLen(a);
+ int lenb = arrayLen(b);
+
+ for (int i = 0;i b)
+ {
+ return a;
+ }
+ return b;
+ }
+ }
+}
\ No newline at end of file
diff --git a/smart-contract-tutorial/examples/template.py b/smart-contract-tutorial/examples/template.py
new file mode 100644
index 00000000..20b05667
--- /dev/null
+++ b/smart-contract-tutorial/examples/template.py
@@ -0,0 +1,37 @@
+from boa.blockchain.vm.Ont.Runtime import Log, Notify
+from boa.blockchain.vm.System.ExecutionEngine import GetScriptContainer, GetExecutingScriptHash
+from boa.blockchain.vm.Ont.Transaction import *
+from boa.blockchain.vm.Ont.Blockchain import GetHeight, GetHeader
+from boa.blockchain.vm.Ont.Action import RegisterAction
+from boa.blockchain.vm.Ont.Runtime import GetTrigger, CheckWitness
+from boa.blockchain.vm.Ont.TriggerType import Application, Verification
+from boa.blockchain.vm.Ont.Output import GetScriptHash, GetValue, GetAssetId
+from boa.blockchain.vm.Ont.Storage import GetContext, Get, Put, Delete
+from boa.blockchain.vm.Ont.Header import GetTimestamp, GetNextConsensus
+
+def Main(operation, args):
+ trigger = GetTrigger()
+
+ if trigger == Application():
+ if operation == 'add':
+ a = args[0]
+ b = args[1]
+ return Add(a, b)
+
+ if operation == 'compare':
+ a = args[0]
+ b = args[1]
+ return Compare(a, b)
+
+ return False
+
+
+def Add(a, b):
+ return a + b
+
+
+def Compare(a, b):
+ if a > b:
+ return a
+
+ return b
\ No newline at end of file
diff --git a/smart-contract-tutorial/images/C# VM Flow.png b/smart-contract-tutorial/images/C# VM Flow.png
new file mode 100644
index 00000000..bdb31396
Binary files /dev/null and b/smart-contract-tutorial/images/C# VM Flow.png differ
diff --git a/smart-contract-tutorial/images/Python VM Flow.png b/smart-contract-tutorial/images/Python VM Flow.png
new file mode 100644
index 00000000..134ba1c9
Binary files /dev/null and b/smart-contract-tutorial/images/Python VM Flow.png differ
diff --git a/smart-contract-tutorial/images/WASM.png b/smart-contract-tutorial/images/WASM.png
new file mode 100644
index 00000000..e1fdebdb
Binary files /dev/null and b/smart-contract-tutorial/images/WASM.png differ
diff --git a/smart-contract-tutorial/images/fiddle.png b/smart-contract-tutorial/images/fiddle.png
new file mode 100644
index 00000000..4bc05d51
Binary files /dev/null and b/smart-contract-tutorial/images/fiddle.png differ
diff --git a/smart-contract-tutorial/images/hexadecimal.png b/smart-contract-tutorial/images/hexadecimal.png
new file mode 100644
index 00000000..9c5a46c1
Binary files /dev/null and b/smart-contract-tutorial/images/hexadecimal.png differ