The code for issuing "border tokens", giving a random person the ability to issue one more. This mechanism is used to allow the swarm to grow as fast as it wants. Think a colony of bacteria, or a zygote, blob-growth.
function issueBorderToken() {
require(borderTokenAllocation[registry[msg.sender].id] >= 1);
borderTokenAllocation[registry[msg.sender].id]--;
borderToken[msg.sender]++;
uint i = 0;
while(borderTokenUtility[i].length == 0) i++;
uint randomPeer = getRandomNumber() % borderTokenUtility[i].length;
borderTokenAllocation[borderTokenUtility[i][randomPeer]]++;
borderTokenUtility[i+1].push(borderTokenUtility[i][randomPeer]);
borderTokenUtility[i][randomPeer] = borderTokenUtility[i][borderTokenUtility[i].length - 1];
borderTokenUtility[i].length--;
}
Here's the overall structure for managing events, all organized in a single object, struct PseudonymEvent {}. The only scheduling needed is genesisEvent + eventCounter*28 days + p[e()].hour.
Very simple. Always on the weekend for all time zones, base hour 07:00 Saturday UTC, set with genesisEvent.
uint genesisEvent = 1580540400;
uint eventCounter;
function e() returns (uint) {return eventCounter; }
uint[] clockwork;
struct Reg {
bool rank;
uint id;
bool[] signatures;
bool verified;
}
struct PseudonymEvent {
uint hour;
mapping(address => Reg) registry;
mapping(bool => mapping(uint => address)) registryIndex;
uint[][2] index;
mapping(bool => mapping(uint => uint)) indexLookup;
uint[][2] courtUtility;
mapping(uint => uint) borderTokenAllocation;
uint[][] borderTokenUtility;
mapping(address => uint) borderToken;
mapping(address => uint) registrationToken;
mapping(address => uint) verifiedToken;
mapping(address => bool) proofOfPersonhood;
}
PseudonymEvent[] p;