The high level idea is that there needs to be some “cancel mechanism”, such that one can foul a bribing party into a false statement or at least not be able to prove a certain message. Vitalik chose in the MACI specs the “Key changing” method.
I propose the invalidation method:
Each user can insert this message, and then all future messages from this user will not be considered for the final outcome calculation. Hence, a user can first input an invalidation message and then input a “Vote for X”. Then they can show a potential bribing person this voting message “Vote for X”, but the bribing person can not tell whether this vote is really valid or not.
I think it can not go very badly, as the users can always vote on-chain as a fallback. I am not sure how to make it truly decentralized.
Yeah, redacting is another cancellation method. Though I think its technically harder to implemented than a simple overwrite of a vote: E.g. if a user first votes for X and then votes for Z, it is similar to a cancellation - the first vote is cancelled and substituted.