DApp Provider Guide
This guide provides essential information for dApp providers seeking to integrate their applications with Ledger Enterprise.
1. Ensure backend compatibility with Ledger Enterprise
To enable your Decentralized Application (dApp) to connect and interact with Ledger Enterprise wallets when accessed through the Ledger Enterprise Web app's built-in dApp browser, a specific implementation is required.
What is the dApp Browser and why is it essential ?
The dApp Browser acts as a crucial communication layer, allowing your dApp to interact directly with a user's Ledger hardware device via the Ledger Enterprise Web app. When your dApp runs within the dApp browser, it needs a standardized way to:
Discover and connect 🤝 to the Ledger hardware wallet.
Request actions ✍️ from the Ledger device, such as fetching account addresses or signing transactions.
Receive responses and transaction confirmations securely from the Ledger device.
Most dApps communicate with wallets using the EIP-1193 interface. The Ledger Enterprise dApp browser ensures that your dApp's EIP-1193 requests are correctly translated and routed to communicate with the Ledger device itself.
This integration is key to:
Initiating secure connections with Ledger Enterprise wallets.
Enabling a smooth and secure user experience for Ledger users.
Prompting users for transaction confirmations directly on their Ledger device.
Example repository
For a practical implementation demonstrating the necessary setup for Ledger compatibility, especially when using popular libraries like wagmi or viem ,please refer to our example repositories:
2. Ensure UX/UI compatibility with Ledger Enterprise
Since the dApp is embedded within the Ledger Enterprise web app, most often some UX adjustments are needed compared to the dApp provider’s standard dApp. Default guidelines:
Remove any button to connect wallet. The Ledger Enterprise app already includes a button to connect wallet in the top-right corner, so an additional one isn’t needed.
Reduce top and bottom margins. Since the dApp is embedded in a limited space, the large blank margins (especially at the top and bottom) are unnecessary. Please minimize them to optimize vertical space.
Remove fee estimations. Fee estimates are already computed at the moment of request creation (with a built-in buffer). The dApp shouldn’t display its own estimations.
Hide network selection. The Ledger Enterprise app only supports dApps on the Ethereum ecosystem, so network switching options should not be displayed.
3. Building your dApp manifest
After successfully implementing the dApp provider, you are ready to prepare your dApp for testing and integration within the Ledger Enterprise environment.
To facilitate testing and formal integration, you must provide a dApp Manifest file. This JSON-formatted file contains essential information about your dApp, its capabilities, and its integration requirements.
Please review and, if necessary, edit your manifest file as described below to ensure it meets Ledger Enterprise specifications.
Example Manifest (JSON format) for the “kiln” dApp:
id
The identification of your dApp. Must be in lowercase.
String
name
The name of your dApp. Displayed in the UI
String
url
The Ledger dApp browser URL used. Always “https://dapp-browser.apps.ledger.com/”.
String
params
dappURL is the url of your dApp.
networks is the list of networks supported by your dApp, Ethereum and all EVM-compatible networks supported by Ledger Enterprise can be addressed via dApp.
The nodeURL param will be set by Ledger in prod to use your node, for testing purposes, you can replace it with your own.
Object
homepageUrl
This is for information only. It is is non-critical.
String
icon
A link to the icon displayed in Ledger UI. Will be hosted on Ledger CDN before being released in production. Recommended format: PNG, 120x120 pixels.
URL
platform
To set the platform (desktop, mobile, iOS, Android) on which your service is available. Default value: “all”.
String
apiVersion
The API version. By default “^2.0.0”.
String
manifestVersion
The manifest version. By default should be “2”.
String
branch
The specific branch used by Ledger to deploy the changes.
Can take the values stable ,experimental, debug, soon.
By default, you should set it to stable. The value soon will mark your app as “Coming soon” and it won’t be usable.
String
categories
A JSON array of metadata information about your dApp. For instance: [“staking”,“defi” ]. You can add as many as you want. Will be used for filtering in the future.
List(String)
currencies
A JSON array of the currency/network used by your dDApp. For instance [“ethereum”,”polygon”]. Leave blank if the App does not require any currency.
List(String)
content
A description of your service. It will be displayed on the entry card of your dApp.
L18n strings
permissions
Leave empty for now.
List(string)
domains
List of allowed domains to navigate to, if a domain doesn’t match it will open in the default browser. By default [“http://”, “https://“]
List(string)
4. Clear signing your dApp
To ensure security and transparency for institutional clients, Ledger Enterprise requires Clear Signing for all dApp interactions. This allows users to verify transaction details in human-readable format on their Ledger device rather than "Blind Signing" raw data.
How to Enable It: Unlike the public Ledger consumer ecosystem (more details here), Ledger Enterprise uses an internal registry. You must provide the Ledger Enterprise team with the following details to Clear sign your dApp:
Smart Contract Addresses used by your dApp.
Functions & methods used by your dApp.
Once communicated, our team will ensure all interactions are decoded and displayed clearly on the Ledger device.
Last updated