diff --git a/lib/gem_common/src/errors.rs b/lib/gem_common/src/errors.rs index 2e5e93346..f6d22381c 100644 --- a/lib/gem_common/src/errors.rs +++ b/lib/gem_common/src/errors.rs @@ -107,7 +107,9 @@ pub enum ErrorCode { #[msg("max rarity points exceeded")] TooManyRarityPointsStaked, //0x17a2 - Reserved51, + #[msg("unstaking fee lamports must be either 0 or greater than 890880")] + InvalidUnstakingFee, //0x17a3 + Reserved52, Reserved53, Reserved54, diff --git a/programs/gem_farm/src/instructions/init_farm.rs b/programs/gem_farm/src/instructions/init_farm.rs index 14104a02a..0ef1bd349 100644 --- a/programs/gem_farm/src/instructions/init_farm.rs +++ b/programs/gem_farm/src/instructions/init_farm.rs @@ -110,6 +110,11 @@ pub fn handler( return Err(error!(ErrorCode::InvalidParameter)); } + //ensure unstaking fee does not violate solana v1.9.5 rent requirements + if farm_config.unstaking_fee_lamp > 0 && farm_config.unstaking_fee_lamp < 890880 { + return Err(error!(ErrorCode::InvalidUnstakingFee)); + } + //record new farm details let farm = &mut ctx.accounts.farm; diff --git a/tests/gem-farm/rate-agnostic/gem-farm.misc.test.ts b/tests/gem-farm/rate-agnostic/gem-farm.misc.test.ts index 7887236ac..063df3f3f 100644 --- a/tests/gem-farm/rate-agnostic/gem-farm.misc.test.ts +++ b/tests/gem-farm/rate-agnostic/gem-farm.misc.test.ts @@ -31,6 +31,19 @@ describe('misc', () => { await gf.prepAccounts(45000); }); + it('FAILS to init farm with invalid unstaking fee', async () => { + await expect( + gf.callInitFarm( + { + minStakingPeriodSec: new BN(0), + cooldownPeriodSec: new BN(0), + unstakingFeeLamp: new BN(100), + }, + RewardType.Fixed + ) + ).to.be.rejectedWith('InvalidUnstakingFee'); + }); + it('inits the farm', async () => { await gf.callInitFarm(defaultFarmConfig, RewardType.Fixed);