ContribNet — decentralized contributor compensation and project governance on Kusama

The bet

Centralized, closed-source software has a structural advantage: it can capture value and pay the people who build it. Open source has an execution advantage: parallel collaboration at global scale, with no one able to lock it down. ContribNet is a bet that if you solve the compensation problem for open source — actually pay contributors in a verifiable, trust-minimized way — collaborative development can create more total value than any closed alternative.

That’s the thesis. Here’s how the system works.

What ContribNet is

ContribNet is a platform that lets you run a project as a self-governing on-chain entity. A project has a task board, a contributor registry, a treasury, and a governance system. Contributors earn Contribution Points (CP) by completing tasks that are reviewed and scored by peers. At the end of each epoch (default: 14 days), the treasury distributes funds proportional to CP — compensating contributors for work already done.

CP is permanent. Your record of contribution never disappears. Governance weight decays — only recent activity counts toward voting power, so the people making decisions are the people actively working on the project, not long-retired early contributors.

Project lifecycle

A project starts when a founder deploys it on-chain via the factory. They set an initial configuration: epoch length, review parameters, quorum thresholds, minimum payout, and so on — all adjustable later through governance.

The founder mints some initial CP to anchor the scale (e.g. 400 CP to themselves for the work that got the project to launch). From there, new CP is created only by completing tasks that pass peer review.

The lifecycle of a task:

  1. Anyone — contributor or not — can propose a task: title, description, difficulty, suggested CP range. The proposal is stored on IPFS; its hash is registered on-chain.

  2. Registered contributors vote it into the backlog (50% threshold, no timelock).

  3. A contributor claims the task and has an assignment window to deliver. New to the project? Tasks flagged as “Good First Issue” are open to anyone — no existing CP required. Completing one is how you become a registered contributor.

  4. The contributor submits their work as a git bundle pinned to IPFS.

  5. Reviewers commit a hidden score using a commit-reveal scheme (to prevent anchoring bias), then reveal after the commit window closes.

  6. Once enough reviews are in, the task finalizes: CP is minted to the contributor, and — if reviewers voted to merge — the on-chain project HEAD advances to the new bundle CID.

The treasury fills from any source — grants, donations, product revenue. Every epoch, 80% of available funds (configurable) flow out to contributors proportional to their CP share.

Founder mode and the governance handover. When a project is first deployed, the founder’s wallet is the project’s owner. In this state the founder has direct admin access: they can mint CP, update config, and force-finalize stalled tasks — all without a governance vote. This is intentional: a new project with one person and no contributors can’t govern itself yet.

Once the project has enough contributors with distributed CP to sustain governance, the founder should hand over. This is a single transaction — transferOwnership(address(this)) — which makes the project self-owning. From that point:

  • Minting CP requires an executed governance proposal

  • Config changes require a governance proposal

  • The founder retains their CP and governance weight like any other contributor, but has no special admin access

The frontend surfaces this as a “Make this project contributor-owned” panel, visible only to the founder while they still hold direct ownership. The recommended sequence is: seed the task board with good-first-issue tasks → get a few contributors through the task flow so CP is meaningfully distributed → apply production config settings → hand over.

Handing over early (before CP is distributed) is possible but leaves governance fragile — if the founder holds 95% of CP, they control all votes anyway, which defeats the point.

What kind of projects this suits

Open source relying on grants and donations. This is the clearest fit. A project with public code and a treasury can receive grants directly on-chain. Contributors earn CP through work; the treasury distributes proportionally. The grant givers can verify exactly what was built and who built it before funds are released, or they can trust the governance process and fund upfront.

For-profit projects with decentralized ownership. A startup-like project where the “equity” is CP. Founders set the initial CP to anchor their stake, then contributors dilute in over time through work. When the product generates revenue it flows to the treasury and distributes every epoch. The platform takes a 3% fee (governance adjustable via ContribNet project) on epoch payouts; everything else stays in the project.

Digital products — software, content, datasets, research outputs — map naturally because deliverables are verifiable and deliverable via IPFS. Physical products are potentially a bit more tricky but still possible.

How you interact with the project

Three surfaces:

Web frontend. An application served from an IPFS hash controlled by a .dot domain (currently .dot domains only work on Paseo as DotNS contracts have only be deployed there). Live at ipfs.io/ipfs/bafybeibffjo6vp3bd6heyrv4vtao74yxl6zx6oovk5zokjhlzzv5e62o7y. You connect a wallet (MetaMask, Talisman, SubWallet — anything that injects as window.ethereum on the Kusama Asset Hub EVM). From there: browse projects, see your tasks, vote, review, raise governance proposals, withdraw payout.

The cn CLI. A full command-line interface for every on-chain action — profiles, tasks, governance, treasury, comments, event streaming. Designed for scripting and agent loops. Example:


cn task list 0xProjectAddr --state votedin --json

cn task assign 0xProjectAddr 0xTaskId

cn task submit 0xProjectAddr 0xTaskId main --notes "implemented X"

cn task review commit 0xProjectAddr 0xOtherTaskId --score 85 --merge yes

The cn-git CLI. Git-specific workflow. You work in a normal local git repo. cn-git push bundles your branch and uploads it to IPFS. cn-git rebase syncs your local HEAD with the on-chain canonical HEAD. cn-git review --checkout pulls down a submission as a local branch so you can inspect the diff in VS Code before scoring.

AI agents can use the cn CLI directly. The event-streaming command (cn watch) outputs one JSON object per line to stdout — straightforward to consume in an agent loop.

Tools a project gets

CP issuance. The founder can mint initial CP to seed the scale. After that, CP is created only through the task review process. You can configure the min and max CP range per task difficulty to calibrate what work is worth.

Task board / Kanban. Tasks move through states: Proposed → Voted In → Assigned → In Review → Done (or Dropped). The UI shows this as a kanban. Task metadata — description, acceptance criteria, attachments — lives on IPFS. On-chain stores only the hash, state, and CP values.

Governance. Every consequential decision is a proposal: settings changes, treasury transfers, project upgrades, contributor suspension, fork heritage. Proposals have configurable thresholds (standard vs supermajority) and timelocks, so contributors have time to react before anything irreversible happens.

Domains. Projects can control a `.dot` domain (Polkadot’s native naming system). The domain points to an IPFS hash — so a governance proposal can update what users see when they navigate to the project’s domain. No centralized hosting, no admin key. Note that this currently only works on Paseo (see example here) since the DotNS contracts have only been deployed there.

Governance-controlled artifacts. Any project artifact — a CLI binary, a desktop app, a dataset, a model weight — can be published via governance. The artifact is uploaded to IPFS and the CID is registered on-chain through a proposal. When users run `cn update` (or equivalent), they pull the governance-approved CID, not a URL controlled by a developer. This means a project can ship software to its users with the same trust guarantees as everything else: no single admin key, community-approved, tamper-evident. The ContribNet CLI itself is distributed this way.

Git versioning

This is one of the more unusual parts. There is no GitHub. Code lives on IPFS. The project maintains an on-chain headCommit — a CID pointer to the current canonical git bundle. When a contributor submits work, their bundle’s CID and the project’s HEAD at submission time are both recorded on-chain. This allows merge-conflict detection and provides a tamper-evident audit trail of every accepted contribution.

cn-git push bundles your git branch (not a full pack — just the objects needed to reconstruct your branch from the known HEAD) and pins it to IPFS via Pinata. The bundle CID goes into the task submission. After the review finalizes and the contribution is merged, the project HEAD advances to the new CID.

Anyone can reconstruct the full project history by chasing the chain of CIDs backward. Nothing is on a server that can be deleted.

Incentives

Contributor angle. You get paid proportional to your contribution history. CP doesn’t decay — a large contribution three years ago still earns treasury share. You also get governance power proportional to recent CP, so active contributors run the project.

Founder angle. You define the initial CP scale and mint your founding stake. As contributors earn CP through work, they dilute you — but the project grows. You keep governance control as long as you stay active. If you go quiet, the community takes over.

Forking. If a project’s governance goes in a direction you disagree with, you can fork. The fork starts as a new on-chain project. At creation time, the founder carries a snapshot of the parent project’s CP ledger over — so contributors who built the original get founding stake in the fork. Currently forks always start with clean governance regardless of CP inheritance; a configurable heritage policy (allowing the original project’s governance to influence fork terms) is planned for a future version. This is a hard limit on governance capture: contributors can always leave and take a snapshot of the history with them. It’s also the escape hatch for platform-level changes — any project that disagrees with a beacon upgrade can fork before the timelock expires and continue on the old implementation indefinitely.

Platform fee. 3% (this number is adjustable via ContribNet’s project governance) of every epoch payout goes to the ContribNet project’s treasury . This is the platform’s revenue model — the platform sustains itself through the same mechanism it provides to others.

The platform is itself a project on the platform

The ContribNet project is a regular project deployed on ContribNet. It has been handed ownership of the platform contracts: the ProjectFactory, the ProjectBeacon (which controls the implementation all projects run on), and the .dot domain (which controls what the frontend points to).

This means:

  • A smart contract upgrade to every project on the platform requires a governance proposal, a supermajority vote, and a 72-hour timelock

  • A frontend update requires a governance proposal

  • A CLI release requires a governance proposal — the CLI tarball is uploaded to IPFS and the CID is registered on-chain via governance. Installing from IPFS means you get exactly the version contributors voted to approve. cn-git update fetches the latest governance-approved CID automatically

Until ownership has been formally transferred from the deployer EOA (still in progress — waiting for the ContribNet project to have enough contributors to sustain governance), the deployer retains admin access. The design is complete; the key ceremony has not happened yet.

Security

The review system uses commit-reveal to prevent score anchoring: reviewers submit a hash of their score before the scores are visible, then reveal after the commit window closes. Reviewers who commit but fail to reveal are penalized (configurable ghost strike limit, configurable deposit forfeited). Consensus is required (configurable minimum number of reveals) before a task is finalized.

Governance actions have timelocks. The emergency pause is the only instant action, and it can only freeze a project — it cannot move funds or change governance rules. Treasury transfers require a supermajority and 72 hours.

The platform beacon upgrade pattern gives every project advance notice and a fork escape hatch. No upgrade can take effect without the community seeing it coming.

Current state and honest caveats

This is not a finished product. It is entirely vibe-coded. The contracts are on Paseo (Polkadot’s canary testnet) and Kusama Asset Hub. The codebase has not been formally audited. The ownership transfer to on-chain governance has not happened yet.

What exists: a smart contract system, a functional web frontend, a CLI, and git versioning via IPFS. What doesn’t exist yet: a robust community, formal audits, and the full governance handover.

The project in its current state is a proof of concept to be built upon. Bugs are expected and contributions are necessary for the longevity and decentralisation of the project (read next section on how to get involved).

How to get involved

Get KSM into your wallet. ContribNet on Kusama Asset Hub runs on an EVM-compatible chain, so you use a standard Ethereum wallet (MetaMask, Talisman, SubWallet). To fund it with KSM, you need to convert your Ethereum address to its Kusama SS58 equivalent: go to the Address Format Converter on the Polkadot docs, select Kusama Hub as the network, and paste your Ethereum address. Copy the SS58 address that appears and send KSM to it from any exchange or wallet. The funds will show up in your Ethereum wallet on Kusama Asset Hub.

Browse open tasks. Go to the ContribNet project on the frontend and open the task board. Tasks marked “Good First Issue” are unassigned and open to anyone — no existing CP required. These are the entry point for new contributors.

Assign yourself a good first issue. Any unregistered address can claim a good first issue. Pick one from the board, hit assign, and you have the assignment window to deliver. Good first issues are scoped to be completable without deep context: documentation improvements, test coverage, small UI fixes, tooling. Once you complete one and it passes review, you’re a registered contributor and can claim any task.

Propose a task. If you see something missing — a bug, a feature, a doc gap — propose it. A task proposal needs a title, description, and a difficulty level. Good task proposals include concrete acceptance criteria (what does “done” look like?) and, if relevant, suggest “Good First Issue” so it’s accessible to newcomers. Once submitted, contributors vote it into the backlog.

What makes a good task proposal:

  • Scoped to a single deliverable — not “improve the CLI” but “add `–json` flag to `cn profile get`”

  • Acceptance criteria that a reviewer can verify from the IPFS bundle alone

  • Realistic CP range for the difficulty (look at comparable finalized tasks for calibration)

  • “Good First Issue” tag if it doesn’t require project context to complete

Contribute to the platform itself. The ContribNet project manages its own development on ContribNet. If you want to work on the smart contracts, the CLI, or the frontend, propose or claim a task there — same flow as any other project.

Possibilities

An open source protocol that pays its own contributors. A DAO where ownership is earned through work. A decentralized studio where contributors share revenue. A research collective that distributes grant funding proportionally to contribution. An AI agent collective where the agents themselves earn CP and draw treasury distributions.

*Deployed on Paseo testnet and Kusama Asset Hub. Feedback welcome — the ContribNet project itself is the right place to raise issues via task proposals.*

good initiative! thanks for putting the time to think about this, this could also work under a curators structure onchain. curators could fund/curate a project and pay for that project to a group, if another group wants to help with the code on an ad-hog matter, probably the curated team (the Genesis creator’s group) should pay for that, but the curators are the ones authorizing it, not the original curated group.

do you have a public github of the project? (i’m a tech noob)

Can’t edit but the updated link is now this: IPFS Service Worker Gateway | HEAD@9d7a781 can’t wait to have dotNS so that we don’t have to deal with cid links anymore…

The grant-funded OSS use case is the obvious fit for this neat to see someone working on the compensation problem from this angle.

Two technical questions:

IPFS pinning. Pinata as the primary pinning service for git bundles is a single point of failure if Pinata revokes pinning for whatever reason, the on-chain HEAD points to a CID nobody can resolve. Is there a redundant pinning strategy planned? Multiple gateways, contributors self-pinning when they pull bundles, anything like that?

Review collusion. Commit-reveal handles anchoring bias for individual reviewers, but doesn’t protect against two reviewers coordinating their scores offline before reveal. Have you considered reviewer rotation across tasks, or a per-reviewer reputation that decays when their scores consistently diverge from final consensus?

Thanks for your questions.

IPFS pinning: Users currently have the choice between Pinata and local daemon for pinning. I am looking to propose to make bulletin storage the default going forward. There should be clear UIs about what data is going to expire soon on a per project basis and users being able to extend the lifetime of the expiring items with a click of a button. Every contributor to a project would be naturally incentivised in ensuring that all relevant data stays up.

Review collusion: Only contributors can be reviewers. Reviewers could indeed coordinate their scores offline before reveal. As it stands any contributor can review any task. The reviewers that gave a score within 15% of the final median score assigned by the collective of reviewers share a 10% pool of the points amongst them. This could potentially incentivise coordination amongst the reviewers/current contributors but I fail to see how that coordination could be harmful in fact it might even be beneficial. The commit reveal means that no reviewer can see what others have committed on chain before they cast their vote. Reviewers can exchange about this off-chain and share with each other the scores they committed. A discussion may or may not ensue from this. Do note that there is trust involed in believing that the scores the other reviewers say they committed they really did commit (a reviewer’s strategy could be to mislead others of a fake score in order to walk away with the 10% themselves). So the best strategy for any reviewer might just still be to just give the fairest score possible assuming that all other reviewers are also rational and will also give fair scores.

In any case contributors are incentivised to be fair and inclusive since anyone can at any time fork a project.

Makes sense on the pinning side bulletin storage default solves the centralization concern cleanly if the UX surfaces expiry warnings well. Is this Polkadot’s existing persistent storage initiative (the Bulletin Chain work), or something independent at the ContribNet protocol level?

On reviewer collusion fair, the 15% pool does push toward honest median-tracking when reviewers are independent. The angle I’d want to think about more is Sybil resistance at the contributor level. If becoming a contributor is itself cheap (a good-first-issue completion), one human can in principle become multiple contributor identities over time and self-coordinate. Same human plays 3 reviewers, claims the 10% pool 3 times for self-agreement. The forking escape hatch addresses governance capture broadly, but does it help against this specific drip-style Sybil scoring? Curious if there’s a per-account stake mechanism or activity-weight gating I missed.

It is a system chain on Polkadot. Do note it has only recently been released and while it is usable on Paseo Testnet, it is not usable live yet on Polkadot since OpenGov has to clear it for usage first (oversimplifcation).

On your second point, Proof of Personhood (which I also expect to be rolled out at Web3Summit) will solve this. Meaning only verified humans can contribute on ContribNet. I will likely also propose to integrate PoP once it is released. In any case however the weight of a review score is dependent on the contributions points that reviewer has currently. Meaning that creating 3 different accounts is no advantage over having one account with the combined contribution points of the 3.

Come join our matrix group, would be awesome to have you contribute to the project! Looking forward to reviewing your first task submission. If you see a gap, create a task to fill it, assign it to yourself and submit the work for it.

Stake-weighted reviews via current CP — that closes the Sybil concern cleanly, missed that in the OP. PoP on top is belt-and-braces, makes sense.

Appreciate the substantive responses. I’ll check out the task board this week — if I find a good-first-issue that fits, I might give it a go. Matrix group link?

latest link:

This sounds like an amazing piece of work. Can I ask which ethereum compatible chain you are working with?

Thanks!

Latest link here: IPFS Service Worker Gateway | HEAD@0a11d6b

We are using pallet-revive on Kusama Assethub.

During the web3summit we also integrated the latest tools presented to contribnet and launched on the web3summit testnet. That gave us some cool features like dot domains owned by projects and upgradable site content by its contributors via project governance. That also meant that contribnet was running on a dot domain which got rid off all the ipfs link sharing annoyances that I keep doing here whenever the content udpates. Content hash upgrades happen in the background with dot domains. When content is upgraded contributors just update the content hash of a domain but the domain itself stays the same and just renders new content post upgrade then (the domain is just a pointer to the latest content hash). Finally on that testnet we used bulletin chain for all the content storage related to the site. Meaning tasks were stored on bulletin, code repos, site content, comments, you name it… everything was stored on bulletin instead of the current way (pinata pinning + ipfs). I can’t wait to get those features on kusama/polkadot.

Anywhom, work on contribnet is continuing (via the contribnet project on the contribnet platform). Would love to have more people get involved. Would love to see you join as a contributor! Happy to do some hand holding if you want. New projects are also starting on there so maybe those speak to you.

Collaborative open source is the bet!