Integration Requirements

On the Katana chain, at the distributor contract address: 0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae, two main operations need to be performed:

distributor.setClaimRecipient(address(minter), katToken);
  1. The above tells the distributor that instead of sending KAT rewards directly to the user, they should now be sent to the Minter contract.

distributor.toggleOperator(user, address(minter));
  1. The above grants the Minter contract permission to claim the user’s rewards on their behalf.

After these two steps, the Minter contract can be called either:

  • From the Levrex frontend (user-friendly UI), or

  • Directly by using the Minter contract’s function:

  • users, tokens, amounts, proofs get these details from Merkl Rewards API

minter.processClaims(users, tokens, amounts, proofs);
  1. The above processClaims call lets the Minter claim locked KAT rewards from Merkl and mint LKAT for users.

Setting the claim recipient and toggling the operator are necessary so that Minter can legally and technically claim the KAT on behalf of the user before converting it to LKAT.

Smart contract interfaces:

A. Distributor Contract Interface (Merkl Distributor)

function setClaimRecipient(address recipient, address token) external;

[ Allows the user to specify that their KAT rewards should go to a different address ]

function toggleOperator(address user, address operator) external;

[ Lets the user enable or disable an operator (like the Minter) to claim on their behalf ]

B. Minter Contract Interface (Levrex Minter)

[ Claims KAT rewards for users and mints LKAT in return ]

C. LKAT ERC-20 Interface

LKAT ADDRESS: 0xaEFec36B1C6e8a03fb6563CEc97Cfea7A80d3EA0

LKAT is a standard ERC20 burnable token (from OpenZeppelin) that anyone can burn. It adds custom owner-controlled minting, dynamic minter lists, and disables ownership renouncement to ensure security and governance. It adds custom owner-controlled minting, dynamic minter lists, and disables ownership renouncement to ensure security and governance.

Example flows for frontend and backend integration

Frontend (user side):

  1. The user connects to the wallet.

  2. Get Reward Details.

  3. Fetch reward entitlements & Merkle proofs from Merkl API.

  4. Bundle claim data (users, tokens, amounts, proofs).

  5. Check if users has already executed setClaimRecipient & toggleOperator

  6. Frontend helps user call: - setClaimRecipient(Minter, KAT_ADDRESS) - toggleOperator(user, Minter)

User Clicks Process Claims → frontend sends claim data & proofs directly to Minter Contract.

Last updated