> For the complete documentation index, see [llms.txt](https://docs.gysr.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.gysr.io/developers/error-codes.md).

# Error codes

We have adopted a system of error codes at GYSR to save gas costs on long revert messages.

<table><thead><tr><th width="150">Code</th><th width="347.73520625126906">Contract</th><th>Description</th></tr></thead><tbody><tr><td>p1</td><td>Pool</td><td>withdraw amount is zero</td></tr><tr><td>p2</td><td>Pool</td><td>withdraw amount exceeds vested balance</td></tr><tr><td></td><td></td><td></td></tr><tr><td>f1</td><td>PoolFactory</td><td>invalid staking module factory</td></tr><tr><td>f2</td><td>PoolFactory</td><td>invalid reward module factory</td></tr><tr><td>f3</td><td>PoolFactory</td><td>fee exceeds max</td></tr><tr><td>f4</td><td>PoolFactory</td><td>invalid whitelist type</td></tr><tr><td>f5</td><td>PoolFactory</td><td>module factory is zero address</td></tr><tr><td></td><td></td><td></td></tr><tr><td>oc1</td><td>OwnerController</td><td>sender is not owner</td></tr><tr><td>oc2</td><td>OwnerController</td><td>sender is not controller</td></tr><tr><td>oc3</td><td>OwnerController</td><td>new owner is zero address</td></tr><tr><td>oc4</td><td>OwnerController</td><td>new controller is zero address</td></tr><tr><td></td><td></td><td></td></tr><tr><td>sm1</td><td>ERC20StakingModule</td><td>stake amount is zero</td></tr><tr><td>sm2</td><td>ERC20StakingModule</td><td>stake amount is too small</td></tr><tr><td>sm3</td><td>ERC20StakingModule</td><td>unstake or claim amount is zero</td></tr><tr><td>sm4</td><td>ERC20StakingModule</td><td>staking module has zero balance</td></tr><tr><td>sm5</td><td>ERC20StakingModule</td><td>unstake or claim amount is too small</td></tr><tr><td>sm6</td><td>ERC20StakingModule</td><td>unstake or claim amount exceeds user balance</td></tr><tr><td>sm7</td><td>ERC20StakingModule</td><td>invalid bytes data for account address</td></tr><tr><td>sm8</td><td>ERC20StakingModule</td><td>staking operator is not approved</td></tr><tr><td></td><td></td><td></td></tr><tr><td>smf1</td><td>ERC20StakingModuleFactory</td><td>invalid constructor data</td></tr><tr><td></td><td></td><td></td></tr><tr><td>smn1</td><td>ERC721StakingModule</td><td>token does not support ERC721 interface</td></tr><tr><td>smn2</td><td>ERC721StakingModule</td><td>stake amount is zero</td></tr><tr><td>smn3</td><td>ERC721StakingModule</td><td>stake amount exceeds user balance</td></tr><tr><td>smn4</td><td>ERC721StakingModule</td><td>stake token ID data is invalid</td></tr><tr><td>smn5</td><td>ERC721StakingModule</td><td>unstake amount is zero</td></tr><tr><td>smn6</td><td>ERC721StakingModule</td><td>unstake amount exceeds user balance</td></tr><tr><td>smn7</td><td>ERC721StakingModule</td><td>unstake token ID data is invalid</td></tr><tr><td>smn8</td><td>ERC721StakingModule</td><td>user does not own the specified token</td></tr><tr><td>smn9</td><td>ERC721StakingModule</td><td>claim amount is zero</td></tr><tr><td>smn10</td><td>ERC721StakingModule</td><td>claim amount exceeds user balance</td></tr><tr><td></td><td></td><td></td></tr><tr><td>smnf1</td><td>ERC721StakingModuleFactory</td><td>invalid constructor data</td></tr><tr><td></td><td></td><td></td></tr><tr><td>rm1</td><td>ERC20BaseRewardModule</td><td>reward funding amount is zero</td></tr><tr><td>rm2</td><td>ERC20BaseRewardModule</td><td>funding start is in the past</td></tr><tr><td>rm3</td><td>ERC20BaseRewardModule</td><td>exceeds max active funding schedules</td></tr><tr><td></td><td></td><td></td></tr><tr><td>crm1</td><td>ERC20CompetitiveRewardModule</td><td>initial time bonus is greater than max</td></tr><tr><td>crm2</td><td>ERC20CompetitiveRewardModule</td><td>unstake, invalid gysr bonus data</td></tr><tr><td>crm3</td><td>ERC20CompetitiveRewardModule</td><td>unstake in same block, no time has elapsed</td></tr><tr><td></td><td></td><td></td></tr><tr><td>crmf1</td><td>ERC20CompetitiveRewardModuleFactory</td><td>invalid constructor data</td></tr><tr><td></td><td></td><td></td></tr><tr><td>frm1</td><td>ERC20FriendlyRewardModule</td><td>vesting start is greater than 1.0</td></tr><tr><td>frm2</td><td>ERC20FriendlyRewardModule</td><td>stake, invalid gysr bonus data</td></tr><tr><td>frm3</td><td>ERC20FriendlyRewardModule</td><td>unstake in same block, no time has elapsed</td></tr><tr><td></td><td></td><td></td></tr><tr><td>frmf1</td><td>ERC20FriendlyRewardModuleFactory</td><td>invalid constructor data</td></tr><tr><td></td><td></td><td></td></tr><tr><td>asm1</td><td>AssignmentStakingModule</td><td>stake amount is zero</td></tr><tr><td>asm2</td><td>AssignmentStakingModule</td><td>sender is not the controller</td></tr><tr><td>asm3</td><td>AssignmentStakingModule</td><td>invalid byte encoding for assignee address</td></tr><tr><td>asm4</td><td>AssignmentStakingModule</td><td>unstake amount is zero</td></tr><tr><td>asm5</td><td>AssignmentStakingModule</td><td>sender is not the controller</td></tr><tr><td>asm6</td><td>AssignmentStakingModule</td><td>invalid byte encoding for assignee address</td></tr><tr><td>asm7</td><td>AssignmentStakingModule</td><td>unstake amount exceeds current assignee rate</td></tr><tr><td>asm8</td><td>AssignmentStakingModule</td><td>claim amount is zero</td></tr><tr><td>asm9</td><td>AssignmentStakingModule</td><td>claim amount exceeds current assignee rate</td></tr><tr><td></td><td></td><td></td></tr><tr><td>bsm1</td><td>ERC20BondStakingModule</td><td>vesting period below minimum threshold</td></tr><tr><td>bsm2</td><td>ERC20BondStakingModule</td><td>stake amount is zero</td></tr><tr><td>bsm3</td><td>ERC20BondStakingModule</td><td>invalid byte encoding for stake params</td></tr><tr><td>bsm4</td><td>ERC20BondStakingModule</td><td>token market is not open</td></tr><tr><td>bsm5</td><td>ERC20BondStakingModule</td><td>debt exceeds market max for individual bond</td></tr><tr><td>bsm6</td><td>ERC20BondStakingModule</td><td>debt exceeds remaining market capacity</td></tr><tr><td>bsm7</td><td>ERC20BondStakingModule</td><td>bond debt is below user minimum threshold </td></tr><tr><td>bsm8</td><td>ERC20BondStakingModule</td><td>invalid byte encoding for unstake bond ID</td></tr><tr><td>bsm9</td><td>ERC20BondStakingModule</td><td>unstake sender does not own specified bond</td></tr><tr><td>bsm10</td><td>ERC20BondStakingModule</td><td>unstake in same block, time has not elapsed</td></tr><tr><td>bsm11</td><td>ERC20BondStakingModule</td><td>unstake amount must be zero when burndown is disabled</td></tr><tr><td>bsm12</td><td>ERC20BondStakingModule</td><td>vesting period has elapsed, no principal left to unstake</td></tr><tr><td>bsm13</td><td>ERC20BondStakingModule</td><td>unstake amount exceeds remaining principal</td></tr><tr><td>bsm14</td><td>ERC20BondStakingModule</td><td>unstake amount is too small</td></tr><tr><td>bsm15</td><td>ERC20BondStakingModule</td><td>invalid byte encoding for claim bond ID</td></tr><tr><td>bsm16</td><td>ERC20BondStakingModule</td><td>claim sender does not own specified bond</td></tr><tr><td>bsm17</td><td>ERC20BondStakingModule</td><td>invalid byte encoding for update bond ID</td></tr><tr><td>bsm18</td><td>ERC20BondStakingModule</td><td>update sender does not own specified bond</td></tr><tr><td>bsm19</td><td>ERC20BondStakingModule</td><td>market has already been opened</td></tr><tr><td>bsm20</td><td>ERC20BondStakingModule</td><td>max number of markets has been reached</td></tr><tr><td>bsm21</td><td>ERC20BondStakingModule</td><td>open market, minimum price is zero</td></tr><tr><td>bsm22</td><td>ERC20BondStakingModule</td><td>open market, max bond size is zero </td></tr><tr><td>bsm23</td><td>ERC20BondStakingModule</td><td>open market, total debt capacity is zero</td></tr><tr><td>bsm24</td><td>ERC20BondStakingModule</td><td>close market, capacity is already zero</td></tr><tr><td>bsm25</td><td>ERC20BondStakingModule</td><td>adjusted market does not exist</td></tr><tr><td>bsm26</td><td>ERC20BondStakingModule</td><td>adjust market, minimum price is zero</td></tr><tr><td>bsm27</td><td>ERC20BondStakingModule</td><td>adjust market, max bond size is zero</td></tr><tr><td>bsm28</td><td>ERC20BondStakingModule</td><td>adjust market, total debt capacity is zero</td></tr><tr><td>bsm29</td><td>ERC20BondStakingModule</td><td>withdraw from market that does not exist</td></tr><tr><td>bsm30</td><td>ERC20BondStakingModule</td><td>withdraw amount is zero</td></tr><tr><td>bsm31</td><td>ERC20BondStakingModule</td><td>withdraw amount exceeds vested principal</td></tr><tr><td></td><td></td><td></td></tr><tr><td>xrm1</td><td>ERC20FixedRewardModule</td><td>time period is zero</td></tr><tr><td>xrm2</td><td>ERC20FixedRewardModule</td><td>constant reward rate is zero</td></tr><tr><td>xrm3</td><td>ERC20FixedRewardModule</td><td>stake amount exceeds rewards capacity</td></tr><tr><td>xrm4</td><td>ERC20FixedRewardModule</td><td>current stake has not fully vested</td></tr><tr><td>xrm5</td><td>ERC20FixedRewardModule</td><td>fund amount is zero</td></tr><tr><td>xrm6</td><td>ERC20FixedRewardModule</td><td>withdraw amount is zero</td></tr><tr><td>xrm7</td><td>ERC20FixedRewardModule</td><td>withdraw amount exceeds module balance</td></tr><tr><td>xrm8</td><td>ERC20FixedRewardModule</td><td>withdraw amount exceeds uncommitted budget</td></tr><tr><td></td><td></td><td></td></tr><tr><td>lrm1</td><td>ERC20LinearRewardModule</td><td>time period is zero</td></tr><tr><td>lrm2</td><td>ERC20LinearRewardModule</td><td>constant reward rate is zero</td></tr><tr><td>lrm3</td><td>ERC20LinearRewardModule</td><td>stake amount exceeds rewards capacity</td></tr><tr><td>lrm4</td><td>ERC20LinearRewardModule</td><td>fund amount is zero</td></tr><tr><td>lrm5</td><td>ERC20LinearRewardModule</td><td>withdraw amount is zero</td></tr><tr><td>lrm6</td><td>ERC20LinearRewardModule</td><td>withdraw amount exceeds module balance</td></tr><tr><td>lrm7</td><td>ERC20LinearRewardModule</td><td>withdraw amount exceeds budget for committed runway</td></tr><tr><td></td><td></td><td></td></tr><tr><td>mrm1</td><td>ERC20MultiRewardModule</td><td>vesting start exceeds 1.0</td></tr><tr><td>mrm2</td><td>ERC20MultiRewardModule</td><td>invalid byte encoding for stake params </td></tr><tr><td>mrm3</td><td>ERC20MultiRewardModule</td><td>stake, reward token count exceeds total</td></tr><tr><td>mrm4</td><td>ERC20MultiRewardModule</td><td>stake, duplicate reward token</td></tr><tr><td>mrm5</td><td>ERC20MultiRewardModule</td><td>invalid byte encoding for unstake params</td></tr><tr><td>mrm6</td><td>ERC20MultiRewardModule</td><td>unstake, reward token count exceeds total</td></tr><tr><td>mrm7</td><td>ERC20MultiRewardModule</td><td>unstake, duplicate reward token</td></tr><tr><td>mrm8</td><td>ERC20MultiRewardModule</td><td>cannot unstake with remaining reward tokens registered</td></tr><tr><td>mrm9</td><td>ERC20MultiRewardModule</td><td>missing bytes data for claim params</td></tr><tr><td>mrm10</td><td>ERC20MultiRewardModule</td><td>invalid byte encoding for claim params</td></tr><tr><td>mrm11</td><td>ERC20MultiRewardModule</td><td>claim, reward token count exceeds total</td></tr><tr><td>mrm12</td><td>ERC20MultiRewardModule</td><td>claim index range is invalid</td></tr><tr><td>mrm13</td><td>ERC20MultiRewardModule</td><td>claim end index exceeds total user stakes</td></tr><tr><td>mrm14</td><td>ERC20MultiRewardModule</td><td>claim, duplicate reward token</td></tr><tr><td>mrm15</td><td>ERC20MultiRewardModule</td><td>missing bytes data for update params</td></tr><tr><td>mrm16</td><td>ERC20MultiRewardModule</td><td>invalid byte encoding for update params</td></tr><tr><td>mrm17</td><td>ERC20MultiRewardModule</td><td>update, reward token count exceeds total</td></tr><tr><td>mrm18</td><td>ERC20MultiRewardModule</td><td>update index range is invalid</td></tr><tr><td>mrm19</td><td>ERC20MultiRewardModule</td><td>update end index exceeds total user stakes</td></tr><tr><td>mrm20</td><td>ERC20MultiRewardModule</td><td>update, duplicate reward token</td></tr><tr><td>mrm21</td><td>ERC20MultiRewardModule</td><td>invalid byte encoding for clean params</td></tr><tr><td>mrm22</td><td>ERC20MultiRewardModule</td><td>clean, reward token count exceeds total</td></tr><tr><td>mrm23</td><td>ERC20MultiRewardModule</td><td>reward token does not exist</td></tr><tr><td>mrm24</td><td>ERC20MultiRewardModule</td><td>time elapsed is zero</td></tr><tr><td></td><td></td><td></td></tr><tr><td>crmi1</td><td>ERC20CompetitiveRewardModuleInfo</td><td>shares must be greater than zero</td></tr><tr><td>crmi2</td><td>ERC20CompetitiveRewardModuleInfo</td><td>shares greater than balance in user position</td></tr><tr><td></td><td></td><td></td></tr><tr><td>frmi1</td><td>ERC20FriendlyRewardModuleInfo</td><td>shares must be greater than zero</td></tr><tr><td>frmi2</td><td>ERC20FriendlyRewardModuleInfo</td><td>shares greater than balance in user position</td></tr></tbody></table>
