II.I.I Generation of M
This is a detailed overview of the $M generation process within the M^0 Protocol.
Last updated
This is a detailed overview of the $M generation process within the M^0 Protocol.
Last updated
In order to generate $M, must have a sufficient off-chain balance of which is represented on-chain by a frequently updated and validated number, known as the on-chain Collateral Value.
call the Update Collateral
method to put this number on-chain. They must pass the amount, the list of signing , a list of timestamps associated with the Validator signatures, and valid signature data (from ). Whenever timestamps and signature data is passed to a method, the contracts will take the minimum timestamp and the minimum threshold of signatures as defined by the (see ). Optionally, they can pass a hash of arbitrary metadata and any open Retrieval IDs (see ) into the method as an argument. The Metadata Hash can be used to retrieve the actual off-chain metadata, which can serve to add context to the update, while Retrieval IDs allow to remove outstanding balance subtractions (see ). Signature validation may either use standard , which allows for the to obtain the signature off-chain, or on-chain contract signatures. The collateral balance is an attestation to the value of the held in an (see for further details).
In order to post the value of their on-chain, the will need to provide the signature data (from ) in the transaction. The presence of the Validator’s signature is to reinforce that the value of the is correct and reflects the most up-to-date snapshot of the off-chain balances. must update their number on-chain and with a valid signature at least once every (see ). If a fails to call Update Collateral
within of the previous time they called it, their on-chain Collateral Value is assumed to be 0. If the cannot provide valid signature data (from ), they cannot successfully call the method. Each time this method is called it will accrue the (see ) on the Minter’s current balance of Owed $M. If any rules are being violated at the time of the method being called, it will also charge on the Minter’s balance which is in violation (see ).
Example
Eligible Collateral for $M has been deemed to be 0-90 day T-bills. Minter 1 has $10,000,000 of T-bills sitting in an Eligible Custody Solution. Minter 1 calls Update Collateral and passes 10,000,000, and a valid Validator signature as arguments. The on-chain Collateral Value of the Minter is now 10,000,000. The next day, $1,000,000 of the T-bills mature and convert to bank deposits, which are not considered Eligible Collateral. The Minter calls Update Collateral and passes 9,000,000, and a valid Validator signature as arguments. The on-chain collateral balance of the Minter is updated to 9,000,000.
Once a has updated their on-chain collateral they are able to generate $M. They do so by calling the Propose Mint
method and passing in the amount of $M they’d like to generate and the address which they would like to generate the $M to. Once this method is called, it will first call Get Present Amount
on the Minter's current balance of Owed M. It will then check to ensure that the on-chain Collateral Value multiplied by the Mint Ratio (see II.III Governance Controlled Protocol Parameters) is greater than the amount of total Owed $M from the Minter, including the amount they are currently attempting to generate and/or Retrieve (see II.I.IV Retrieving Free Collateral). If these checks are passed the method will output a Mint ID which corresponds to the Propose Mint. A can only have one outstanding Mint ID at any given time.
If after the (see ) the Mint ID has not been canceled by the (see ), the may call the Mint
method and pass the Mint ID as an argument to execute the Propose Mint. The was introduced to avoid atomic Update Collateral
calls and Mint
calls, and to provide the network of with sufficient opportunity to intervene in the minting process if something is seemingly wrong (see ). The Minter must call Mint
before the has expired (see ).
can destroy Owed $M at any time by calling the Burn
method and passing in their Minter Address and the amount of $M they’d like to burn as arguments. Any address can repay $M owed by a Minter by calling the Burn
method and passing in the amount and Minter address as arguments.