Silo deposits earn reward as time passes. Process of claiming accrued reward is called "mow": it updates current balances of Roots and Stalk associated with deposits of certain token.
L2ContractMigrationFacet is used to migrate Silo deposits owned by smart contracts. Unlike ReseedSilo, this migration is user-executed and will happen after the migration process. Problem is that such migration forfeits "unmowed" rewards of account because accumulator stem is updated to the most recent version.
Here you can see that during migration it calculates grown Stalk associated with migrated deposits and updates lastStem
in the end:
https://github.com/Cyfrin/2024-05-beanstalk-the-finale/blob/df2dd129a878d16d4adc75049179ac0029d9a96b/protocol/contracts/beanstalk/silo/L2ContractMigrationFacet.sol#L191
lastStem
is cumulated value used to determine the value of stem at which rewards were "mowed" last time. As you can see, if user has other depositIds besides migrated ones, he looses rewards for them.
Users will lose "unmowed" rewards from other Silo deposits when they migrate via L2ContractMigrationFacet.
Manual Review
Mow in the beginning of migration:
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.