# ST (Security Token) Functions

The MITUM STO model is an STO contract model based on MITUM Core. The model's functions and operations are designed to be simplified based on ERC-1400.

**Main Concepts**

* Controller : A controller is an entity responsible for performing management tasks such as issuing, managing, and forcing token transfers. **In the current STO, the controller is the contract owner and the account that became the operator through `contract.updateOperator()`.**
* Partition : A partition refers to a subgroup that logically separates tokens. Partitions allow different rules and properties to be applied to each group and allow token issuers to handle the different management and regulatory requirements of their tokens. **Multiple partitions can exist in one STO service.**
* Operator : An operator is an entity that can manage and transfer tokens with the permission of the token owner. The token holder grants certain rights to the operator, and the operator can transfer or redeem theirr tokens, or authorize another operator

1. Create a contract-account first using function of contract class. The account must be deployed on the Mitum network. (Create an operation with `contract.createAccount()` or `contract.createWallet()`, and use `operation.sign()` and `operation.send()`, or use `contract.touch()` to sign and send at once.)
2. Create an operation to create new STO service using function `createService()` of STO class. Sign and send the operation to Mitum network. If STO service creation is successful, you can check it with `getServiceInfo()`**.** \
   (Note that it does not mean the issuance of new STO tokens.)
3. Create an operation to issue new STO token using function issue(). The sender must be the owner of contract or operator of contract. Sign and send the operation to Mitum network. \
   \&#xNAN;**(Note that the operator of contract is different from the STO operator.)**
4. Create an operation to authorize new STO operator using function `authorizeOperator()`. The operation can be executed by contract’s owner or operator or another operator. It is also possible to revoke permissions using `revokeOperator()`.
5. The operators can send their STO token using function `transferByPartition()`. The contract’s owner or operator can transfer STO token from someone else’s account.
6. The operators can burn their STO token using function `redeem()`. The contract’s owner or operator can execute redeem STO token from someone else’s account.
