In 1) Tasking, I designed a decentralised tasking system requiring a membership service providing a list of all active checker nodes. Will suggested a simpler solution that does not require a list of active members. (Slack discussion.)
Assumptions
- Checker nodes are (somewhat) uniformly distributed across all IPv4 /24 subnets.
- Whenever we create a committee of IPv4 /24 subnets, there will be at least X% of checker nodes in those networks online; we can estimate the value of X, and it does not change too much.
Ideas
- Use consistent hashing to split the space of all IPv4 /24 subnets into buckets - committees.
- Extend the length of the SPARK round and let each committee perform multiple retrieval checks per round.
- Assign rewards to checker nodes retroactively after nodes report retrieval results. After the round is over, we know exactly which checker nodes participated in the round - that gives us the membership information.
- Within each subnet and for each job, assign the reward to the node inside that subnet that is “closest” to the job, using the XOR distance between the node’s public key and the hash of the job definition. (See below for details.)
Benefits
- We can have a network of tasker nodes that don’t share any state.
- Tasks are computed deterministically. The fraud detection algorithm can re-run the tasking algorithm to verify which tasks are legitimate.
The algorithm executed by the tasking node
Parameters
- CC - “committee count” - how many committees we want to form. Initially, this will be a hardcoded parameter. We will manually tweak it over time based on the number of active checker nodes.
- TC - “tasks per committee” - how many tasks to define for each committee.
- TN - “tasks per node” - how many tasks a node performs. This value should be a fraction of TC, e.g.
TN = TC/5
We need to find a good balance between TC & TN.
- We want TC to be high to maximise the probability that every checker node receives at least one reward.