delegatorPool address is never initialized in SDLPoolPrimary::initialize function resulting in user stake migrations always reverting/failing.
On deploying the SDLPrimaryPool, addresses of the sdlToken and boostController are set, if the delegatorPool is not set at that point, we go ahead and initialize the SDLPoolBase which is inherited by the SDLPoolPrimary contract. However, since we never got to initialize the delegatorPool variable, we'll essentially never make it into that else block in the initialize function resulting in the delegatorPool staying zero/un-initialized. This will result in migrate failing every time since we try to compare the msg.sender to a zero address which will return false.
Context::SDLPoolPrimary::initialize
Context: SDLPoolPrimary::_migrate
As you can see from the function initialize above, if the delegatorPool address is not set or an address 0, then it initializes the SDLPoolPrimary. The delegatorPool stays un-initialized at this point. The else block won't be reached because the address of the delegatorPool is not set.
Manual Review
Unable to migrate users from DelegatorPool to SDLPoolPrimary.
Initialize the delegatorPool variable or expose a function to be able to handle setting it at any time by the protocol.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.