[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"\u002Fprotocol\u002Fstellar":282,"\u002Fprotocol\u002Fstellar-surround":2230},[4,22,114,166,183,191,251],{"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,64],{"title":28,"path":29,"stem":30},"API Reference","\u002Fapi-reference\u002Fintroduction","api-reference\u002Fintroduction",{"title":32,"path":33,"stem":34,"children":35,"page":21},"Orchestration","\u002Fapi-reference\u002Forchestration","api-reference\u002Forchestration",[36,40,44,48,52,56,60],{"title":37,"path":38,"stem":39},"POST \u002Forders\u002F{originChain}\u002F{orderId}\u002Fcancel","\u002Fapi-reference\u002Forchestration\u002Fcancel-order","api-reference\u002Forchestration\u002Fcancel-order",{"title":41,"path":42,"stem":43},"GET \u002Forders\u002F{originChain}\u002F{orderId}","\u002Fapi-reference\u002Forchestration\u002Forder-status","api-reference\u002Forchestration\u002Forder-status",{"title":45,"path":46,"stem":47},"GET \u002Forders","\u002Fapi-reference\u002Forchestration\u002Forders","api-reference\u002Forchestration\u002Forders",{"title":49,"path":50,"stem":51},"Orchestration API","\u002Fapi-reference\u002Forchestration\u002Foverview","api-reference\u002Forchestration\u002Foverview",{"title":53,"path":54,"stem":55},"POST \u002Fquote","\u002Fapi-reference\u002Forchestration\u002Fquote","api-reference\u002Forchestration\u002Fquote",{"title":57,"path":58,"stem":59},"GET \u002Fsupported-assets","\u002Fapi-reference\u002Forchestration\u002Fsupported-assets","api-reference\u002Forchestration\u002Fsupported-assets",{"title":61,"path":62,"stem":63},"TypeScript Type Generation","\u002Fapi-reference\u002Forchestration\u002Ftype-generation","api-reference\u002Forchestration\u002Ftype-generation",{"title":65,"path":66,"stem":67,"children":68,"page":21},"Protocol","\u002Fapi-reference\u002Fprotocol","api-reference\u002Fprotocol",[69,73,77],{"title":70,"path":71,"stem":72},"Changelog","\u002Fapi-reference\u002Fprotocol\u002Fchangelog","api-reference\u002Fprotocol\u002Fchangelog",{"title":74,"path":75,"stem":76},"Protocol API","\u002Fapi-reference\u002Fprotocol\u002Foverview","api-reference\u002Fprotocol\u002Foverview",{"title":78,"path":79,"stem":80,"children":81,"page":21},"Recipes","\u002Fapi-reference\u002Fprotocol\u002Frecipes","api-reference\u002Fprotocol\u002Frecipes",[82,86,90,94,98,102,106,110],{"title":83,"path":84,"stem":85},"Collateral Composition","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fcollateral-composition","api-reference\u002Fprotocol\u002Frecipes\u002Fcollateral-composition",{"title":87,"path":88,"stem":89},"Daily Yields","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fdaily-yields","api-reference\u002Fprotocol\u002Frecipes\u002Fdaily-yields",{"title":91,"path":92,"stem":93},"Earner Rate History","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fearner-rate-history","api-reference\u002Fprotocol\u002Frecipes\u002Fearner-rate-history",{"title":95,"path":96,"stem":97},"Minter Daily Expenses","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fminter-daily-expenses","api-reference\u002Fprotocol\u002Frecipes\u002Fminter-daily-expenses",{"title":99,"path":100,"stem":101},"Network Supply","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fnetwork-supply","api-reference\u002Fprotocol\u002Frecipes\u002Fnetwork-supply",{"title":103,"path":104,"stem":105},"Protocol Configuration","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Fprotocol-config","api-reference\u002Fprotocol\u002Frecipes\u002Fprotocol-config",{"title":107,"path":108,"stem":109},"Token Holders","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Ftoken-holders","api-reference\u002Fprotocol\u002Frecipes\u002Ftoken-holders",{"title":111,"path":112,"stem":113},"Token Overview","\u002Fapi-reference\u002Fprotocol\u002Frecipes\u002Ftoken-overview","api-reference\u002Fprotocol\u002Frecipes\u002Ftoken-overview",{"title":115,"path":116,"stem":117,"children":118,"page":21},"Build","\u002Fbuild","build",[119,123,127,131,135,139,143,147,151,154,157,160,163],{"title":120,"path":121,"stem":122},"Liquidity","\u002Fbuild\u002Faccessing-liquidity","build\u002Faccessing-liquidity",{"title":124,"path":125,"stem":126},"Integrating with the M0 Portals","\u002Fbuild\u002Fbridging-developer","build\u002Fbridging-developer",{"title":128,"path":129,"stem":130},"Bridging M And wM Tokens","\u002Fbuild\u002Fbridging-user","build\u002Fbridging-user",{"title":132,"path":133,"stem":134},"Design templates","\u002Fbuild\u002Fchoosing-your-model","build\u002Fchoosing-your-model",{"title":136,"path":137,"stem":138},"Cross chain","\u002Fbuild\u002Fcross-chain","build\u002Fcross-chain",{"title":140,"path":141,"stem":142},"Overview","\u002Fbuild\u002Foverview","build\u002Foverview",{"title":144,"path":145,"stem":146},"Design customization","\u002Fbuild\u002Fstablecoin-features","build\u002Fstablecoin-features",{"title":148,"path":149,"stem":150},"Implementation guide","\u002Fbuild\u002Fsvm-noyield-guide","build\u002Fsvm-noyield-guide",{"title":140,"path":152,"stem":153},"\u002Fbuild\u002Fsvm-noyield-guide-overview","build\u002Fsvm-noyield-guide-overview",{"title":148,"path":155,"stem":156},"\u002Fbuild\u002Ftreasury-guide","build\u002Ftreasury-guide",{"title":148,"path":158,"stem":159},"\u002Fbuild\u002Ftreasury-jmi-guide","build\u002Ftreasury-jmi-guide",{"title":140,"path":161,"stem":162},"\u002Fbuild\u002Ftreasury-jmi-overview","build\u002Ftreasury-jmi-overview",{"title":140,"path":164,"stem":165},"\u002Fbuild\u002Ftreasury-model","build\u002Ftreasury-model",{"title":167,"path":168,"stem":169,"children":170,"page":21},"Get Started","\u002Fget-started","get-started",[171,175,179],{"title":172,"path":173,"stem":174},"Architecture overview","\u002Fget-started\u002Fhow-it-works","get-started\u002Fhow-it-works",{"title":176,"path":177,"stem":178},"About M0","\u002Fget-started\u002Foverview","get-started\u002Foverview",{"title":180,"path":181,"stem":182},"Platform mechanics","\u002Fget-started\u002Fprotocol-mechanics","get-started\u002Fprotocol-mechanics",{"title":184,"path":185,"stem":186,"children":187,"page":21},"Issuers","\u002Fissuers","issuers",[188],{"title":140,"path":189,"stem":190},"\u002Fissuers\u002Foverview","issuers\u002Foverview",{"title":65,"path":192,"stem":193,"children":194,"page":21},"\u002Fprotocol","protocol",[195,199,203,207,211,215,219,223,227,231,235,239,243,247],{"title":196,"path":197,"stem":198},"Distribution Vault","\u002Fprotocol\u002Fdistribution-vault","protocol\u002Fdistribution-vault",{"title":200,"path":201,"stem":202},"M0 Extensions","\u002Fprotocol\u002Fextensions","protocol\u002Fextensions",{"title":204,"path":205,"stem":206},"Limit Order Protocol","\u002Fprotocol\u002Flimit-order-protocol","protocol\u002Flimit-order-protocol",{"title":208,"path":209,"stem":210},"M0 Portals","\u002Fprotocol\u002Fm-portals","protocol\u002Fm-portals",{"title":212,"path":213,"stem":214},"M Token","\u002Fprotocol\u002Fm-token","protocol\u002Fm-token",{"title":216,"path":217,"stem":218},"M Token Specification","\u002Fprotocol\u002Fm-token-spec","protocol\u002Fm-token-spec",{"title":220,"path":221,"stem":222},"Minting & Burning (MinterGateway)","\u002Fprotocol\u002Fminting-burning","protocol\u002Fminting-burning",{"title":224,"path":225,"stem":226},"Portal V2","\u002Fprotocol\u002Fportal-v2","protocol\u002Fportal-v2",{"title":228,"path":229,"stem":230},"Rate Models & Yield","\u002Fprotocol\u002Frate-models","protocol\u002Frate-models",{"title":232,"path":233,"stem":234},"Roles","\u002Fprotocol\u002Froles","protocol\u002Froles",{"title":236,"path":237,"stem":238},"M0 On Solana","\u002Fprotocol\u002Fsolana","protocol\u002Fsolana",{"title":240,"path":241,"stem":242},"MGUSD on Stellar","\u002Fprotocol\u002Fstellar","protocol\u002Fstellar",{"title":244,"path":245,"stem":246},"Wrapped M (wM)","\u002Fprotocol\u002Fwrapped-m","protocol\u002Fwrapped-m",{"title":248,"path":249,"stem":250},"Wrapped M Specification","\u002Fprotocol\u002Fwrapped-m-spec","protocol\u002Fwrapped-m-spec",{"title":252,"path":253,"stem":254,"children":255,"page":21},"Resources","\u002Fresources","resources",[256,274,278],{"title":257,"path":258,"stem":259,"children":260},"Deployments","\u002Fresources\u002Faddresses","resources\u002Faddresses\u002Findex",[261,262,266,270],{"title":257,"path":258,"stem":259},{"title":263,"path":264,"stem":265},"M0 Platform Deployments","\u002Fresources\u002Faddresses\u002Fm0-platform","resources\u002Faddresses\u002Fm0-platform",{"title":267,"path":268,"stem":269},"MGUSD Deployments","\u002Fresources\u002Faddresses\u002Fmgusd-platform","resources\u002Faddresses\u002Fmgusd-platform",{"title":271,"path":272,"stem":273},"PYUSDx Platform Deployments","\u002Fresources\u002Faddresses\u002Fpyusdx-platform","resources\u002Faddresses\u002Fpyusdx-platform",{"title":275,"path":276,"stem":277},"Audits","\u002Fresources\u002Faudits","resources\u002Faudits",{"title":279,"path":280,"stem":281},"Glossary","\u002Fresources\u002Fglossary","resources\u002Fglossary",{"id":283,"title":240,"body":284,"description":2221,"draft":21,"extension":2222,"links":2223,"meta":2224,"navigation":2225,"path":241,"seo":2226,"stem":242,"__hash__":2229},"docs\u002Fprotocol\u002Fstellar.md",{"type":285,"value":286,"toc":2179},"minimark",[287,296,299,302,307,310,359,365,370,458,460,464,468,496,500,524,528,545,549,586,590,611,613,616,756,792,810,812,816,822,826,1000,1004,1060,1064,1092,1096,1138,1142,1162,1237,1241,1290,1294,1348,1352,1367,1369,1373,1377,1380,1390,1424,1428,1481,1494,1498,1517,1537,1539,1543,1558,1565,1569,1579,1599,1601,1605,1609,1631,1635,1638,1683,1697,1699,1703,1710,2111,2113,2117,2126,2128,2132,2157,2159,2163],[288,289,290,291,295],"p",{},"MGUSD is an M0-powered Stellar Asset Contract (SAC) stablecoin. It is minted and burned via a ",[292,293,294],"strong",{},"Soroban smart contract"," (the \"Minter Gateway\"). The SAC holds balances and handles standard SEP-41 transfers; the minter gateway is the sole authority for supply changes, yield accrual, and compliance controls.",[288,297,298],{},"This document is for developers and integrators who want to understand how MGUSD is minted, distributed, redeemed, and how yield accrues. It assumes familiarity with Stellar's account model, trustlines, and the Stellar Asset Contract.",[300,301],"hr",{},[303,304,306],"h2",{"id":305},"architecture-core-components","Architecture & Core Components",[288,308,309],{},"MGUSD is a two-layer system:",[311,312,313,326],"table",{},[314,315,316],"thead",{},[317,318,319,323],"tr",{},[320,321,322],"th",{},"Component",[320,324,325],{},"Description",[327,328,329,340],"tbody",{},[317,330,331,337],{},[332,333,334],"td",{},[292,335,336],{},"Minter Gateway (Soroban)",[332,338,339],{},"The issuance control panel. Holds all roles, the yield index, and the supply accumulators. Every mint, burn, yield claim, rate change, and compliance action goes through it.",[317,341,342,347],{},[332,343,344],{},[292,345,346],{},"Stellar Asset Contract (SAC)",[332,348,349,350,354,355,358],{},"The stablecoin token. Holds balances, enforces authorization (",[351,352,353],"code",{},"AUTH_REQUIRED","), and exposes the standard SEP-41 ",[351,356,357],{},"transfer()",". The Minter Gateway is the SAC admin and drives it via cross-contract calls.",[288,360,361,362,364],{},"The Minter Gateway never exposes a ",[351,363,357],{}," of its own — holders move tokens using the SAC's standard SEP-41 interface directly. The gateway's job is to be the single, authoritative gateway for everything that changes the supply or compliance state.",[366,367,369],"h3",{"id":368},"actors","Actors",[311,371,372,382],{},[314,373,374],{},[317,375,376,379],{},[320,377,378],{},"Actor",[320,380,381],{},"Responsibility",[327,383,384,417,431,445],{},[317,385,386,391],{},[332,387,388],{},[292,389,390],{},"Bridge",[332,392,393,394,397,398,397,401,404,405,408,409,412,413,416],{},"The primary operator — holds ",[292,395,396],{},"Admin",", ",[292,399,400],{},"Minter",[292,402,403],{},"Yield Recipient Manager",", and ",[292,406,407],{},"Forced Transfer Manager",", and acts as a ",[292,410,411],{},"block \u002F unblock operator"," and a ",[292,414,415],{},"pauser",".",[317,418,419,424],{},[332,420,421],{},[292,422,423],{},"MoneyGram",[332,425,426,427,430],{},"The ",[292,428,429],{},"Yield Recipient"," (receives claimed yield) and the off-chain on\u002Foff-ramp for end users.",[317,432,433,438],{},[332,434,435],{},[292,436,437],{},"M0",[332,439,440,441,444],{},"Co-holds the ",[292,442,443],{},"Pauser"," role.",[317,446,447,452],{},[332,448,449],{},[292,450,451],{},"Predicate",[332,453,454,455,457],{},"Compliance partner — a ",[292,456,411],{}," for onchain screening.",[300,459],{},[303,461,463],{"id":462},"lifecycle-flows","Lifecycle Flows",[366,465,467],{"id":466},"_1-minting-bridge-treasury","1. Minting (Bridge → Treasury)",[469,470,471,475,482,493],"ol",{},[472,473,474],"li",{},"MoneyGram receives fiat from an end user and notifies the Bridge.",[472,476,477,478,481],{},"Bridge calls ",[351,479,480],{},"mint(caller, treasury_address, amount)"," on the Minter Gateway.",[472,483,484,485,488,489,492],{},"The gateway finalizes pending yield, increases ",[351,486,487],{},"total_principal"," and ",[351,490,491],{},"total_supply",", then mints SAC tokens to the treasury address.",[472,494,495],{},"The treasury now holds MGUSD stablecoin.",[366,497,499],{"id":498},"_2-user-distribution-treasury-end-user","2. User Distribution (Treasury → End User)",[469,501,502,513,518,521],{},[472,503,504,505,508,509,512],{},"An unblock operator whitelists accounts — individually via ",[351,506,507],{},"unblock_user",", or in batch via ",[351,510,511],{},"batch_unblock_users"," (up to 40 per call).",[472,514,515,516,416],{},"The treasury transfers tokens to the user via the SAC's standard SEP-41 ",[351,517,357],{},[472,519,520],{},"Whitelisted (unblocked) accounts can freely transfer among themselves.",[472,522,523],{},"Non-whitelisted (blocked) accounts cannot send or receive tokens.",[366,525,527],{"id":526},"_3-redemption-end-user-moneygram-bridge","3. Redemption (End User → MoneyGram → Bridge)",[469,529,530,533,539,542],{},[472,531,532],{},"The end user initiates redemption through MoneyGram.",[472,534,477,535,538],{},[351,536,537],{},"burn(caller, user_address, amount)"," — removing tokens at the SAC layer via clawback.",[472,540,541],{},"The Minter Gateway finalizes pending yield and decreases both accumulators.",[472,543,544],{},"MoneyGram sends fiat to the end user off-chain.",[366,546,548],{"id":547},"_4-yield-claiming","4. Yield Claiming",[469,550,551,560,566,573],{},[472,552,477,553,556,557,559],{},[351,554,555],{},"set_interest_rate(caller, rate_bps)"," to set the current interest rate (this is a ",[292,558,400],{}," permission, not Admin).",[472,561,562,563,565],{},"Yield accrues continuously on ",[351,564,487],{}," using the exponential index.",[472,567,568,569,572],{},"The Yield Recipient Manager (Bridge) calls ",[351,570,571],{},"claim_yield(caller)"," to mint accrued yield as new SAC tokens to the Yield Recipient (MoneyGram).",[472,574,575,576,578,579,582,583,585],{},"Claimed yield increases ",[351,577,491],{}," but ",[292,580,581],{},"not"," ",[351,584,487],{}," — it does not compound.",[366,587,589],{"id":588},"_5-forced-transfer-compliance-action","5. Forced Transfer (Compliance Action)",[469,591,592,595,602,605,608],{},[472,593,594],{},"The Forced Transfer Manager identifies a need to move tokens between accounts.",[472,596,597,598,601],{},"It invokes ",[351,599,600],{},"force_transfer(caller, from, to, amount)"," — no authorization from the source account is required.",[472,603,604],{},"The Minter Gateway claws back tokens from the source and mints them to the destination at the SAC layer.",[472,606,607],{},"Accumulators are unchanged — this is a balance redistribution, not a supply change.",[472,609,610],{},"Works even if the source account is blocked.",[300,612],{},[303,614,232],{"id":615},"roles",[311,617,618,631],{},[314,619,620],{},[317,621,622,625,628],{},[320,623,624],{},"Role",[320,626,627],{},"Permissions",[320,629,630],{},"Held by",[327,632,633,644,663,679,692,705,724,739],{},[317,634,635,639,642],{},[332,636,637],{},[292,638,396],{},[332,640,641],{},"Role administration only (see below)",[332,643,390],{},[317,645,646,650,661],{},[332,647,648],{},[292,649,400],{},[332,651,652,397,655,397,658],{},[351,653,654],{},"mint",[351,656,657],{},"burn",[351,659,660],{},"set_interest_rate",[332,662,390],{},[317,664,665,669,677],{},[332,666,667],{},[292,668,403],{},[332,670,671,397,674],{},[351,672,673],{},"set_yield_recipient",[351,675,676],{},"claim_yield",[332,678,390],{},[317,680,681,685,690],{},[332,682,683],{},[292,684,429],{},[332,686,687,688],{},"Passive — receives tokens minted by ",[351,689,676],{},[332,691,423],{},[317,693,694,698,703],{},[332,695,696],{},[292,697,407],{},[332,699,700],{},[351,701,702],{},"force_transfer",[332,704,390],{},[317,706,707,713,721],{},[332,708,709,712],{},[292,710,711],{},"Block operator"," (membership)",[332,714,715,397,718],{},[351,716,717],{},"block_user",[351,719,720],{},"batch_block_users",[332,722,723],{},"Bridge, Predicate",[317,725,726,731,737],{},[332,727,728,712],{},[292,729,730],{},"Unblock operator",[332,732,733,397,735],{},[351,734,507],{},[351,736,511],{},[332,738,723],{},[317,740,741,745,753],{},[332,742,743,712],{},[292,744,443],{},[332,746,747,397,750],{},[351,748,749],{},"pause",[351,751,752],{},"unpause",[332,754,755],{},"M0, Bridge",[757,758,759],"note",{},[288,760,761,764,765,397,768,397,771,397,774,777,778,397,781,404,784,787,788,791],{},[292,762,763],{},"Admin is not a super-role."," Admin's powers are limited to role administration: ",[351,766,767],{},"set_admin",[351,769,770],{},"set_minter",[351,772,773],{},"set_yield_recipient_manager",[351,775,776],{},"set_forced_transfer_manager",", the block \u002F unblock \u002F pauser membership management functions, ",[351,779,780],{},"reconcile_burn",[351,782,783],{},"transfer_sac_admin",[351,785,786],{},"upgrade",". Admin ",[292,789,790],{},"cannot"," mint, burn, set the rate, block users, force-transfer, claim yield, or pause without first granting itself the relevant role. There is no implicit emergency fallback — operational procedures must ensure the dedicated role-signers remain reachable.",[288,793,794,795,798,799,802,803,397,805,404,807,809],{},"Every role-gated function calls ",[351,796,797],{},"require_auth()"," on its ",[351,800,801],{},"caller"," argument and verifies the caller equals the designated role holder — no implicit trust and no admin override. All roles are single-address except ",[292,804,711],{},[292,806,730],{},[292,808,443],{},", each of which is a membership set that Admin grants and revokes.",[300,811],{},[303,813,815],{"id":814},"contract-interface","Contract Interface",[817,818,819],"blockquote",{},[288,820,821],{},"Each role can only call its own functions. Admin is not a super-role and cannot call non-admin functions without first granting itself the relevant role.",[366,823,825],{"id":824},"admin-exclusive-functions","Admin-exclusive functions",[311,827,828,840],{},[314,829,830],{},[317,831,832,835,838],{},[320,833,834],{},"Function",[320,836,837],{},"Signature",[320,839,325],{},[327,841,842,856,870,884,898,921,940,958,972,986],{},[317,843,844,848,853],{},[332,845,846],{},[351,847,767],{},[332,849,850],{},[351,851,852],{},"(new_admin: Address)",[332,854,855],{},"Transfer the admin role to a new address",[317,857,858,862,867],{},[332,859,860],{},[351,861,770],{},[332,863,864],{},[351,865,866],{},"(new_minter: Address)",[332,868,869],{},"Set a new minter address",[317,871,872,876,881],{},[332,873,874],{},[351,875,773],{},[332,877,878],{},[351,879,880],{},"(new_yrm: Address)",[332,882,883],{},"Set a new yield recipient manager",[317,885,886,890,895],{},[332,887,888],{},[351,889,776],{},[332,891,892],{},[351,893,894],{},"(new_ftm: Address)",[332,896,897],{},"Set a new forced transfer manager",[317,899,900,909,914],{},[332,901,902,905,906],{},[351,903,904],{},"add_block_operator"," \u002F ",[351,907,908],{},"remove_block_operator",[332,910,911],{},[351,912,913],{},"(addr: Address)",[332,915,916,917,920],{},"Grant \u002F revoke ",[292,918,919],{},"block"," permission (membership set; idempotent)",[317,922,923,931,935],{},[332,924,925,905,928],{},[351,926,927],{},"add_unblock_operator",[351,929,930],{},"remove_unblock_operator",[332,932,933],{},[351,934,913],{},[332,936,916,937,920],{},[292,938,939],{},"unblock",[317,941,942,950,954],{},[332,943,944,905,947],{},[351,945,946],{},"add_pauser",[351,948,949],{},"remove_pauser",[332,951,952],{},[351,953,913],{},[332,955,916,956,920],{},[292,957,749],{},[317,959,960,964,969],{},[332,961,962],{},[351,963,780],{},[332,965,966],{},[351,967,968],{},"(amount: i128)",[332,970,971],{},"Decrease both accumulators to reconcile tokens destroyed outside the contract",[317,973,974,978,983],{},[332,975,976],{},[351,977,783],{},[332,979,980],{},[351,981,982],{},"(new_sac_admin: Address)",[332,984,985],{},"Transfer SAC admin role from the Minter Gateway to another address",[317,987,988,992,997],{},[332,989,990],{},[351,991,786],{},[332,993,994],{},[351,995,996],{},"(new_wasm_hash: BytesN\u003C32>)",[332,998,999],{},"Upgrade the contract WASM to a new version",[366,1001,1003],{"id":1002},"minter-functions","Minter functions",[311,1005,1006,1016],{},[314,1007,1008],{},[317,1009,1010,1012,1014],{},[320,1011,834],{},[320,1013,837],{},[320,1015,325],{},[327,1017,1018,1032,1046],{},[317,1019,1020,1024,1029],{},[332,1021,1022],{},[351,1023,654],{},[332,1025,1026],{},[351,1027,1028],{},"(caller: Address, to: Address, amount: i128)",[332,1030,1031],{},"Mint SAC tokens and increase both accumulators",[317,1033,1034,1038,1043],{},[332,1035,1036],{},[351,1037,657],{},[332,1039,1040],{},[351,1041,1042],{},"(caller: Address, from: Address, amount: i128)",[332,1044,1045],{},"Remove SAC tokens (clawback) and decrease both accumulators",[317,1047,1048,1052,1057],{},[332,1049,1050],{},[351,1051,660],{},[332,1053,1054],{},[351,1055,1056],{},"(caller: Address, rate_bps: u32)",[332,1058,1059],{},"Set the interest rate in basis points (max 5000 = 50%)",[366,1061,1063],{"id":1062},"forced-transfer-manager-functions","Forced Transfer Manager functions",[311,1065,1066,1076],{},[314,1067,1068],{},[317,1069,1070,1072,1074],{},[320,1071,834],{},[320,1073,837],{},[320,1075,325],{},[327,1077,1078],{},[317,1079,1080,1084,1089],{},[332,1081,1082],{},[351,1083,702],{},[332,1085,1086],{},[351,1087,1088],{},"(caller: Address, from: Address, to: Address, amount: i128)",[332,1090,1091],{},"Force-move SAC tokens between accounts (clawback + mint)",[366,1093,1095],{"id":1094},"yield-recipient-manager-functions","Yield Recipient Manager functions",[311,1097,1098,1108],{},[314,1099,1100],{},[317,1101,1102,1104,1106],{},[320,1103,834],{},[320,1105,837],{},[320,1107,325],{},[327,1109,1110,1124],{},[317,1111,1112,1116,1121],{},[332,1113,1114],{},[351,1115,673],{},[332,1117,1118],{},[351,1119,1120],{},"(caller: Address, new_yr: Address)",[332,1122,1123],{},"Set the address that receives claimed yield",[317,1125,1126,1130,1135],{},[332,1127,1128],{},[351,1129,676],{},[332,1131,1132],{},[351,1133,1134],{},"(caller: Address) -> i128",[332,1136,1137],{},"Claim accrued yield; mints new SAC tokens to the yield recipient",[366,1139,1141],{"id":1140},"block-unblock-allowlist-functions","Block \u002F unblock (allowlist) functions",[288,1143,1144,905,1146,1148,1149,1152,1153,905,1155,1157,1158,1161],{},[351,1145,717],{},[351,1147,720],{}," require a ",[292,1150,1151],{},"block operator","; ",[351,1154,507],{},[351,1156,511],{}," require an ",[292,1159,1160],{},"unblock operator",". Backed by the SAC allowlist.",[311,1163,1164,1174],{},[314,1165,1166],{},[317,1167,1168,1170,1172],{},[320,1169,834],{},[320,1171,837],{},[320,1173,325],{},[327,1175,1176,1194,1210,1224],{},[317,1177,1178,1182,1187],{},[332,1179,1180],{},[351,1181,717],{},[332,1183,1184],{},[351,1185,1186],{},"(user: Address, operator: Address)",[332,1188,1189,1190,1193],{},"Block a user on the SAC (",[351,1191,1192],{},"set_authorized(false)",")",[317,1195,1196,1200,1204],{},[332,1197,1198],{},[351,1199,507],{},[332,1201,1202],{},[351,1203,1186],{},[332,1205,1206,1207,1193],{},"Unblock a user on the SAC (",[351,1208,1209],{},"set_authorized(true)",[317,1211,1212,1216,1221],{},[332,1213,1214],{},[351,1215,720],{},[332,1217,1218],{},[351,1219,1220],{},"(users: Vec\u003CAddress>, operator: Address)",[332,1222,1223],{},"Block up to 40 users in a single transaction",[317,1225,1226,1230,1234],{},[332,1227,1228],{},[351,1229,511],{},[332,1231,1232],{},[351,1233,1220],{},[332,1235,1236],{},"Unblock up to 40 users in a single transaction",[366,1238,1240],{"id":1239},"pauser-functions","Pauser functions",[311,1242,1243,1253],{},[314,1244,1245],{},[317,1246,1247,1249,1251],{},[320,1248,834],{},[320,1250,837],{},[320,1252,325],{},[327,1254,1255,1277],{},[317,1256,1257,1261,1266],{},[332,1258,1259],{},[351,1260,749],{},[332,1262,1263],{},[351,1264,1265],{},"(caller: Address)",[332,1267,1268,1269,397,1271,397,1273,397,1275],{},"Pause the contract — blocks ",[351,1270,654],{},[351,1272,657],{},[351,1274,676],{},[351,1276,660],{},[317,1278,1279,1283,1287],{},[332,1280,1281],{},[351,1282,752],{},[332,1284,1285],{},[351,1286,1265],{},[332,1288,1289],{},"Unpause the contract — resumes all blocked operations",[366,1291,1293],{"id":1292},"view-functions","View functions",[288,1295,1296,397,1299,397,1302,397,1305,397,1308,397,1311,397,1314,397,1317,397,1320,397,1323,397,1326,397,1329,397,1332,397,1335,397,1337,397,1339,397,1342,404,1345,416],{},[351,1297,1298],{},"admin",[351,1300,1301],{},"minter",[351,1303,1304],{},"yield_recipient_manager",[351,1306,1307],{},"yield_recipient",[351,1309,1310],{},"forced_transfer_manager",[351,1312,1313],{},"is_block_operator",[351,1315,1316],{},"is_unblock_operator",[351,1318,1319],{},"is_pauser",[351,1321,1322],{},"sac_token",[351,1324,1325],{},"interest_rate",[351,1327,1328],{},"current_index",[351,1330,1331],{},"latest_index",[351,1333,1334],{},"accrued_yield",[351,1336,487],{},[351,1338,491],{},[351,1340,1341],{},"blocked(account)",[351,1343,1344],{},"balance(id)",[351,1346,1347],{},"paused",[366,1349,1351],{"id":1350},"initialization","Initialization",[288,1353,1354,1355,1358,1359,1362,1363,1366],{},"The contract is initialized via ",[351,1356,1357],{},"__constructor"," during deployment. It takes the SAC address plus eight role addresses (admin, minter, yield recipient manager, yield recipient, forced transfer manager, and one seed address each for the block operator, unblock operator, and pauser membership sets). The same address may be reused across arguments when one key should hold multiple permissions. The yield index starts at ",[351,1360,1361],{},"1.0"," (",[351,1364,1365],{},"INDEX_SCALE",") on first use.",[300,1368],{},[303,1370,1372],{"id":1371},"yield-mechanics","Yield Mechanics",[366,1374,1376],{"id":1375},"continuous-index-model","Continuous index model",[288,1378,1379],{},"Yield accrues continuously using an exponential index:",[1381,1382,1387],"pre",{"className":1383,"code":1385,"language":1386},[1384],"language-text","currentIndex = latestIndex × e^(rate × elapsed \u002F SECONDS_PER_YEAR)\n","text",[351,1388,1385],{"__ignoreMap":1389},"",[288,1391,1392,1393,1396,1397,1399,1400,1403,1404,1407,1408,1411,1412,1415,1416,1419,1420,1423],{},"Where ",[351,1394,1395],{},"latestIndex"," is the last stored index (initialized to ",[351,1398,1361],{},", scaled as ",[351,1401,1402],{},"1e12","), ",[351,1405,1406],{},"rate"," is the annual rate converted from basis points, ",[351,1409,1410],{},"elapsed"," is seconds since the last update, and ",[351,1413,1414],{},"SECONDS_PER_YEAR"," is ",[351,1417,1418],{},"31,536,000",". The ",[351,1421,1422],{},"e^x"," term uses a 4th-order Taylor series, accurate for all realistic rates.",[366,1425,1427],{"id":1426},"two-accumulators","Two accumulators",[311,1429,1430,1443],{},[314,1431,1432],{},[317,1433,1434,1437,1440],{},[320,1435,1436],{},"Accumulator",[320,1438,1439],{},"Tracks",[320,1441,1442],{},"Modified by",[327,1444,1445,1462],{},[317,1446,1447,1451,1454],{},[332,1448,1449],{},[351,1450,487],{},[332,1452,1453],{},"Yield-earning base (mints − burns)",[332,1455,1456,397,1458,397,1460],{},[351,1457,654],{},[351,1459,657],{},[351,1461,780],{},[317,1463,1464,1468,1471],{},[332,1465,1466],{},[351,1467,491],{},[332,1469,1470],{},"All outstanding tokens (principal + claimed yield)",[332,1472,1473,397,1475,397,1477,397,1479],{},[351,1474,654],{},[351,1476,657],{},[351,1478,780],{},[351,1480,676],{},[288,1482,1483,1484,1486,1487,1490,1491,1493],{},"Only ",[351,1485,487],{}," earns yield. The accrued amount is ",[351,1488,1489],{},"total_principal × (newIndex − oldIndex) \u002F INDEX_SCALE",", accumulated in ",[351,1492,1334],{}," on every index update.",[366,1495,1497],{"id":1496},"non-compounding","Non-compounding",[288,1499,1500,1501,1504,1505,1507,1508,1510,1511,1415,1513,1516],{},"When ",[351,1502,1503],{},"claim_yield()"," is called, pending yield is finalized, ",[351,1506,1334],{}," is captured and reset to zero, ",[351,1509,491],{}," increases by the claimed amount, and new SAC tokens are minted to the yield recipient. ",[351,1512,487],{},[292,1514,1515],{},"unchanged"," — claimed yield does not earn more yield.",[757,1518,1519],{},[288,1520,1521,1522,1525,1526,397,1528,397,1530,397,1532,397,1534,1536],{},"The index is updated ",[292,1523,1524],{},"before"," every state-changing operation (",[351,1527,654],{},[351,1529,657],{},[351,1531,780],{},[351,1533,676],{},[351,1535,660],{},"). This guarantees yield is finalized at the correct principal and rate before any change takes effect.",[300,1538],{},[303,1540,1542],{"id":1541},"transfers-the-issuer-burn-problem","Transfers & the Issuer Burn Problem",[288,1544,1545,1546,1548,1549,1551,1552,1554,1555,1557],{},"Holders move MGUSD using the SAC's standard SEP-41 ",[351,1547,357],{}," — both sender and receiver must be authorized (unblocked) for a transfer to succeed. Transfers happen entirely at the SAC layer and do ",[292,1550,581],{}," change ",[351,1553,487],{}," or ",[351,1556,491],{},"; they are balance redistributions, not mints or burns.",[288,1559,1560,1561,1564],{},"On classic Stellar, sending tokens to the ",[292,1562,1563],{},"issuer address"," burns them automatically. If MGUSD is sent to the issuer, tokens are destroyed at the SAC layer but the Minter Gateway's accumulators are never updated — so yield would keep accruing on phantom principal.",[366,1566,1568],{"id":1567},"mitigation-auth_required-whitelist","Mitigation: AUTH_REQUIRED + whitelist",[288,1570,1571,1572,1574,1575,1578],{},"The SAC is configured with ",[351,1573,353],{},", so all accounts start unauthorized (blocked) by default. Accounts can only transact after an unblock operator calls ",[351,1576,1577],{},"unblock_user()",", which limits who can move tokens at all.",[1580,1581,1582],"warning",{},[288,1583,1584,1585,1590,1591,1594,1595,1598],{},"The issuer account is ",[292,1586,1587,1588],{},"exempt from ",[351,1589,353],{}," at the Stellar protocol level. Authorized users ",[292,1592,1593],{},"can"," still send tokens directly to the issuer, destroying them without updating the accumulators. The whitelist reduces accidental issuer burns but does not eliminate them. If it happens, Admin calls ",[351,1596,1597],{},"reconcile_burn(amount)"," to decrease both accumulators and bring the Minter Gateway's bookkeeping back in line with the actual circulating supply.",[300,1600],{},[303,1602,1604],{"id":1603},"compliance-safety","Compliance & Safety",[366,1606,1608],{"id":1607},"block-unblock","Block \u002F unblock",[288,1610,1611,1612,1614,1615,1617,1618,488,1620,1622,1623,1625,1626,905,1628,1630],{},"The SAC operates in ",[351,1613,353],{}," mode — accounts are blocked by default. ",[351,1616,507],{}," maps to SAC ",[351,1619,1209],{},[351,1621,717],{}," to ",[351,1624,1192],{},". Only a block operator can block, and only an unblock operator can unblock. Batch operations (",[351,1627,720],{},[351,1629,511],{},") accept up to 40 users per call, are atomic (any failure reverts the whole transaction), and emit one event per user for indexer compatibility.",[366,1632,1634],{"id":1633},"pausable","Pausable",[288,1636,1637],{},"The Minter Gateway implements a pause mechanism. When paused, the following revert immediately:",[311,1639,1640,1649],{},[314,1641,1642],{},[317,1643,1644,1647],{},[320,1645,1646],{},"Blocked function",[320,1648,624],{},[327,1650,1651,1659,1667,1675],{},[317,1652,1653,1657],{},[332,1654,1655],{},[351,1656,654],{},[332,1658,400],{},[317,1660,1661,1665],{},[332,1662,1663],{},[351,1664,657],{},[332,1666,400],{},[317,1668,1669,1673],{},[332,1670,1671],{},[351,1672,660],{},[332,1674,400],{},[317,1676,1677,1681],{},[332,1678,1679],{},[351,1680,676],{},[332,1682,403],{},[288,1684,1685,1686,397,1688,1690,1691,1693,1694,1696],{},"Compliance operations (",[351,1687,717],{},[351,1689,507],{},", their batch variants, and ",[351,1692,702],{},") and all view functions remain fully accessible while paused, so regulatory actions can still be executed. ",[351,1695,780],{}," is also intentionally callable while paused — issuer-burn destruction happens outside Minter Gateway control and continues during a pause, so reconciliation must remain available to prevent unbounded accumulator divergence.",[300,1698],{},[303,1700,1702],{"id":1701},"events","Events",[288,1704,1705,1706,1709],{},"Event names are the snake_case form of the underlying contract event struct. Topic fields are marked ",[292,1707,1708],{},"(topic)","; the rest are payload data.",[311,1711,1712,1725],{},[314,1713,1714],{},[317,1715,1716,1719,1722],{},[320,1717,1718],{},"Event",[320,1720,1721],{},"Emitted by",[320,1723,1724],{},"Fields",[327,1726,1727,1748,1767,1786,1805,1824,1847,1869,1891,1907,1933,1956,1975,1995,2009,2031,2052,2070,2090],{},[317,1728,1729,1734,1738],{},[332,1730,1731],{},[351,1732,1733],{},"admin_set",[332,1735,1736],{},[351,1737,767],{},[332,1739,1740,582,1743,397,1745],{},[351,1741,1742],{},"old",[292,1744,1708],{},[351,1746,1747],{},"new",[317,1749,1750,1755,1759],{},[332,1751,1752],{},[351,1753,1754],{},"minter_set",[332,1756,1757],{},[351,1758,770],{},[332,1760,1761,582,1763,397,1765],{},[351,1762,1742],{},[292,1764,1708],{},[351,1766,1747],{},[317,1768,1769,1774,1778],{},[332,1770,1771],{},[351,1772,1773],{},"yield_recipient_manager_set",[332,1775,1776],{},[351,1777,773],{},[332,1779,1780,582,1782,397,1784],{},[351,1781,1742],{},[292,1783,1708],{},[351,1785,1747],{},[317,1787,1788,1793,1797],{},[332,1789,1790],{},[351,1791,1792],{},"yield_recipient_set",[332,1794,1795],{},[351,1796,673],{},[332,1798,1799,582,1801,397,1803],{},[351,1800,1742],{},[292,1802,1708],{},[351,1804,1747],{},[317,1806,1807,1812,1816],{},[332,1808,1809],{},[351,1810,1811],{},"forced_transfer_manager_set",[332,1813,1814],{},[351,1815,776],{},[332,1817,1818,582,1820,397,1822],{},[351,1819,1742],{},[292,1821,1708],{},[351,1823,1747],{},[317,1825,1826,1834,1840],{},[332,1827,1828,905,1831],{},[351,1829,1830],{},"block_operator_added",[351,1832,1833],{},"block_operator_removed",[332,1835,1836,905,1838],{},[351,1837,904],{},[351,1839,908],{},[332,1841,1842,582,1845],{},[351,1843,1844],{},"addr",[292,1846,1708],{},[317,1848,1849,1857,1863],{},[332,1850,1851,905,1854],{},[351,1852,1853],{},"unblock_operator_added",[351,1855,1856],{},"unblock_operator_removed",[332,1858,1859,905,1861],{},[351,1860,927],{},[351,1862,930],{},[332,1864,1865,582,1867],{},[351,1866,1844],{},[292,1868,1708],{},[317,1870,1871,1879,1885],{},[332,1872,1873,905,1876],{},[351,1874,1875],{},"pauser_added",[351,1877,1878],{},"pauser_removed",[332,1880,1881,905,1883],{},[351,1882,946],{},[351,1884,949],{},[332,1886,1887,582,1889],{},[351,1888,1844],{},[292,1890,1708],{},[317,1892,1893,1898,1902],{},[332,1894,1895],{},[351,1896,1897],{},"interest_rate_set",[332,1899,1900],{},[351,1901,660],{},[332,1903,1904],{},[351,1905,1906],{},"rate_bps",[317,1908,1909,1913,1917],{},[332,1910,1911],{},[351,1912,654],{},[332,1914,1915],{},[351,1916,654],{},[332,1918,1919,582,1922,397,1924,397,1927,397,1930],{},[351,1920,1921],{},"to",[292,1923,1708],{},[351,1925,1926],{},"amount",[351,1928,1929],{},"new_total_principal",[351,1931,1932],{},"new_total_supply",[317,1934,1935,1939,1943],{},[332,1936,1937],{},[351,1938,657],{},[332,1940,1941],{},[351,1942,657],{},[332,1944,1945,582,1948,397,1950,397,1952,397,1954],{},[351,1946,1947],{},"from",[292,1949,1708],{},[351,1951,1926],{},[351,1953,1929],{},[351,1955,1932],{},[317,1957,1958,1963,1967],{},[332,1959,1960],{},[351,1961,1962],{},"reconcile",[332,1964,1965],{},[351,1966,780],{},[332,1968,1969,397,1971,397,1973],{},[351,1970,1926],{},[351,1972,1929],{},[351,1974,1932],{},[317,1976,1977,1982,1986],{},[332,1978,1979],{},[351,1980,1981],{},"yield_claimed",[332,1983,1984],{},[351,1985,676],{},[332,1987,1988,582,1991,397,1993],{},[351,1989,1990],{},"recipient",[292,1992,1708],{},[351,1994,1926],{},[317,1996,1997,2002,2005],{},[332,1998,1999],{},[351,2000,2001],{},"update_index",[332,2003,2004],{},"every supply\u002Frate mutation",[332,2006,2007],{},[351,2008,1331],{},[317,2010,2011,2015,2019],{},[332,2012,2013],{},[351,2014,702],{},[332,2016,2017],{},[351,2018,702],{},[332,2020,2021,582,2023,397,2025,582,2027,397,2029],{},[351,2022,1947],{},[292,2024,1708],{},[351,2026,1921],{},[292,2028,1708],{},[351,2030,1926],{},[317,2032,2033,2038,2042],{},[332,2034,2035],{},[351,2036,2037],{},"upgraded",[332,2039,2040],{},[351,2041,786],{},[332,2043,2044,582,2047,397,2049],{},[351,2045,2046],{},"by",[292,2048,1708],{},[351,2050,2051],{},"new_wasm_hash",[317,2053,2054,2059,2063],{},[332,2055,2056],{},[351,2057,2058],{},"sac_admin_transferred",[332,2060,2061],{},[351,2062,783],{},[332,2064,2065,582,2068],{},[351,2066,2067],{},"new_sac_admin",[292,2069,1708],{},[317,2071,2072,2080,2083],{},[332,2073,2074,905,2077],{},[351,2075,2076],{},"user_blocked",[351,2078,2079],{},"user_unblocked",[332,2081,2082],{},"block \u002F unblock functions",[332,2084,2085,582,2088],{},[351,2086,2087],{},"user",[292,2089,1708],{},[317,2091,2092,2099,2105],{},[332,2093,2094,905,2096],{},[351,2095,1347],{},[351,2097,2098],{},"unpaused",[332,2100,2101,905,2103],{},[351,2102,749],{},[351,2104,752],{},[332,2106,2107],{},[2108,2109,2110],"em",{},"(no fields)",[300,2112],{},[303,2114,2116],{"id":2115},"onchain-addresses","Onchain Addresses",[288,2118,2119,2120,416],{},"The MGUSD Minter Gateway and SAC addresses for Stellar Mainnet and Testnet can be found on the ",[2121,2122,2123],"a",{"href":268},[292,2124,2125],{},"MGUSD Deployments page",[300,2127],{},[303,2129,2131],{"id":2130},"source-code-audits","Source Code & Audits",[2133,2134,2135,2146],"ul",{},[472,2136,2137,582,2140],{},[292,2138,2139],{},"Minter Gateway contract & deployment tooling:",[2121,2141,2145],{"href":2142,"rel":2143},"https:\u002F\u002Fgithub.com\u002Fm0-platform\u002Fmgusd-minter-gateway",[2144],"nofollow","m0-platform\u002Fmgusd-minter-gateway",[472,2147,2148,2151,2152,416],{},[292,2149,2150],{},"Audits:"," Security audit reports can be found on the ",[2121,2153,2154],{"href":276},[292,2155,2156],{},"Audits resource page",[300,2158],{},[303,2160,2162],{"id":2161},"next-steps","Next Steps",[2133,2164,2165,2171],{},[472,2166,2167,2170],{},[292,2168,2169],{},"Integrate MGUSD:"," Use the SAC's standard SEP-41 interface to hold and transfer MGUSD once your account is whitelisted.",[472,2172,2173,2176,2177,416],{},[292,2174,2175],{},"Look up addresses:"," Find the Minter Gateway and SAC contract addresses on the ",[2121,2178,2125],{"href":268},{"title":1389,"searchDepth":2180,"depth":2181,"links":2182},1,2,[2183,2187,2194,2195,2205,2210,2213,2217,2218,2219,2220],{"id":305,"depth":2181,"text":306,"children":2184},[2185],{"id":368,"depth":2186,"text":369},3,{"id":462,"depth":2181,"text":463,"children":2188},[2189,2190,2191,2192,2193],{"id":466,"depth":2186,"text":467},{"id":498,"depth":2186,"text":499},{"id":526,"depth":2186,"text":527},{"id":547,"depth":2186,"text":548},{"id":588,"depth":2186,"text":589},{"id":615,"depth":2181,"text":232},{"id":814,"depth":2181,"text":815,"children":2196},[2197,2198,2199,2200,2201,2202,2203,2204],{"id":824,"depth":2186,"text":825},{"id":1002,"depth":2186,"text":1003},{"id":1062,"depth":2186,"text":1063},{"id":1094,"depth":2186,"text":1095},{"id":1140,"depth":2186,"text":1141},{"id":1239,"depth":2186,"text":1240},{"id":1292,"depth":2186,"text":1293},{"id":1350,"depth":2186,"text":1351},{"id":1371,"depth":2181,"text":1372,"children":2206},[2207,2208,2209],{"id":1375,"depth":2186,"text":1376},{"id":1426,"depth":2186,"text":1427},{"id":1496,"depth":2186,"text":1497},{"id":1541,"depth":2181,"text":1542,"children":2211},[2212],{"id":1567,"depth":2186,"text":1568},{"id":1603,"depth":2181,"text":1604,"children":2214},[2215,2216],{"id":1607,"depth":2186,"text":1608},{"id":1633,"depth":2186,"text":1634},{"id":1701,"depth":2181,"text":1702},{"id":2115,"depth":2181,"text":2116},{"id":2130,"depth":2181,"text":2131},{"id":2161,"depth":2181,"text":2162},"Technical overview of MGUSD, Stellar Asset Contract (SAC) stablecoin, administered via a Soroban smart contract.","md",null,{},true,{"title":2227,"description":2228},"MGUSD on Stellar | Technical Documentation","Technical documentation for MGUSD, Stellar Asset Contract (SAC) stablecoin. Covers the Soroban Minter Gateway contract, the Stellar Asset Contract it administers, roles, yield mechanics, compliance controls, and events.","bwFmBdu0rwBgIV2EX662MoiCN6poqiCRuEEsPyC-3Fk",[2231,2233],{"title":236,"path":237,"stem":238,"description":2232,"children":-1},"Technical deep dive into the M0 Protocol's implementation on the Solana blockchain, including program specifications, V2 upgrades, and developer integration guides.",{"title":244,"path":245,"stem":246,"description":2234,"children":-1},"Complete documentation of Wrapped M (wM), the non-rebasing ERC-20 wrapper that maintains yield-earning capabilities while providing DeFi compatibility."]