Reputation Ontology
The Reputation Ontology is OmniSocial’s modular, on-chain trust and credibility system.
It governs how users earn, lose, and apply non-transferable reputation across different reputation domains like moderation, governance, and creation. Reputation influences visibility, voting power, access rights, and more.
🧱 Core Concepts
Reputation Domain
A category of rep (e.g. governance
, moderation
, creator
) with its own rules
Non-transferable
Reputation cannot be sold, traded, or moved—it's identity-bound
Decay
Reputation slowly decays over time to encourage sustained contribution
Weighting
Different domains can be weighted differently in voting and discovery
Reputation Oracle
Off-chain or on-chain actors that grant/verify reputation actions
🗂 Default Reputation Domains
governance
Participating in DAOs/voting
Medium
DAO proposals, weighted voting
moderation
Content moderation & community
Fast
Flagging, trust scoring
creation
Posts, tips, content shared
Slow
Feed ranking, tip multipliers
dev
Contributions to code/infra
Medium
Grant access, badges
rep_oracle
Meta-reputation for rep granters
Very slow
Delegation, community governance
These are customizable by governance. New domains can be proposed.
⚙️ Smart Contract Functions
The core RepModule
contract handles all reputation logic. Example functions:
grantReputation(address user, string domain, uint256 amount)
Grants
amount
of rep indomain
touser
Only callable by an approved Reputation Oracle
burnReputation(address user, string domain, uint256 amount)
Used to reduce reputation manually (e.g. spam)
getReputation(address user, string domain) returns (uint256)
Returns current active rep balance (post-decay) for the domain
getRawReputation(address user, string domain) returns (uint256)
Returns the raw total reputation (before decay)
decayReputation(address user, string domain)
Triggers on interaction or periodically (auto-handled in subgraph indexers)
⏳ Decay Mechanism
Each reputation domain decays based on a half-life function:
effectiveRep = rawRep * e^(-λ * t)
λ
is a decay constant unique to each domain.Decay ensures that reputation stays current and incentivizes continued contribution.
Decay can be paused or reduced via badges or verified credentials.
📊 Example Usage
1. Earning Rep
A user creates a high-quality post → +20
creation
rep via aRepOracle
.User votes in a DAO → +5
governance
rep via DAOFactory hook.
2. Applying Rep
A user with
moderation
rep > 50 can flag spam directly.DAO voting power =
getReputation(user, "governance") + boost from "rep_oracle"
3. Viewing Rep (Subgraph)
query GetReputation {
reputationBalances(where: {user: "0xabc...", domain: "creation"}) {
domain
amount
lastUpdated
}
}
🧠 Developer Tips
To mint rep via code:
RepModule(granter).grantReputation(user, "dev", 10e18);
Reputation oracles must be approved via governance proposals or contract owner flow.
The
RepModule
is modular—new domains and policies can be added post-deploy.
Last updated
Was this helpful?