II.I.I Generation of M
Last updated
Last updated
Copyright 2024 M^0 Foundation
In order to generate M, Minters must have a sufficient off-chain balance of Eligible Collateral which is represented on-chain by a frequently updated and validated number, known as the on-chain Collateral Value.
Minters call the Update Collateral
method to put this number on-chain. They must pass the amount, the list of signing Validators, a list of timestamps associated with the Validator signatures, and valid signature data (from Validators). 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 TTG (see III.III Governance Controlled TTG Parameters). Optionally, they can pass a hash of arbitrary metadata and any open Retrieval IDs (see II.I.IV Retrieving Free Collateral) 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 Minters to remove outstanding balance subtractions (see II.I.IV Retrieving Free Collateral). Signature validation may either use standard ecrecover
, which allows for the Minter to obtain the signature off-chain, or EIP-1271 on-chain contract signatures. The collateral balance is an attestation to the value of the Eligible Collateral held in an Eligible Custody Solution (see V.II Off-Chain Actors and Components for further details).
In order to post the value of their Eligible Collateral on-chain, the Minters will need to provide the signature data (from Validators) in the transaction. The presence of the Validator’s signature is to reinforce that the value of the Eligible Collateral is correct and reflects the most up-to-date snapshot of the off-chain balances. Minters must update their Eligible Collateral number on-chain and with a valid Validator signature at least once every Update Collateral Interval (see II.III Governance Controlled Protocol Parameters). If a Minter fails to call Update Collateral
within Update Collateral Interval of the previous time they called it, their on-chain Collateral Value is assumed to be 0. If the Minter cannot provide valid signature data (from Validators), they cannot successfully call the method. Each time this method is called it will accrue the Minter Rate (see II.I.II Protocol Fees) 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 Penalty Rate on the Minter’s balance which is in violation (see II.I.II Protocol Fees).
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 Minter 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 Minter can only have one outstanding Mint ID at any given time.
If after the Mint Delay (see II.III Governance Controlled Protocol Parameters) the Mint ID has not been canceled by the Validator (see II.I.III Cancel and Freeze), the Minter may call the Mint
method and pass the Mint ID as an argument to execute the Propose Mint. The Mint Delay was introduced to avoid atomic Update Collateral
calls and Mint
calls, and to provide the network of Validators with sufficient opportunity to intervene in the minting process if something is seemingly wrong (see II.I.III Cancel and Freeze). The Minter must call Mint
before the Propose Mint Time To Live has expired (see II.III Governance Controlled Protocol Parameters).
Minters 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.