II.I.II Protocol Fees
Last updated
Last updated
Copyright 2024 M^0 Foundation
There are two fees assessed on Minters in the M^0 protocol.
The first is called Minter Rate, a governance controlled parameter, which is levied continuously on the Minter’s balance of Owed M. This fee compounds on a continuous basis. The beneficiaries of Minter Rate are the Earn Mechanism (see II.I.V The Earn Mechanism) and the ZERO holders (see III. Governance).
The second is Penalty Rate, another governance controlled parameter, which is levied on balances that are in violation of protocol rules and has the same beneficiaries as the Minter Rate.
One of the primary invariants of the protocol is that the balance of a Minter’s Owed M should not exceed the on-chain Collateral Value (sans open Retrieval IDs) multiplied by the Mint Ratio.
Penalty Rate is imposed upon any balance in excess of this amount. If a Minter has not called Update Collateral
within Update Collateral Interval, they will incur Penalty Rate on their entire balance of Owed M for each Update Collateral Interval that they miss – i.e. when Update Collateral
is not called in the TTG-specified time the system interprets its value to be zero.
Unlike Minter Rate, Penalty Rate is not continuously levied on the Minter’s balance of Owed M, but is charged discretely as a one-time percentage fee on their delinquent balance at the moment the balance is checked, and then added to the Minter’s Owed M. Collecting Minter Rate is contained in the Get Present Amount
method, which is exclusively embedded in all other Minter methods, including Burn
, and cannot be called independently. The Minter Rate is mechanically affected by updating a global index value which is applied to all Owed M in the Minter’s balance, as is Penalty Rate. Penalty Rate is contained in the Impose Penalty
method, which is exclusively embedded in the Update Collateral
, Burn
and Deactivate Minter
methods. When Impose Penalty
is called in conjunction with Update Collateral
, it checks for both missed Update Collateral Interval periods and the Minter’s balance of Owed M relative to their on-chain Collateral Value discounted by the Mint Ratio. When it is called in conjunction with Burn
, it only checks for missed Update Collateral Interval periods. This is done to ensure that the Minter is not penalized on the same errant balance more than once. Impose Penalty
will also account for whether it has already been called in the current Update Collateral Interval period and will not charge a Minter twice for the same missed period.
Example
A Minter calls Update Collateral; the Get Present Amount
method is called along with the Impose Penalty
method. The Minter’s balance of Owed M prior to the method call is 8,000,000 M. First, Get Present Amount
is used to fetch the latest index and apply the Minter Rate to the Minter’s balance of Owed M, accounting for continuous compounding. Assume that this increases the Minter’s Owed M to 8,000,010 M. If the Minter’s on-chain Collateral Value is 8,000,000 and the Mint Ratio is 90%, then the maximum amount of Owed M Minter 1 should have is 7,200,000 M– but the actual on-chain number is 8,000,010 M. Therefore Minter 1 will incur Penalty Rate on (8,000,010 M - 7,200,000 M) = 800,010 M. If Penalty Rate is 0.01%, then the Minter’s Owed M is incremented to 8,000,010 M + 800,010 M* 1.0001 = 8,800,100.001 M.
The following is a diagram which demonstrates a hypothetical sequence where a Minter incurs Penalty Rate charges. The example below describes this hypothetical sequence.
Hypothetical sequence where a Minter incurs Penalty Rate charges.
Example (some balances are rounded)
Assume that the Mint to Collateral Ratio is 90%, Update Collateral Interval is 24 hours, Minter Rate is 5% APY (and therefore ~0.00058% per hour), and Penalty Minter Rate is 0.02%.
On Day 1, a Minter calls Update Collateral
and passes in 100 as the value. Its Owed M is 0. Later that day (Day 1.1) the Minter generates 90 M.
On Day 2 the Minter fails to call Update Collateral
.
On Day 3 the Minter calls Burn
and passes in 50.043 M. Assume that less than 48 hours have passed since the Mint call on Day 1. First, Get Present Amount
is called and applies the latest index to the Minter’s balance of 90 M. This increases the Minter’s Owed M to (90 * (1 + (0.0000058 * 48))) = 90.025 M. Next, Impose Penalty
is called and is applied to the Minter’s updated balance. Since the Minter missed one Update Collateral Interval period (on Day 2), they are penalized one time. The Minter’s Owed M is increased to (90.025 * (1 + (0.0002 * 1)) = 90.043 M. The amount passed into the Burn
method (50.043) is now subtracted from this new balance and reduces the Minter’s Owed M to (90.043 - 50.043) = 40 M. Recall that burn only checks for missed Update Collateral Interval periods and does not check the Minter’s current on-chain Collateral Value and therefore does not penalize any currently errant balance. The Minter then calls Burn
again on Day 3 and passes in 30.0014 M. Assume 6 hours have passed since the previous Burn call. First, Get Present Amount
is called and applies the latest index to the Minter’s balance of 40 M. This increases the Minter’s Owed M to (40 * (1 + (0.0000058 * 6))) = 40.0014 M. Impose Penalty is then run but does not charge the Minter an additional Penalty Rate because it has already paid for all missed Update Collateral Interval periods. The amount passed into the Burn method (30.0014) is now subtracted from this new balance and reduces the Minter’s Owed M to (40.0014 - 30.0014) = 10 M. Finally, also on Day 3, the Minter calls Update Collateral
and passes in 0 (most likely because their Eligible Collateral has matured and is sitting in ineligible bank deposits). Assume another 6 hours have passed. Once again, Get Present Amount
is run to apply the latest index to the Minter’s balance of M. This increases the Minter’s Owed M by (10 * (1 + (0.0000058 * 6))) = 10.00035 M. Next Impose Penalty
is called. There are no charges for missed periods because these were already paid when the Minter called Burn
. A check for an errant balance is now run and produces 10.00035 M since the Minter’s entire balance is in excess of their maximum permitted Owed M due to the on-chain Collateral Value being 0. The Minter’s Owed M is increased to (10.00035 * 1.0002) = 10.00235 M.