# CCDM Recipe IAMs

Enabling a **Recipe IAM** to work with CCDM is simple:  the deposit and withdrawal recipes for the market must deposit and withdraw into/from the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md) respectively. The process for [creating a Recipe IAM](/more/how-it-works.md#creating-recipe-action-iams) and negotiating the incentives for your campaign remains the same.

**Note: The input tokens for CCDM enabled markets must abide to** [**these guidelines**](/more/cross-chain-deposit-module-ccdm/token-support.md)**.**

## Merkle Deposit Recipe IAMs

Merkle deposit Recipe IAMs can merklize and bridge 8 million+ individual deposits per CCDM bridge transaction. Every CCDM bridge sends the merkle root along with the sum of all deposits in the merkle tree to the destination chain, where prorated withdrawals are facilitated by providing a merkle proof, demonstrating that a deposit was made by the claimant. Withdrawals are not enabled by default on the source chain, but in the rare case that they are needed,  the [**Deposit Locker Owner**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md#deposit-locker-owner) can eternally halt all deposits and bridges for the market and enable withdrawals. Due to the nature of source chain withdrawals for these types of markets, they are best suited as [**Upfront or Arrear Recipe IAMs**](/for-incentive-providers/create-an-iam.md#requirements-for-recipe-weiroll-scripts-at-a-minimum).

### Deposit Recipe

1. Call `amount()` on the [**WeirollWalletHelper**](/for-incentive-providers/contract-addresses.md) contract to get the AP's fill/deposit amount of input tokens.
2. Call `approve()`  on the market's input token to allow the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md) to spend the amount returned in step one.
3. Call `merkleDeposit()` on the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md)**.**

### Withdrawal Recipe

1. Call `merkleWithdraw()` on the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md)**.**

## Individual Deposit Recipe IAMs

Individual deposit Recipe IAMs can bridge up to 300 depositors per CCDM bridge transaction. Every CCDM bridge sends and caches each depositor's deposit information (depositor address and total deposit amount) on the destination chain, allowing for prorated withdrawals without the need for a merkle proof. Withdrawals are enabled by default on the source chain, making these markets optimal as [**Forfeitable Recipe IAMs**](/for-incentive-providers/create-an-iam.md#requirements-for-recipe-weiroll-scripts-at-a-minimum).

### Deposit Recipe

1. Call `amount()` on the [**WeirollWalletHelper**](/for-incentive-providers/contract-addresses.md) contract to get the AP's fill/deposit amount of input tokens.
2. Call `approve()`  on the market's input token to allow the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md) to spend the amount returned in step one.
3. Call `deposit()` on the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md)**.**

### Withdrawal Recipe

1. Call `withdraw()` on the [**Deposit Locker**](/more/cross-chain-deposit-module-ccdm/deposit-locker.md)**.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.royco.org/more/cross-chain-deposit-module-ccdm/ccdm-recipe-iams.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
