Maren
GitHub
The product

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.

Commit

Submit a hash of your desired handle plus a secret. Nobody watching the mempool can tell which name you are claiming.

Reveal

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

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.

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 transfer

Move MUSD to an address with an on-chain memo event.

payToHandle(handle, amount, memo)pay a name

Resolve a @handle through the registry and pay it.

createRequest / fulfillRequestrequest money

Ask for an amount; the payer settles it.

createLink / claimLinkmoney link

A claimable link the recipient opens with no prior relationship and no BTC.

split(recipients[], amounts[], memo)one to many

One 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.