Reaper Farm
Reaper FarmDiscord
  • Protocol Overview
    • Introduction
    • Reaper Philosophy
    • Contact Us
  • Vaults
    • What is a Vault?
    • rfTokens
    • Vault Tags
    • Vault Analytics (“More Info”)
    • Single Strategy Vaults
    • Multi-Strategy Vaults
    • Inactive Vaults
    • Fee Structure
    • How to use Vaults
  • Security
    • Overview
    • Disclosures
    • 0.1% Withdrawal Fee
    • Reaper Alpha
    • Audits
    • Bugs
  • Business Integration
    • Overview
    • Digit (Reliquary)
    • Granary
    • Ethos Reserve
    • Balancer Technology
  • Legal
    • Legal Disclaimer
  • Developers
    • Reaper SDK
      • Utilities
      • Test Tokens
      • Yield Farms
      • Uniswap Utilities
Powered by GitBook
On this page
  • Deploying your Master Chef
  • Adding a new farm
  • Depositing into your farms
  • Retrieving User Info
  • See how many farms you've started
  • Retrieving farm information

Was this helpful?

  1. Developers
  2. Reaper SDK

Yield Farms

Reaper deals a lot with Master Chef contracts, so ways to easily deploy and manage a lot of them is important

Deploying your Master Chef

Create and deploy a MasterChef contract with a single function. Input the administrator address and emissions per second, and instead of putting the starting timestamp simply input the delay until emissions begin in seconds and the proper timestamp will be created for you.

reaper.deployMasterChef(adminAddress: string, emissions:bigNumber, delay:uint-seconds) => (contract:object)

Adding a new farm

Add farms to your Master Chef contract using the addFarm function. Pass in the address of your target Chef contract along with the supported token and number of allocation points. You can put a sleep after deployment to make sure the contract is finished constructing before your next call.

reaper.addFarm(masterchefAddress: string, tokenAddress: string, allocation: uint) => (transactionReceipt:object)

Depositing into your farms

After you add farms to your Master Chef, you can approve and deposit in one function with depositToFarm. Pass in the MasterChef address, the Pool ID, and the amount you're depositing.

reaper.depositToFarm(chefAddress: string, pid: uint, amount: uint) => transactionReceipt:object

In the below example, I deploy a test token, mint it to my wallet, then deploy my Master Chef, add a farm, and deposit into it

Retrieving User Info

You can view your account information struct with getUserInfo.

reaper.getUserInfo(chefAddress: string, pid: uint, userAddress: string) => (userInfo:object)

In the example below, I create a test token and mint it, then deploy my Master Chef, add a farm, deposit into it, and check on my position.

Inserting pauses with sleep() after complex transactions will ensure all your contract interactions have finished execution before you try to interact with them.

Using .toString() makes it easy to to read bigNumber return values in the console


  const testToken = await reaper.deployTestToken("Reaper.Farm", "R3PR", reaper.BigGas);
  reaper.sleep(5000);

  await reaper.mintTestToken(testToken.address, self, await reaper.parseToken(100000));

  let chef = await reaper.deployMasterChef(self, ethers.utils.parseEther("0.01"), 3, reaper.BigGas);
  console.log(chef.address);
  reaper.sleep(15000);

  await reaper.addFarm(chef.address, testToken.address, 500, reaper.BigGas);
  reaper.sleep(5000);

  await reaper.depositToFarm(chef.address, 0, await reaper.parseToken(500));
  
  let userInfo = await reaper.getUserInfo(chef.address, 0, self);

  console.log({
    "amount": userInfo.amount.toString(),
    "rewardDebt": userInfo.rewardDebt.toString()
  });
  
> { amount: '500000000000000000000', rewardDebt: '0' }

See how many farms you've started

Read the length of your Master Chef contract's poolInfo array with getPoolLength.

reaper.getPoolLength(chefAddress) => (uint)

Retrieving farm information

Use getPoolInfo to return the PoolInfo struct for whatever Pool ID you pass in.

reaper.getPoolInfo(chefAddress:string, pid:uint) => (poolInfo:object)

  let poolInfo = await reaper.getPoolInfo(chef.address, 0);
  console.log({
    "lpToken": poolInfo.lpToken,
    "allocPoint": poolInfo.allocPoint.toString(),
    "lastRewardTime": poolInfo.lastRewardTime.toString(),
    "accCommPerShare": poolInfo.accCommPerShare.toString()
  });
  
  {
    lpToken: '0xE7411d7F74ea6ff4cF2658eb42232d34aEe9987D',
    allocPoint: '500',
    lastRewardTime: '1627374989',
    accCommPerShare: '0'
  }

PreviousTest TokensNextUniswap Utilities

Last updated 3 years ago

Was this helpful?