# Dynamic ledgers

Dynamic Ledgers Management lets you add and manage new blockchain ledgers by submitting an intent.

The initial release of Dynamic Ledgers Management in Version 1.19 provides support for EVM-based ledgers, and lets you connect to EVM-based private ledgers.

Adding a new ledger to Ripple Custody, or editing the details of the ledger, both involve submitting an intent (a secure request requiring approval), using the new `v0_CreateLedger` or `v0_UpdateLedger` intent type with the [Propose an intent](/products/custody/v1.36/reference/api/openapi/intents/createintent) API operation. For more information about submitting an intent, see [Propose intents](/products/custody/v1.36/governance/intents/manage-intents-and-approvals#submit-an-intent-with-the-api).

## Prerequisites

Before you can successfully submit an intent to add a blockchain ledger, the following background setup is required:

1. Ask your Ripple liaison which ledgers are available to add. The current list, including the requisite payloads you need to add them, is given in [Dynamic ledger payloads](/products/custody/v1.36/accounts-and-assets/blockchains/dynamic-ledgers-payloads). If you want to add ledger that's not available, contact your Ripple liaison.
2. A new indexer needs to be spun up and online to support creation of the requested ledger account. For SaaS customers, Ripple does this for you. For on-prem customers, you need to do this yourself. In either case, your Ripple liaison will provide details.


## Propose the intent to add or update the ledger

To add a new blockchain ledger to the trusted ledgers for this instance:

1. Prepare the request body in the standard intent proposal format, with a `payload` block similar to the example shown in [Payload example for CreateLedger](#payload-example-for-createledger). For more information, see [User-signed proposal request body](/products/custody/v1.36/governance/intents/intent-request-structure#user-signed-proposal-request-body).
2. Call the [Perform a dry run for an intent](/products/custody/v1.36/reference/api/openapi/intents/intentdryrun) operation, with the `request` field excluded. For more information, see [Dry run intents](/products/custody/v1.36/governance/intents/manage-intents-and-approvals#dry-run-an-intent-with-the-api).
This step is optional, but highly recommended. A dry run can reveal errors or unintended consequences of the intent.
You can repeat this step more than once to obtain the required result.
3. Sign the request body and call the [Propose an intent](/products/custody/v1.36/reference/api/openapi/intents/createintent) operation. For more information, see [Propose an intent to create an entity](/products/custody/v1.36/governance/intents/manage-intents-and-approvals#submit-an-intent-with-the-api).
4. Check the update. For more information, see [Check updates](/products/custody/v1.36/governance/intents/manage-intents-and-approvals#check-state-with-the-api).


### Payload example for CreateLedger

This example adds an Ethereum Testnet Holesky ledger to the list of trusted ledgers:


```json
{
    "payload": {
        "id": "ethereum-testnet-holesky",
        "alias": "Ethereum Testnet Holesky",
        "parameters": {
            "type": "Ethereum",
            "chainId": 17000,
            "supportsEIP1559": true,
            "nativeTickerName": "Ether Testnet Holesky",
            "nativeTickerSymbol": "tETH",
            "vaultLedgerIdentifier": "eth"
        },
        "description": null,
        "customProperties": {},
        "type": "v0_CreateLedger"
    }
}
```

For a list of payloads for currently supported ledgers, see [Dynamic ledger payloads](/products/custody/v1.36/accounts-and-assets/blockchains/dynamic-ledgers-payloads).

### Payload example for UpdateLedger

This example updates the Ethereum Testnet Holesky ledger:


```json
{
    "payload": {
        "reference": {
            "id": "ethereum-testnet-holesky",
            "revision": 1
        },
        "alias": "Ethereum Testnet Holesky",
        "parameters": {
            "type": "Ethereum",
            "chainId": 17000,
            "supportsEIP1559": true,
            "nativeTickerName": "Ether Testnet Holesky",
            "nativeTickerSymbol": "tETH",
            "vaultLedgerIdentifier": "eth"
        },
        "description": null,
        "customProperties": {},
        "type": "v0_UpdateLedger"
    }
}
```

For a list of update payloads for currently supported ledgers, see [Dynamic ledger update payloads](/products/custody/v1.36/accounts-and-assets/blockchains/dynamic-ledgers-update-payloads).