# DAO Functions

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 a new dao model using the `registerModel()` function.

   Depending on whether the value of the option is 'crypto' or 'biz', the form of the proposal for subsequent execution of the Propose function is different.<br>

   **Crypto Proposal** - 2 different type of proposal exist : proposal for token transfer, proposal for policy changes on voting \
   **Biz Proposal** - proposal for voting among multiple options

   \
   Also there are differences in how proposals are processed when implemented.

   \
   **Crypto Dao** - the proposal contains content to be executed on-chain and is automatically executed according to the results of the vote. \
   **Biz Dao** - Only the voting results indicating that the proposal has passed are recorded on-chain.<br>

   The active value of the proposers determines whether the proposal permission is granted to specific people or to all members of the governance. (not available yet, now only whitelist can propose)
3. The proposer runs the `propose()` function to create the proposal. The proposal can be canceled by the proposer through `cancel()` function.
4. People with voting rights can decide during the 'registration' period whether they want to vote themselves or delegate their voting rights to someone else by using `reigster()` function.
5. Run the `preSnap()` function before the 'voting' period to block double voting from the system, ensuring fair and transparent voting. (anyone can execute)
6. People who register to vote during the 'registration' period, or who have been delegated the right to vote, can vote during the 'voting' period.
7. Run the `postSnap()` function and after the 'voting' period to block double voting from the system, ensuring fair and transparent voting. (anyone can execute)
8. Once voting is over and the turnout and quorum are satisfied, run the `execute()` function to execute the proposal. (anyone can execute)

<br>

<figure><img src="https://4209583345-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNNV41EFFlG9FIzbJ9A2a%2Fuploads%2FNXTFwSHlxLG3w5uljL56%2FUntitled%20(1).png?alt=media&#x26;token=d3a28e43-22a5-4d32-9818-0006e320be83" alt=""><figcaption></figcaption></figure>
