πͺCustomazibility Hooks
Beyond the different types of pools of opportunities incentivizers can choose to track, incentive providers with Merkl have the possibility to customize their campaigns with some hooks to change the default behavior of their campaigns.
While some hooks are campaign-specific (e.g., prevent out of range liquidity from being incentivized), others are global and their behavior is roughly the same from one campaign type to another.
Here are some of the most common hooks supported by Merkl.
We are constantly adding new forms of hooks and customization tools to incentive providers on Merkl. This list may therefore not be fully up to date with what's currently supported by the Merkl engine and frontend.
Forwarders
For some campaign types, forwarders will be automatically detected and there is no need to specify them. This applies typically to concentrated liquidity campaigns where once whitelisted automated liquidity management solutions are automatically detected and supported.
For other ERC20 campaigns, incentive providers may choose to specify forwarders (provided that these are also ERC20 tokens) that are likely to hold the tokens to be incentivized.
Let's illustrate this forwarding feature using an ERC20 campaign incentivizing USDA holders. With forwarding enabled, users who staked their USDA and received stUSD in return can still be eligible to earn rewards even if they don't hold USDA in their wallets.
Here's how it works:
Staking Example: Users stake their USDA and receive stUSD tokens in return.
Forwarding Mechanism: Although the staked tokens (USDA) are not in the user's wallet (as they are held in the stUSD smart contracts), users are still rewarded based on their stUSD holdings.
Reward Eligibility: Merkl's forwarding mechanism can recognize their stake in the original tokens, ensuring that users with stUSD in their wallets can earn rewards.
As a result, if the token you are incentivizing can be staked in another contract (such as staking USDA in the stUSD contract), Merkl can trace back the liquidity in the staking contract to the original user.
For this to work, when creating a campaign you need to provide the staking contract addresses. The contract where users stake their tokens is the recipient of the initial rewards. The token issued when staking the token is the token to forward rewards to, and this contract needs to be an ERC20 token.
Most of the time, these are the same contracts, so you should enter the same address twice when creating a campaign.
Whitelisting
Incentive providers may whitelist some addresses (usually forwarders) so only the whitelisted addresses and the addresses that are associated with whitelisted addresses can be eligible to rewards.
Let's take the case of a campaign on a Uniswap V3 pool with 3 supported ALMs. If an incentive provider chooses to whitelist the addresses corresponding to 2 of the 3 ALMs and one individual user address, then only the addresses providing liquidity through the 2 ALMs and the whitelisted user providing liquidity directly on the pool will be eligible for rewards. The reward allocation rules that apply between whitelisted addresses are the same that would apply if all addresses were eligible.
For an ERC20 Campaign incentivizing holders of a given ERC20 token on a chain, let's say two staking contract addresses are whitelisted by the incentive providers, then only the addresses that staked within one of the 2 staking contracts will be eligible for rewards and the amount of rewards they get is dependent on how much they've staked over time with respect to the total amount that has been staked over the two staking contracts.
Whitelisting always prevails over blacklisting, in the sense that if an address is whitelisted and another one is blacklisted, all other non whitelisted addresses will by default be blacklisted and not eligible to rewards.
There may be cases where some campaigns run in parallel on the same opportunity (e.g., the same pool), and there is a campaign with a whitelist and another without. If you're a user providing liquidity and have any doubt about this, you should check the card corresponding to each campaign on the opportunity page to make sure that you understand what the APRs displayed are referring to, and what you need to do to be eligible to the whitelisted campaign, in case this is of interest.
Blacklisting
Incentive providers may choose to blacklist certain addresses from being eligible to rewards. If a forwarder address is blacklisted, then all the balance from the addresses associated to this forwarder will not be eligible for rewards.
Returning to the case of an ERC20 campaign incentivizing holders of a given ERC20 token on a chain: if a staking contract address is blacklisted, and a user has staked 10 tokens in the contract, but holds 5 tokens in its wallet, then only its 5 tokens will be eligible for the campaign's rewards.
More generally, if some addresses are blacklisted in a campaign, the share of all non-blacklisted users in the reward pool increases proportionally. In this case, users receive the same percentage of the rewards that the blacklisted addresses would have collected if they were not blacklisted, ensuring that the total rewards are distributed fairly among the eligible participants.
OFAC compliance
Merkl provides the option to automatically blacklist all OFAC sanctioned addresses on the blockchain. This ensures that any addresses listed by the Office of Foreign Assets Control (OFAC) are not eligible to receive rewards in any campaign. This feature helps incentive providers comply with international sanctions and regulatory requirements.
When enabled, Merkl continuously updates the blacklist with the latest OFAC sanctioned addresses, ensuring that your campaigns remain compliant without requiring manual intervention.
Incentivized bridged liquidity
Merkl has partnered with Jumper to enable incentivized bridged liquidity. This feature allows chains or other incentive providers to only incentivize users to bridge liquidity from another chain, rather than moving it between protocols on the same chain. This results in a real chain-wide increase in liquidity.
In fact, it's a way to only whitelist the set of addresses that used the chosen bridge.
Cross-chain Incentives
With Merkl, you can choose to incentivize activity on one chain while distributing rewards on another. If you don't want to deal with the hurdle of bridging your reward tokens to a given chain, this feature enables you to typically incentivize activity on a pool on Arbitrum but let people claim on Ethereum.
However, you need to be wary of the fact that some smart contract addresses on Arbitrum may be providing liquidity but are either not deployed at the same address on Ethereum or not deployed on Ethereum at all. In this case, these addresses will be unable to access their rewards. It's your responsibility to blacklist any addresses that may be affected.
Boosting Rewards with Merkl
Merkl allows you to boost rewards for users holding a specific token or NFT. The formula used for boosting is similar to Curve Financeβs but offers greater flexibility, as there is no 2.5x limit on boosting rewards for a user.
This boosting feature is not automatically supported for custom integrations (beyond Concentrated Liquidity campaigns and ERC20 campaigns). If you are interested, please reach out by opening a BD ticket in our Discord.
Curve Formula
Where
B is the boost a user receives.
d is the value a user deposits, in USD.
D is the total value deposited to the pool/vault, in USD.
v is the amount of veCRV a user has (vote weight).
V is the total veCRV in the system (total vote weight).
Merkl Boost
There is no minimum value, and you can boost users holding any token as much as you want!
Where:
B is the boost a user receives.
b is the boost multiplier selected by the Incentive Provider when creating a campaign (visible in the front end in the campaign creation page).
R is the total amount of rewards distributed per epoch.
r is the userβs rewards per epoch.
V is the total supply of the token used for the boost (for NFTs, itβs the number of NFTs in a collection).
v is the amount of the token held by the user during an epoch (or the number of NFTs held if applicable).
Boost for NFT Collections
We offer the ability to boost rewards based on the number of NFT a user holds from an NFT collection. If you'd like to set up a campaign with an NFT boost, please contact us to ensure the setup is configured accurately.
Eligibility
This hook allows incentive providers to reward only addresses that meet both a minimum token holding requirement and a set duration. For example, if the token chosen for eligibility is stUSD, and the threshold is set to 500 stUSD with a duration of 30 days, a user holding 600 stUSD for 44 days would qualify for rewards.
Addresses that fail to meet either the token amount or duration threshold are excluded from the campaignβs rewards, ensuring incentives are focused on long-term participants rather than short-term holders.
Last updated