Helpers to use and integrate Merkl
Live AMMs & Chains
Supported Liquidity Managers
🦄 UniswapV3 - Ethereum
🦄 UniswapV3 - Polygon
🦄 UniswapV3 - Optimism
🦄 UniswapV3 - Arbitrum
🍣 SushiswapV3 - Ethereum
🍣 SushiswapV3 - Polygon
🍣 SushiswapV3 - Optimism
🍣 SushiswapV3 - Arbitrum
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
CoreMerklcontract 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
Distributorcontract. It has no ability to alter distributions.
Addresses of the
DistributionCreatorcontracts are the same across all chains.
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.
uint32numbers 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.