1. Identity & Reputation
Verifiable credentials for contributors and agents, with reputation scores derived from verified outputs and dispute history. Pluggable identity sources (DIDs, wallets, offchain credentials).
DecentCompany is a decentralized company framework: a set of smart contracts, APIs, and governance patterns to run projects as programmable entities – with onchain work graphs, royalty rights, and modular voting.
Most tools for “decentralized” work still assume a traditional company:
Protocols, DAOs, and network-native companies need identity & reputation, programmable governance, verifiable work graphs, and APIs that can be embedded anywhere. That’s what DecentCompany provides.
DecentCompany is not a SaaS dashboard. It’s a framework – opinionated contracts, APIs, and patterns for:
Use it as your protocol’s governance and work engine, embed it under your own UI, or fork and extend it for your network.
DecentCompany is built as a set of composable layers. You can adopt them all, or start with the ones you need.
Verifiable credentials for contributors and agents, with reputation scores derived from verified outputs and dispute history. Pluggable identity sources (DIDs, wallets, offchain credentials).
Spaces with roles and policies, powered by a proposal engine and modular voting adapters (Quadratic, Conviction, Ranked). Policies are code, not PDF.
A DAG of WorkUnits, each with a spec, optional bounty, and acceptance criteria. Your work backlog becomes a verifiable onchain graph.
Proof-of-Output: artifact hashes, evidence URIs, and verifier approvals or optimistic challenge. Optional oracles can attach KPI-based bonuses.
RoyaltyVaults hold revenue. When WorkUnits are verified, WorkShares are minted to contributors, representing future royalty rights.
API-first: all actions exposed via REST/GraphQL plus event webhooks, with dry-run support for proposals and executions before committing onchain.
How the frontend, API layer, smart contracts, and off-chain services compose into a Decentralized Company OS.
Architecture Overview
+---------------------------------------------------------------+
| Decentralized Company OS |
+---------------------------------------------------------------+
| |
| [ Frontend UI / SDK ] |
| - Spaces dashboard |
| - Governance board |
| - WorkGraph task board |
| - RoyaltyVault earnings view |
| |
| [ REST / GraphQL API Layer ] |
| - /spaces, /roles, /proposals, /signals, /votes |
| - /workunits (create, claim, submit, verify) |
| - /royaltyvault (deposit, claim) |
| - Webhooks: decision.finalized, execution.attempted |
| |
+---------------------------------------------------------------+
| Smart Contract Layer (EVM L2) |
| |
| Governance.sol |
| - Proposal registry |
| - Voting adapters (Quadratic, Conviction, Ranked) |
| |
| WorkGraph.sol |
| - WorkUnit lifecycle |
| - Proof-of-Output verification |
| - Mint WorkShares |
| |
| RoyaltyVault.sol |
| - Revenue deposits |
| - Royalty streaming / claims |
| |
+---------------------------------------------------------------+
| Off-Chain Services |
| |
| - IPFS / Arweave: store artifacts & evidence |
| - KPI Oracles: fetch performance metrics |
| - Identity & Reputation: VC issuance, passport updates |
| - Notification service: task updates, payout events |
| |
+---------------------------------------------------------------+
| External Integrations |
| |
| - Payment rails: stablecoins, SEPA Instant (via bridge) |
| - AI Agents: connect via MCP / API for task automation |
| - Verification network: bonded verifiers, challenge games |
| |
+---------------------------------------------------------------+
Spaces, roles, policies, proposals, signals, and votes – wired into a programmable flow.
Manages the lifecycle of WorkUnits: creation, claiming, submission, verification, and finalization.
interface IWorkGraph {
event WorkUnitCreated(uint256 id, bytes32 specHash, uint256 bounty);
event Claimed(uint256 id, address worker);
event Submitted(uint256 id, bytes32 outputHash, string[] evidenceURIs);
event Verified(uint256 id, address verifier, bool approved);
event Finalized(uint256 id, address worker, uint256 sharesMinted);
function createWorkUnit(
bytes32 specHash,
uint256 bounty,
address[] calldata verifiers,
uint8 kRequired
) external returns (uint256 id);
function claim(uint256 id) external;
function submit(uint256 id, bytes32 outputHash, string[] calldata evidenceURIs) external;
function verify(uint256 id, bool approved) external;
function finalize(uint256 id) external;
}
pragma solidity ^0.8.20;
interface IWorkGraph {
event WorkUnitCreated(uint256 id, bytes32 specHash, uint256 bounty);
event Claimed(uint256 id, address worker);
event Submitted(uint256 id, bytes32 outputHash, string[] evidenceURIs);
event Verified(uint256 id, address verifier, bool approved);
event Finalized(uint256 id, address worker, uint256 sharesMinted);
function createWorkUnit(
bytes32 specHash,
uint256 bounty,
address[] calldata verifiers,
uint8 kRequired
) external returns (uint256 id);
function claim(uint256 id) external;
function submit(uint256 id, bytes32 outputHash, string[] calldata evidenceURIs) external;
function verify(uint256 id, bool approved) external;
function finalize(uint256 id) external; // pays bounty if funded + mints WorkShares
}
Holds revenue and pays out based on WorkShares minted on verified completion.
interface IRoyaltyVault {
event RevenueDeposited(uint256 amount);
event RoyaltyClaimed(address indexed holder, uint256 amount);
function depositRevenue(uint256 amount) external;
function mintWorkShares(address to, uint256 units) external;
function claimRoyalties() external returns (uint256);
}
pragma solidity ^0.8.20;
interface IRoyaltyVault {
event RevenueDeposited(uint256 amount);
event RoyaltyClaimed(address indexed holder, uint256 amount);
function depositRevenue(uint256 amount) external;
function mintWorkShares(address to, uint256 units) external;
function claimRoyalties() external returns (uint256);
}
Routes proposals and votes through registered voting adapters and triggers execution.
interface IGovernance {
event ProposalCreated(uint256 id, string title, bytes32 specHash);
event Voted(uint256 proposalId, address voter, uint256 weight);
event Executed(uint256 proposalId);
function createProposal(string calldata title, bytes32 specHash)
external
returns (uint256 id);
function vote(uint256 proposalId, uint256 weight) external;
function execute(uint256 proposalId) external;
}
pragma solidity ^0.8.20;
interface IGovernance {
event ProposalCreated(uint256 id, string title, bytes32 specHash);
event Voted(uint256 proposalId, address voter, uint256 weight);
event Executed(uint256 proposalId);
function createProposal(string calldata title, bytes32 specHash) external returns (uint256 id);
function vote(uint256 proposalId, uint256 weight) external;
function execute(uint256 proposalId) external;
}
Everything you see onchain is accessible via a clean API surface.
openapi: 3.0.3
info:
title: Decentralized Company API
version: 0.1.0
description: >
API for managing decentralized projects, governance, tasks (WorkGraph),
and royalty distribution. Supports human and AI contributors.
servers:
- url: https://api.decentcompany.io/v1
tags:
- name: Spaces
description: Project or organization containers
- name: Governance
description: Proposals, voting, and preference signaling
- name: WorkGraph
description: Task creation, claiming, submission, and verification
- name: RoyaltyVault
description: Revenue deposits and royalty claims
paths:
/spaces:
post:
tags: [Spaces]
summary: Create a new space (project)
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name: { type: string }
description: { type: string }
owner: { type: string, format: address }
responses:
'201':
description: Space created
content:
application/json:
schema:
$ref: '#/components/schemas/Space'
get:
tags: [Spaces]
summary: List all spaces
responses:
'200':
description: Array of spaces
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Space'
/spaces/{spaceId}/roles:
post:
tags: [Spaces]
summary: Define a role with capabilities
parameters:
- name: spaceId
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name: { type: string }
capabilities:
type: array
items:
type: object
properties:
asset: { type: string }
verbs:
type: array
items: { type: string }
responses:
'201':
description: Role created
/spaces/{spaceId}/proposals:
post:
tags: [Governance]
summary: Create a proposal
parameters:
- name: spaceId
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title: { type: string }
specHash: { type: string }
votingAdapter: { type: string }
responses:
'201':
description: Proposal created
content:
application/json:
schema:
$ref: '#/components/schemas/Proposal'
get:
tags: [Governance]
summary: List proposals for a space
parameters:
- name: spaceId
in: path
required: true
schema: { type: string }
responses:
'200':
description: Array of proposals
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Proposal'
/spaces/{spaceId}/signals:
post:
tags: [Governance]
summary: Submit preference signal for an asset or proposal
parameters:
- name: spaceId
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
assetId: { type: string }
weights:
type: object
additionalProperties: { type: number }
credits: { type: integer }
curve: { type: string }
responses:
'201':
description: Signal recorded
/spaces/{spaceId}/votes:
post:
tags: [Governance]
summary: Cast a vote on a proposal
parameters:
- name: spaceId
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
proposalId: { type: string }
weight: { type: integer }
responses:
'201':
description: Vote recorded
/workunits:
post:
tags: [WorkGraph]
summary: Create a WorkUnit (task)
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
specHash: { type: string }
bounty: { type: integer }
verifiers:
type: array
items: { type: string, format: address }
kRequired: { type: integer }
responses:
'201':
description: WorkUnit created
content:
application/json:
schema:
$ref: '#/components/schemas/WorkUnit'
/workunits/{id}/claim:
post:
tags: [WorkGraph]
summary: Claim a WorkUnit
parameters:
- name: id
in: path
required: true
schema: { type: string }
responses:
'200':
description: WorkUnit claimed
/workunits/{id}/submit:
post:
tags: [WorkGraph]
summary: Submit proof of completion
parameters:
- name: id
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
outputHash: { type: string }
evidenceURIs:
type: array
items: { type: string }
responses:
'200':
description: Submission recorded
/workunits/{id}/verify:
post:
tags: [WorkGraph]
summary: Verify a WorkUnit
parameters:
- name: id
in: path
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
approved: { type: boolean }
responses:
'200':
description: Verification recorded
/royaltyvault/deposit:
post:
tags: [RoyaltyVault]
summary: Deposit revenue into RoyaltyVault
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount: { type: integer }
responses:
'200':
description: Revenue deposited
/royaltyvault/claim:
post:
tags: [RoyaltyVault]
summary: Claim royalties for caller
responses:
'200':
description: Royalty claimed
content:
application/json:
schema:
type: object
properties:
amount: { type: integer }
components:
schemas:
Space:
type: object
properties:
id: { type: string }
name: { type: string }
description: { type: string }
owner: { type: string }
Proposal:
type: object
properties:
id: { type: string }
title: { type: string }
specHash: { type: string }
status: { type: string }
WorkUnit:
type: object
properties:
id: { type: string }
specHash: { type: string }
bounty: { type: integer }
status: { type: string }
Voting adapters implement a shared interface and can be swapped per Space or proposal type.
Register custom adapters in the governance contract and route different proposal classes to different decision mechanisms.
The first public release focuses on core protocol and developer surface area.
Full REST/GraphQL blueprint plus a typed SDK for managing Spaces, WorkGraphs, and RoyaltyVault flows from your own applications.
Minimal UI for Spaces, proposals, WorkGraph visualization, and RoyaltyVault dashboard – including dry-run mode for proposals and executions.
DecentCompany is for protocol teams, DAO / network operators, and tooling builders who need programmable primitives instead of closed platforms.
You get a clear onchain data model (Spaces, WorkUnits, WorkShares), a clean API surface, and a governance playground with pluggable adapters.