The Matching Protocol
The Matching Engine follows the following algorithm to match Proof Requesters with Proof Generators:
- The Matching Engine picks an unassigned Proof Request from the queue.
- It checks whether the Assignment Deadline since the Proof Request was submitted onchain hasn't passed.
- It filters Generators who have registered in the Market corresponding to the Proof Request such that:
- Max Proof Generation Time (submitted by Requesters) MaxProofTime (quoted by Generators)
- Budget (submitted by Requesters) PricePerProof (quoted by Generators)
- Available native stake (that's not already locked up in a job) Native stake per job for the Market
- Available Symbiotic stake (that's not already locked up in a job) Symbiotic stake per job for the Market
- Available compute (that's not already being used) Minimum compute required per job for the Market
- Amongst Generators that meet the above criteria, a Generator is randomly picked with a probability such that:
- it is inversely proportional to PricePerProof
- it is inversely proportional to MaxProofTime
- it is inversely proportional to the number of Tasks the Generator is currently engaged in
- it is inversely proportional to the number of times the Generator missed submitting a valid proof in the past
- it is directly proportional to the number of times the Generator successfully submitting a valid proof in the past