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:

Field
Description
Type

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 herearrow-up-right), 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