M^0 is an EVM-compatible, immutable protocol that enables minting and burning of the ERC20 token $M. It also allows for $M distributions to yield earners and governance token ($ZERO) holders. There are three main types of actors in the protocol - Minters, Validators, and Yield Earners - all of which are permissioned via governance. Protocol variables are also managed by governance and are stored in a Registrar configuration contract.
You may have to install the following tools to use this repository:
- foundry to compile and test contracts
- lcov to generate the code coverage report
- yarn to manage npm dependencies
- slither to static analyze contracts
Install dependencies:
yarn
forge install
Copy .env
and write down the env variables needed to run this project.
cp .env.example .env
Run the following command to compile the contracts:
forge compile
Forge is used for coverage, run it with:
yarn coverage
You can then consult the report by opening coverage/index.html
:
open coverage/index.html
To run all tests:
forge test
Run test that matches a test contract:
forge test --mc <test-contract-name>
Test a specific test case:
forge test --mt <test-case-name>
To run slither:
yarn slither
Prettier is used to format Solidity code. Use it by running:
yarn prettier
Solhint is used to lint Solidity files. Run it with:
yarn solhint
Or to autofix some issues:
yarn solhint-fix
Forge is used to generate the documentation. Run it with:
yarn doc
The command will generate the documentation in the docs
folder and spinup a local server on port 4000
to view the documentation.