Skip to content

Instantly share code, notes, and snippets.

@0xAnonymous
Last active August 7, 2020 15:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save 0xAnonymous/1fa57eb7fb0c163a26199df8089f1bb1 to your computer and use it in GitHub Desktop.
Save 0xAnonymous/1fa57eb7fb0c163a26199df8089f1bb1 to your computer and use it in GitHub Desktop.

Pseudonym Pairs: a proof-of-unique-human system

Pseudonym Pairs is a coordination game for global proof-of-unique-human, through monthly pseudonym events that last 15 minutes, where every single person on Earth is randomly paired together with another person, 1-on-1, to verify that the other is a human being, in a pseudo-anonymous context. The proof-of-unique-human is that you are with the same person for the whole event. The proof-of-unique-human is untraceable from month to month, much like cash. True anonymity.

Implementation

The Pseudonym Pairs system is built around the functions register(), immigrate(), dispute() and reassign(). The schedule is enforced with scheduler(). Personhood is verified with the public mapping proofOfPersonhood. Mixing is done with external contracts. Incredibly simple.

For a complete reference implementation, see PseudonymPairs.sol.

Game theory

Verification in the pairs requires both people to verify one another. The system is built around a general dispute mechanism, dispute(), that breaks up a pair and subordinates both peers each under another pair, that acts as a form of court. The peers under these "courts" have to be verified by both people in the pair, 2-on-1. This mechanism makes it possible to use pairs as the standard mode of operation. The same court validation is also used when opting-in or "immigrating" to the network (using immigrate()), the immigrant is subordinated another pair. That immigration requires people to pass a form of "virtual border" is the basis for how the network prevents bots (as in, fake accounts. )

Attack vectors

The only attack vector is collusion attacks. They scale with an inverse square relationship, and the payoff is minimal unless a significant part of the population colludes. The pairs the colluders gains control of can be calculated with how many pairs they get majority in (both people in. ) Mathematically this is (colluders)/(population)^2, based on probability theory. The colluders control these pairs without a human appearing in event, which means they can simultaneously be verified at the border with the people assigned to those pairs.

The bots controlled and overall people that are free to be verified at the border increases slightly with repeated attacks, but there is less and less increase for each round. The benefit of repeated attacks can be calculated with the recursive sequence bots_n = ((colluders + population * bots_{n-1})/(population + population * bots_{n-1}))^2 and it plateaus very close to (colluders/population)^2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment