Submission
Register, build a patch, and commit it on-chain with the miner CLI.
Prerequisites
- A Bittensor wallet whose hotkey is registered on subnet 10 (finney).
- A coldkey funded with the submission fee plus transaction costs.
- The Pareton repository and its Python environment, which pins
bittensor11.x. - An open campaign. Get its
campaign_idand pinnedbaseline_commitfrom the dashboard or the API.
Benchmark against the real baseline
Your score is the speedup of your patched engine over the campaign's baseline engine, measured on the same pod. That baseline is a specific prebuilt image, not something you rebuild yourself. Rebuilding it locally gives you a close but different binary, so your local numbers will not match your score.
Pull the real one. It is public and needs no token:
docker pull ghcr.io/pareton-ai/pareton-baseline-engine@<baseline_engine_image_digest>Take baseline_engine_image_digest from the campaign's bench object:
curl -s https://api.pareton.ai/v1/campaigns/<campaign_id> \
| jq -r '.bench.baseline_engine_image_digest'Pulling by digest is the verification. Docker refuses the image if the content does not match, so if the pull succeeds you have exactly the image the harness scores you against.
The digest is pinned per campaign. A new campaign can pin a new baseline, so read it from the campaign rather than hardcoding it.
1. Write the patch
Create a unified git diff against the campaign's exact baseline commit:
git clone https://github.com/vllm-project/vllm.git
cd vllm && git checkout <baseline_commit>
# make your change
git diff > /path/to/patch.diffConstraints checked by the gates:
- The diff must apply cleanly to the pinned baseline.
- Touched paths must satisfy the campaign's allowed and denied path globs.
- No absolute paths, no
..traversal, no symlink or binary changes. - Keep the patch small and reviewable. One change per submission.
2. Commit on-chain
Run the miner CLI from the Pareton repo:
python -m miner.commit_patch \
--campaign-id <uuid> \
--patch /path/to/patch.diff \
--wallet-name <coldkey_name> \
--wallet-hotkey <hotkey_name>The CLI does five things:
- Requests a Pareton-presigned S3 upload URL bound to your hotkey.
- PUTs the patch bytes to that URL.
- Transfers the submission fee from your coldkey, once your hotkey is confirmed registered. See Submission fee.
- Writes a plaintext
Commitments.set_commitmentrecord on subnet 10 containing the campaign, baseline commit, patch hash, artifact URL, and a reference to the fee payment. - Polls the chain until the commitment is visible and prints the block it landed at.
Dry-run first
Add --dry-run to print the exact on-chain payload without submitting:
python -m miner.commit_patch ... --dry-runThe dry-run applies the same size guard as a live submit, so an oversized payload fails here instead of on-chain.
3. Track the result
Open the campaign page on the dashboard. Your submission appears within one scan cycle and walks the states listed in the overview. rejected means it never ran (the event log names the failed gate). disqualified means it ran and was wrong. scored means it holds a speedup from that round.
Rules that cost you a submission if ignored
- Use the presigned upload. Self-hosted artifact URLs are rejected unless they are on the allowlist and carry your own hotkey in the path. A URL pointing at another hotkey's artifact is rejected at ingest and at the integrity gate.
- Do not resubmit identical bytes. The patch hash is the dedupe key. Change the content to get a new slot. A duplicate fails quietly: the fee is charged, the CLI reports the commitment as visible on chain, and the submission never appears on the dashboard. Check the campaign for your patch hash before you commit.
- Do not use
--timelock. The flag exists for reproduction only; finney's timelock reveal path has produced no reveals, so sealed commitments never become visible.
A commit is also an acceptance of Submitting a patch for the version of that page that is live at the commitment block. That page is still a draft and is not in force.
