Descriptors
Metadata files that tell Gatekeeper how to decode and display transactions.
What are Descriptors?
Descriptors are JSON files following the ERC-7730 specification. They map raw transaction calldata to human-readable intents by defining:
- Context — Which contracts and chains the descriptor applies to
- Metadata — Protocol and contract display names
- Display formats — How to render each function's parameters
When Gatekeeper receives a transaction, it matches the target contract and function selector against available descriptors to produce structured display data.
Example Descriptor
A descriptor for Aave Horizon Pool's deposit and withdraw functions:
{
"$schema": "https://eips.ethereum.org/assets/eip-7730/erc7730-v1.schema.json",
"context": {
"$id": "aave-ethereum-horizon-pool",
"contract": {
"deployments": [
{ "chainId": 1, "address": "0xae05cd22df81871bc7cc2a04becfb516bfe332c8" }
]
}
},
"metadata": {
"owner": "Aave",
"contractName": "Aave Horizon Pool",
"info": { "url": "https://aave.com" }
},
"display": {
"formats": {
"deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)": {
"intent": "Deposit",
"interpolatedIntent": "Deposit {#.amount}",
"fields": [
{
"path": "#.asset",
"label": "Asset",
"format": "addressName",
"params": { "types": ["token"] }
},
{
"path": "#.amount",
"label": "Amount",
"format": "tokenAmount",
"params": { "tokenPath": "#.asset" }
},
{
"path": "#.onBehalfOf",
"label": "Position Owner",
"format": "addressName",
"params": { "types": ["wallet", "eoa"] }
}
]
},
"withdraw(address asset, uint256 amount, address to)": {
"intent": "Withdraw",
"interpolatedIntent": "Withdraw {#.amount}",
"fields": [
{
"path": "#.asset",
"label": "Asset",
"format": "addressName",
"params": { "types": ["token"] }
},
{
"path": "#.amount",
"label": "Amount",
"format": "tokenAmount",
"params": {
"tokenPath": "#.asset",
"threshold": "115792089237316195423570985008687907853269984665640564039457584007913129639935",
"message": "MAX"
}
},
{
"path": "#.to",
"label": "Recipient",
"format": "addressName",
"params": { "types": ["wallet", "eoa"] }
}
]
}
}
}
}Key elements:
context.contract.deployments— Binds the descriptor to specific contract addresses per chaindisplay.formats— Maps function signatures to display instructionsfields[].format— Specifies how to render values (tokenAmount,addressName, etc.)params.tokenPath— Dynamically resolves token metadata from another fieldparams.threshold/message— Displays "MAX" instead ofuint256.max
Descriptor Sources
Gatekeeper uses descriptors from:
- Narval's curated registry — Pre-configured descriptors for supported DeFi protocols
- Public registries — Official ERC-7730 registry (coming soon)
- Custom registry — Private registry configured for a self-hosted Gatekeeper instance
Further Reading
For the complete specification on writing descriptors, see the ERC-7730 standard.

