This demo walks through your exact 5-step flow with a toy homomorphic commitment. In production, swap in BN254 Pedersen vector commitments and your smart contract calls.
Provide only: Contest name, IPFS dataset, and a goal error rate (bps). Pool is fixed at 10,000 units for the demo.
Click to populate a few sample models. Each submission has a 3-number vector, randomness r, error (bps), and a toy PVC commitment.
Sorted by lowest error. Weight used in aggregation is num_i = 1 / (error_i + 1), integer division, so lower error gets higher weight.
Compute Wsum, Rsum, verify Commit(Wsum, Rsum) == Σ num_i · C_i, and show the averaged model.
Split the pool proportionally by num_i / Σ num_i. Requires a valid PVC aggregation first.
Download a JSON containing submissions, weights, aggregated commitment, and the pass/fail check.
Each participant commits to their model vector w_i = [w_i[0], w_i[1], w_i[2]] with randomness r_i using a Pedersen vector commitment:
Suppose the payout weights are α_i (derived deterministically from error rates). Pedersen commitments are homomorphic:
If the aggregator publishes W_sum = Σ α_i · w_i and R_sum = Σ α_i · r_i, anyone can recompute Commit(W_sum, R_sum) and check it equals Σ α_i · C_i. That proves the final (blended) model was derived exactly from the committed inputs with the stated proportions α_i. We then use the same α_i to split the funds proportionally.
In this UI, α_i are integers num_i = 1 / (error_i + 1). For presentation, you can also show the arithmetic average W_avg = W_sum / Σ num_i.