[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"\u002Fprotocol\u002Fm-portals":260,"\u002Fprotocol\u002Fm-portals-surround":1479},[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":204,"body":262,"description":1472,"extension":1473,"links":1474,"meta":1475,"navigation":1476,"path":205,"seo":1477,"stem":206,"__hash__":1478},"docs\u002Fprotocol\u002Fm-portals.md",{"type":263,"value":264,"toc":1443},"minimark",[265,269,278,288,298,301,305,311,339,343,462,466,469,476,580,586,590,594,652,656,695,699,741,745,754,758,763,932,936,939,1027,1031,1049,1053,1056,1166,1170,1174,1181,1232,1236,1239,1317,1321],[266,267,166],"h2",{"id":268},"overview",[270,271,273,274],"h3",{"id":272},"native-multichain-m","Native Multichain ",[275,276,277],"code",{},"$M",[279,280,281,282,284,285,287],"p",{},"The core objective of M0's multichain strategy is to make the native ",[275,283,277],{}," token accessible across various blockchains beyond Ethereum mainnet. This aims to provide users with a consistent experience, particularly regarding yield-earning capabilities, regardless of the chain they operate on, while maintaining Ethereum as the authoritative source for ",[275,286,277],{}," issuance and governance.",[279,289,290,294,295,297],{},[291,292,293],"strong",{},"M Portals"," are the set of smart contracts that facilitate this cross-chain functionality. They are responsible for bridging the ",[275,296,277],{}," token itself, as well as propagating essential system information like the yield index and governance parameters between Ethereum and connected Spoke chains.",[279,299,300],{},"To cater to different ecosystem needs and technical requirements, M0 offers two distinct implementations of the Portal system.",[270,302,304],{"id":303},"m-portal-implementations-standard-vs-lite","M Portal Implementations: Standard vs. Lite",[279,306,307,308,310],{},"M0 provides two portal versions built on different underlying technologies. While they share the same core goal of bridging ",[275,309,277],{}," and its metadata, they have key differences in architecture, features, and chain support.",[312,313,314,325],"ol",{},[315,316,317,320,321,324],"li",{},[291,318,319],{},"M Portal (Standard):"," The original, feature-rich implementation built on the ",[291,322,323],{},"Wormhole Native Token Transfer (NTT)"," framework. It is designed for maximum compatibility, supporting both EVM and non-EVM chains (like Solana) and allowing for spoke-to-spoke transfers.",[315,326,327,330,331,334,335,338],{},[291,328,329],{},"M Portal Lite:"," A streamlined, gas-efficient, and more modular implementation built on the ",[291,332,333],{},"Hyperlane"," messaging protocol. It is designed specifically for ",[291,336,337],{},"EVM-only environments",", follows a stricter hub-and-spoke model (no spoke-to-spoke transfers), and introduces enhanced security mechanisms and a developer-friendly upgradeable design.",[270,340,342],{"id":341},"at-a-glance-m-portal-vs-m-portal-lite","At a Glance: M Portal vs. M Portal Lite",[344,345,346,362],"table",{},[347,348,349],"thead",{},[350,351,352,356,359],"tr",{},[353,354,355],"th",{},"Feature",[353,357,358],{},"M Portal (Standard)",[353,360,361],{},"M Portal Lite",[363,364,365,378,391,404,425,442],"tbody",{},[350,366,367,373,376],{},[368,369,370],"td",{},[291,371,372],{},"Bridge Technology",[368,374,375],{},"Wormhole NTT",[368,377,333],{},[350,379,380,385,388],{},[368,381,382],{},[291,383,384],{},"Chain Support",[368,386,387],{},"EVM & non-EVM (e.g., Solana)",[368,389,390],{},"EVM-only",[350,392,393,398,401],{},[368,394,395],{},[291,396,397],{},"Communication",[368,399,400],{},"Hub-Spoke & Spoke-Spoke",[368,402,403],{},"Strictly Hub-Spoke",[350,405,406,411,418],{},[368,407,408],{},[291,409,410],{},"Contract Design",[368,412,413,414,417],{},"Monolithic (inherits ",[275,415,416],{},"NttManager",")",[368,419,420,421,424],{},"Modular & Extendable (uses ",[275,422,423],{},"IBridge"," interface)",[350,426,427,432,435],{},[368,428,429],{},[291,430,431],{},"Security Model",[368,433,434],{},"Hub balance = Total locked",[368,436,437,438,441],{},"Hub tracks ",[275,439,440],{},"bridgedPrincipal"," per spoke chain",[350,443,444,449,456],{},[368,445,446],{},[291,447,448],{},"Chain IDs",[368,450,451,452,455],{},"Wormhole ",[275,453,454],{},"uint16"," IDs",[368,457,458,459,455],{},"Standard EVM ",[275,460,461],{},"uint256",[270,463,465],{"id":464},"the-hub-and-spoke-model","The Hub-and-Spoke Model",[279,467,468],{},"Both M Portal implementations employ a Hub-and-Spoke architecture for multichain deployment:",[279,470,471],{},[472,473],"img",{"alt":474,"src":475},"Hub & Spoke","\u002Fimages\u002Ftechnical-documentations\u002Fm-portals\u002Fhub.png",[477,478,479,536],"ul",{},[315,480,481,484],{},[291,482,483],{},"Hub Chain (Ethereum):",[477,485,486,492,499,518,524],{},[315,487,488,489,491],{},"The single source of truth for the native ",[275,490,277],{}," token (where it's initially minted and governed).",[315,493,494,495,498],{},"Hosts the ",[275,496,497],{},"HubPortal"," contract.",[315,500,501,502,505,506,510,511,513,514,517],{},"Token Mechanism: ",[291,503,504],{},"Lock-and-Release",". When bridging ",[507,508,509],"em",{},"from"," the Hub, ",[275,512,277],{}," tokens are locked. When bridging ",[507,515,516],{},"back"," to the Hub, these locked tokens are released.",[315,519,520,521,523],{},"Acts as the source for propagating the ",[275,522,277],{}," Earning Index and TTG Registrar values.",[315,525,526,529,530,532,533,535],{},[507,527,528],{},"(M Portal Lite Specific):"," The ",[275,531,497],{}," also tracks the principal amount of ",[275,534,277],{}," bridged to each spoke chain to ensure it never releases more tokens than were locked for that specific spoke.",[315,537,538,541],{},[291,539,540],{},"Spoke Chains (e.g., Optimism, Arbitrum):",[477,542,543,549,556,574],{},[315,544,545,546,548],{},"Host representations of the ",[275,547,277],{}," token.",[315,550,551,552,555],{},"Host ",[275,553,554],{},"SpokePortal"," contracts.",[315,557,501,558,505,561,564,565,567,568,570,571,573],{},[291,559,560],{},"Mint-and-Burn",[507,562,563],{},"to"," a Spoke chain, a corresponding amount of ",[275,566,277],{}," representation is minted. When bridging ",[507,569,509],{}," a Spoke chain, the ",[275,572,277],{}," representation is burned.",[315,575,576,577,579],{},"Receive and apply the ",[275,578,277],{}," Earning Index and TTG Registrar values propagated from the Hub.",[279,581,582,583,585],{},"This model ensures that the canonical ",[275,584,277],{}," supply originates and is controlled solely on Ethereum, while Spoke chains manage representations backed by the locked tokens on the Hub.",[266,587,589],{"id":588},"key-components","Key Components",[270,591,593],{"id":592},"common-components","Common Components",[477,595,596,602,610,630,641],{},[315,597,598,601],{},[291,599,600],{},"User:"," The EOA or contract initiating or receiving cross-chain transfers.",[315,603,604,609],{},[291,605,606,608],{},[275,607,277],{}," Token:"," The native ERC-20 compliant token contract deployed on Ethereum.",[315,611,612,618,619,621,622,625,626,629],{},[291,613,614,615,617],{},"Wrapped ",[275,616,277],{}," \u002F Extensions:"," ERC-20 wrappers for ",[275,620,277],{}," that must implement ",[275,623,624],{},"wrap"," and ",[275,627,628],{},"unwrap"," functions.",[315,631,632,637,638,640],{},[291,633,634,636],{},[275,635,497],{}," (Ethereum):"," Manages locking\u002Freleasing of native ",[275,639,277],{}," and propagates metadata.",[315,642,643,648,649,651],{},[291,644,645,647],{},[275,646,554],{}," (Spoke Chains):"," Manages minting\u002Fburning of the Spoke chain's ",[275,650,277],{}," representation and receives metadata.",[270,653,655],{"id":654},"m-portal-wormhole-specific-components","M Portal (Wormhole) Specific Components",[477,657,658,671,680,686],{},[315,659,660,663,664,625,666,668,669,498],{},[291,661,662],{},"Wormhole NTT Framework:"," The underlying technology. ",[275,665,497],{},[275,667,554],{}," inherit from its ",[275,670,416],{},[315,672,673,676,677,679],{},[291,674,675],{},"Wormhole Transceiver:"," A Wormhole contract on each chain that ",[275,678,416],{}," uses to send\u002Freceive low-level messages.",[315,681,682,685],{},[291,683,684],{},"Wormhole Core \u002F Guardians \u002F Relayers:"," The fundamental Wormhole infrastructure that validates and delivers messages (VAAs).",[315,687,688,694],{},[291,689,690,693],{},[275,691,692],{},"MerkleTreeBuilder.sol",":"," A contract used on the Hub to generate Merkle roots for propagating large datasets (like earner lists) efficiently to non-EVM chains like Solana.",[270,696,698],{"id":697},"m-portal-lite-hyperlane-specific-components","M Portal Lite (Hyperlane) Specific Components",[477,700,701,709,724,730],{},[315,702,703,708],{},[291,704,705,693],{},[275,706,707],{},"IBridge.sol"," A generic interface that decouples the Portal logic from the underlying bridge technology.",[315,710,711,716,717,719,720,723],{},[291,712,713,693],{},[275,714,715],{},"HyperlaneBridge.sol"," The implementation of ",[275,718,423],{}," that interacts with the Hyperlane protocol (",[275,721,722],{},"IMailbox",") to send and receive messages.",[315,725,726,729],{},[291,727,728],{},"Hyperlane Mailbox \u002F Relayers:"," The core Hyperlane infrastructure for message dispatch, security, and delivery.",[315,731,732,735,736,625,738,740],{},[291,733,734],{},"Upgradeable Contracts:"," ",[275,737,497],{},[275,739,554],{}," are built using the OpenZeppelin Upgrades pattern, allowing for proxy-based upgrades.",[266,742,744],{"id":743},"core-bridging-process","Core Bridging Process",[279,746,747,748,750,751,753],{},"The transfer of ",[275,749,277],{}," (or its extensions like Wrapped ",[275,752,277],{},") between the Hub and Spoke chains follows a similar logical flow in both implementations, orchestrated by the Portals and their underlying messaging bridge.",[270,755,757],{"id":756},"transfer-hub-chain-to-spoke-chain","Transfer: Hub Chain to Spoke Chain",[279,759,760],{},[472,761],{"alt":762,"src":475},"Hub & Spoke Architecture",[312,764,765,802,842,882,888,897],{},[315,766,767,770,771,773,774],{},[291,768,769],{},"User Interaction:"," The user initiates a transfer by calling a function on the ",[275,772,497],{}," contract on Ethereum, specifying the destination chain and amount. Beforehand, users can call a function to get the estimated delivery fee for the cross-chain transaction.\n",[477,775,776,785],{},[315,777,778,780,781,784],{},[291,779,319],{}," The function is ",[275,782,783],{},"quoteDeliveryPrice",", inherited from the Wormhole NTT framework.",[315,786,787,780,789,792,793,795,796,798,799,801],{},[291,788,329],{},[275,790,791],{},"quoteTransfer",".\nAfter getting the fee and approving the ",[275,794,497],{}," to spend their ",[275,797,277],{}," or Wrapped ",[275,800,277],{},", the user makes the final transfer call.",[315,803,804,807],{},[291,805,806],{},"Token Handling:",[477,808,809,820,832],{},[315,810,811,812,814,815,817,818,548],{},"If the user transferred Wrapped ",[275,813,277],{},", the ",[275,816,497],{}," first unwraps it to the native ",[275,819,277],{},[315,821,822,823,825,826,829,830,498],{},"The native ",[275,824,277],{}," tokens are then ",[291,827,828],{},"locked"," within the ",[275,831,497],{},[315,833,834,529,836,838,839,841],{},[507,835,528],{},[275,837,497],{}," increments its internal ",[275,840,440],{}," counter for the destination spoke chain.",[315,843,844,847],{},[291,845,846],{},"Message Creation & Sending:",[477,848,849,858],{},[315,850,851,852,854,855,857],{},"The ",[275,853,497],{}," constructs a cross-chain message containing transfer details (amount, recipient, destination chain) and additional metadata (like the current ",[275,856,277],{}," Index).",[315,859,860,861],{},"It interacts with its configured bridge to send this message.\n",[477,862,863,872],{},[315,864,865,868,869,871],{},[291,866,867],{},"M Portal (Wormhole):"," Interacts with the Wormhole Transceiver via the ",[275,870,416],{}," logic.",[315,873,874,877,878,881],{},[291,875,876],{},"M Portal Lite (Hyperlane):"," Interacts with the ",[275,879,880],{},"HyperlaneBridge"," contract, which dispatches via the Hyperlane Mailbox.",[315,883,884,887],{},[291,885,886],{},"Cross-Chain Relaying (Offchain):"," The message is validated by the underlying bridge's security mechanism (Wormhole Guardians or Hyperlane ISMs). Once validated, the message is delivered to the destination Spoke chain.",[315,889,890,893,894,896],{},[291,891,892],{},"Message Reception & Processing:"," The bridge contract on the Spoke chain receives the message and passes it to the ",[275,895,554],{},".",[315,898,899,902],{},[291,900,901],{},"Token Minting & Delivery:",[477,903,904,909,919,929],{},[315,905,851,906,908],{},[275,907,554],{}," processes the message.",[315,910,911,912,915,916,918],{},"It ",[291,913,914],{},"mints"," the corresponding amount of the ",[275,917,277],{}," token representation on the Spoke chain.",[315,920,921,922,814,924,926,927,896],{},"If the original transfer was for Wrapped ",[275,923,277],{},[275,925,554],{}," wraps the newly minted ",[275,928,277],{},[315,930,931],{},"The final token is transferred to the recipient address on the Spoke chain.",[270,933,935],{"id":934},"transfer-spoke-chain-to-hub-chain","Transfer: Spoke Chain to Hub Chain",[279,937,938],{},"This is largely the reverse process.",[312,940,941,949,975,982,988,995],{},[315,942,943,945,946,948],{},[291,944,769],{}," User calls the ",[275,947,554],{}," on a Spoke chain to send tokens back to the Hub.",[315,950,951,953],{},[291,952,806],{},[477,954,955,964],{},[315,956,957,958,960,961,963],{},"If transferring Wrapped ",[275,959,277],{},", it's unwrapped to the native ",[275,962,277],{}," representation.",[315,965,822,966,968,969,972,973,896],{},[275,967,277],{}," tokens are ",[291,970,971],{},"burned"," by the ",[275,974,554],{},[315,976,977,529,979,981],{},[291,978,846],{},[275,980,554],{}," sends a cross-chain message back to the Hub Chain (Ethereum).",[315,983,984,987],{},[291,985,986],{},"Cross-Chain Relaying:"," The message is relayed back to Ethereum.",[315,989,990,992,993,896],{},[291,991,892],{}," The bridge on Ethereum receives the message and passes it to the ",[275,994,497],{},[315,996,997,1000],{},[291,998,999],{},"Token Releasing & Delivery:",[477,1001,1002,1014,1024],{},[315,1003,851,1004,1006,1007,1010,1011,1013],{},[275,1005,497],{}," processes the message and ",[291,1008,1009],{},"releases"," (unlocks) the equivalent amount of native ",[275,1012,277],{}," tokens.",[315,1015,1016,529,1018,1020,1021,1023],{},[507,1017,528],{},[275,1019,497],{}," first verifies that the requested release amount does not exceed the ",[275,1022,440],{}," for that source spoke chain. It then decrements the counter.",[315,1025,1026],{},"The released tokens (wrapped if necessary) are delivered to the recipient on Ethereum.",[270,1028,1030],{"id":1029},"transfer-spoke-chain-to-spoke-chain","Transfer: Spoke Chain to Spoke Chain",[477,1032,1033,1041],{},[315,1034,1035,735,1037,1040],{},[291,1036,867],{},[291,1038,1039],{},"Supported."," This process involves burning tokens on the source Spoke and minting them on the destination Spoke, with a message relayed via Wormhole.",[315,1042,1043,735,1045,1048],{},[291,1044,876],{},[291,1046,1047],{},"Not Supported."," The system is strictly Hub-and-Spoke. To move assets between spokes, a user must first bridge back to the Hub (Ethereum) and then out to the new Spoke chain.",[266,1050,1052],{"id":1051},"metadata-propagation","Metadata Propagation",[279,1054,1055],{},"Beyond token value, M Portals are crucial for synchronizing the M0 protocol state across chains. The purpose and data are the same for both implementations, but the transport mechanism differs.",[477,1057,1058,1072,1104],{},[315,1059,1060,1063,1064,1067,1068,1071],{},[291,1061,1062],{},"Purpose:"," To ensure yield calculations (``$M",[275,1065,1066],{}," Earning Index",") and governance parameters (",[275,1069,1070],{},"TTG Registrar"," values) are consistent between the Hub and all Spoke chains.",[315,1073,1074,1077],{},[291,1075,1076],{},"Propagated Data:",[477,1078,1079,1090],{},[315,1080,1081,1086,1087,1089],{},[291,1082,1083,1085],{},[275,1084,277],{}," Earning Index:"," A continuously accruing value representing the aggregate yield earned within the M0 system on Ethereum. Propagating this allows the ",[275,1088,277],{}," representation on Spoke chains to reflect the correct yield.",[315,1091,1092,1095,1096,1099,1100,1103],{},[291,1093,1094],{},"TTG Registrar Values:"," Key-value pairs stored in the ",[275,1097,1098],{},"Registrar"," contract on Ethereum, set by M0 governance (TTG). Examples include the ",[275,1101,1102],{},"EARNERS_LIST"," which dictates which addresses are eligible for yield. Propagation ensures Spoke chains respect Hub governance decisions.",[315,1105,1106,1109],{},[291,1107,1108],{},"Propagation Mechanisms:",[477,1110,1111,1126,1160],{},[315,1112,1113,1116,1117,1119,1120,1122,1123,1125],{},[291,1114,1115],{},"Implicit (with token transfers):"," Every token transfer message from the ",[275,1118,497],{}," automatically includes the current ``$M",[275,1121,1066],{},"in its payload. The receiving",[275,1124,554],{}," uses this to update its local state.",[315,1127,1128,1131,1132,1134,1135],{},[291,1129,1130],{},"Explicit (on-demand):"," Anyone can permissionlessly call functions on the ",[275,1133,497],{}," to send the latest metadata to a specific Spoke chain.\n",[477,1136,1137,1146,1154],{},[315,1138,1139,1142,1143,1145],{},[275,1140,1141],{},"sendMTokenIndex(uint16 destinationChainId)",": Sends the current ",[275,1144,277],{}," Index to a specific Spoke chain.",[315,1147,1148,1151,1152,896],{},[275,1149,1150],{},"sendRegistrarKey(uint16 destinationChainId, bytes32 key)",": Sends a specific key from the Hub ",[275,1153,1098],{},[315,1155,1156,1159],{},[275,1157,1158],{},"sendRegistrarListStatus(uint16 destinationChainId, bytes32 listKey, address entry)",": Sends the inclusion status of an address within a list.",[315,1161,1162,1165],{},[291,1163,1164],{},"Frequency:"," Explicit updates are often triggered periodically by automated bots to ensure timely synchronization even without user transfer activity.",[266,1167,1169],{"id":1168},"underlying-technology","Underlying Technology",[270,1171,1173],{"id":1172},"wormhole-ntt-m-portal","Wormhole NTT (M Portal)",[279,1175,1176,1177,1180],{},"M Portal (Standard) is built ",[507,1178,1179],{},"using"," the Wormhole Native Token Transfer (NTT) framework.",[477,1182,1183,1196,1226],{},[315,1184,1185,735,1188,625,1190,1192,1193,1195],{},[291,1186,1187],{},"Integration:",[275,1189,497],{},[275,1191,554],{}," inherit from Wormhole's ",[275,1194,416],{}," abstract contract. This provides the base functionality for interacting with Wormhole Transceivers, encoding\u002Fdecoding messages, and handling standard NTT flows.",[315,1197,1198,1201,1202],{},[291,1199,1200],{},"Customization:"," M0 extends this base functionality to:\n",[477,1203,1204,1207,1213,1223],{},[315,1205,1206],{},"Implement the specific Lock\u002FRelease (Hub) and Mint\u002FBurn (Spoke) logic.",[315,1208,1209,1210,1212],{},"Handle the automatic unwrap\u002Fwrap mechanism for ",[275,1211,277],{}," extensions.",[315,1214,1215,1216,1218,1219,1222],{},"Inject the M0-specific metadata (like ``$M",[275,1217,1066],{},") into the ",[275,1220,1221],{},"additionalPayload"," field of standard NTT messages.",[315,1224,1225],{},"Define and handle custom message types for explicit metadata propagation.",[315,1227,1228,1231],{},[291,1229,1230],{},"Abstraction:"," Using the NTT framework allows M Portals to leverage Wormhole's established messaging infrastructure while focusing on M0-specific logic.",[270,1233,1235],{"id":1234},"hyperlane-m-portal-lite","Hyperlane (M Portal Lite)",[279,1237,1238],{},"M Portal Lite uses Hyperlane as its messaging layer and features a more modular design.",[477,1240,1241,1259,1268],{},[315,1242,1243,529,1245,1248,1249,1252,1253,1255,1256,1258],{},[291,1244,1187],{},[275,1246,1247],{},"Portal"," contracts do ",[291,1250,1251],{},"not"," inherit from a bridge-specific contract. Instead, they hold an address of a contract that implements the generic ",[275,1254,423],{}," interface. The ",[275,1257,715],{}," contract is the concrete implementation that connects the Portals to the Hyperlane protocol.",[315,1260,1261,1264,1265,1267],{},[291,1262,1263],{},"Decoupling:"," This design decouples the token bridging logic from the cross-chain messaging logic. The Portals are only aware of the ",[275,1266,423],{}," interface, making the system potentially adaptable to other messaging bridges in the future.",[315,1269,1270,1273],{},[291,1271,1272],{},"Message Flow:",[312,1274,1275,1287,1294,1304],{},[315,1276,1277,1278,1280,1281,1284,1285,896],{},"A ",[275,1279,1247],{}," contract calls ",[275,1282,1283],{},"sendMessage()"," on the configured ",[275,1286,880],{},[315,1288,1289,1291,1292,498],{},[275,1290,880],{}," formats the message and dispatches it through the Hyperlane ",[275,1293,722],{},[315,1295,1296,1297,1299,1300,1303],{},"On the destination chain, the Hyperlane network delivers the message to the destination ",[275,1298,880],{}," by calling its ",[275,1301,1302],{},"handle()"," function.",[315,1305,1306,1307,1309,1310,1313,1314,1316],{},"The destination ",[275,1308,880],{}," authenticates the message (verifying it comes from the Mailbox and a known peer) and then calls ",[275,1311,1312],{},"receiveMessage()"," on its local ",[275,1315,1247],{}," contract, delivering the payload.",[266,1318,1320],{"id":1319},"developer-integration-and-security","Developer Integration and Security",[477,1322,1323,1329,1346,1363,1374,1399,1422],{},[315,1324,1325,1328],{},[291,1326,1327],{},"Audits:"," The M Portal contracts have undergone security audits. Refer to linked audit reports for findings and details.",[315,1330,1331,1334],{},[291,1332,1333],{},"Upgradeability:",[477,1335,1336,1341],{},[315,1337,1338,1340],{},[291,1339,329],{}," Designed as an upgradeable system using the UUPS proxy pattern (via OpenZeppelin Upgrades).",[315,1342,1343,1345],{},[291,1344,319],{}," The contracts are also designed to be upgradeable.",[315,1347,1348,1351],{},[291,1349,1350],{},"Security Dependencies:",[477,1352,1353,1358],{},[315,1354,1355,1357],{},[291,1356,867],{}," Security relies significantly on the integrity of the Wormhole Guardians and the NTT framework contracts.",[315,1359,1360,1362],{},[291,1361,876],{}," Security relies on the Hyperlane protocol, including its configured Interchain Security Modules (ISMs) and the correctness of the Hyperlane Relayer network.",[315,1364,1365,529,1368,1370,1371,1373],{},[291,1366,1367],{},"Key Security Feature (Lite):",[275,1369,440],{}," tracking in the ",[275,1372,497],{}," of M Portal Lite provides an additional layer of accounting security, ensuring that the Hub cannot be drained of more tokens than were originally locked for a given spoke chain.",[315,1375,1376,1379],{},[291,1377,1378],{},"Code Repositories:",[477,1380,1381,1391],{},[315,1382,1383,1384],{},"M Portal (Wormhole): ",[1385,1386,1390],"a",{"href":1387,"rel":1388},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal",[1389],"nofollow","github.com\u002Fm0-foundation\u002Fm-portal",[315,1392,1393,1394],{},"M Portal Lite (Hyperlane): ",[1385,1395,1398],{"href":1396,"rel":1397},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal-lite",[1389],"github.com\u002Fm0-foundation\u002Fm-portal-lite",[315,1400,1401,1404],{},[291,1402,1403],{},"External Documentation:",[477,1405,1406,1414],{},[315,1407,1408,1409],{},"Wormhole NTT Documentation: ",[1385,1410,1413],{"href":1411,"rel":1412},"https:\u002F\u002Fdocs.wormhole.com\u002Fwormhole\u002Fntt\u002Foverview",[1389],"docs.wormhole.com\u002Fwormhole\u002Fntt\u002Foverview",[315,1415,1416,1417],{},"Hyperlane Documentation: ",[1385,1418,1421],{"href":1419,"rel":1420},"https:\u002F\u002Fdocs.hyperlane.xyz\u002F",[1389],"docs.hyperlane.xyz",[315,1423,1424,1427],{},[291,1425,1426],{},"Audit Reports:",[477,1428,1429,1436],{},[315,1430,1383,1431],{},[1385,1432,1435],{"href":1433,"rel":1434},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal\u002Ftree\u002Fmain\u002Faudits",[1389],"github.com\u002Fm0-foundation\u002Fm-portal\u002Ftree\u002Fmain\u002Faudits",[315,1437,1393,1438],{},[1385,1439,1442],{"href":1440,"rel":1441},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal-lite\u002Ftree\u002Fmain\u002Faudits",[1389],"github.com\u002Fm0-foundation\u002Fm-portal-lite\u002Ftree\u002Fmain\u002Faudits",{"title":1444,"searchDepth":1445,"depth":1446,"links":1447},"",1,2,[1448,1456,1461,1466,1467,1471],{"id":268,"depth":1446,"text":166,"children":1449},[1450,1453,1454,1455],{"id":272,"depth":1451,"text":1452},3,"Native Multichain $M",{"id":303,"depth":1451,"text":304},{"id":341,"depth":1451,"text":342},{"id":464,"depth":1451,"text":465},{"id":588,"depth":1446,"text":589,"children":1457},[1458,1459,1460],{"id":592,"depth":1451,"text":593},{"id":654,"depth":1451,"text":655},{"id":697,"depth":1451,"text":698},{"id":743,"depth":1446,"text":744,"children":1462},[1463,1464,1465],{"id":756,"depth":1451,"text":757},{"id":934,"depth":1451,"text":935},{"id":1029,"depth":1451,"text":1030},{"id":1051,"depth":1446,"text":1052},{"id":1168,"depth":1446,"text":1169,"children":1468},[1469,1470],{"id":1172,"depth":1451,"text":1173},{"id":1234,"depth":1451,"text":1235},{"id":1319,"depth":1446,"text":1320},"Documentation of M0's cross-chain architecture, including the M Portal (Wormhole) and M Portal Lite (Hyperlane) implementations for bridging M across blockchains.","md",null,{},true,{"title":204,"description":1472},"rABwfPaNN1AEjVHwALVubyT25LYfsjk_CZ1HJBOum2I",[1480,1482],{"title":200,"path":201,"stem":202,"description":1481,"children":-1},"Technical deep dive into M0's onchain settlement layer for trustless, intent-based token exchanges across chains with partial fills, gasless orders, and secure cancellation.",{"title":208,"path":209,"stem":210,"description":1483,"children":-1},"Complete technical documentation for the M token, the immutable ERC20-compliant token at the heart of the M0 Ecosystem."]