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
amountof rep indomaintouserOnly 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
creationrep via aRepOracle.User votes in a DAO → +5
governancerep via DAOFactory hook.
2. Applying Rep
A user with
moderationrep > 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
RepModuleis modular—new domains and policies can be added post-deploy.
Last updated
Was this helpful?
