[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"\u002Fbuild\u002Fbridging-developer":260,"\u002Fbuild\u002Fbridging-developer-surround":678},[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":111,"body":262,"description":671,"extension":672,"links":673,"meta":674,"navigation":675,"path":112,"seo":676,"stem":113,"__hash__":677},"docs\u002Fbuild\u002Fbridging-developer.md",{"type":263,"value":264,"toc":656},"minimark",[265,269,297,308,315,375,381,447,451,454,458,461,512,521,527,573,578,607,611,614,618,621],[266,267,268],"p",{},"This guide provides technical details and step-by-step workflows for developers integrating with the M0 stablecoin bridging infrastructure. The system uses two distinct protocols for different chains, so it is crucial to use the correct integration path.",[270,271,272,287],"ul",{},[273,274,275,279,280],"li",{},[276,277,278],"strong",{},"Portal (NTT) Repository",": ",[281,282,286],"a",{"href":283,"rel":284},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal\u002Fblob\u002Fmain\u002FREADME.md",[285],"nofollow","m-portal on GitHub",[273,288,289,279,292],{},[276,290,291],{},"Portal Lite (Hyperlane) Repository",[281,293,296],{"href":294,"rel":295},"https:\u002F\u002Fgithub.com\u002Fm0-foundation\u002Fm-portal-lite\u002Fblob\u002Fmain\u002FREADME.md",[285],"m-portal-lite on GitHub",[266,298,299,300,303,304,307],{},"The Portal system is built on the Wormhole Native Token Transfer (NTT) standard. It is used for bridging tokens to and from ",[276,301,302],{},"Arbitrum One"," and ",[276,305,306],{},"Optimism",".",[309,310,312],"h2",{"id":311},"key-concepts",[276,313,314],{},"Key Concepts",[270,316,317,323,341,366],{},[273,318,319,322],{},[276,320,321],{},"Protocol:"," Wormhole NTT",[273,324,325,328,329,333,334,336,337,333,339],{},[276,326,327],{},"Chains:"," ",[330,331,332],"code",{},"Ethereum"," ↔ ",[330,335,302],{},", ",[330,338,332],{},[330,340,306],{},[273,342,343,346,347,350,351,354,355,358,359,362,363,307],{},[276,344,345],{},"Chain IDs:"," Uses ",[276,348,349],{},"Wormhole Chain IDs"," (",[330,352,353],{},"uint16","), e.g., Ethereum = ",[330,356,357],{},"2",", Arbitrum = ",[330,360,361],{},"23",", Optimism = ",[330,364,365],{},"24",[273,367,368,371,372,307],{},[276,369,370],{},"Addresses:"," Recipient and token addresses are passed as ",[330,373,374],{},"bytes32",[309,376,378],{"id":377},"contract-addresses",[276,379,380],{},"Contract Addresses",[382,383,384,400],"table",{},[385,386,387],"thead",{},[388,389,390,394,397],"tr",{},[391,392,393],"th",{},"Contract",[391,395,396],{},"Network(s)",[391,398,399],{},"Address",[401,402,403,418,432],"tbody",{},[388,404,405,411,413],{},[406,407,408],"td",{},[276,409,410],{},"Hub Portal",[406,412,332],{},[406,414,415],{},[330,416,417],{},"0xD925C84b55E4e44a53749fF5F2a5A13F63D128fd",[388,419,420,425,428],{},[406,421,422],{},[276,423,424],{},"Spoke Portal",[406,426,427],{},"Arbitrum, Optimism",[406,429,430],{},[330,431,417],{},[388,433,434,439,442],{},[406,435,436],{},[276,437,438],{},"Wormhole Transceiver",[406,440,441],{},"All",[406,443,444],{},[330,445,446],{},"0x0763196A091575adF99e2306E5e90E0Be5154841",[309,448,450],{"id":449},"m0-portal-hub-to-spoke-eg-ethereum-arbitrum","M0 Portal - Hub to Spoke (e.g., Ethereum -> Arbitrum)",[266,452,453],{},"This workflow details how to lock a token (M or wM) on Ethereum and mint its equivalent on a spoke chain like Arbitrum.",[309,455,457],{"id":456},"m0-portal-spoke-to-hub-eg-arbitrum-ethereum","M0 Portal - Spoke to Hub (e.g., Arbitrum -> Ethereum)",[266,459,460],{},"This workflow is the mirror image of the first. You will interact with the Spoke Portal contract on the source chain (e.g., Arbitrum).",[462,463,464,478,484],"ol",{},[273,465,466,469,470,473,474,477],{},[276,467,468],{},"Approve:"," Call ",[330,471,472],{},"approve"," on the token contract on the spoke chain, granting an allowance to the Spoke Portal (",[330,475,476],{},"0xD92...28fd",").",[273,479,480,483],{},[276,481,482],{},"Quote Fee:"," Obtain the delivery fee for sending a message from the spoke chain to Ethereum.",[273,485,486,469,489,492,493],{},[276,487,488],{},"Bridge:",[330,490,491],{},"transferMLikeToken"," on the Spoke Portal.\n",[270,494,495,503],{},[273,496,497,279,500,502],{},[330,498,499],{},"destinationChainId",[330,501,357],{}," (Wormhole ID for Ethereum).",[273,504,505,508,509,511],{},[330,506,507],{},"destinationToken",": The ",[330,510,374],{}," address of the target token on Ethereum.",[266,513,514,515,303,518,307],{},"The Portal Lite system is built on the Hyperlane protocol. It is used for bridging tokens to and from ",[276,516,517],{},"Plume",[276,519,520],{},"HyperEVM",[522,523,525],"h3",{"id":524},"key-concepts-1",[276,526,314],{},[270,528,529,534,546,564],{},[273,530,531,533],{},[276,532,321],{}," Hyperlane",[273,535,536,328,538,333,540,336,542,333,544],{},[276,537,327],{},[330,539,332],{},[330,541,517],{},[330,543,332],{},[330,545,520],{},[273,547,548,550,551,350,554,354,557,560,561,307],{},[276,549,345],{}," Uses standard ",[276,552,553],{},"EVM Chain IDs",[330,555,556],{},"uint256",[330,558,559],{},"1",", Plume = ",[330,562,563],{},"98866",[273,565,566,568,569,572],{},[276,567,370],{}," All addresses are standard ",[330,570,571],{},"address"," types.",[522,574,576],{"id":575},"contract-addresses-1",[276,577,380],{},[382,579,580,590],{},[385,581,582],{},[388,583,584,586,588],{},[391,585,393],{},[391,587,396],{},[391,589,399],{},[401,591,592],{},[388,593,594,599,602],{},[406,595,596],{},[276,597,598],{},"Portal Lite",[406,600,601],{},"Ethereum, Plume, HyperEVM",[406,603,604],{},[330,605,606],{},"0x36f586A30502AE3afb555b8aA4dCc05d233c2ecE",[309,608,610],{"id":609},"m0-portal-lite-hub-to-spoke-eg-ethereum-plume","M0 Portal Lite - Hub to Spoke (e.g., Ethereum -> Plume)",[266,612,613],{},"This workflow details locking a token on Ethereum and minting its equivalent on Plume.",[309,615,617],{"id":616},"m0-portal-lite-spoke-to-hub-eg-plume-ethereum","M0 Portal Lite - Spoke to Hub (e.g., Plume -> Ethereum)",[266,619,620],{},"The process is identical to Workflow 1 but performed on the spoke chain's contracts.",[462,622,623,634,644],{},[273,624,625,469,627,630,631,477],{},[276,626,482],{},[330,628,629],{},"quoteTransfer"," on the Portal Lite contract on Plume to get the fee for delivering a message to Ethereum (",[330,632,633],{},"destinationChainId = 1",[273,635,636,469,638,640,641,477],{},[276,637,468],{},[330,639,472],{}," on the token contract on Plume, granting an allowance to the Portal Lite (",[330,642,643],{},"0x36f...2ecE",[273,645,646,469,648,650,651,653,654,307],{},[276,647,488],{},[330,649,491],{}," on the Portal Lite on Plume, with ",[330,652,499],{}," set to ",[330,655,559],{},{"title":657,"searchDepth":658,"depth":659,"links":660},"",1,2,[661,662,663,664,669,670],{"id":311,"depth":659,"text":314},{"id":377,"depth":659,"text":380},{"id":449,"depth":659,"text":450},{"id":456,"depth":659,"text":457,"children":665},[666,668],{"id":524,"depth":667,"text":314},3,{"id":575,"depth":667,"text":380},{"id":609,"depth":659,"text":610},{"id":616,"depth":659,"text":617},"Technical details and step-by-step workflows for developers integrating with the M0 stablecoin bridging infrastructure.","md",null,{},true,{"title":111,"description":671},"bvQfHKLcshdYZRTcTpWLWGO2oEvOIwTXGiimoLDUc3s",[679,681],{"title":102,"path":103,"stem":104,"description":680,"children":-1},"Retrieve token data for M0 protocol tokens including metadata, holders, and supply information.",{"title":115,"path":116,"stem":117,"description":682,"children":-1},"How to manually bridge M and wrapped M (wM) tokens between Ethereum and connected networks using a block explorer."]