# 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**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker) respectively. The process for [creating a Recipe IAM](https://docs.royco.org/how-it-works#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**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/token-support)**.**

## 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**](https://docs.royco.org/more/deposit-locker#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**](https://docs.royco.org/for-incentive-providers/create-an-iam#requirements-for-recipe-weiroll-scripts-at-a-minimum).

### Deposit Recipe

1. Call `amount()` on the [**WeirollWalletHelper**](https://docs.royco.org/for-incentive-providers/contract-addresses) 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**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker) to spend the amount returned in step one.
3. Call `merkleDeposit()` on the [**Deposit Locker**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker)**.**

### Withdrawal Recipe

1. Call `merkleWithdraw()` on the [**Deposit Locker**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker)**.**

## 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**](https://docs.royco.org/for-incentive-providers/create-an-iam#requirements-for-recipe-weiroll-scripts-at-a-minimum).

### Deposit Recipe

1. Call `amount()` on the [**WeirollWalletHelper**](https://docs.royco.org/for-incentive-providers/contract-addresses) 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**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker) to spend the amount returned in step one.
3. Call `deposit()` on the [**Deposit Locker**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker)**.**

### Withdrawal Recipe

1. Call `withdraw()` on the [**Deposit Locker**](https://docs.royco.org/more/cross-chain-deposit-module-ccdm/deposit-locker)**.**
