Overview
Last updated
Last updated
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
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
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
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
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
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