Pay
Names, money links, and requests: moving MUSD without addresses to copy.
Once you hold MUSD, Pay is how it moves. pay, payToHandle and split take no custody: money
goes wallet to wallet. Money links are the deliberate exception — createLink escrows the MUSD in
the contract until it is claimed, or reclaimed by its creator after expiry, and totalEscrowed()
reports that balance on-chain. That escrow sits in the contract, not with the Maren team.
Pay works for anyone holding MUSD, whether they borrowed it or not.
Pay a name
Money moves to @names instead of addresses. Type @amaka, an amount, an optional note, and
send. Raw addresses still work for anyone without a name yet.
Handles live in MarenRegistry and are registered through commit-reveal so a name cannot
be sniped from the mempool. A handle is 3 to 32 characters from [a-z0-9_], one primary handle
per address, with reverse resolution for display.
Submit a hash of your desired handle plus a secret. Nobody watching the mempool can tell which name you are claiming.
Submit the handle and secret. The registry checks the commit and assigns the name. On
matsnet, @sele was registered this way, with the reveal landing at 119,726 gas.
resolve("sele") returns the owner address on-chain. The payment interface always shows
the resolved address alongside the handle before you confirm, so you see where money is
actually going.
Restricting handles to [a-z0-9_] eliminates homoglyph attacks, and showing the resolved
address before confirmation is the second line of defence. See handle risk.
Money links
Put MUSD into a link and send the link anywhere text goes: WhatsApp, iMessage, anywhere. The recipient opens it and claims the money, with or without a Maren account and holding no BTC. A link can be reclaimed by its creator only after the expiry it was created with — never before, because a creator who could cancel at will could watch the mempool and front-run a legitimate claim. "Cancel sooner" means "set a shorter expiry".
This is how money crosses from Maren users to people who have never held crypto, and it is the product's built-in growth loop: every link is an invitation carrying money.
createLink / claimLink are built and exercised on testnet. Polishing money links for
non-crypto recipients is Phase 3 work, planned rather than shipped. The pilot metric that
matters here is claims made by addresses brand new to Maren, which is the growth loop
working.
Requests
The reverse direction. Ask for an amount with a note, share it as a link, and the payer settles in two taps. Settled requests appear in both parties' Activity with the transaction hash attached. On matsnet, a 0.50 MUSD request has been created on-chain through the app.
The full payment surface
MarenPay uses ERC2771Context, so its actions can be relayed gaslessly once the relayer is
hosted.
pay(to, amount, memo)direct transferMove MUSD to an address with an on-chain memo event.
payToHandle(handle, amount, memo)pay a nameResolve a @handle through the registry and pay it.
createRequest / fulfillRequestrequest moneyAsk for an amount; the payer settles it.
createLink / claimLinkmoney linkA claimable link the recipient opens with no prior relationship and no BTC.
split(recipients[], amounts[], memo)one to manyOne signature paying many recipients.
Cash out to a bank and pay at a shop are planned, not built. Cashout integrates licensed off-ramp partners rather than taking custody of fiat; merchant payments settle in MUSD over Mezo's x402 rail. Both are Phase 3 design work. Nothing in the app pretends otherwise.
