Bounty Challenge lets a validator or owner operate a manual project-reward subnet. The operator publishes project briefs, receives miner GitHub submissions, records human reviews, and assigns raw emission weights that Platform normalizes for the network.
Validators and owners are responsible for:
- publishing clear project briefs and rubrics;
- keeping project status accurate;
- reviewing submitted work fairly;
- assigning emissions only to miner hotkeys that earned rewards;
- protecting owner and Platform tokens;
- monitoring health, version, submissions, reviews, and leaderboard output.
Public miner requests do not require owner credentials. Owner requests require either:
Authorization: Bearer <owner-token>or:
X-Owner-Token: <owner-token>Platform internal weight requests require the shared challenge token and challenge slug header.
All runtime settings use the CHALLENGE_ environment prefix.
| Setting | Purpose |
|---|---|
CHALLENGE_SLUG |
Challenge identifier; defaults to bounty-challenge. |
CHALLENGE_NAME |
Human-readable challenge name. |
CHALLENGE_DATABASE_URL |
Persistent storage location. |
CHALLENGE_ARTIFACT_ROOT |
Reserved location for future submission assets. |
CHALLENGE_SHARED_TOKEN |
Shared token for Platform internal calls. |
CHALLENGE_SHARED_TOKEN_FILE |
File containing the Platform shared token. |
CHALLENGE_OWNER_TOKEN |
Owner token for admin operations. |
CHALLENGE_OWNER_TOKEN_FILE |
File containing the owner token. |
CHALLENGE_HOST |
Bind host. |
CHALLENGE_PORT |
Bind port. |
Use file-backed secrets in production so tokens are not exposed in process lists or shell history.
Create or update a project:
POST /admin/projects{
"project_id": "cli-ui",
"title": "Best CLI UI/UX",
"description": "Create the best UI/UX for the Platform CLI.",
"goals": "Improve clarity, onboarding, layout, speed of use, and visual polish.",
"repository_url": "https://github.com/PlatformNetwork/platform",
"assets_url": "https://example.com/brief",
"status": "active",
"deadline_at": "2026-06-01T00:00:00Z",
"metadata": {
"rubric": [
"visual design",
"UX flow",
"accessibility",
"implementation quality"
]
}
}Supported project statuses:
| Status | Meaning |
|---|---|
active |
Miners can submit work. |
paused |
Project is visible but closed to new submissions. |
completed |
Project is finished. |
cancelled |
Project is cancelled. |
Review a miner submission:
POST /admin/reviews{
"submission_id": 1,
"score": 94,
"status": "accepted",
"comments": "Best UX and cleanest implementation.",
"reviewer": "owner"
}Supported review statuses:
| Status | Meaning |
|---|---|
reviewed |
Feedback was recorded, but no final decision is implied. |
accepted |
Submission is accepted by the owner. |
rejected |
Submission is rejected by the owner. |
Review scores must be between 0 and 100. Scores are audit information; emissions decide final
network rewards.
Set emissions manually:
POST /admin/emissions{
"replace": true,
"updated_by": "sudo-owner",
"emissions": [
{
"hotkey": "5...",
"weight": 2.5,
"reason": "winner of cli-ui",
"project_id": "cli-ui",
"submission_id": 1
}
]
}Emission behavior:
replace: trueclears previous emissions before inserting the new set.replace: falseupdates only the provided hotkeys.- Only positive finite weights are exposed to Platform.
- Platform normalizes raw weights into final network weights.
Reward one submission directly:
POST /admin/submissions/{submission_id}/reward{
"weight": 2.5,
"reason": "winner",
"updated_by": "sudo-owner"
}List current owner-set emissions:
GET /admin/emissionsValidators should expect miners and dashboards to use:
GET /projects
GET /projects/{project_id}
POST /submissions
GET /submissions
GET /submissions/{submission_id}
GET /leaderboardHealth check:
GET /healthVersion and capability check:
GET /versionWeight request:
GET /internal/v1/get_weights
Authorization: Bearer <shared-token>
X-Platform-Challenge-Slug: bounty-challengeExample weight response:
{
"challenge_slug": "bounty-challenge",
"epoch": 1760000000,
"weights": {
"5...": 2.5
}
}- Publish a clear project brief and rubric.
- Confirm project status is
active. - Monitor incoming submissions.
- Clone and review each submitted repository.
- Record a review with score and comments.
- Assign emissions to winning hotkeys.
- Confirm the leaderboard matches the intended reward allocation.
- Confirm Platform can read the protected weight contract.
- Mark the project
completedwhen rewards are final.
- Keep owner tokens private.
- Keep shared Platform tokens private.
- Prefer secret files over direct environment values.
- Do not reward submissions that cannot be inspected.
- Do not accept private repositories unless the owner has explicit access.
- Verify hotkeys before assigning emissions.
- Keep review comments professional and auditable.
- Back up persistent storage before major reward changes.