Web3 Forms
Web3 Forms turn web3:// links into interactive contract forms. They support read-only calls, state-changing transactions, and typed inputs with validation. Embed a web3 form in Markdown by using a web3:// URI as an image source. The text after the image becomes the form title. Use labels=(...) to name each field.

Examples
Read Contract State
Read-only calls are the default (mode=call). No wallet signature is required.
Markdown:
&labels=(Account)&decimals=(,6))
Result:
Send Transactions
Set mode=tx to create a transaction.
Markdown:
&mode=tx&decimals=(,6))
Result:
Payable Transactions
Add a value and mark the call as payable. Use this only with payable methods.
Markdown:

Result:
URI Format
web3://<contract>[:chainId]/<method>[/<type>!<value>...]?[query]
Fields
contract: Ethereum address or ENS-style domain name of the target contract.chainId(optional): Require a specific network (for example,:11155111for Sepolia).method: Contract function name.type!valuearguments: Each argument declares its Solidity type and a value or placeholder. Usetype!0xfor an empty field.
Query Parameters
returns=(uint256)- The Solidity return type for read-only calls. Use
returns=()for void. Only used whenmode=call.
- The Solidity return type for read-only calls. Use
value=0.01eth- Adds an ETH value input field. Use
value=<amount>for a default. Acceptsethor raw wei.
- Adds an ETH value input field. Use
payable=true- Marks the call as payable and shows the value input field (value defaults to 0 if omitted).
mode=tx- Forces a state-changing transaction. Default is
mode=call(read-only).
- Forces a state-changing transaction. Default is
labels=(Account,Amount)- Names each input field. The label count must match the number of arguments.
decimals=(,6)- Scales numeric inputs and the return value. The list is positional.
- Use empty slots for arguments that are not scaled.
- If a return value exists, add one extra slot at the end for the return.
- Example (two args + one return):
decimals=(,6,18)