[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"\u002Fprotocol\u002Fminting-burning":260,"\u002Fprotocol\u002Fminting-burning-surround":1671},[4,22,105,148,177,186,243],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Agents","\u002Fagents","agents",[9,13,17],{"title":10,"path":11,"stem":12},"LLMs.txt","\u002Fagents\u002Fllms-txt","agents\u002Fllms-txt",{"title":14,"path":15,"stem":16},"MCP Server","\u002Fagents\u002Fmcp-server","agents\u002Fmcp-server",{"title":18,"path":19,"stem":20},"Skills","\u002Fagents\u002Fskills","agents\u002Fskills",false,{"title":23,"path":24,"stem":25,"children":26,"page":21},"Api Reference","\u002Fapi-reference","api-reference",[27,31,35,68],{"title":28,"path":29,"stem":30},"Authentication","\u002Fapi-reference\u002Fauthentication","api-reference\u002Fauthentication",{"title":32,"path":33,"stem":34},"API Reference","\u002Fapi-reference\u002Fintroduction","api-reference\u002Fintroduction",{"title":36,"path":37,"stem":38,"children":39,"page":21},"Orchestration","\u002Fapi-reference\u002Forchestration","api-reference\u002Forchestration",[40,44,48,52,56,60,64],{"title":41,"path":42,"stem":43},"POST \u002Fcancel-order","\u002Fapi-reference\u002Forchestration\u002Fcancel-order","api-reference\u002Forchestration\u002Fcancel-order",{"title":45,"path":46,"stem":47},"GET \u002Forder-status\u002F{orderId}","\u002Fapi-reference\u002Forchestration\u002Forder-status","api-reference\u002Forchestration\u002Forder-status",{"title":49,"path":50,"stem":51},"GET \u002Forders","\u002Fapi-reference\u002Forchestration\u002Forders","api-reference\u002Forchestration\u002Forders",{"title":53,"path":54,"stem":55},"Orchestration API","\u002Fapi-reference\u002Forchestration\u002Foverview","api-reference\u002Forchestration\u002Foverview",{"title":57,"path":58,"stem":59},"POST \u002Fquote","\u002Fapi-reference\u002Forchestration\u002Fquote","api-reference\u002Forchestration\u002Fquote",{"title":61,"path":62,"stem":63},"GET \u002Fsupported-assets","\u002Fapi-reference\u002Forchestration\u002Fsupported-assets","api-reference\u002Forchestration\u002Fsupported-assets",{"title":65,"path":66,"stem":67},"TypeScript Type Generation","\u002Fapi-reference\u002Forchestration\u002Ftype-generation","api-reference\u002Forchestration\u002Ftype-generation",{"title":69,"path":70,"stem":71,"children":72,"page":21},"Recipes","\u002Fapi-reference\u002Frecipes","api-reference\u002Frecipes",[73,77,81,85,89,93,97,101],{"title":74,"path":75,"stem":76},"Collateral Composition","\u002Fapi-reference\u002Frecipes\u002Fcollateral-composition","api-reference\u002Frecipes\u002Fcollateral-composition",{"title":78,"path":79,"stem":80},"Daily Yields","\u002Fapi-reference\u002Frecipes\u002Fdaily-yields","api-reference\u002Frecipes\u002Fdaily-yields",{"title":82,"path":83,"stem":84},"Earner Rate History","\u002Fapi-reference\u002Frecipes\u002Fearner-rate-history","api-reference\u002Frecipes\u002Fearner-rate-history",{"title":86,"path":87,"stem":88},"Minter Daily Expenses","\u002Fapi-reference\u002Frecipes\u002Fminter-daily-expenses","api-reference\u002Frecipes\u002Fminter-daily-expenses",{"title":90,"path":91,"stem":92},"Network Supply","\u002Fapi-reference\u002Frecipes\u002Fnetwork-supply","api-reference\u002Frecipes\u002Fnetwork-supply",{"title":94,"path":95,"stem":96},"Protocol Configuration","\u002Fapi-reference\u002Frecipes\u002Fprotocol-config","api-reference\u002Frecipes\u002Fprotocol-config",{"title":98,"path":99,"stem":100},"Token Holders","\u002Fapi-reference\u002Frecipes\u002Ftoken-holders","api-reference\u002Frecipes\u002Ftoken-holders",{"title":102,"path":103,"stem":104},"Token Overview","\u002Fapi-reference\u002Frecipes\u002Ftoken-overview","api-reference\u002Frecipes\u002Ftoken-overview",{"title":106,"path":107,"stem":108,"children":109,"page":21},"Build","\u002Fbuild","build",[110,114,118,122,126,130,134,138,142,145],{"title":111,"path":112,"stem":113},"Integrating with the M0 Portals","\u002Fbuild\u002Fbridging-developer","build\u002Fbridging-developer",{"title":115,"path":116,"stem":117},"Bridging M And wM Tokens","\u002Fbuild\u002Fbridging-user","build\u002Fbridging-user",{"title":119,"path":120,"stem":121},"Stablecoin Extension Templates","\u002Fbuild\u002Fchoosing-your-model","build\u002Fchoosing-your-model",{"title":123,"path":124,"stem":125},"How to Design Your Stablecoin","\u002Fbuild\u002Foverview","build\u002Foverview",{"title":127,"path":128,"stem":129},"Implementation Guide: NoYield","\u002Fbuild\u002Fsvm-noyield-guide","build\u002Fsvm-noyield-guide",{"title":131,"path":132,"stem":133},"Getting started","\u002Fbuild\u002Fsvm-noyield-guide-overview","build\u002Fsvm-noyield-guide-overview",{"title":135,"path":136,"stem":137},"Implementation Guide: MYieldToOne (Onshore)","\u002Fbuild\u002Ftreasury-guide","build\u002Ftreasury-guide",{"title":139,"path":140,"stem":141},"Implementation Guide: JMI (Offshore)","\u002Fbuild\u002Ftreasury-jmi-guide","build\u002Ftreasury-jmi-guide",{"title":131,"path":143,"stem":144},"\u002Fbuild\u002Ftreasury-jmi-overview","build\u002Ftreasury-jmi-overview",{"title":131,"path":146,"stem":147},"\u002Fbuild\u002Ftreasury-model","build\u002Ftreasury-model",{"title":149,"path":150,"stem":151,"children":152,"page":21},"Get Started","\u002Fget-started","get-started",[153,157,161,165,169,173],{"title":154,"path":155,"stem":156},"Accessing Liquidity","\u002Fget-started\u002Faccessing-liquidity","get-started\u002Faccessing-liquidity",{"title":158,"path":159,"stem":160},"Cross Chain Interoperability","\u002Fget-started\u002Fcross-chain","get-started\u002Fcross-chain",{"title":162,"path":163,"stem":164},"Architecture Overview","\u002Fget-started\u002Fhow-it-works","get-started\u002Fhow-it-works",{"title":166,"path":167,"stem":168},"Overview","\u002Fget-started\u002Foverview","get-started\u002Foverview",{"title":170,"path":171,"stem":172},"Platform Mechanics & Reward Programmability","\u002Fget-started\u002Fprotocol-mechanics","get-started\u002Fprotocol-mechanics",{"title":174,"path":175,"stem":176},"Stablecoin Features","\u002Fget-started\u002Fstablecoin-features","get-started\u002Fstablecoin-features",{"title":178,"path":179,"stem":180,"children":181,"page":21},"Issuers","\u002Fissuers","issuers",[182],{"title":183,"path":184,"stem":185},"Issue Your Stablecoin","\u002Fissuers\u002Foverview","issuers\u002Foverview",{"title":187,"path":188,"stem":189,"children":190,"page":21},"Protocol","\u002Fprotocol","protocol",[191,195,199,203,207,211,215,219,223,227,231,235,239],{"title":192,"path":193,"stem":194},"Distribution Vault","\u002Fprotocol\u002Fdistribution-vault","protocol\u002Fdistribution-vault",{"title":196,"path":197,"stem":198},"M0 Extensions","\u002Fprotocol\u002Fextensions","protocol\u002Fextensions",{"title":200,"path":201,"stem":202},"Limit Order Protocol","\u002Fprotocol\u002Flimit-order-protocol","protocol\u002Flimit-order-protocol",{"title":204,"path":205,"stem":206},"M0 Portals","\u002Fprotocol\u002Fm-portals","protocol\u002Fm-portals",{"title":208,"path":209,"stem":210},"M Token","\u002Fprotocol\u002Fm-token","protocol\u002Fm-token",{"title":212,"path":213,"stem":214},"M Token Specification","\u002Fprotocol\u002Fm-token-spec","protocol\u002Fm-token-spec",{"title":216,"path":217,"stem":218},"Minting & Burning (MinterGateway)","\u002Fprotocol\u002Fminting-burning","protocol\u002Fminting-burning",{"title":220,"path":221,"stem":222},"Portal V2","\u002Fprotocol\u002Fportal-v2","protocol\u002Fportal-v2",{"title":224,"path":225,"stem":226},"Rate Models & Yield","\u002Fprotocol\u002Frate-models","protocol\u002Frate-models",{"title":228,"path":229,"stem":230},"Roles","\u002Fprotocol\u002Froles","protocol\u002Froles",{"title":232,"path":233,"stem":234},"M0 On Solana","\u002Fprotocol\u002Fsolana","protocol\u002Fsolana",{"title":236,"path":237,"stem":238},"Wrapped M (wM)","\u002Fprotocol\u002Fwrapped-m","protocol\u002Fwrapped-m",{"title":240,"path":241,"stem":242},"Wrapped M Specification","\u002Fprotocol\u002Fwrapped-m-spec","protocol\u002Fwrapped-m-spec",{"title":244,"path":245,"stem":246,"children":247,"page":21},"Resources","\u002Fresources","resources",[248,252,256],{"title":249,"path":250,"stem":251},"Deployments","\u002Fresources\u002Faddresses","resources\u002Faddresses",{"title":253,"path":254,"stem":255},"Audits","\u002Fresources\u002Faudits","resources\u002Faudits",{"title":257,"path":258,"stem":259},"Glossary","\u002Fresources\u002Fglossary","resources\u002Fglossary",{"id":261,"title":216,"body":262,"description":1665,"extension":1666,"links":1667,"meta":1668,"navigation":1498,"path":217,"seo":1669,"stem":218,"__hash__":1670},"docs\u002Fprotocol\u002Fminting-burning.md",{"type":263,"value":264,"toc":1625},"minimark",[265,269,276,288,291,317,321,330,337,340,422,430,436,444,453,484,488,496,500,505,509,512,516,523,575,578,653,657,666,729,737,741,750,754,794,801,806,855,859,862,905,908,912,921,1017,1021,1027,1031,1056,1060,1063,1106,1110,1113,1161,1167,1171,1174,1220,1224,1227,1264,1268,1271,1275,1278,1313,1317,1320,1354,1358,1361,1385,1388,1392,1398,1435,1438,1445,1459,1463,1474,1564,1567,1571,1584,1618,1621],[266,267,166],"h2",{"id":268},"overview",[270,271,272],"p",{},[273,274,275],"em",{},"Where money is born.",[270,277,278,279,283,284,287],{},"The ",[280,281,282],"code",{},"MinterGateway"," contract is the central component within the M0 Protocol responsible for orchestrating the entire lifecycle of ",[280,285,286],{},"$M",". It governs the processes for minting and burning, manages the offchain collateral system that backs the supply, and tracks the debt obligations of Minters. This contract acts as the primary interface for Minters and Validators, ensuring that issuance is always securely collateralized and transparently managed according to protocol rules defined by M0 Governance.",[270,289,290],{},"Its key responsibilities include:",[292,293,294,298,301,304,307,310],"ul",{},[295,296,297],"li",{},"Managing Minter activation, deactivation, and operational states.",[295,299,300],{},"Overseeing the collateral update process, including verification of offchain assets by Validators.",[295,302,303],{},"Enforcing the structured minting and burning procedures.",[295,305,306],{},"Calculating and applying interest, debt, and penalties for Minters.",[295,308,309],{},"Facilitating the collateral retrieval process for Minters.",[295,311,312,313,316],{},"Synchronizing its interest index with the ",[280,314,315],{},"MToken"," contract to maintain system-wide consistency.",[266,318,320],{"id":319},"minting-and-burning-process","Minting and Burning Process",[270,322,323,324,326,327,329],{},"The creation (minting) and destruction (burning) of ",[280,325,286],{}," tokens are strictly controlled by the ",[280,328,282],{},".",[331,332,334,335],"h3",{"id":333},"minting-m","Minting ",[280,336,286],{},[270,338,339],{},"The minting process is designed with security checkpoints involving a proposal, a delay, and execution:",[341,342,343,350,383,393],"ol",{},[295,344,345,349],{},[346,347,348],"strong",{},"Update Collateral (Prerequisite)",": Before proposing a mint, a Minter must have an up-to-date and sufficient verified collateral value on record.",[295,351,352,355,356,359,360,363,364,366,367],{},[346,353,354],{},"Propose Mint",": An active Minter initiates a mint request by calling ",[280,357,358],{},"proposeMint()",":\nThis creates a mint proposal with a unique ",[280,361,362],{},"mintId_",". The proposal specifies the amount of ",[280,365,286],{}," to be minted and the recipient address. This step allows Validators to review pending mints.",[368,369,374],"pre",{"className":370,"code":371,"language":372,"meta":373,"style":373},"language-solidity shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function proposeMint(uint256 amount, address destination) external returns (uint48 mintId_);\n","solidity","",[280,375,376],{"__ignoreMap":373},[377,378,381],"span",{"class":379,"line":380},"line",1,[377,382,371],{},[295,384,385,388,389,392],{},[346,386,387],{},"Delay Period",": A mandatory delay period (",[280,390,391],{},"MINT_DELAY","), set by governance, must pass after a mint is proposed before it can be executed. This window allows Validators to intervene (e.g., cancel the mint or freeze the Minter) if they detect any issues.",[295,394,395,398,399,401,402,405,406,409,410,412,413],{},[346,396,397],{},"Execute Mint",": After the ",[280,400,391],{}," has elapsed, and before the proposal expires (within ",[280,403,404],{},"MINT_TTL"," - Time To Live, also set by governance), the Minter can execute the mint by calling ",[280,407,408],{},"mintM()",":\nThis function mints the specified amount of ",[280,411,286],{}," to the destination address, provided the proposal is still valid, hasn't been canceled, the Minter isn't frozen, and the mint doesn't violate collateralization requirements.",[368,414,416],{"className":370,"code":415,"language":372,"meta":373,"style":373},"function mintM(uint256 mintId) external;\n",[280,417,418],{"__ignoreMap":373},[377,419,420],{"class":379,"line":380},[377,421,415],{},[270,423,278,424,426,427,429],{},[280,425,391],{}," and ",[280,428,404],{}," mechanisms create a secure time window for oversight, preventing immediate, unreviewed mints and ensuring proposals don't remain executable indefinitely.",[331,431,433,434],{"id":432},"burning-m","Burning ",[280,435,286],{},[270,437,438,440,441,443],{},[280,439,286],{}," tokens can be burned to reduce a Minter's outstanding debt. Any ",[280,442,286],{}," holder can initiate a burn against a specific Minter's debt:",[368,445,447],{"className":370,"code":446,"language":372,"meta":373,"style":373},"function burnM(address minter, uint256 amount) external;\n",[280,448,449],{"__ignoreMap":373},[377,450,451],{"class":379,"line":380},[377,452,446],{},[292,454,455,468],{},[295,456,457,460,461,463,464,467],{},[346,458,459],{},"For Active Minters",": Burning ",[280,462,286],{}," reduces the principal of their interest-accruing debt (",[280,465,466],{},"activeOwedM",").",[295,469,470,460,473,475,476,479,480,483],{},[346,471,472],{},"For Deactivated Minters",[280,474,286],{}," reduces their fixed ",[280,477,478],{},"inactiveOwedM",". This serves as an informal liquidation mechanism, allowing the market to help settle the obligations of a Minter who has exited the system. The ",[280,481,482],{},"_repayForDeactivatedMinter"," internal function handles this logic.",[266,485,487],{"id":486},"collateral-system","Collateral System",[270,489,490,492,493,495],{},[280,491,286],{}," is backed by offchain collateral, typically real-world assets like U.S. Treasury Bills held in Special Purpose Vehicles (SPVs). The ",[280,494,282],{}," manages the onchain representation and verification of this collateral.",[331,497,499],{"id":498},"offchain-backing-onchain-representation","Offchain Backing & Onchain Representation",[270,501,502,503,329],{},"Minters are responsible for maintaining sufficient eligible collateral offchain. The value of this collateral is reported onchain through the ",[280,504,282],{},[331,506,508],{"id":507},"validator-verification","Validator Verification",[270,510,511],{},"Trusted, independent Validators play a crucial role in verifying the Minters' offchain collateral. They periodically assess the collateral and provide cryptographic signatures attesting to its value.",[331,513,515],{"id":514},"update-process","Update Process",[270,517,518,519,522],{},"Minters must regularly update their onchain collateral value to reflect the current state of their offchain reserves. This is done by calling the ",[280,520,521],{},"updateCollateral"," function:",[368,524,526],{"className":370,"code":525,"language":372,"meta":373,"style":373},"function updateCollateral(\n    uint256 collateral,\n    uint256[] calldata retrievalIds,\n    bytes32 metadataHash,\n    address[] calldata validators,\n    uint256[] calldata timestamps,\n    bytes[] calldata signatures\n) external returns (uint40 minTimestamp_);\n",[280,527,528,533,539,545,551,557,563,569],{"__ignoreMap":373},[377,529,530],{"class":379,"line":380},[377,531,532],{},"function updateCollateral(\n",[377,534,536],{"class":379,"line":535},2,[377,537,538],{},"    uint256 collateral,\n",[377,540,542],{"class":379,"line":541},3,[377,543,544],{},"    uint256[] calldata retrievalIds,\n",[377,546,548],{"class":379,"line":547},4,[377,549,550],{},"    bytes32 metadataHash,\n",[377,552,554],{"class":379,"line":553},5,[377,555,556],{},"    address[] calldata validators,\n",[377,558,560],{"class":379,"line":559},6,[377,561,562],{},"    uint256[] calldata timestamps,\n",[377,564,566],{"class":379,"line":565},7,[377,567,568],{},"    bytes[] calldata signatures\n",[377,570,572],{"class":379,"line":571},8,[377,573,574],{},") external returns (uint40 minTimestamp_);\n",[270,576,577],{},"Key aspects of the collateral update process:",[292,579,580,590,611,620,633],{},[295,581,582,585,586,589],{},[346,583,584],{},"Frequency",": Minters must update their collateral within a governance-defined interval (e.g., ",[280,587,588],{},"UPDATE_COLLATERAL_INTERVAL",", typically daily). Failure to do so results in their onchain collateral value being considered zero until a new valid update is provided.",[295,591,592,595,596,599,600],{},[346,593,594],{},"Validator Signatures",": A collateral update requires signatures from multiple approved Validators, meeting a minimum threshold set by governance (e.g., ",[280,597,598],{},"UPDATE_COLLATERAL_THRESHOLD",").\n",[292,601,602,605,608],{},[295,603,604],{},"Signatures must be provided with validator addresses in ascending order to prevent duplicates.",[295,606,607],{},"Each signature includes a timestamp which must be newer than the last signature from that specific validator for that Minter and must not be in the future. This prevents replay attacks.",[295,609,610],{},"Signatures use EIP-712 typed data specific to each validator.",[295,612,613,616,617,619],{},[346,614,615],{},"Collateral Expiration",": If a Minter fails to update their collateral within the ",[280,618,588],{},", their effective onchain collateral value is treated as zero for all protocol calculations, potentially leading to penalties or an inability to mint.",[295,621,622,625,626,629,630,632],{},[346,623,624],{},"Collateralization Caps",": Minters must maintain a collateralization ratio above the governance-set ",[280,627,628],{},"MINT_RATIO",". This ratio dictates the maximum amount of ",[280,631,286],{}," a Minter can have outstanding relative to their verified collateral.",[295,634,635,638,639],{},[346,636,637],{},"Earliest Update Timing",": A new collateral update's effective timestamp must be greater than:\n",[292,640,641,644,647],{},[295,642,643],{},"The Minter's last update timestamp.",[295,645,646],{},"The timestamp of the Minter's latest proposed collateral retrieval.",[295,648,649,652],{},[280,650,651],{},"block.timestamp - UPDATE_COLLATERAL_INTERVAL"," to ensure updates are reasonably current.",[266,654,656],{"id":655},"collateral-retrieval","Collateral Retrieval",[270,658,659,660,662,663,665],{},"Minters can retrieve excess collateral from their backing SPV, provided the retrieval does not compromise their ability to back their outstanding ",[280,661,286],{}," debt. This process is managed onchain through the ",[280,664,282],{}," and requires Validator oversight.",[341,667,668,699],{},[295,669,670,673,674,677,678,687,690,691,694,695,698],{},[346,671,672],{},"Propose Retrieval",": The Minter initiates a request to retrieve a specific amount of collateral by calling ",[280,675,676],{},"proposeRetrieval()",":",[368,679,681],{"className":370,"code":680,"language":372,"meta":373,"style":373},"function proposeRetrieval(uint256 collateral) external returns (uint48 retrievalId_);\n",[280,682,683],{"__ignoreMap":373},[377,684,685],{"class":379,"line":380},[377,686,680],{},[688,689],"br",{},"This creates a pending retrieval proposal with a unique, sequential ",[280,692,693],{},"retrievalId_",". The proposed retrieval amount is tracked in the ",[280,696,697],{},"_pendingCollateralRetrievals"," mapping and is immediately deducted from the Minter's effective collateral value for all ongoing calculations, ensuring the Minter remains adequately collateralized. The system prevents proposals that would lead to undercollateralization.",[295,700,701,704,705,707,708],{},[346,702,703],{},"Validator Inclusion & Resolution",": For a pending retrieval to be finalized, it must be explicitly included and approved by Validators in a subsequent ",[280,706,521],{}," transaction.",[292,709,710,717],{},[295,711,712,713,716],{},"When Validators sign off on a Minter's collateral update, their signature digest includes the list of ",[280,714,715],{},"retrievalIds"," they are approving for resolution.",[295,718,719,720,722,723,725,726,728],{},"During the ",[280,721,521],{}," call, the ",[280,724,282],{}," processes these approved ",[280,727,715],{},". The corresponding amounts are then considered formally retrieved, and their values are no longer deducted from the Minter's available collateral.",[270,730,731,732,734,735,707],{},"This multi-step process ensures that collateral can only be effectively retrieved with explicit, signed approval from Validators as part of a standard, verified collateral update, maintaining the integrity of ",[280,733,286],{},"'s backing. Multiple retrieval proposals can be resolved within a single ",[280,736,521],{},[266,738,740],{"id":739},"debt-interest-and-penalties-for-minters","Debt, Interest, and Penalties for Minters",[270,742,743,744,746,747,749],{},"Minters incur debt for the ",[280,745,286],{}," tokens they mint and are charged interest on this debt. The ",[280,748,282],{}," manages this system.",[331,751,753],{"id":752},"debt-and-interest","Debt and Interest",[292,755,756,765,774,787],{},[295,757,758,761,762,764],{},[346,759,760],{},"Debt Accrual",": When a Minter mints ",[280,763,286],{},", they incur an equivalent amount of debt.",[295,766,767,770,771,773],{},[346,768,769],{},"Continuous Indexing",": Minter debt, similar to ",[280,772,315],{}," earning balances, is tracked using a continuous indexing system. The debt is stored as a principal amount that grows over time as interest accrues.",[295,775,776,779,780,783,784,329],{},[346,777,778],{},"Interest Rate Model",": The interest rate charged to Minters (",[280,781,782],{},"MINTER_RATE_MODEL",") is determined by an external smart contract, the address of which is set by M0 Governance and stored in the ",[280,785,786],{},"TTGRegistrar",[295,788,789,793],{},[346,790,791],{},[280,792,466],{},": This term represents the current total value of an active Minter's obligations, including all accrued interest. It is calculated by applying the current minter index to their principal debt.",[331,795,797,798,800],{"id":796},"total-owed-m-accounting","Total Owed ",[280,799,286],{}," Accounting",[270,802,278,803,805],{},[280,804,282],{}," tracks various categories of Minter debt:",[292,807,808,816,824,835],{},[295,809,810,815],{},[346,811,812,813],{},"Active Owed ",[280,814,286],{},": The sum of interest-accruing debt from all active Minters.",[295,817,818,823],{},[346,819,820,821],{},"Inactive Owed ",[280,822,286],{},": The sum of fixed, non-interest-accruing debt from all deactivated Minters.",[295,825,826,830,831,426,833,329],{},[346,827,797,828],{},[280,829,286],{},": The aggregate of ",[280,832,466],{},[280,834,478],{},[295,836,837,842,843,846,847,849,850,854],{},[346,838,839,840],{},"Excess Owed ",[280,841,286],{},": The difference between ",[280,844,845],{},"totalOwedM"," (interest generated from Minters) and the total supply of ",[280,848,286],{}," (which grows at the earner rate). This excess, if positive, represents protocol revenue and is minted directly to the ",[851,852,853],"a",{"href":193},"DistributionVault"," (TTGVault) during index updates.",[331,856,858],{"id":857},"penalties","Penalties",[270,860,861],{},"The protocol imposes penalties on Minters for failing to adhere to specific operational requirements, ensuring system discipline:",[341,863,864,883],{},[295,865,866,616,869,871,872],{},[346,867,868],{},"Missed Collateral Updates Penalty",[280,870,588],{},", a penalty is applied.\n",[292,873,874,880],{},[295,875,876,877,329],{},"Calculation: ",[280,878,879],{},"PENALTY_RATE * principalOfActiveOwedM * missedIntervals",[295,881,882],{},"This penalty is charged once per missed interval.",[295,884,885,888,889,891,892,894,895],{},[346,886,887],{},"Undercollateralization Penalty",": If a Minter's ",[280,890,466],{}," exceeds the maximum allowed by their verified collateral and the ",[280,893,628],{},", they are penalized.\n",[292,896,897,902],{},[295,898,876,899,329],{},[280,900,901],{},"PENALTY_RATE * principalOfExcessOwedM * (timeSpan \u002F UPDATE_COLLATERAL_INTERVAL)",[295,903,904],{},"This penalty is proportional to the amount and duration of the undercollateralization.",[270,906,907],{},"Penalties are added to the Minter's debt.",[266,909,911],{"id":910},"minter-lifecycle-and-management","Minter Lifecycle and Management",[270,913,914,915,917,918,920],{},"Minters are permissioned entities that interact with the ",[280,916,282],{}," to issue and manage ",[280,919,286],{},". Their lifecycle within the protocol is characterized by several distinct statuses:",[341,922,923,929,958,974],{},[295,924,925,928],{},[346,926,927],{},"Approved",": Minters are initially whitelisted by the M0 Two-Token Governance (TTG) system. At this stage, they are recognized by the protocol but cannot yet perform minting operations.",[295,930,931,934,935,938,939,941,942,951,952,954,955,957],{},[346,932,933],{},"Active",": An approved Minter must explicitly activate their status by calling ",[280,936,937],{},"activateMinter()"," on the ",[280,940,282],{},".\n",[368,943,945],{"className":370,"code":944,"language":372,"meta":373,"style":373},"function activateMinter(address minter_) external;\n",[280,946,947],{"__ignoreMap":373},[377,948,949],{"class":379,"line":380},[377,950,944],{},"\nThis function can only be called by the Minter themselves and transitions them to an operational state, allowing them to propose collateral updates and mint ",[280,953,286],{},". The active status is stored locally within ",[280,956,282],{}," for gas efficiency.",[295,959,960,963,964,966,967,970,971,973],{},[346,961,962],{},"Frozen",": An active Minter can be temporarily restricted from minting ",[280,965,286],{}," by Validators (via ",[280,968,969],{},"freezeMinter()","). During this state, the Minter can still burn ",[280,972,286],{}," to reduce their debt and update their collateral but cannot propose new mints. The freeze duration is determined by governance.",[295,975,976,979,980,941,983,992,993],{},[346,977,978],{},"Deactivated",": A Minter can be deactivated if they are removed from the governance-approved list. Deactivation is a permanent state, initiated by a call to ",[280,981,982],{},"deactivateMinter()",[368,984,986],{"className":370,"code":985,"language":372,"meta":373,"style":373},"function deactivateMinter(address minter_) external returns (uint240 inactiveOwedM_);\n",[280,987,988],{"__ignoreMap":373},[377,989,990],{"class":379,"line":380},[377,991,985],{},"\nThis function can be called if the Minter is no longer approved by TTG. Upon deactivation:\n",[292,994,995,1001,1007,1012],{},[295,996,997,998,1000],{},"The Minter's outstanding debt, including accrued interest, is converted into a fixed ",[280,999,478],{}," amount which no longer accrues interest.",[295,1002,1003,1004,1006],{},"The Minter can no longer mint ",[280,1005,286],{}," or propose collateral retrievals.",[295,1008,1009,1010,329],{},"Their collateral remains to back their ",[280,1011,478],{},[295,1013,1014,1015,329],{},"A deactivated Minter cannot be reactivated. This permanence optimizes gas by eliminating further status checks against the ",[280,1016,786],{},[266,1018,1020],{"id":1019},"validator-roles-and-security-controls","Validator Roles and Security Controls",[270,1022,1023,1024,1026],{},"Validators are independent, trusted entities that form a critical security layer for the minting and burning processes within the ",[280,1025,282],{},". Their responsibilities and powers include:",[331,1028,1030],{"id":1029},"core-responsibilities","Core Responsibilities",[292,1032,1033,1044,1050],{},[295,1034,1035,1038,1039,1041,1042,329],{},[346,1036,1037],{},"Collateral Verification",": Validators verify Minters' offchain collateral and provide cryptographic signatures for ",[280,1040,521],{}," transactions. These signatures attest to the value and existence of the assets backing ",[280,1043,286],{},[295,1045,1046,1049],{},[346,1047,1048],{},"Timestamping",": Signatures from Validators must include a secure timestamp to prevent replay attacks and ensure the freshness of collateral data.",[295,1051,1052,1055],{},[346,1053,1054],{},"Enabling Offchain-Onchain Bridge",": Validators act as the crucial link ensuring the onchain representation of collateral accurately reflects the state of offchain assets.",[331,1057,1059],{"id":1058},"validator-signature-verification","Validator Signature Verification",[270,1061,1062],{},"The signature verification system includes several security features:",[292,1064,1065,1071,1077,1094,1100],{},[295,1066,1067,1070],{},[346,1068,1069],{},"Multi-signature Requirement",": Requires multiple validator signatures for collateral updates.",[295,1072,1073,1076],{},[346,1074,1075],{},"Ordered Validator Addresses",": Validator addresses must be provided in ascending order to prevent duplicates.",[295,1078,1079,1082,1083],{},[346,1080,1081],{},"Timestamp Validation",": Each signature includes a timestamp that must be:\n",[292,1084,1085,1088,1091],{},[295,1086,1087],{},"Newer than the last signature from that validator for that minter.",[295,1089,1090],{},"Not in the future.",[295,1092,1093],{},"Not zero.",[295,1095,1096,1099],{},[346,1097,1098],{},"Replay Protection",": The system tracks the last used timestamp for each validator-minter pair.",[295,1101,1102,1105],{},[346,1103,1104],{},"Signature Format",": Uses EIP-712 typed data signatures that are validator-specific.",[331,1107,1109],{"id":1108},"security-controls-emergency-powers","Security Controls & Emergency Powers",[270,1111,1112],{},"Validators are empowered with specific functions to intervene and protect the protocol:",[341,1114,1115,1133],{},[295,1116,1117,1120,1121,1130,1132],{},[346,1118,1119],{},"Cancel Mint Proposal",": If Validators deem a pending mint proposal to be suspicious, invalid, or potentially harmful to the protocol, they can cancel it before execution:",[368,1122,1124],{"className":370,"code":1123,"language":372,"meta":373,"style":373},"function cancelMint(address minter, uint256 mintId) external onlyApprovedValidator;\n",[280,1125,1126],{"__ignoreMap":373},[377,1127,1128],{"class":379,"line":380},[377,1129,1123],{},[688,1131],{},"This action deletes the mint proposal, preventing the Minter from executing it.",[295,1134,1135,1138,1139,1141,1142,1151,1153,1154,1157,1158,1160],{},[346,1136,1137],{},"Freeze Minter",": Validators can temporarily suspend a Minter's ability to mint new ",[280,1140,286],{}," tokens:",[368,1143,1145],{"className":370,"code":1144,"language":372,"meta":373,"style":373},"function freezeMinter(address minter) external onlyApprovedValidator returns (uint40 frozenUntil_);\n",[280,1146,1147],{"__ignoreMap":373},[377,1148,1149],{"class":379,"line":380},[377,1150,1144],{},[688,1152],{},"This \"freezes\" the Minter for a duration specified by the governance parameter ",[280,1155,1156],{},"MINTER_FREEZE_TIME",". A frozen Minter can still burn ",[280,1159,286],{}," and update collateral but cannot propose or execute new mints until the freeze period expires.",[270,1162,1163,1164,1166],{},"These controls allow Validators to act as a rapid response mechanism against potential threats or misbehavior related to ",[280,1165,286],{}," issuance.",[266,1168,1170],{"id":1169},"timing-constraints","Timing Constraints",[270,1172,1173],{},"The system enforces several timing-related constraints:",[292,1175,1176,1184,1193,1202],{},[295,1177,1178,1181,1182,329],{},[346,1179,1180],{},"Collateral Update Frequency",": Minters must update at least once per ",[280,1183,588],{},[295,1185,1186,1189,1190,1192],{},[346,1187,1188],{},"Mint Delay",": Proposals must wait ",[280,1191,391],{}," seconds before execution.",[295,1194,1195,1198,1199,1201],{},[346,1196,1197],{},"Mint TTL",": Proposals expire after ",[280,1200,404],{}," seconds.",[295,1203,1204,1207,1208],{},[346,1205,1206],{},"Earliest Collateral Update",": The timestamp for a new update must be greater than:\n",[292,1209,1210,1213,1216],{},[295,1211,1212],{},"The last update timestamp.",[295,1214,1215],{},"The latest proposed retrieval timestamp.",[295,1217,1218,329],{},[280,1219,651],{},[266,1221,1223],{"id":1222},"security-mechanisms","Security Mechanisms",[270,1225,1226],{},"The MinterGateway implements several safety features:",[292,1228,1229,1235,1240,1244,1250,1256],{},[295,1230,1231,1234],{},[346,1232,1233],{},"Mint Delay & TTL (Time-To-Live)",": Creates a time window for validators to review and potentially cancel mints.",[295,1236,1237,1239],{},[346,1238,624],{},": Enforces maximum mint-to-collateral ratios (set by governance).",[295,1241,1242,1070],{},[346,1243,1069],{},[295,1245,1246,1249],{},[346,1247,1248],{},"Strictly Ordered Validations",": Validator addresses must be provided in ascending order.",[295,1251,1252,1255],{},[346,1253,1254],{},"Timestamp Verification",": Prevents reuse of signatures and ensures freshness of collateral data.",[295,1257,1258,1261,1262,467],{},[346,1259,1260],{},"Excess Yield Distribution",": Any yield generated by minters beyond what's distributed to earners goes to the TTG\nVault (also called the ",[851,1263,853],{"href":193},[266,1265,1267],{"id":1266},"emergency-measures","Emergency Measures",[270,1269,1270],{},"For extreme circumstances, the protocol includes additional safeguards:",[331,1272,1274],{"id":1273},"mint-proposal-cancellation","Mint Proposal Cancellation",[270,1276,1277],{},"Validators can cancel suspicious mint proposals before they're executed, allowing them to quickly intervene if they\ndetect potentially harmful minting activity.",[368,1279,1281],{"className":370,"code":1280,"language":372,"meta":373,"style":373},"function cancelMint(address minter_, uint256 mintId_) external onlyApprovedValidator {\n    uint48 id_ = _mintProposals[minter_].id;\n    if (id_ != mintId_ || id_ == 0) revert InvalidMintProposal();\n    delete _mintProposals[minter_];\n    emit MintCanceled(id_, minter_, msg.sender);\n}\n",[280,1282,1283,1288,1293,1298,1303,1308],{"__ignoreMap":373},[377,1284,1285],{"class":379,"line":380},[377,1286,1287],{},"function cancelMint(address minter_, uint256 mintId_) external onlyApprovedValidator {\n",[377,1289,1290],{"class":379,"line":535},[377,1291,1292],{},"    uint48 id_ = _mintProposals[minter_].id;\n",[377,1294,1295],{"class":379,"line":541},[377,1296,1297],{},"    if (id_ != mintId_ || id_ == 0) revert InvalidMintProposal();\n",[377,1299,1300],{"class":379,"line":547},[377,1301,1302],{},"    delete _mintProposals[minter_];\n",[377,1304,1305],{"class":379,"line":553},[377,1306,1307],{},"    emit MintCanceled(id_, minter_, msg.sender);\n",[377,1309,1310],{"class":379,"line":559},[377,1311,1312],{},"}\n",[331,1314,1316],{"id":1315},"validator-freeze","Validator Freeze",[270,1318,1319],{},"Validators can freeze minters to stop them from minting tokens for a governance-defined period:",[368,1321,1323],{"className":370,"code":1322,"language":372,"meta":373,"style":373},"function freezeMinter(address minter_) external onlyApprovedValidator returns (uint40 frozenUntil_) {\n    unchecked {\n        _minterStates[minter_].frozenUntilTimestamp = frozenUntil_ = uint40(block.timestamp) + minterFreezeTime();\n    }\n    emit MinterFrozen(minter_, frozenUntil_);\n}\n",[280,1324,1325,1330,1335,1340,1345,1350],{"__ignoreMap":373},[377,1326,1327],{"class":379,"line":380},[377,1328,1329],{},"function freezeMinter(address minter_) external onlyApprovedValidator returns (uint40 frozenUntil_) {\n",[377,1331,1332],{"class":379,"line":535},[377,1333,1334],{},"    unchecked {\n",[377,1336,1337],{"class":379,"line":541},[377,1338,1339],{},"        _minterStates[minter_].frozenUntilTimestamp = frozenUntil_ = uint40(block.timestamp) + minterFreezeTime();\n",[377,1341,1342],{"class":379,"line":547},[377,1343,1344],{},"    }\n",[377,1346,1347],{"class":379,"line":553},[377,1348,1349],{},"    emit MinterFrozen(minter_, frozenUntil_);\n",[377,1351,1352],{"class":379,"line":559},[377,1353,1312],{},[331,1355,1357],{"id":1356},"minter-deactivation","Minter Deactivation",[270,1359,1360],{},"Governance can completely deactivate minters who have been removed from the approved list:",[368,1362,1364],{"className":370,"code":1363,"language":372,"meta":373,"style":373},"function deactivateMinter(address minter_) external onlyActiveMinter(minter_) returns (uint240 inactiveOwedM_) {\n    if (isMinterApproved(minter_)) revert StillApprovedMinter();\n    \u002F\u002F Implementation details for deactivation process\n}\n",[280,1365,1366,1371,1376,1381],{"__ignoreMap":373},[377,1367,1368],{"class":379,"line":380},[377,1369,1370],{},"function deactivateMinter(address minter_) external onlyActiveMinter(minter_) returns (uint240 inactiveOwedM_) {\n",[377,1372,1373],{"class":379,"line":535},[377,1374,1375],{},"    if (isMinterApproved(minter_)) revert StillApprovedMinter();\n",[377,1377,1378],{"class":379,"line":541},[377,1379,1380],{},"    \u002F\u002F Implementation details for deactivation process\n",[377,1382,1383],{"class":379,"line":547},[377,1384,1312],{},[270,1386,1387],{},"Once deactivated, a minter cannot be reactivated, providing a permanent resolution for problematic minters.",[331,1389,1391],{"id":1390},"open-redemption","Open Redemption",[270,1393,1394,1395,1397],{},"Anyone can burn ",[280,1396,286],{}," tokens to repay a deactivated minter's debt:",[368,1399,1401],{"className":370,"code":1400,"language":372,"meta":373,"style":373},"function _repayForDeactivatedMinter(address minter_, uint240 maxAmount_) internal returns (uint240 amount_) {\n    amount_ = UIntMath.min240(inactiveOwedMOf(minter_), maxAmount_);\n    unchecked {\n        _rawOwedM[minter_] -= amount_;\n        totalInactiveOwedM -= amount_;\n    }\n}\n",[280,1402,1403,1408,1413,1417,1422,1427,1431],{"__ignoreMap":373},[377,1404,1405],{"class":379,"line":380},[377,1406,1407],{},"function _repayForDeactivatedMinter(address minter_, uint240 maxAmount_) internal returns (uint240 amount_) {\n",[377,1409,1410],{"class":379,"line":535},[377,1411,1412],{},"    amount_ = UIntMath.min240(inactiveOwedMOf(minter_), maxAmount_);\n",[377,1414,1415],{"class":379,"line":541},[377,1416,1334],{},[377,1418,1419],{"class":379,"line":547},[377,1420,1421],{},"        _rawOwedM[minter_] -= amount_;\n",[377,1423,1424],{"class":379,"line":553},[377,1425,1426],{},"        totalInactiveOwedM -= amount_;\n",[377,1428,1429],{"class":379,"line":559},[377,1430,1344],{},[377,1432,1433],{"class":379,"line":565},[377,1434,1312],{},[270,1436,1437],{},"This creates an informal liquidation mechanism for deactivated minters.",[266,1439,1441,1442,1444],{"id":1440},"index-synchronization-with-m-token","Index Synchronization with ",[280,1443,286],{}," Token",[270,1446,278,1447,1449,1450,1452,1453,1455,1456,1458],{},[280,1448,282],{}," and the ",[280,1451,315],{}," contract both utilize a continuous indexing mechanism to track the accrual of interest -- for Minter debt in ",[280,1454,282],{}," and for earner balances in ",[280,1457,315],{},". It is crucial that these indices are synchronized.",[331,1460,1462],{"id":1461},"synchronization-mechanism","Synchronization Mechanism",[270,1464,278,1465,1467,1468,1470,1471,522],{},[280,1466,282],{}," ensures that whenever its own interest index for Minter obligations is updated, the ",[280,1469,315],{},"'s earning index is also updated simultaneously. This is achieved within the ",[280,1472,1473],{},"MinterGateway.updateIndex()",[368,1475,1477],{"className":370,"code":1476,"language":372,"meta":373,"style":373},"function updateIndex() public override(IContinuousIndexing, ContinuousIndexing) returns (uint128 index_) {\n    uint240 excessOwedM_ = excessOwedM();\n    if (excessOwedM_ > 0) IMToken(mToken).mint(ttgVault, excessOwedM_); \u002F\u002F Mint excess to TTG Vault\n\n    \u002F\u002F First, update the MinterGateway's own index and rate (for minter debt)\n    index_ = super.updateIndex();\n\n    \u002F\u002F Then, explicitly trigger an update of the MToken's index and rate (for earner yield)\n    IMToken(mToken).updateIndex();\n\n    \u002F\u002F Emit an event if this MinterGateway instance is also the MToken's MinterGateway\n    \u002F\u002F (This is relevant if MToken directly calls this contract for its own updates)\n    if (address(this) == IMToken(mToken).minterGateway()) {\n        emit MTokenIndexUpdated(IMToken(mToken).currentIndex(), IMToken(mToken).currentRate());\n    }\n}\n",[280,1478,1479,1484,1489,1494,1500,1505,1510,1514,1519,1525,1530,1536,1542,1548,1554,1559],{"__ignoreMap":373},[377,1480,1481],{"class":379,"line":380},[377,1482,1483],{},"function updateIndex() public override(IContinuousIndexing, ContinuousIndexing) returns (uint128 index_) {\n",[377,1485,1486],{"class":379,"line":535},[377,1487,1488],{},"    uint240 excessOwedM_ = excessOwedM();\n",[377,1490,1491],{"class":379,"line":541},[377,1492,1493],{},"    if (excessOwedM_ > 0) IMToken(mToken).mint(ttgVault, excessOwedM_); \u002F\u002F Mint excess to TTG Vault\n",[377,1495,1496],{"class":379,"line":547},[377,1497,1499],{"emptyLinePlaceholder":1498},true,"\n",[377,1501,1502],{"class":379,"line":553},[377,1503,1504],{},"    \u002F\u002F First, update the MinterGateway's own index and rate (for minter debt)\n",[377,1506,1507],{"class":379,"line":559},[377,1508,1509],{},"    index_ = super.updateIndex();\n",[377,1511,1512],{"class":379,"line":565},[377,1513,1499],{"emptyLinePlaceholder":1498},[377,1515,1516],{"class":379,"line":571},[377,1517,1518],{},"    \u002F\u002F Then, explicitly trigger an update of the MToken's index and rate (for earner yield)\n",[377,1520,1522],{"class":379,"line":1521},9,[377,1523,1524],{},"    IMToken(mToken).updateIndex();\n",[377,1526,1528],{"class":379,"line":1527},10,[377,1529,1499],{"emptyLinePlaceholder":1498},[377,1531,1533],{"class":379,"line":1532},11,[377,1534,1535],{},"    \u002F\u002F Emit an event if this MinterGateway instance is also the MToken's MinterGateway\n",[377,1537,1539],{"class":379,"line":1538},12,[377,1540,1541],{},"    \u002F\u002F (This is relevant if MToken directly calls this contract for its own updates)\n",[377,1543,1545],{"class":379,"line":1544},13,[377,1546,1547],{},"    if (address(this) == IMToken(mToken).minterGateway()) {\n",[377,1549,1551],{"class":379,"line":1550},14,[377,1552,1553],{},"        emit MTokenIndexUpdated(IMToken(mToken).currentIndex(), IMToken(mToken).currentRate());\n",[377,1555,1557],{"class":379,"line":1556},15,[377,1558,1344],{},[377,1560,1562],{"class":379,"line":1561},16,[377,1563,1312],{},[270,1565,1566],{},"This synchronized update ensures that the calculation of interest paid by Minters and yield distributed to Earners remains consistent and balanced across the protocol, reflecting the latest rates and system state.",[331,1568,1570],{"id":1569},"triggers-for-index-updates","Triggers for Index Updates",[270,1572,278,1573,1576,1577,1579,1580,1583],{},[280,1574,1575],{},"updateIndex()"," function in ",[280,1578,282],{}," (which in turn calls ",[280,1581,1582],{},"MToken.updateIndex()",") is invoked during several key operations, ensuring indices are frequently updated:",[292,1585,1586,1592,1600,1608,1613],{},[295,1587,1588,1589,329],{},"When a Minter updates their collateral via ",[280,1590,1591],{},"updateCollateral()",[295,1593,1594,1595,1597,1598,329],{},"When ",[280,1596,286],{}," tokens are minted via ",[280,1599,408],{},[295,1601,1594,1602,1604,1605,329],{},[280,1603,286],{}," tokens are burned via ",[280,1606,1607],{},"burnM()",[295,1609,1610,1611,329],{},"When a Minter is deactivated via ",[280,1612,982],{},[295,1614,1594,1615,1617],{},[280,1616,1473],{}," is explicitly called by an external party.",[270,1619,1620],{},"This frequent synchronization is vital for the accurate accounting of debts, yields, and the overall economic stability of the M0 Protocol.",[1622,1623,1624],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":373,"searchDepth":380,"depth":535,"links":1626},[1627,1628,1634,1639,1640,1646,1647,1652,1653,1654,1660],{"id":268,"depth":535,"text":166},{"id":319,"depth":535,"text":320,"children":1629},[1630,1632],{"id":333,"depth":541,"text":1631},"Minting $M",{"id":432,"depth":541,"text":1633},"Burning $M",{"id":486,"depth":535,"text":487,"children":1635},[1636,1637,1638],{"id":498,"depth":541,"text":499},{"id":507,"depth":541,"text":508},{"id":514,"depth":541,"text":515},{"id":655,"depth":535,"text":656},{"id":739,"depth":535,"text":740,"children":1641},[1642,1643,1645],{"id":752,"depth":541,"text":753},{"id":796,"depth":541,"text":1644},"Total Owed $M Accounting",{"id":857,"depth":541,"text":858},{"id":910,"depth":535,"text":911},{"id":1019,"depth":535,"text":1020,"children":1648},[1649,1650,1651],{"id":1029,"depth":541,"text":1030},{"id":1058,"depth":541,"text":1059},{"id":1108,"depth":541,"text":1109},{"id":1169,"depth":535,"text":1170},{"id":1222,"depth":535,"text":1223},{"id":1266,"depth":535,"text":1267,"children":1655},[1656,1657,1658,1659],{"id":1273,"depth":541,"text":1274},{"id":1315,"depth":541,"text":1316},{"id":1356,"depth":541,"text":1357},{"id":1390,"depth":541,"text":1391},{"id":1440,"depth":535,"text":1661,"children":1662},"Index Synchronization with $M Token",[1663,1664],{"id":1461,"depth":541,"text":1462},{"id":1569,"depth":541,"text":1570},"Complete documentation of the MinterGateway contract, the central hub for minting and burning, managing minter collateral, and tracking debt obligations.","md",null,{},{"title":216,"description":1665},"6YrA_h0UkhT3o8LO0KvHNE2nCeFDVNswuFYv59flpNE",[1672,1674],{"title":212,"path":213,"stem":214,"description":1673,"children":-1},"Low-level technical specification for the M token - function signatures, events, errors, and storage layout.",{"title":220,"path":221,"stem":222,"description":1675,"children":-1},"Technical deep dive into M0's unified cross-chain bridge and messaging system, featuring modular bridge adapters, token bridging, and protocol metadata propagation."]