The staking math allows users to freely deposit tokens, and once every N hours (less than X hours always) a snapshot is taken, which will account for the total amount staked at a given point in time.
Those who staked between `snapshotN` and `snapshotN+1` are eligible to claim their share of the rewards allocated for that period of time.
Allocation of rewards are done at the ending of the staking period—in this case at the moment of `snapshotN+1` )
Rewards are distributed between stakers whereby users will receive the same percentage of the rewards with percentages dictated by the amount staked as a percentage of the total staked at the time of the snapshot.
Assume user staked `S` tokens between 2 snapshots, and total staked was `TS` , where `TS >= S` strictly, user will get `S/TS * REWARDS_POOL`
Example: Alice stakes 100 tokens, Bob stakes 300 tokens, and Mark stakes 600 tokens for a total of 1000 tokens staked between two snapshots.
Rewards pool is 200 tokens so the distribution will be as follows:
Alice : 100/1000 * 200, Bob : 300/1000 * 200 , Mark : 600/1000 * 200 or 20, 60 and 120 tokens respectively earned.