Peercoin: Evolve

This is a description of a PeerAssets game, similar to lolcats, that is aimed at the general themes of Natural selection, evolution, neural networks, and artificial intelligence. By defining a form of evolution, we can make make arguments about using blockchain parameters as natural inputs to a natural selection process that can result in a living network.

Some basic requirements for evolution include:

  • An origin of life. We will allow anyone to create a first phase of life by generating a PA token.
  1. Self-replication. The inclusion of the token in an on-chain transaction can be taken as an act of replication. Here, we are deviating some from other concepts of life, in that we have a 1-in-1-out form that cannot multiply. This will keep data recording limited to just following the custody chain of each token spawn.
  2. Blueprint, genome. Off-chain records of the genome can be kept. An initial creature spawn starts with, e.g. 0000000000, where each digit is a decimal integer from 0-9. We will call each digit as genome slot GS1, GS2, all the way to GS10.
  3. Inherit blueprint. One of the GS is replaced in the same slot with one random other token at the current address. If no other tokens exist at this address, skip this ‘breeding’ step. The random number can be derived from the block hash.
  4. Mutation. Every time a token is transacted, change one of its GS to a random number.
  5. Selection. Every time a token is transacted, calculate a survival score and compare it to 0. If the score is below, the token dies. Its genome is no longer edited upon transaction, but it can still alter the genome of living tokens that pass through its address and can still be moved between addresses.

Each digit represents a gene. I am not making a distinction between geno and phenotypes because there isn’t a direct concept of mother and father.

Rules for calculating the survival score (start at 0, negative score = dead token):

  1. Take Genome slot 1 (GS1) and multiply by the PoS difficulty and floor, removing decimal places. If the resulting number is prime, remove 10 points. Also, let’s add a corollary to make it interesting. Add GS1 number of survival points.
  2. If GS2 is equal to the last digit of the PoW diff, remove 10 points.
  3. If GS3 equals GS4, add 10 points if the including block is PoS or remove 10 points if PoW. If they are not equal and the including block is PoS remove 10 points or add 10 points if PoW.
  4. Multiply GS4 by the last base10 digit of PoW difficulty. If the result is above 50 then add 10 points.
  5. Add rand(GS5) points, subtract rand(GS5) points.
  6. If the including block contains fewer than GS6+3 txns, then add GS7.
  7. Subtract rand(GS7) survival points.
  8. If GS8>GS9, add 10 points. If GS8+GS9 > 5, subtract 10 points.
  9. If GS9 > last digit of PoW, add 5 points.
  10. If GS10 is odd, replace all rules with random number generators between 0 and that digit, randomly adding or subtracting them. Also add 10. This should result in an entirely random 50/50 survival distribution.

This ruleset will generally result in the first generation surviving 90% of the time.

Other ideas:

  • Concept of Age: If all the digits add up to more than 10, we can take another 2 digits to represent the age from 0 to 99 and increase it by one. At 99, the token dies.
  • Each token can be spawned with its own name. This can give people incentive to trade away tokens with a name they like to someone that might want a particular number in one of the GS slots.
  • Perhaps some form of dueling?
  • An additional incentive to trade tokens around to other people would be nice. Originally, I was trying to go for a concept of that you would intentionally want to send to people you think will send to other people. I’m not sure how to achieve that though.

Anyway, this should be enough to riff off of if anyone is interested.


If you define the rules and keep track, you can hypothetically apply this to all PA tokens, each having a resulting quality of (alive) or (dead) and a current genome. No need to actively play the game to participate.