🤙Claiming Rewards

This article shows how to claim rewards from your FuulProject contract.

Building claim function argument

The claim function argument is an array of claimCheckstruct elements.

// Solidity interface

struct ClaimCheck {
    address projectAddress;
    address currency;
    uint256 amount;
    uint256[] tokenIds; // used for NFTs
    uint256[] amounts; // used for NFTs
}

For example, to claim 10 ETH from a deployed FuulContract on Base, this will have to. be called:

const claimChecks = [
  {
    projectAddress: 'FuulProject contract address', // On the Handy Links section on the app
    currency: '0x0000000000000000000000000000000000000000',
    amount: ethers.utils.formatEther(10),
    tokenIds: [], // Empty because it's an ERC20
    amounts: [], // Empty because it's an ERC20
  },
];

Your claimChecks array can contain multiple elements, belonging to different projects and currencies.

Making the transaction

To perform a claim, the transaction must always be directed to the FuulManager contract.

The address is always 0xC38E3A10B5818601b29c83F195E8b5854AAE45aF on the networks we are deployed (Polygon, Arbitrum One, Optimism, Base).

So, the complete code, using ethers.js, would be the following:

// Build claimChecks

const claimChecks = [
  {
    projectAddress: 'FuulProject contract address', // On the Handy Links section on the app
    currency: '0x0000000000000000000000000000000000000000',
    amount: ethers.utils.formatEther(10),
    tokenIds: [], // Empty because it's an ERC20
    amounts: [], // Empty because it's an ERC20
  },
];

// Get FuulManager contract

const address = "0xC38E3A10B5818601b29c83F195E8b5854AAE45aF";

const abi = [
  "function claim(ClaimCheck[] calldata claimChecks) external"
];

const [user1] = await ethers.getSigners();

const fuulManager = new ethers.Contract(address, abi, user1);

// Make the transaction

const tx = await fuulManager.claim(claimChecks);

Last updated