Integration Helpers

Helpers to use and integrate Merkl

🔗 Live AMMs and Chains

Live AMMs & Chains
Epoch Time
Supported Liquidity Managers
🦄 UniswapV3 - Ethereum
6 hours
Gamma, Arrakis
🦄 UniswapV3 - Polygon
6 hours
Gamma, Arrakis
🦄 UniswapV3 - Optimism
6 hours
🦄 UniswapV3 - Arbitrum
6 hours
🍣 SushiswapV3 - Ethereum
6 hours
🍣 SushiswapV3 - Polygon
6 hours
🍣 SushiswapV3 - Optimism
6 hours
🍣 SushiswapV3 - Arbitrum
6 hours

🧑‍💻 Smart Contracts

Merkl is organized around 2 main contracts on each chain on which it is available:
  • Distributor: where liquidity providers claim their rewards and stakeholders contest the proposed Merkle roots
  • DistributionCreator: where incentivizors deposit their rewards and specify the distribution parameters they want for it
Both contracts are managed through a CoreMerkl contract managed by a multisig which has the power to settle disputes, change dispute parameters, to modify fees and their recipients, and to whitelist new addresses allowed to modify Merkle roots in the Distributor contract. It has no ability to alter distributions.
Addresses of the Distributor and DistributionCreator contracts are the same across all chains.

🐋 Types and Specific Script Behavior

When depositing a reward, incentivizors should specify the addresses of the smart contracts they want to exclude from the distribution.
On top of that, while Gamma or Arrakis are automatically detected by the script, addresses of other types of liquidity position managers may need to be given to the contract when creating a distribution for the script to be able to specifically deal with them.
Overall, when creating a distribution, you may tell the script to apply a specific set of rules to some addresses by specifying for these addresses a predefined type.
Types are uint32 numbers and they are the same across the different chains on which Merkl is deployed.
While this docs is regularly updated, this page remains the most up to date source of truth for the mapping between types and how the script should handle them.