I am trying to understand how voting power moves between participants in a Governor contract using ERC20 votes. After reading the documentation and questions on the forum, I understand that token balance is used as a means of voting power. The _moveVotingPower function takes care of moving the voting power. Snapshots after a proposal is active are used as a means of preventing double voting.
According to the answer mentioned above, if a user X vote on proposal A with 100 tokens and then transfer all of them to Y, Y would get the tokens but would not be able to vote with those tokens. In other words, Y's voting weight would not be increased. In this case, X has an unfair advantage over Y in terms of voting power. Is it really the case or am I misunderstanding something?
The answer also mentions "snapshot of the voting power at a given time". Do we specify somewhere which snapshot we would like to use? Is it by default picking a specific snapshot? Where can I find more information regarding this?
There is no unfair advantage. Y got the tokens "too late" to vote for proposal A, and indeed those tokens were already "spent" on proposal A by X. However, if Y holds on to the tokens they will be able to vote with them for a future proposal B (and X won't be able to, because they no longer hold them).
There is a parameter in the Governor called "voting delay" which is a number of blocks, and the snapshot that is used to vote on a proposal X will be the block at which the proposal was created plus the voting delay.