WAuraPools will irreversibly break if reward tokens are added to pool after deposit
WAuraPools will irreversibly break if reward tokens are added to pool after deposit due to an OOB error on accExtPerShare.\\nWAuraPools.sol#L166-L189\\n```\\n    uint extraRewardsCount = IAuraRewarder(crvRewarder)\\n        .extraRewardsLength(); <- @audit-issue rewardTokenCount pulled fresh\\n    tokens = new address[](extraRewardsCount + 1);\\n    rewards = new uint256[](extraRewardsCount + 1);\\n\\n    tokens[0] = IAuraRewarder(crvRewarder).rewardToken();\\n    rewards[0] = _getPendingReward(\\n        stCrvPerShare,\\n        crvRewarder,\\n        amount,\\n        lpDecimals\\n    );\\n\\n    for (uint i = 0; i < extraRewardsCount; i++) {\\n        address rewarder = IAuraRewarder(crvRewarder).extraRewards(i);\\n\\n        @audit-issue attempts to pull from array which will be too small if tokens are added\\n        uint256 stRewardPerShare = accExtPerShare[tokenId][i];\\n        tokens[i + 1] = IAuraRewarder(rewarder).rewardToken();\\n        rewards[i + 1] = _getPendingReward(\\n            stRewardPerShare,\\n            rewarder,\\n            amount,\\n            lpDecimals\\n        );\\n    }\\n```\\n\\naccExtPerShare stores the current rewardPerToken when the position is first created. It stores it as an array and only stores values for reward tokens that have been added prior to minting. This creates an issue if a reward token is added because now it will attempt to pull a value for an index that doesn't exist and throw an OOB error.\\nThis is problematic because pendingRewards is called every single transaction via the isLiquidatable subcall in BlueBerryBank#execute.
Use a mapping rather than an array to store values
WAuraPools will irreversibly break if reward tokens are added to pool after
```\\n    uint extraRewardsCount = IAuraRewarder(crvRewarder)\\n        .extraRewardsLength(); <- @audit-issue rewardTokenCount pulled fresh\\n    tokens = new address[](extraRewardsCount + 1);\\n    rewards = new uint256[](extraRewardsCount + 1);\\n\\n    tokens[0] = IAuraRewarder(crvRewarder).rewardToken();\\n    rewards[0] = _getPendingReward(\\n        stCrvPerShare,\\n        crvRewarder,\\n        amount,\\n        lpDecimals\\n    );\\n\\n    for (uint i = 0; i < extraRewardsCount; i++) {\\n        address rewarder = IAuraRewarder(crvRewarder).extraRewards(i);\\n\\n        @audit-issue attempts to pull from array which will be too small if tokens are added\\n        uint256 stRewardPerShare = accExtPerShare[tokenId][i];\\n        tokens[i + 1] = IAuraRewarder(rewarder).rewardToken();\\n        rewards[i + 1] = _getPendingReward(\\n            stRewardPerShare,\\n            rewarder,\\n            amount,\\n            lpDecimals\\n        );\\n    }\\n```\\n