Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

How to Design Multi-Dimensional Reputation Metrics

A developer guide to implementing vector-based reputation systems. Covers defining axes, data aggregation, and smart contract patterns for DAOs and social tokens.
Chainscore © 2026
introduction
A FRAMEWORK FOR DEVELOPERS

How to Design Multi-Dimensional Reputation Metrics

A practical guide to building reputation systems that capture nuanced user behavior beyond simple scores.

Multi-dimensional reputation moves beyond a single score like an "ESR" to create a composite profile of a user. This approach is critical for Web3 applications where trust is contextual. For a lending protocol, a user's reputation for timely repayments is distinct from their reputation for governance participation. Designing these metrics starts with identifying the core behaviors and outcomes your protocol values, such as liquidity provision duration, governance proposal quality, or transaction completion rate. Each dimension should be measurable on-chain.

The next step is data sourcing and aggregation. Reputation dimensions are built from verifiable on-chain data. For a DeFi user, relevant data sources include: transaction history from Etherscan-like APIs, event logs from smart contracts, and governance voting records from Snapshot. A developer might aggregate this raw data into intermediate metrics, like calculating a "loyalty score" from the time-weighted average of funds locked in a protocol's pools. It's essential to use time-decay functions to ensure recent activity is weighted more heavily than historical actions.

Once metrics are defined, they must be normalized and weighted. Different dimensions use different scales (e.g., total volume vs. number of successful trades). Normalization, often scaling values between 0 and 1, allows for fair comparison. Strategic weighting then determines each dimension's influence on an overall reputation assessment. A DAO might weight "proposal execution success" at 40% and "forum participation" at 10%. This weighting is a governance decision that reflects the community's values. Implement this logic in a transparent, upgradeable smart contract or off-chain indexer.

Here is a simplified conceptual structure for a user's reputation object in a lending protocol, illustrating separate dimensions:

json
{
  "user": "0xabc...",
  "reputation_dimensions": {
    "creditworthiness": {
      "score": 0.85,
      "metrics": ["loan_repayment_rate", "collateral_ratio_history"]
    },
    "liquidity_provision": {
      "score": 0.92,
      "metrics": ["avg_deposit_duration", "total_deposit_volume"]
    },
    "governance": {
      "score": 0.45,
      "metrics": ["vote_participation_rate", "delegation_weight"]
    }
  },
  "composite_score": 0.79
}

Finally, design for transparency and agency. Users should be able to query their reputation breakdown and understand how to improve it. Publish the formula for each dimension and the aggregation method. Consider implementing a challenge mechanism, like Optimism's attestation stations, where users can submit verifiable off-chain credentials (e.g., GitHub contributions) to augment their on-chain reputation. The goal is to create a system that is not just a scoring mechanism but a composable identity layer that can be used across applications for tailored experiences, such as reduced collateral requirements or prioritized governance rights.

prerequisites
PREREQUISITES

How to Design Multi-Dimensional Reputation Metrics

Before building a reputation system, you must define the core metrics that will quantify user behavior and trust. This guide outlines the key components for designing effective, multi-dimensional reputation scores.

A robust reputation system moves beyond a single score. It aggregates multiple, independent metrics that reflect different facets of user behavior. Common dimensions include financial reputation (e.g., transaction volume, collateralization), social reputation (e.g., governance participation, delegation), and operational reputation (e.g., uptime for validators, successful task completion). Each dimension should be measurable on-chain or via verifiable credentials. For example, a user's financial reputation in a lending protocol could be a function of their total borrowed amount, timely repayments, and collateral ratio.

To design a metric, you must define its data source, calculation method, and decay function. The source could be on-chain events, oracle reports, or signed attestations. The calculation transforms this raw data into a normalized score, often using formulas like logarithmic scaling to prevent whale dominance or moving averages to smooth volatility. A decay function, such as exponential decay, is crucial to ensure reputation reflects recent activity and isn't permanently gamed. A staker's voting power reputation might decay by 10% per month if they become inactive.

Implementation requires careful smart contract design. You'll need a registry to store scores, an updater contract (often a keeper or oracle) to compute new values, and a clear interface for dApps to query them. Consider gas efficiency by storing compact data types and updating scores off-chain with on-chain verification via Merkle proofs. For a developer reputation metric based on merged GitHub pull requests, an off-chain service could aggregate the data and submit periodic attestations to an oracle like Chainlink, which then updates the on-chain registry.

Avoid common pitfalls like metric manipulation and centralization. Transparent, open-source formulas and decentralized data sources reduce manipulation risk. Use a multi-sig or DAO to govern parameter updates instead of a single admin key. Furthermore, design for composability: your reputation scores should be portable across different applications. Standards like ERC-725 and ERC-735 for claims and identities, or the EAS (Ethereum Attestation Service) schema, provide frameworks for building interoperable reputation primitives that various dApps can consume and build upon.

key-concepts-text
CORE CONCEPTS

From Score to Vector: Designing Multi-Dimensional Reputation Metrics

Moving beyond a single score to a reputation vector provides a nuanced, interpretable, and composable framework for on-chain identity.

A single reputation score is a dead end. It's a black box that collapses complex on-chain behavior into one number, losing critical context. A user with a score of 85 could be a prolific liquidity provider on Uniswap V3, a consistent governance participant in Compound, or a risky leveraged trader on Aave—you cannot tell from the score alone. This lack of interpretability makes the score difficult to trust, audit, or build upon for sophisticated applications like undercollateralized lending or sybil-resistant governance.

A reputation vector solves this by representing identity across multiple, orthogonal dimensions. Think of it as a set of attributes, like [liquidity_provision, governance_activity, borrowing_health, protocol_specific_trust]. Each dimension is calculated independently, often from verifiable, on-chain data. For example, liquidity_provision could be derived from the total value and duration of LP positions, while governance_activity tracks proposal creation and voting history. This structure preserves the why behind the reputation.

Designing these dimensions requires mapping desired behaviors to on-chain signals. For a lending protocol assessing borrower risk, key dimensions might include collateralization_history (frequency of near-liquidation) and repayment_regularity. A DAO might prioritize proposal_quality (based on voting outcomes) and community_engagement. Each dimension's calculation should be transparent and based on immutable data, allowing users to understand and improve their standing. Tools like The Graph for querying historical data or Chainscore's attestation graphs are essential for building these metrics.

Here is a conceptual example of a reputation vector for a DeFi user, represented as a JSON object. This structure is composable; applications can weigh dimensions according to their needs.

json
{
  "user": "0xabc...",
  "vector": {
    "liquidity_provision": 0.92, // Based on TVL & time in Uni V3/Aerodrome
    "governance_participation": 0.45, // Voting power & proposal success on Arbitrum DAO
    "borrowing_safety": 0.30, // Health factor history on Aave/Morpho
    "transaction_antifragility": 0.88 // Longevity & diversity of interactions
  }
}

The vector approach enables powerful applications. A credit market can create a risk score by heavily weighting borrowing_safety and transaction_antifragility. A grant committee can filter applicants by a high governance_participation and proposal_quality score. Because the dimensions are separate, a user's weakness in one area doesn't unfairly penalize them in unrelated contexts. This composability turns reputation from a static credential into a dynamic, multi-faceted asset that can be programmatically integrated across the Web3 stack.

Implementing this requires a robust data infrastructure. You'll need to index event logs, calculate rolling metrics (e.g., 90-day activity), and normalize values across protocols. Frameworks like Chainscore provide the primitives—verified attestations, aggregate queries, and vector computation—so developers can focus on defining the logic for their specific use case rather than building the data pipeline from scratch. The outcome is a reputation system that is transparent, actionable, and fundamentally more useful than a single number.

use-cases
DESIGN PATTERNS

Use Cases for Vector Reputation

Vector reputation systems encode multiple, independent attributes into a single on-chain identity. This enables more nuanced governance, risk assessment, and incentive design than a single-score model.

04

Optimizing DeFi Yield Strategies

Allow yield aggregators or vaults to adjust risk parameters based on a user's behavioral vector. Dimensions include:

  • Risk tolerance: Historical preference for stablecoin pools vs. leveraged farms.
  • Sophistication: Successful use of advanced features like perps or options.
  • Loyalty: Duration and consistency of using a specific protocol suite.

A sophisticated user could access higher-risk, higher-reward strategies automatically, while a new user is guided to safer, vanilla pools. This personalizes DeFi UX and manages protocol risk.

ON-CHAIN VS. OFF-CHAIN

Common Reputation Axes and Data Sources

A comparison of primary reputation dimensions used in Web3 systems and the data sources required to calculate them.

Reputation AxisPrimary Data SourceCalculation ComplexitySybil ResistanceCommon Use Cases

Financial Reputation

On-chain transactions

Low

Lending, underwriting

Governance Reputation

DAO voting history

Medium

Vote weighting, delegation

Social Reputation

Off-chain attestations (EAS, Gitcoin Passport)

High

Community grants, curation

Developer Reputation

GitHub commits, verified contracts

High

Grant allocation, bug bounties

Liquidity Provider Reputation

DEX LP positions, impermanent loss

Medium

Yield farming rewards, fee tiers

Validator/Operator Reputation

Node uptime, slashing events

Low

Network security, delegation pools

Content Creator Reputation

Mirror/ENS posts, collectible mints

Medium

Curation markets, tipping

step1-define-axes
CORE CONCEPT

Step 1: Define Orthogonal Reputation Axes

The foundation of a robust reputation system is the careful selection of independent, non-overlapping metrics that capture distinct aspects of user behavior and contribution.

Orthogonal reputation axes are independent metrics that measure different, non-redundant dimensions of a user's activity. In a Web3 context, this prevents gaming the system by excelling in just one area. For example, a user's transaction volume on a DEX is a different axis from their governance participation in a DAO. These axes should be mathematically uncorrelated; a high score in one should not predict a high score in another. This design ensures a multi-faceted and resilient view of reputation.

Start by identifying the core behaviors you want to incentivize and measure. Common orthogonal axes in DeFi and social protocols include: Financial Stake (e.g., TVL, fee payment), Governance Activity (proposals, voting), Social Contribution (content creation, curation), and Technical Contribution (code commits, bug reports). Each axis requires its own data source and calculation logic. For instance, financial stake might pull from on-chain balanceOf calls, while social contribution could analyze verified attestations on a network like Ethereum Attestation Service (EAS).

To implement, define a clear data schema for each axis. Here's a conceptual Solidity struct for a user's reputation state:

solidity
struct UserReputation {
    uint256 financialScore; // Derived from TVL & longevity
    uint256 governanceScore; // Based on proposal & vote count
    uint256 socialScore;     // From attestations or POAPs
    uint256 lastUpdated;
}

Each score is updated by separate, permissioned oracle contracts or subgraphs that query relevant chains. The key is ensuring the update logic for one axis does not depend on the state of another.

Avoid the pitfall of creating axes that are merely derivatives of each other. Measuring both "total transactions" and "total transaction value" often leads to high correlation, reducing orthogonality. Instead, combine correlated signals into a single, well-defined axis. Use historical chain data from Dune Analytics or The Graph to analyze potential correlations between your proposed metrics before committing them to a smart contract.

Well-defined orthogonal axes enable powerful reputation applications. They allow for weighted scoring (e.g., governance power weighted 70% on financial stake, 30% on governance activity), role-based access (e.g., a high technical score grants GitHub repo access), and sybil-resistance through multi-dimensional proof-of-personhood. The next step is to source the verifiable data to feed these axes.

step2-aggregate-data
IMPLEMENTATION

Step 2: Aggregate and Weight Data Sources

After defining your core metrics, the next step is to combine them into a single, meaningful reputation score. This requires choosing an aggregation method and assigning appropriate weights to each data source.

The simplest aggregation method is a weighted sum. You assign a weight to each normalized metric and sum the results. For example, a developer's reputation might be calculated as: Score = (0.4 * Code Contributions) + (0.3 * Governance Votes) + (0.2 * Social Sentiment) + (0.1 * On-Chain Activity). The weights (0.4, 0.3, etc.) reflect the relative importance you assign to each dimension. This method is transparent and easy to implement but assumes metrics are independent.

For more complex relationships, consider machine learning models. A model can learn non-linear interactions between features—like how a high number of code commits combined with positive community sentiment is a stronger signal than either alone. You can train a model on labeled data (e.g., known reputable vs. sybil addresses) to derive optimal weights. Tools like scikit-learn for off-chain analysis or tensorflow.js for on-chain inference are commonly used. However, this adds complexity and reduces transparency.

Weight assignment is critical and context-dependent. A DeFi protocol's creditworthiness score would heavily weight on-chain collateralization and repayment history. A DAO contributor's score might prioritize governance participation and peer reviews. Weights can be static, set by protocol governance, or dynamic, adjusting based on network conditions. For instance, during a governance crisis, the weight for forum activity might increase automatically.

Always validate your aggregated score. Use techniques like sensitivity analysis to see how score changes when you tweak weights. Check for correlation between input metrics to avoid double-counting the same signal. For transparency, consider publishing the aggregation logic on-chain as a verifiable smart contract or providing an open-source SDK, allowing users to audit how their reputation is calculated.

Finally, implement a decay mechanism. Reputation should reflect recent behavior. A common approach is to apply exponential decay to older data points, ensuring the score gradually forgets ancient actions. For example, a vote cast two years ago should have less impact than one cast last month. This keeps the reputation system dynamic and resistant to attacks based on historical, non-representative activity.

step3-smart-contract
DESIGNING METRICS

Implement the Reputation Smart Contract

This guide details the implementation of a smart contract that calculates and stores multi-dimensional reputation scores on-chain, using a weighted, composable formula.

A multi-dimensional reputation system moves beyond a single score by tracking distinct user behaviors. Common dimensions include transaction volume, protocol longevity (time since first interaction), social attestations (like on-chain follows or endorsements), and governance participation. Each dimension is represented as a separate state variable (e.g., uint256 public transactionVolumeScore) within the contract. Storing raw data or derived scores on-chain ensures transparency and immutability, allowing any dApp to query a user's verifiable reputation.

The core logic resides in a function that aggregates these dimensions into a final composite score. This is typically done using a weighted formula. For example: compositeScore = (volumeWeight * volumeScore) + (longevityWeight * longevityScore) + (socialWeight * socialScore). Weights are defined as constants or set by governance, allowing the system to prioritize certain behaviors. It's critical to normalize each dimension's score to a common scale (e.g., 0-100) before applying weights to prevent any single metric from dominating the result.

To update scores, the contract exposes permissioned functions. A recordTransaction function might increment the transactionVolumeScore. An off-chain oracle or a relayer with a valid signature could call a submitAttestation function to update social scores. Use access controls like OpenZeppelin's Ownable or AccessControl to restrict these update functions to trusted entities or the users themselves to prevent score manipulation.

Here is a simplified Solidity code snippet illustrating the storage structure and core calculation:

solidity
contract ReputationV1 {
    mapping(address => uint256) public volumeScore;
    mapping(address => uint256) public tenureScore;
    
    uint256 public constant VOLUME_WEIGHT = 40; // 40%
    uint256 public constant TENURE_WEIGHT = 60; // 60%
    
    function getCompositeScore(address user) public view returns (uint256) {
        uint256 normalizedVolume = (volumeScore[user] * 100) / 1 ether; // Example normalization
        uint256 normalizedTenure = tenureScore[user]; // Assumes already 0-100
        
        return (normalizedVolume * VOLUME_WEIGHT + normalizedTenure * TENURE_WEIGHT) / 100;
    }
}

Consider gas optimization and upgradeability from the start. Storing only the necessary derived scores, not every raw event, saves gas. For complex logic or evolving metrics, implement a proxy pattern (like UUPS) to allow for future upgrades without losing historical reputation data. Events should be emitted for every score update (event ScoreUpdated(address indexed user, string dimension, uint256 newScore)) to enable efficient off-chain indexing and monitoring by dApps.

Finally, integrate this contract with your application's frontend and other smart contracts. A lending protocol could query getCompositeScore(user) to adjust collateral factors. A governance contract might use tenure scores to calculate voting power. By making the reputation contract a standalone, reusable module, you enable composability across the ecosystem, turning user reputation into a portable, on-chain asset.

step4-integrate-governance
DESIGNING REPUTATION SYSTEMS

Step 4: Integrate with Governance and Roles

This step explains how to connect multi-dimensional reputation metrics to on-chain governance mechanisms and role-based permissions.

A reputation score is only useful if it grants tangible influence or access within a protocol. The core integration is with the governance module. Instead of a simple one-token-one-vote model, you can implement a reputation-weighted voting system. For example, a user's voting power could be calculated as a function of their composite reputation score, which itself is derived from on-chain activity like proposal execution, delegation consistency, and participation frequency. This creates a Sybil-resistant governance layer where influence is earned, not just purchased.

Beyond voting, reputation metrics should gate access to specific roles and permissions. Consider a DAO with roles like Proposal Creator, Code Reviewer, or Treasury Multi-sig Signer. The smart contract logic for assigning these roles can query an on-chain reputation oracle or a merkle root of scores. A user might need a minimum score of 50 in the technical-contribution dimension to become a Code Reviewer, and a score of 75 in governance-participation to create binding proposals. This automates merit-based role assignment.

Here is a simplified Solidity example for a governance contract that uses a reputation score for weighted voting. It assumes an external ReputationOracle contract that returns a user's score.

solidity
interface IReputationOracle {
    function getScore(address user) external view returns (uint256);
}

contract ReputationWeightedGovernance {
    IReputationOracle public reputationOracle;

    function vote(uint256 proposalId, bool support) external {
        uint256 voterRep = reputationOracle.getScore(msg.sender);
        // Ensure minimum reputation threshold
        require(voterRep >= 10, "Insufficient reputation to vote");
        // Use reputation as direct voting power
        _castVote(proposalId, msg.sender, support, voterRep);
    }

    function _castVote(uint256, address, bool, uint256 power) internal {
        // Logic to record vote with `power`
    }
}

This pattern separates the reputation calculation from the governance logic, allowing the metric to be updated without upgrading the core voting contract.

When designing these integrations, you must decide on the reputation decay or refresh mechanism. Should a user's voting power diminish over time if they become inactive (e.g., using a halving every 6 months)? Or should scores be recalculated from scratch each epoch? Protocols like SourceCred use a continuous decay model to ensure recent contributions are weighted more heavily. This prevents the system from being captured by early participants who are no longer active.

Finally, consider composability with existing standards. Your reputation system should be able to interface with common governance frameworks like OpenZeppelin's Governor contracts or tools like Tally. By emitting standard events (e.g., ReputationUpdated(address user, uint256 newScore)) and providing a simple view function to get a score, you enable other dApps in the ecosystem to permission their features based on the same reputation layer, creating a portable identity of contribution.

MULTI-DIMENSIONAL REPUTATION

Frequently Asked Questions

Answers to common technical questions about designing and implementing multi-dimensional reputation systems for Web3 applications.

A multi-dimensional reputation system evaluates an entity (e.g., a wallet, validator, or DAO member) across multiple, independent axes instead of collapsing all activity into a single score. For example, a user might have separate reputation vectors for liquidity provision, governance participation, and code contribution. This allows protocols to make more nuanced decisions, such as weighting a user's governance vote based on their specific contribution history rather than a generic score. Systems like Gitcoin Passport and Orange Protocol exemplify this approach by aggregating credentials from various sources into a composable identity.

conclusion
IMPLEMENTATION GUIDE

Conclusion and Next Steps

This guide has outlined the core principles for designing multi-dimensional reputation metrics. The next step is to implement a system that is robust, transparent, and adaptable.

Building a functional reputation system requires moving from theory to practice. Start by deploying a simple, auditable on-chain registry for your core metrics, such as a smart contract that logs contributions, staking events, or governance votes. Use oracles like Chainlink or API3 to securely bring off-chain data (e.g., GitHub commits, forum activity) on-chain. For initial testing, consider a testnet deployment on networks like Sepolia or Arbitrum Sepolia to validate logic without cost.

Your system's utility depends on integration. Reputation scores should be composable primitives that other protocols can query. Design a clear interface—such as an ERC-20 style balance check for reputation points or an ERC-1155 for non-transferable badges—that allows DeFi apps, governance modules, and NFT projects to gate access or weight votes based on user reputation. Document these interfaces thoroughly for developer adoption.

Finally, treat your reputation framework as a living system. Establish clear governance for parameter updates, such as decay rates or new metric weights, potentially managed by a DAO of long-term stakeholders. Continuously analyze on-chain data to detect sybil attacks or unintended incentives. Resources like the Token Engineering Commons and research from places like the Blockchain Governance Initiative provide ongoing insights for iterative design.

How to Design Multi-Dimensional Reputation Metrics | ChainScore Guides