Skip to Content
📢 Breaking change: Applications using LedgerJS for transport implementation should migrate to the Device Management Kit (DMK). Learn more.

How to validate and submit your descriptor

This guide shows you how to validate your descriptor, preview it on a Ledger signer, and submit it to the registry so your protocol’s transactions become Clear Signed.

Before you start, make sure you have created your descriptor with the JSON Builder or written it manually.

Validate your descriptor

Validate your file against the ERC-7730 schema before submitting, to catch errors early.

Install the validator

pip install erc7730

Requires Python 3.12 or higher.

Validate your file

# Validate a single file erc7730 lint your-descriptor.json # Validate multiple files erc7730 lint registry/**/eip712-*.json registry/**/calldata-*.json

Auto-format your file

erc7730 format your-descriptor.json

Common validation errors

  • Missing required fields — the file must include the context, metadata, and display sections, plus the top-level $schema field.
  • Unaccounted parameters — every function parameter must appear in either fields or excluded.
  • Incorrect format structure — format types must match the field’s data type. For example, tokenAmount requires either tokenPath or token in params. See the format types reference.
  • Incorrect chain ID — verify each deployment’s chainId against the actual deployment. Use ChainList  to look up IDs (1 for Ethereum mainnet, 137 for Polygon, 42161 for Arbitrum).
  • Invalid path expression — check the #, $, and @ roots against the path system reference.

Test the display on a signer

Before submitting, preview how your descriptor renders on a real device. The ERC-7730 Tester  injects your descriptor and displays the resulting fields against a live Ledger signer or the Speculos emulator, so you can confirm each label and value before opening a pull request.

Submit to the registry

Once your descriptor passes validation, submit it as a pull request to the registry.

Fork and clone the registry

Fork github.com/ethereum/clear-signing-erc7730-registry , then clone your fork:

git clone https://github.com/YOUR_USERNAME/clear-signing-erc7730-registry.git cd clear-signing-erc7730-registry

Add your descriptor

Place your file in a directory named after your dApp, using lowercase and hyphens (uniswap-v3/swap-router.json, not UniswapV3/file1.json):

mkdir -p registry/your-dapp-name cp /path/to/your-descriptor.json registry/your-dapp-name/descriptive-name.json

Open a pull request

Commit, push to your fork, and open a pull request describing your protocol, the contracts covered, and any notable configuration choices.

The registry runs automated checks (schema, linting, ABI and deployment consistency) before a maintainer review. For the full, ecosystem-wide submission and review process — including auditor signals and attestations — see clearsigning.org/build .

If a reviewer requests changes, push to the same branch and the pull request updates automatically. Submissions are most often rejected for:

  • Contract addresses that do not match the claimed protocol
  • Display labels that are misleading or incomplete
  • Schema violations not caught by local validation

After your pull request merges

Once merged, your descriptor becomes available in Ledger Wallet (after the next scheduled update), in all wallets that support the Clear Signing standard, and through the public registry API. Users signing transactions through your protocol then see human-readable details instead of raw hex.

Get help

Last updated on
Ledger
Copyright © Ledger SAS. All rights reserved. Ledger, Ledger Stax, Ledger Flex, Ledger Nano, Ledger Nano S, Ledger OS, Ledger Wallet, [LEDGER] (logo), [L] (logo) are trademarks owned by Ledger SAS.