[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"\u002Fbuild\u002Ftreasury-jmi-overview":260,"\u002Fbuild\u002Ftreasury-jmi-overview-surround":1540},[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":131,"body":262,"description":1533,"extension":1534,"links":1535,"meta":1536,"navigation":1537,"path":143,"seo":1538,"stem":144,"__hash__":1539},"docs\u002Fbuild\u002Ftreasury-jmi-overview.md",{"type":263,"value":264,"toc":1511},"minimark",[265,272,280,286,302,317,322,391,394,415,457,467,471,520,524,527,533,536,553,556,562,565,569,576,657,661,666,700,704,726,730,772,776,817,821,951,955,1078,1082,1270,1274,1425,1429,1449,1453,1501],[266,267,268],"note",{},[269,270,271],"p",{},"The JMI extension is currently available on EVM chains only (Ethereum, Base, Arbitrum, etc.). SVM support is planned for a future release.",[269,273,274,275,279],{},"The ",[276,277,278],"code",{},"JMIExtension"," (Just Mint It) is an enhanced Treasury Model implementation that accepts multiple collateral types while still directing 100% of rewards to a single recipient.",[269,281,282],{},[283,284,285],"strong",{},"When to Use JMI instead of standard MYieldToOne:",[287,288,289,293,296,299],"ul",{},[290,291,292],"li",{},"Projects requiring flexibility to accept multiple stablecoins as collateral types (USDC, USDT, DAI).",[290,294,295],{},"Protocols wanting a non-rebasing stablecoin backed by a diversified collateral pool.",[290,297,298],{},"Ecosystems that need to manage risk exposure to different stablecoin assets through configurable caps.",[290,300,301],{},"Treasury management scenarios where rewards are centralized but collateral sources are diversified.",[269,303,304,307,308],{},[283,305,306],{},"Source Code:"," ",[309,310,314],"a",{"href":311,"rel":312},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-extensions\u002Fblob\u002Fmain\u002Fsrc\u002Fprojects\u002Fjmi\u002FJMIExtension.sol",[313],"nofollow",[276,315,316],{},"JMIExtension.sol",[318,319,321],"h2",{"id":320},"key-differentiators-from-myieldtoone","Key Differentiators from MYieldToOne",[323,324,325,341],"table",{},[326,327,328],"thead",{},[329,330,331,335,338],"tr",{},[332,333,334],"th",{},"Feature",[332,336,337],{},"MYieldToOne (Standard)",[332,339,340],{},"JMIExtension (JMI)",[342,343,344,356,367,378],"tbody",{},[329,345,346,350,353],{},[347,348,349],"td",{},"Collateral",[347,351,352],{},"Single-collateral",[347,354,355],{},"Multi-collateral (liquid stablecoins such as USDC, USDT also supported)",[329,357,358,361,364],{},[347,359,360],{},"Asset Caps",[347,362,363],{},"N\u002FA",[347,365,366],{},"Configurable per asset",[329,368,369,372,375],{},[347,370,371],{},"Unwrap Logic",[347,373,374],{},"Always backed 1:1",[347,376,377],{},"Limited to base backing portion",[329,379,380,383,386],{},[347,381,382],{},"Additional Operations",[347,384,385],{},"None",[347,387,388],{},[276,389,390],{},"replaceAssetWithM",[318,392,162],{"id":393},"architecture-overview",[269,395,396,398,399,402,403,406,407,410,411,414],{},[276,397,278],{}," inherits from ",[276,400,401],{},"MYieldToOne",", which itself inherits from ",[276,404,405],{},"MExtension",", ",[276,408,409],{},"Freezable",", and ",[276,412,413],{},"Pausable",". This inheritance chain provides:",[287,416,417,425,433,441,449],{},[290,418,419,422,423],{},[283,420,421],{},"ERC-20 Token Logic"," via ",[276,424,405],{},[290,426,427,422,430,432],{},[283,428,429],{},"Rewards Distribution",[276,431,401],{}," (100% to single recipient)",[290,434,435,422,438,440],{},[283,436,437],{},"Compliance Controls",[276,439,409],{}," (address-level restrictions)",[290,442,443,422,446,448],{},[283,444,445],{},"Emergency Controls",[276,447,413],{}," (contract-wide halt)",[290,450,451,422,454,456],{},[283,452,453],{},"Multi-Collateral Logic",[276,455,278],{}," (asset caps, multiple collateral types)",[458,459,465],"pre",{"className":460,"code":462,"language":463,"meta":464},[461],"language-text","JMIExtension\n├── IJMIExtension (interface)\n├── JMIExtensionLayout (storage)\n└── MYieldToOne\n    ├── IMYieldToOne (interface)\n    ├── MYieldToOneStorageLayout (storage)\n    ├── MExtension (core ERC-20 + wrap\u002Funwrap)\n    ├── Freezable (address freezing)\n    └── Pausable (emergency stop)\n","text","",[276,466,462],{"__ignoreMap":464},[318,468,470],{"id":469},"how-it-works","How It Works",[472,473,474,480,486,492,506,512],"ol",{},[290,475,476,479],{},[283,477,478],{},"Multi-Collateral Wrapping:"," Users can wrap an approved stablecoin (USDC, DAI, etc.) through the SwapFacility. The contract tracks each asset's balance separately.",[290,481,482,485],{},[283,483,484],{},"Asset Caps:"," Each stablecoin collateral component has a maximum cap. This limits risk exposure to any single stablecoin.",[290,487,488,491],{},[283,489,490],{},"Rewards Accrual:"," Only the non-stablecoin collateral portion of the reserves earns rewards.",[290,493,494,497,498,501,502,505],{},[283,495,496],{},"Rewards Distribution:"," The ",[276,499,500],{},"claimYield()"," function mints new JMI tokens to the designated ",[276,503,504],{},"yieldRecipient",", equal to the rewards surplus.",[290,507,508,511],{},[283,509,510],{},"Selective Unwrapping:"," Users can only unwrap to the base asset. The maximum unwrap amount is limited to the non-stablecoin collateral portion of reserves (total supply minus stablecoin asset backing).",[290,513,514,497,517,519],{},[283,515,516],{},"Asset Replacement:",[276,518,390],{}," function allows swapping approved collateral for approved stablecoins held by the contract, enabling arbitrageurs to rebalance the backing.",[318,521,523],{"id":522},"backing-model","Backing Model",[269,525,526],{},"The total supply of JMI tokens is backed by two components:",[458,528,531],{"className":529,"code":530,"language":463,"meta":464},[461],"Total Supply = M Backing + Total Non-M Assets\n",[276,532,530],{"__ignoreMap":464},[269,534,535],{},"Where:",[287,537,538,547],{},[290,539,540,543,544],{},[283,541,542],{},"M Backing"," = ",[276,545,546],{},"totalSupply() - totalAssets()",[290,548,549,552],{},[283,550,551],{},"Total Non-M Assets"," = Sum of all approved stablecoin collateral (in extension decimals)",[269,554,555],{},"The claimable rewards are calculated as:",[458,557,560],{"className":558,"code":559,"language":463,"meta":464},[461],"Rewards = mBalanceOf(contract) - M Backing\n",[276,561,559],{"__ignoreMap":464},[269,563,564],{},"The JMI backing model assumes a 1:1 peg between all deposited assets. This means 1 USDC deposited equals 1 JMI token minted, and 1 DAI deposited equals 1 JMI token minted (accounting for decimal conversions).",[318,566,568],{"id":567},"roles-access-control","Roles (Access Control)",[269,570,571,572,575],{},"JMIExtension uses OpenZeppelin's ",[276,573,574],{},"AccessControl"," with these roles:",[323,577,578,588],{},[326,579,580],{},[329,581,582,585],{},[332,583,584],{},"Role",[332,586,587],{},"Permissions",[342,589,590,602,618,633,645],{},[329,591,592,599],{},[347,593,594],{},[283,595,596],{},[276,597,598],{},"DEFAULT_ADMIN_ROLE",[347,600,601],{},"Super-user. Can grant and revoke any role. Should be a secure multi-sig or governance contract.",[329,603,604,611],{},[347,605,606],{},[283,607,608],{},[276,609,610],{},"ASSET_CAP_MANAGER_ROLE",[347,612,613,614,617],{},"Manages risk by setting caps on each approved stablecoin collateral asset via ",[276,615,616],{},"setAssetCap()",".",[329,619,620,627],{},[347,621,622],{},[283,623,624],{},[276,625,626],{},"YIELD_RECIPIENT_MANAGER_ROLE",[347,628,629,630,617],{},"Controls where rewards are distributed via ",[276,631,632],{},"setYieldRecipient()",[329,634,635,642],{},[347,636,637],{},[283,638,639],{},[276,640,641],{},"FREEZE_MANAGER_ROLE",[347,643,644],{},"Can freeze\u002Funfreeze addresses from interacting with the token.",[329,646,647,654],{},[347,648,649],{},[283,650,651],{},[276,652,653],{},"PAUSER_ROLE",[347,655,656],{},"Can pause\u002Funpause the entire contract in emergencies.",[318,658,660],{"id":659},"core-functions","Core Functions",[662,663,665],"h3",{"id":664},"wrapping-functions","Wrapping Functions",[323,667,668,678],{},[326,669,670],{},[329,671,672,675],{},[332,673,674],{},"Function",[332,676,677],{},"Description",[342,679,680,690],{},[329,681,682,687],{},[347,683,684],{},[276,685,686],{},"wrap(asset, recipient, amount)",[347,688,689],{},"Mints JMI tokens by depositing an approved stablecoin collateral asset. Called via SwapFacility.",[329,691,692,697],{},[347,693,694],{},[276,695,696],{},"wrap(recipient, amount)",[347,698,699],{},"Mints JMI tokens by depositing approved collateral (inherited from MExtension). Called via SwapFacility.",[662,701,703],{"id":702},"unwrapping-functions","Unwrapping Functions",[323,705,706,714],{},[326,707,708],{},[329,709,710,712],{},[332,711,674],{},[332,713,677],{},[342,715,716],{},[329,717,718,723],{},[347,719,720],{},[276,721,722],{},"unwrap(recipient, amount)",[347,724,725],{},"Burns JMI tokens and sends approved collateral to the recipient.",[662,727,729],{"id":728},"asset-management-functions","Asset Management Functions",[323,731,732,743],{},[326,733,734],{},[329,735,736,738,741],{},[332,737,674],{},[332,739,740],{},"Access",[332,742,677],{},[342,744,745,759],{},[329,746,747,752,756],{},[347,748,749],{},[276,750,751],{},"setAssetCap(asset, cap)",[347,753,754],{},[276,755,610],{},[347,757,758],{},"Sets the maximum balance allowed for a collateral asset.",[329,760,761,766,769],{},[347,762,763],{},[276,764,765],{},"replaceAssetWithM(asset, recipient, amount)",[347,767,768],{},"SwapFacility only",[347,770,771],{},"Swaps approved collateral for approved stablecoins held by the contract.",[662,773,775],{"id":774},"rewards-functions-inherited","Rewards Functions (Inherited)",[323,777,778,786],{},[326,779,780],{},[329,781,782,784],{},[332,783,674],{},[332,785,677],{},[342,787,788,798,807],{},[329,789,790,795],{},[347,791,792],{},[276,793,794],{},"yield()",[347,796,797],{},"Returns the current claimable rewards amount.",[329,799,800,804],{},[347,801,802],{},[276,803,500],{},[347,805,806],{},"Claims rewards by minting new JMI tokens to the recipient.",[329,808,809,814],{},[347,810,811],{},[276,812,813],{},"setYieldRecipient(address)",[347,815,816],{},"Updates the rewards recipient address.",[662,818,820],{"id":819},"view-functions","View Functions",[323,822,823,834],{},[326,824,825],{},[329,826,827,829,832],{},[332,828,674],{},[332,830,831],{},"Returns",[332,833,677],{},[342,835,836,851,865,880,894,909,923,937],{},[329,837,838,843,848],{},[347,839,840],{},[276,841,842],{},"assetBalanceOf(asset)",[347,844,845],{},[276,846,847],{},"uint256",[347,849,850],{},"Tracked balance of a collateral asset",[329,852,853,858,862],{},[347,854,855],{},[276,856,857],{},"assetCap(asset)",[347,859,860],{},[276,861,847],{},[347,863,864],{},"Cap for a collateral asset (0 = not allowed)",[329,866,867,872,877],{},[347,868,869],{},[276,870,871],{},"assetDecimals(asset)",[347,873,874],{},[276,875,876],{},"uint8",[347,878,879],{},"Cached decimals for a collateral asset",[329,881,882,887,891],{},[347,883,884],{},[276,885,886],{},"totalAssets()",[347,888,889],{},[276,890,847],{},[347,892,893],{},"Total approved stablecoin backing (in extension decimals)",[329,895,896,901,906],{},[347,897,898],{},[276,899,900],{},"isAllowedAsset(asset)",[347,902,903],{},[276,904,905],{},"bool",[347,907,908],{},"True if asset is approved collateral or has non-zero cap",[329,910,911,916,920],{},[347,912,913],{},[276,914,915],{},"isAllowedToWrap(asset, amount)",[347,917,918],{},[276,919,905],{},[347,921,922],{},"True if wrap would succeed",[329,924,925,930,934],{},[347,926,927],{},[276,928,929],{},"isAllowedToUnwrap(amount)",[347,931,932],{},[276,933,905],{},[347,935,936],{},"True if unwrap would succeed",[329,938,939,944,948],{},[347,940,941],{},[276,942,943],{},"isAllowedToReplaceAssetWithM(asset, amount)",[347,945,946],{},[276,947,905],{},[347,949,950],{},"True if asset balance >= amount",[662,952,954],{"id":953},"freezing-pause-functions-inherited","Freezing & Pause Functions (Inherited)",[323,956,957,967],{},[326,958,959],{},[329,960,961,963,965],{},[332,962,674],{},[332,964,740],{},[332,966,677],{},[342,968,969,983,997,1011,1025,1038,1052,1066],{},[329,970,971,976,980],{},[347,972,973],{},[276,974,975],{},"freeze(account)",[347,977,978],{},[276,979,641],{},[347,981,982],{},"Freezes an address",[329,984,985,990,994],{},[347,986,987],{},[276,988,989],{},"unfreeze(account)",[347,991,992],{},[276,993,641],{},[347,995,996],{},"Unfreezes an address",[329,998,999,1004,1008],{},[347,1000,1001],{},[276,1002,1003],{},"freezeAccounts(accounts[])",[347,1005,1006],{},[276,1007,641],{},[347,1009,1010],{},"Batch freeze",[329,1012,1013,1018,1022],{},[347,1014,1015],{},[276,1016,1017],{},"unfreezeAccounts(accounts[])",[347,1019,1020],{},[276,1021,641],{},[347,1023,1024],{},"Batch unfreeze",[329,1026,1027,1032,1035],{},[347,1028,1029],{},[276,1030,1031],{},"isFrozen(account)",[347,1033,1034],{},"Public",[347,1036,1037],{},"Check if address is frozen",[329,1039,1040,1045,1049],{},[347,1041,1042],{},[276,1043,1044],{},"pause()",[347,1046,1047],{},[276,1048,653],{},[347,1050,1051],{},"Pauses the contract",[329,1053,1054,1059,1063],{},[347,1055,1056],{},[276,1057,1058],{},"unpause()",[347,1060,1061],{},[276,1062,653],{},[347,1064,1065],{},"Unpauses the contract",[329,1067,1068,1073,1075],{},[347,1069,1070],{},[276,1071,1072],{},"paused()",[347,1074,1034],{},[347,1076,1077],{},"Check if contract is paused",[318,1079,1081],{"id":1080},"events","Events",[323,1083,1084,1096],{},[326,1085,1086],{},[329,1087,1088,1091,1094],{},[332,1089,1090],{},"Event",[332,1092,1093],{},"Parameters",[332,1095,677],{},[342,1097,1098,1116,1139,1154,1168,1188,1208,1226,1242,1256],{},[329,1099,1100,1105,1113],{},[347,1101,1102],{},[276,1103,1104],{},"AssetCapSet",[347,1106,1107,406,1110],{},[276,1108,1109],{},"asset",[276,1111,1112],{},"cap",[347,1114,1115],{},"Asset cap was updated",[329,1117,1118,1123,1136],{},[347,1119,1120],{},[276,1121,1122],{},"AssetReplacedWithM",[347,1124,1125,406,1127,406,1130,406,1133],{},[276,1126,1109],{},[276,1128,1129],{},"assetAmount",[276,1131,1132],{},"recipient",[276,1134,1135],{},"mAmount",[347,1137,1138],{},"Collateral swapped",[329,1140,1141,1146,1151],{},[347,1142,1143],{},[276,1144,1145],{},"YieldClaimed",[347,1147,1148],{},[276,1149,1150],{},"amount",[347,1152,1153],{},"Rewards claimed",[329,1155,1156,1161,1165],{},[347,1157,1158],{},[276,1159,1160],{},"YieldRecipientSet",[347,1162,1163],{},[276,1164,504],{},[347,1166,1167],{},"Rewards recipient changed",[329,1169,1170,1175,1185],{},[347,1171,1172],{},[276,1173,1174],{},"Transfer",[347,1176,1177,406,1180,406,1183],{},[276,1178,1179],{},"from",[276,1181,1182],{},"to",[276,1184,1150],{},[347,1186,1187],{},"ERC-20 transfer",[329,1189,1190,1195,1205],{},[347,1191,1192],{},[276,1193,1194],{},"Approval",[347,1196,1197,406,1200,406,1203],{},[276,1198,1199],{},"owner",[276,1201,1202],{},"spender",[276,1204,1150],{},[347,1206,1207],{},"ERC-20 approval",[329,1209,1210,1215,1223],{},[347,1211,1212],{},[276,1213,1214],{},"Frozen",[347,1216,1217,406,1220],{},[276,1218,1219],{},"account",[276,1221,1222],{},"timestamp",[347,1224,1225],{},"Account was frozen",[329,1227,1228,1233,1239],{},[347,1229,1230],{},[276,1231,1232],{},"Unfrozen",[347,1234,1235,406,1237],{},[276,1236,1219],{},[276,1238,1222],{},[347,1240,1241],{},"Account was unfrozen",[329,1243,1244,1249,1253],{},[347,1245,1246],{},[276,1247,1248],{},"Paused",[347,1250,1251],{},[276,1252,1219],{},[347,1254,1255],{},"Contract was paused",[329,1257,1258,1263,1267],{},[347,1259,1260],{},[276,1261,1262],{},"Unpaused",[347,1264,1265],{},[276,1266,1219],{},[347,1268,1269],{},"Contract was unpaused",[318,1271,1273],{"id":1272},"errors","Errors",[323,1275,1276,1285],{},[326,1277,1278],{},[329,1279,1280,1283],{},[332,1281,1282],{},"Error",[332,1284,677],{},[342,1286,1287,1305,1315,1325,1335,1345,1355,1365,1375,1385,1395,1405,1415],{},[329,1288,1289,1294],{},[347,1290,1291],{},[276,1292,1293],{},"InvalidAsset(asset)",[347,1295,1296,1297,1300,1301,1304],{},"Asset is ",[276,1298,1299],{},"address(0)"," or ",[276,1302,1303],{},"$M"," (for multi-asset functions)",[329,1306,1307,1312],{},[347,1308,1309],{},[276,1310,1311],{},"AssetCapReached(asset)",[347,1313,1314],{},"Deposit would exceed asset cap",[329,1316,1317,1322],{},[347,1318,1319],{},[276,1320,1321],{},"InsufficientAssetBacking(asset, required, available)",[347,1323,1324],{},"Not enough collateral for replacement",[329,1326,1327,1332],{},[347,1328,1329],{},[276,1330,1331],{},"InsufficientAssetReceived(asset, expected, received)",[347,1333,1334],{},"Fee-on-transfer token detected",[329,1336,1337,1342],{},[347,1338,1339],{},[276,1340,1341],{},"InsufficientMBacking(required, available)",[347,1343,1344],{},"Not enough approved collateral backing for unwrap",[329,1346,1347,1352],{},[347,1348,1349],{},[276,1350,1351],{},"ZeroAssetCapManager()",[347,1353,1354],{},"Asset cap manager is zero address",[329,1356,1357,1362],{},[347,1358,1359],{},[276,1360,1361],{},"ZeroAdmin()",[347,1363,1364],{},"Admin is zero address",[329,1366,1367,1372],{},[347,1368,1369],{},[276,1370,1371],{},"ZeroYieldRecipient()",[347,1373,1374],{},"Rewards recipient is zero address",[329,1376,1377,1382],{},[347,1378,1379],{},[276,1380,1381],{},"ZeroYieldRecipientManager()",[347,1383,1384],{},"Rewards recipient manager is zero address",[329,1386,1387,1392],{},[347,1388,1389],{},[276,1390,1391],{},"ZeroFreezeManager()",[347,1393,1394],{},"Freeze manager is zero address",[329,1396,1397,1402],{},[347,1398,1399],{},[276,1400,1401],{},"ZeroPauser()",[347,1403,1404],{},"Pauser is zero address",[329,1406,1407,1412],{},[347,1408,1409],{},[276,1410,1411],{},"AccountFrozen(account)",[347,1413,1414],{},"Operation blocked due to frozen account",[329,1416,1417,1422],{},[347,1418,1419],{},[276,1420,1421],{},"EnforcedPause()",[347,1423,1424],{},"Operation blocked due to paused state",[318,1426,1428],{"id":1427},"important-constraints","Important Constraints",[287,1430,1431,1437,1443],{},[290,1432,1433,1436],{},[283,1434,1435],{},"Fee-on-Transfer Tokens:"," Not supported. The contract reverts if fewer tokens are received than expected.",[290,1438,1439,1442],{},[283,1440,1441],{},"Only 1:1 Pegged Stablecoins:"," The model assumes all accepted collateral is pegged 1:1 to the dollar.",[290,1444,1445,1448],{},[283,1446,1447],{},"Unwrap Limited to Approved Collateral Backing:"," Users cannot unwrap more JMI than the contract's approved collateral backing supports.",[318,1450,1452],{"id":1451},"security-considerations","Security Considerations",[472,1454,1455,1461,1473,1479,1487,1495],{},[290,1456,1457,1460],{},[283,1458,1459],{},"Fee-on-Transfer Protection:"," The contract explicitly checks received amounts match expected amounts, reverting on discrepancies.",[290,1462,1463,497,1466,1468,1469,1472],{},[283,1464,1465],{},"Inflation Attack Prevention:",[276,1467,390],{}," function uses the tracked ",[276,1470,1471],{},"assetBalanceOf"," rather than actual token balance, preventing manipulation via direct token transfers.",[290,1474,1475,1478],{},[283,1476,1477],{},"Access Control:"," All sensitive functions are protected by role-based access control.",[290,1480,1481,497,1484,1486],{},[283,1482,1483],{},"Emergency Controls:",[276,1485,653],{}," can halt operations in case of security incidents.",[290,1488,1489,497,1492,1494],{},[283,1490,1491],{},"Frozen Accounts:",[276,1493,641],{}," can block compromised addresses from interacting with the token.",[290,1496,1497,1500],{},[283,1498,1499],{},"Upgradability:"," The contract uses OpenZeppelin's transparent proxy pattern, allowing for future upgrades with proper governance.",[269,1502,1503,307,1506],{},[283,1504,1505],{},"Ready to build?",[309,1507,1508],{"href":140},[283,1509,1510],{},"Follow the JMI implementation guide",{"title":464,"searchDepth":1512,"depth":1513,"links":1514},1,2,[1515,1516,1517,1518,1519,1520,1529,1530,1531,1532],{"id":320,"depth":1513,"text":321},{"id":393,"depth":1513,"text":162},{"id":469,"depth":1513,"text":470},{"id":522,"depth":1513,"text":523},{"id":567,"depth":1513,"text":568},{"id":659,"depth":1513,"text":660,"children":1521},[1522,1524,1525,1526,1527,1528],{"id":664,"depth":1523,"text":665},3,{"id":702,"depth":1523,"text":703},{"id":728,"depth":1523,"text":729},{"id":774,"depth":1523,"text":775},{"id":819,"depth":1523,"text":820},{"id":953,"depth":1523,"text":954},{"id":1080,"depth":1513,"text":1081},{"id":1272,"depth":1513,"text":1273},{"id":1427,"depth":1513,"text":1428},{"id":1451,"depth":1513,"text":1452},"Deep dive into the JMI (\"Just Mint It\") extension template which accepts multiple collateral types while directing 100% of rewards to a single recipient.","md",null,{},true,{"title":131,"description":1533},"0WDTaBIRCmM9S9VimqHTs4TT3w9KWTZSaQuV5UvBEVM",[1541,1543],{"title":139,"path":140,"stem":141,"description":1542,"children":-1},"Step-by-step instructions for deploying a JMI (Just Mint It) stablecoin extension with multi-collateral support and centralized rewards distribution.",{"title":131,"path":146,"stem":147,"description":1544,"children":-1},"Deep dive into the Treasury Model template where all accrued rewards are captured by the use case owner."]