ERC-7730
Clear Signing on Monad
Your wallet should tell you what you are signing in plain language, not a wall of hex. Clear Signing (ERC-7730) does exactly that, and it works on Monad today. Trigger a real signature on Monad mainnet below and see it for yourself.
Why this matters
Blind signing drains wallets
Most phishing losses start with a user approving a malicious transaction or token permit they could not read. Hex hides the spender and the amount.
You verify the real action
Clear Signing shows the actual intent: who you are approving, which token, how much, on which network, before you sign. No trust in the dApp UI required.
Trust for a new chain
For Monad it means day-one signing safety on par with Ethereum mainnet. Lower the odds users get drained, raise the odds they transact with confidence.
Try it live
This signs a Permit2 token-approval message on Monad. It is a signature only: it is generated locally in your browser and never broadcast, no gas is spent, and no funds move.
MetaMask decodes Permit2 itself, so this readable view shows on any chain, Monad included. That is real, but it is the wallet's built-in decoding, not the ERC-7730 registry. To see what the registry produces for a Monad contract no wallet decodes on its own, look just below.
Proof, not a mock
What the registry produces for Monad
Permit2 above renders because MetaMask already knows Permit2. Wrapped MON is the honest test: it is a plain wrapper, so no wallet decodes deposit() or withdraw() on its own. The action names and labels below come from our ERC-7730 descriptor in the registry and nowhere else. This is the resolved output of erc7730 calldata --chain-id 143 on the WMON descriptor, the same payload a Ledger device loads to render it.
Wrap MON
0xd0e30db0- Amount
- 10 MON
- Network
- Monad
Unwrap WMON
0x2e1a7d4d- Amount
- 10 WMON
- Network
- Monad
Approve WMON
0x095ea7b3- Spender
- 0x1b81…eB14
- Amount
- 1,000 WMON
- Network
- Monad
Send WMON
0xa9059cbb- To
- 0x7547…b603
- Amount
- 5 WMON
- Network
- Monad
Transfer WMON
0x23b872dd- From
- 0x1b81…eB14
- To
- 0x7547…b603
- Amount
- 5 WMON
- Network
- Monad
Field values are illustrative. The action names and field labels are exactly what the descriptor emits for chain 143. Reproduce it with uvx erc7730 calldata --chain-id 143 calldata-wmon.json.
Got a Ledger?
This is the cleanest way to settle it. Connect through MetaMask and confirm a real Wrap MON transaction on Monad, then reject it: nothing needs to be sent. Any wallet works, but Ledger is the one that reads the registry. If the device shows Wrap MON with an amount, a descriptor is rendering on Monad. If it shows raw hex or a generic contract interaction, nothing has ingested it for chain 143 yet.
The page cannot see your device screen, so eyeball it or grab a screenshot. That screenshot is exactly the proof the registry render needs.
Hex versus readable
Before: blind signing
0x095ea7b3000000000000000000000000fe9c9ca3eed0fb3e6a5c0bf42ad6f1a0d1c7b2a40000000000000000000000000000000000000000000000000000000003b9aca00
Sign and hope. You cannot see the spender or the amount.
After: clear signing
- Action
- Approve USDC
- Spender
- Uniswap Router
- Amount
- 1,000 USDC
- Network
- Monad
See exactly what you authorize, then sign.
Why a live demo
Existing preview tools only render against Ethereum mainnet, so they cannot show what signing looks like on Monad. This page signs against Monad directly in your own wallet, the only way to see the real render on chain 143.
For builders
Make your Monad contract clear-signable: publish an ERC-7730 descriptor and open a PR to the registry.