Gem Farm lets you offer a yield-bearing facility to loyal NFT ("gem" 💎) stakers.

IMPORTANT: as it currently stands, Gem Farm is unaudited software. We're looking for community members to help review the protocol, or projects to help fund a professional audit.


  • Anyone with a wallet can start a farm

  • Each new farm automatically starts an instance of Gem Bank, used for storing the staked NFTs

  • Each farm comes with a bunch of config knobs you can turn, such as minimum staking period, and cooldown period

  • When starting a farm you can decide on up to 2 rewards. For each one you choose:

    • Reward mint

    • Reward type - fixed or variable

  • As of right now, after the farm has been started, the above can't be changed. This is done for security reasons

    • Although the reward mint / type can't be changed - the actual schedules / amounts absolutely can!

    • Worst case you start a new farm with new mints / types

  • After the farm is ready, you as the farm manager authorize one or multiple funders (could be just you), who fund the rewards pots with $$$ and configure the reward schedule

  • Users show up and register as farmers. Once registered they can stake / unstake & claim rewards

    • Claiming can be done at any point without them having to unstake

  • Any unused rewards can be cancelled

  • There is also an option to lock rewards in place, to effectively "guarantee" them to users

  • Reward distribution depends on both gems staked, and gem rarity

Farm Config

  • As the farm manager it is possible to configure the following variables for the farm:

    • Min staking period - after staked, gems can't be unstaked until this number of seconds passes

    • Min cooldown period - after unstaked, gems can't be withdrawn until they complete a "cooldown" period of this many seconds

    • Unstaking fee - an additional fee, in lamports, charged on unstaking

  • These are set at farm initialization, but can also be tweaked later (which would affect future stakers, but not past)

  • Note: this is in addition to configuring reward schedules by funders, described below

Max Counts

  • This is a new feature since Feb-22

  • You can now set any of:

    • max farmer count per farm

    • max gem count per farm

    • max rarity point per farm

  • All of the above are optional, but if you configure any of them they will be checked

    • Eg you could say you only want to allow 200 farmers to stake on your farm. Once that count is reached, further staking instructions will fail

  • Max counts can be configured both during initialization of the farm - and during farm update

    • Both require farm manager to sign off

  • To see how it works see this test file

Funder lifecycle

  • A funder account needs to be authorized by the farm manager before they can deposit reward funds into one of the reward pots

  • When depositing, the funder also specifies a funding schedule - which can be fixed or variable

    • Each comes with its own config knobs explained in detail below

  • Regardless of the schedule, the Funder specifies 2 things:

    • Total reward amount

    • Total reward duration

  • Amount -

    • Is added to any previously unused rewards (eg if 1000 was deposited, but only 200 accrued to stakers, 800 is available for next funding cycle)

    • Can limit the number of total stakers (fixed rewards)

  • Duration -

    • Dictates for how long the current funding schedule will be active

    • Anyone who stakes before the end of the schedule, will get a proportional amount of rewards attributed to them - anyone who stakes after gets nothing

  • After the initial funding, the farm manager / funder have a number of options:

    • Do nothing - farmers will be able to stake / unstake / claim current rewards

    • Cancel the reward - any rewards not yet accrued / promised (fixed rate concept) will be returned, and reward end will be set to current timestamp

    • Fund another reward - new duration can be specified, which can be shorter or longer than the current one, and new funding added to existing

    • Lock reward - this sets lock timestamp = reward end timestamp. After set, there is no way for the farm manager to withdraw the funding until after reward end passes

Farmer lifecycle

  • The user (farmer) starts by initializing a new farmer acount. This is used to store all the data associated with them, such as how long they've been staking for

  • Next they deposit their gems into the vault

    • You as the farm manager can restrict what NFTs can / can't go into the vault

    • That's because under the hood Gem Farm uses Gem Bank, with all of its wonderful features

  • Finally they click "stake". This locks up the vault and starts accruing any rewards that are currently funded

  • Farmers can claim their rewards anytime, without unstaking

    • There is no minimum claim amount, as long as it's >0, Farmer gets a payout

    • Both rewards are claimed at the same time, it's not possible to only do one

  • When the farmer is done staking, they hit "unstake". This unlocks the vault and let's them withdraw their gems

  • Note: the above steps map to how the code works, but as the front end dev you can hide many of these steps from the user. Eg you can init a new Farmer account, deposit their gems, and lock their vault all in a single click

Farm Treasury

  • The only type of fee currently collected by the farm treasury is the unstaking fee

  • Payouts can be made from the treasury to any address, for any amount (within what's accumulated ofc) by the farm manager

Last updated