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.