> **Key takeaway:**  ☞   The renaming of "Ledger Live" to "Ledger Wallet" and\
>      "wallet" (in the hardware sense) to "signer" is still in progress.\
>      This page may contain legacy references that will be updated.

# Earn Provider's LiveApp

A LiveApp is your dapp (web application) running within Ledger Wallet's embedded browser.

A LiveApp offering  users staking services can be accessible through various entry points in Ledger Wallet:

- The **Accounts** section: where users can view the list of their accounts and are provided with options to stake available assets.
- The **Discover** section: where users can explore a curated catalog of dapps.
- The **Earn** section: where users can track their current staking positions and stake additional assets on eligible accounts.

## How to create your LiveApp

There are two ways to integrate your dapp into Ledger Wallet:

1. **dAppBrowser (EVM only)**: by creating a manifest, pointing it to the dAppBrowser, you can easily integrate your dApp into .
2. **The  API**: a Javascript library allowing your dapp to interact with  devices (for instance, to sign a transaction) and access information from the connected  (such as the wallet address).

To learn how to create (or embed if already existing) your user interface for , please follow the [Discover documentation](https://developers.ledger.com/docs/ledger-live/discover/getting-started).

## LiveApp UX requirements

Your LiveApp must respect some UX requirements:

- 0-click connect to the wallet (user's wallet must be automatically connected when opening your LiveApp)
- Login through other wallets must not be possible
- Design must be responsive for optimal display on all devices
- No unlimited token approvals should be requested from users. Instead, only request approvals for the amount of tokens required to stake/unstake.
- Use trusted names (ENS or others).
- After a successful transaction (staking/unstaking, delegation, rewards claiming..), a confirmation page with the transaction hash must be displayed to users, allowing them to easily confirm its status.
- If applicable, the staking method (such as native staking, liquid staking, etc.) should be displayed to users, along with the names of the validators to whom the assets are delegated to.

The Ledger team will review and validate your LiveApp’s user flow and ensure compliance with the guidelines mentioned above.

> **Note:** If a token (wether it is liquid or not) representing the staking position is
> issued to users, please inform Ledger of the token's name and address.

## URL parameters for direct navigation

To ensure users are directed to the correct LiveApp page for specific actions (such as staking/unstaking) triggered from , your LiveApp must implement URL parameters to support direct navigation.

When  calls your LiveApp using these URLs, users should be seamlessly redirected to the appropriate screen based on the specified parameters. Each parameter should correspond to a particular action, enabling smooth and targeted in-app transitions.

URL parameters:

- `action`: specifies the action to be performed, either `stake`, `unstake`, `manage` or `claim_rewards`.
- `accountAddress`: the address of the user executing the action.
- `accountId`: the ID of the user's account in .
- `cryptoCurrency`: the crypto asset involved in the action.
- `network`: the blockchain (network) where the action takes place.
- `language`: the language preference of the user set in .
- `theme`: the theme preference of the user set in .
- `fix_parameters`: when set to `true`, restrict users from changing the network, coins, and connected address within your LiveApp frontend.
- `validator_address`: if needed, the validator address related to the `action`. For example, claiming rewards (`action=claim_rewards`) from a specific validator.

**Example**:

```
https://earn.provider.widget.com?[accountAddress]=0x…&[cryptoCurrency]=ETH&[network]=arbitrum&[action]=unstake&[language]=en&[theme]=dark&[fix_parameters]=true
```

Ensure your app recognizes these parameters and routes users directly to the relevant screens. If a parameter is missing or invalid, provide appropriate fallbacks, such as redirecting to a default home or dashboard screen.

## Manifest update

In some cases, your LiveApp might interact with third-party smart contracts that you don't own and are already clear signed. If that is the case, you must update your manifest to specify this dependency.

For example, if your LiveApp interacts with eigenlayer smart contracts (that are already clear signed and used by other LiveApps), then your LiveApp's manifest must include the following:

```json
"dependency": [
  "eigenlayer"
]
```

Please contact the Ledger team to confirm whether a third-party smart contract is already clear signed, and which value to use in your manifest for it.
