Skip to main content

The Matching Protocol

The Matching Engine follows the following algorithm to match Proof Requesters with Proof Generators:

  1. The Matching Engine picks an unassigned Proof Request from the queue.
  2. It checks whether the Assignment Deadline since the Proof Request was submitted onchain hasn't passed.
  3. 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
  4. 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