# Generic workflow

This section describes the generics related to:

* [How contracts can interact with QVM using a common API](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/common-api)
* [Installing `qvmctl`, the command line interface of QVM](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/installing-qvmctl)
* [Setting up your workspace](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/setting-up-your-workspace)
* [How to write a smart contract](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/writing-a-smart-contract)
* [How to compile a smart contract](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/compiling-a-smart-contract)
* [Deploying contracts using `qvmctl`](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/deploying-a-smart-contract)
* [Calling contract functions using `qvmctl`](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/calling-a-smart-contract-function)
* [Reading contract storage using `qvmctl`](https://learn.qanplatform.com/developers/qvm-multi-language-smart-contracts/generic-workflow/reading-smart-contract-storage)
