zScore Docs
  • Core
    • What is zScore
    • How It Works
    • Operational Mechanics
  • For Operators
    • Mainnet
      • Quickstart (Mainnet)
      • Registration (Mainnet)
  • For Protocols
    • Overview
    • zPass
      • Getting Started
      • Use Cases
        • Risk Assessment
        • User Segmentation
        • Sybil Detection
        • Reputation Scoring
      • API Reference
        • Get zScore by Wallet
        • Get Wallets zScore
        • Get Wallets by Protocol
        • Get All Categories
        • Get Protocol Analytics by Wallet
        • Get Global Protocol Analytics
Powered by GitBook
On this page
  • 🎯 Overview
  • 📊 The Risk Assessment Challenge
  • Traditional Web3 Lending Problems
  • The zPass Solution
  • 🏗️ Implementation Guide
  • Step 1: Basic Risk Scoring
  • Step 2: Advanced Risk Analytics
  • Step 3: Dynamic Risk Monitoring
  • 📊 Risk Categories & Scoring
  • zScore Risk Mapping
  • Risk Factors Analysis
  • 🎯 Real-World Applications
  • DeFi Lending Protocol Example
  • Insurance Protocol Risk Pricing
  • 📈 Success Metrics & ROI
  • Proven Results
  • Implementation ROI
  • 🚀 Getting Started
  • Quick Implementation
  • Best Practices
  • 🤝 Support & Resources
  • Technical Support
  • Risk Management Consultation
  1. For Protocols
  2. zPass
  3. Use Cases

Risk Assessment

🎯 Overview

Transform your protocol's risk management with comprehensive on-chain credit scoring. zPass enables you to assess user creditworthiness, prevent bad debt, and optimize lending decisions using proven Web3 behavioral data.

Perfect for: DeFi lending protocols, insurance platforms, high-value transaction systems, collateral management


📊 The Risk Assessment Challenge

Traditional Web3 Lending Problems

  • 🔍 Blind Lending: No credit history for anonymous wallets

  • 💸 High Default Rates: 15-25% liquidation rates in volatile markets

  • ⚖️ Over-Collateralization: 150-200% collateral requirements limit accessibility

  • 🤖 Bot Exploitation: Automated accounts gaming lending protocols

  • 📉 Cascade Failures: Correlated liquidations during market stress

The zPass Solution

zPass provides comprehensive risk intelligence by analyzing:

  • Transaction History: Patterns indicating financial responsibility

  • DeFi Behavior: Lending, borrowing, and liquidation track record

  • Protocol Loyalty: Long-term engagement vs. yield farming

  • Risk Indicators: Suspicious activities and red flags

  • Cross-Platform Data: Holistic view across all Web3 activities


🏗️ Implementation Guide

Step 1: Basic Risk Scoring

Start with simple risk classification for new borrowers:

async function assessBorrowerRisk(walletAddress) {
  const score = await zpass.getScore(walletAddress);
  
  const riskProfile = {
    address: walletAddress,
    zscore: score.zscore,
    riskLevel: score.risk_level,
    percentile: score.percentile,
    recommendation: getRiskRecommendation(score)
  };
  
  return riskProfile;
}

function getRiskRecommendation(score) {
  if (score.zscore >= 700) {
    return {
      decision: 'approve',
      ltv: 0.8,
      interestRate: 'prime',
      monitoring: 'standard'
    };
  } else if (score.zscore >= 400) {
    return {
      decision: 'approve',
      ltv: 0.6,
      interestRate: 'standard',
      monitoring: 'enhanced'
    };
  } else if (score.zscore >= 200) {
    return {
      decision: 'conditional',
      ltv: 0.4,
      interestRate: 'high',
      monitoring: 'intensive'
    };
  } else {
    return {
      decision: 'decline',
      reason: 'Insufficient credit history or high risk indicators'
    };
  }
}

Step 2: Advanced Risk Analytics

Implement comprehensive risk assessment with detailed analytics:

async function comprehensiveRiskAssessment(walletAddress, loanAmount, collateralValue) {
  // Get comprehensive wallet analytics
  const analytics = await zpass.getWalletAnalytics(walletAddress);
  
  // Calculate risk metrics
  const riskMetrics = {
    creditScore: analytics.zscore,
    liquidationHistory: analytics.liquidation_count,
    avgPositionSize: analytics.avg_position_size,
    protocolDiversity: analytics.protocols_used.length,
    accountAge: analytics.account_age_days,
    activityLevel: analytics.transaction_frequency
  };
  
  // Advanced risk calculation
  const riskAssessment = calculateAdvancedRisk(riskMetrics, loanAmount, collateralValue);
  
  return {
    ...riskMetrics,
    recommendation: riskAssessment,
    monitoring_level: getMonitoringLevel(riskAssessment.risk_score),
    suggested_terms: getLoanTerms(riskAssessment)
  };
}

function calculateAdvancedRisk(metrics, loanAmount, collateralValue) {
  let riskScore = 100; // Start with base risk
  
  // Credit score impact (most important factor)
  riskScore -= (metrics.creditScore / 10);
  
  // Liquidation history penalty
  riskScore += (metrics.liquidationHistory * 15);
  
  // Account age bonus (older accounts are more stable)
  if (metrics.accountAge > 365) riskScore -= 10;
  if (metrics.accountAge > 730) riskScore -= 5;
  
  // Protocol diversity bonus (diversified users are less risky)
  if (metrics.protocolDiversity > 5) riskScore -= 5;
  if (metrics.protocolDiversity > 10) riskScore -= 5;
  
  // Loan-to-collateral ratio impact
  const ltv = loanAmount / collateralValue;
  if (ltv > 0.8) riskScore += 20;
  if (ltv > 0.6) riskScore += 10;
  
  return {
    risk_score: Math.max(0, Math.min(100, riskScore)),
    risk_category: getRiskCategory(riskScore),
    confidence: calculateConfidence(metrics)
  };
}

Step 3: Dynamic Risk Monitoring

Implement real-time risk monitoring for active loans:

class LoanRiskMonitor {
  constructor(zpassClient) {
    this.zpass = zpassClient;
    this.activeLoans = new Map();
  }

  async monitorLoan(loanId, borrowerAddress, loanDetails) {
    // Initial risk assessment
    const initialRisk = await this.assessCurrentRisk(borrowerAddress);
    
    this.activeLoans.set(loanId, {
      borrower: borrowerAddress,
      initialRisk: initialRisk.risk_score,
      currentRisk: initialRisk.risk_score,
      lastUpdate: Date.now(),
      ...loanDetails
    });

    // Set up periodic monitoring
    this.scheduleRiskUpdate(loanId);
  }

  async assessCurrentRisk(walletAddress) {
    const currentScore = await this.zpass.getScore(walletAddress);
    const recentActivity = await this.zpass.getRecentActivity(walletAddress, 7); // Last 7 days
    
    let riskAdjustment = 0;
    
    // Check for concerning recent activity
    if (recentActivity.large_withdrawals > 0) riskAdjustment += 10;
    if (recentActivity.new_liquidations > 0) riskAdjustment += 20;
    if (recentActivity.suspicious_transactions > 0) riskAdjustment += 15;
    
    return {
      base_score: currentScore.zscore,
      risk_score: Math.max(0, 100 - currentScore.zscore + riskAdjustment),
      risk_factors: recentActivity,
      timestamp: Date.now()
    };
  }

  async scheduleRiskUpdate(loanId) {
    setInterval(async () => {
      const loan = this.activeLoans.get(loanId);
      if (!loan) return;

      const currentRisk = await this.assessCurrentRisk(loan.borrower);
      const riskIncrease = currentRisk.risk_score - loan.currentRisk;

      // Update loan risk
      loan.currentRisk = currentRisk.risk_score;
      loan.lastUpdate = Date.now();

      // Trigger alerts if risk increased significantly
      if (riskIncrease > 20) {
        await this.triggerRiskAlert(loanId, 'high', currentRisk);
      } else if (riskIncrease > 10) {
        await this.triggerRiskAlert(loanId, 'medium', currentRisk);
      }
    }, 60000 * 60); // Check every hour
  }

  async triggerRiskAlert(loanId, severity, riskData) {
    const alert = {
      loanId,
      severity,
      timestamp: Date.now(),
      riskScore: riskData.risk_score,
      riskFactors: riskData.risk_factors,
      recommendedAction: this.getRecommendedAction(severity, riskData)
    };

    // Send alert to risk management system
    await this.sendAlert(alert);
  }

  getRecommendedAction(severity, riskData) {
    switch(severity) {
      case 'high':
        return {
          action: 'immediate_review',
          description: 'Consider margin call or position reduction',
          urgency: 'immediate'
        };
      case 'medium':
        return {
          action: 'enhanced_monitoring',
          description: 'Increase monitoring frequency and prepare for potential action',
          urgency: 'within_24h'
        };
      default:
        return {
          action: 'continue_monitoring',
          description: 'Continue standard monitoring procedures',
          urgency: 'routine'
        };
    }
  }
}

📊 Risk Categories & Scoring

zScore Risk Mapping

zScore Range
Risk Level
Default Rate
Recommended LTV
Interest Rate

800-1000

Excellent

<2%

Up to 85%

Prime - 0.5%

600-799

Good

2-5%

Up to 75%

Standard

400-599

Fair

5-12%

Up to 60%

Standard + 1%

200-399

Poor

12-25%

Up to 40%

High + 2-3%

0-199

Very Poor

>25%

Decline

N/A

Risk Factors Analysis

Positive Indicators (Lower Risk)

  • Long Account History: 2+ years of activity

  • Diverse Protocol Usage: Active across 5+ protocols

  • No Liquidation History: Clean borrowing record

  • Stable Holdings: Long-term asset holding patterns

  • DAO Participation: Active governance involvement

Negative Indicators (Higher Risk)

  • Recent Liquidations: Liquidated within last 6 months

  • Bot-like Behavior: Automated transaction patterns

  • Yield Farming Only: No long-term protocol engagement

  • High Leverage History: Consistently high-risk positions

  • Suspicious Activity: Flagged transactions or addresses


🎯 Real-World Applications

DeFi Lending Protocol Example

// Complete lending decision workflow
async function processLoanApplication(application) {
  const { borrower, loanAmount, collateralAsset, collateralAmount } = application;
  
  // Step 1: Basic eligibility check
  const basicScore = await zpass.getScore(borrower);
  if (basicScore.zscore < 200) {
    return { approved: false, reason: 'Insufficient credit score' };
  }
  
  // Step 2: Comprehensive risk assessment
  const riskAssessment = await comprehensiveRiskAssessment(
    borrower, 
    loanAmount, 
    collateralAmount
  );
  
  // Step 3: Calculate loan terms
  const loanTerms = {
    approved: true,
    loanAmount: loanAmount,
    interestRate: calculateInterestRate(riskAssessment),
    ltv: calculateMaxLTV(riskAssessment),
    duration: calculateLoanDuration(riskAssessment),
    monitoring: getMonitoringLevel(riskAssessment)
  };
  
  // Step 4: Set up monitoring
  if (loanTerms.approved) {
    await loanMonitor.monitorLoan(
      generateLoanId(), 
      borrower, 
      loanTerms
    );
  }
  
  return loanTerms;
}

Insurance Protocol Risk Pricing

// Dynamic insurance premium calculation
async function calculateInsurancePremium(walletAddress, coverageAmount, protocol) {
  const riskProfile = await zpass.getWalletAnalytics(walletAddress);
  
  // Base premium calculation
  let premiumRate = 0.05; // 5% base rate
  
  // Adjust based on user risk score
  if (riskProfile.zscore > 700) premiumRate *= 0.7; // 30% discount
  else if (riskProfile.zscore < 400) premiumRate *= 1.5; // 50% premium
  
  // Protocol-specific adjustments
  const protocolRisk = await getProtocolRiskMultiplier(protocol);
  premiumRate *= protocolRisk;
  
  // User's history with this protocol
  const protocolHistory = riskProfile.protocols_used.find(p => p.name === protocol);
  if (protocolHistory && protocolHistory.liquidations === 0) {
    premiumRate *= 0.9; // 10% discount for clean history
  }
  
  return {
    coverageAmount,
    premiumRate,
    annualPremium: coverageAmount * premiumRate,
    riskFactors: extractRiskFactors(riskProfile)
  };
}

📈 Success Metrics & ROI

Proven Results

Aave Integration Analysis

Based on analysis of 4,410 liquidated addresses

  • 75% of liquidations came from wallets scoring <300

  • Only 5% of liquidations from wallets scoring >400

  • Potential 30% reduction in liquidations with zPass filtering

Risk-Adjusted Lending Benefits

  • 25% reduction in bad debt through better risk assessment

  • 40% increase in lending volume via optimized LTV ratios

  • 15% improvement in borrower retention through fair pricing

  • $2M+ prevented losses in first year of implementation

Implementation ROI

Metric
Before zPass
After zPass
Improvement

Default Rate

15%

8%

47% reduction

Average LTV

60%

70%

17% increase

Manual Review Time

2 hours

10 minutes

92% reduction

User Satisfaction

3.2/5

4.1/5

28% increase


🚀 Getting Started

Quick Implementation

  1. Get API Keys and configure authentication

  2. Start Simple: Implement basic risk scoring for new loans

  3. Add Monitoring: Set up real-time risk monitoring for active positions

  4. Optimize: Use data insights to refine your risk models

Best Practices

  • Start Conservative: Begin with lower LTV ratios and gradually optimize

  • Monitor Continuously: Risk profiles change - update assessments regularly

  • Combine Signals: Use zPass data alongside your existing risk factors

  • Test Thoroughly: Validate risk models with historical data before going live


🤝 Support & Resources

Technical Support

  • 💬 Discord: Real-time developer community

  • 📧 Email: [email protected]

Risk Management Consultation

  • 📞 Expert Consultation: Schedule a call with our risk specialists

  • 🎯 Custom Models: Develop protocol-specific risk algorithms

  • 📊 Data Analysis: Historical analysis of your user base

PreviousUse CasesNextUser Segmentation

Last updated 1 day ago

for zPass developer account

📚 Documentation:

Ready to reduce risk and optimize lending?

Sign Up
API Reference
Start Integration →