← Back to all products

Portfolio Risk Scorer

$13

Score DeFi portfolio risk exposure across protocols, assets, and coverage positions.

📁 14 files
TOMLPythonTypeScriptMarkdownJSON

📁 File Structure 14 files

portfolio-risk-scorer/ ├── LICENSE ├── README.md ├── pyproject.toml ├── sdk/ │ ├── package.json │ ├── src/ │ │ ├── index.ts │ │ └── types.ts │ └── tsconfig.json ├── security-notes.md ├── src/ │ ├── __init__.py │ ├── config.py │ ├── formatters.py │ ├── models.py │ └── scoring.py └── tests/ └── test_scoring.py

📖 Documentation Preview README excerpt

Portfolio Risk Scorer — CryptoForge Coverage Vault

Risk scoring engine for DeFi portfolio positions across protocols. Python backend with TypeScript SDK.

Features

  • Multi-category risk scoring — Smart contract, oracle, liquidity, governance, economic, regulatory
  • Protocol-aware — Built-in risk profiles for 20+ major DeFi protocols
  • Portfolio analysis — Concentration risk, chain diversification, protocol diversification
  • Actionable recommendations — Specific guidance for risk reduction
  • TypeScript SDK — Client-side scoring for frontend integration

Installation


pip install -e .

Quick Start


from portfolio_risk_scorer import RiskScorer, Position, ProtocolType

scorer = RiskScorer()

positions = [
    Position("Aave", ProtocolType.LENDING, "Ethereum", ["USDC", "ETH"], 50_000, apy_pct=3.5),
    Position("Uniswap", ProtocolType.DEX_LP, "Arbitrum", ["ETH", "USDC"], 25_000, apy_pct=12.0),
    Position("Lido", ProtocolType.STAKING, "Ethereum", ["stETH"], 25_000, apy_pct=4.0),
]

portfolio = scorer.score_portfolio(positions)
print(f"Risk: {portfolio.risk_level.value} ({portfolio.overall_score}/100)")
print(f"Concentration: {portfolio.concentration_risk:.1%}")

Risk Categories

CategoryWeightDescription
Smart Contract30%Contract complexity, audit status, protocol maturity
Oracle15%Oracle dependency and manipulation risk
Liquidity20%Position size relative to available liquidity
Governance10%Decentralization and governance attack vectors
Economic15%Yield sustainability and incentive alignment
Regulatory10%Regulatory exposure and compliance risk

TypeScript SDK


import { RiskScorer, Position, ProtocolType } from '@cryptoforge/portfolio-risk-scorer';

const scorer = new RiskScorer();
const result = scorer.scorePortfolio(positions);

Architecture


Position → RiskScorer.score_position() → PositionScore

*... continues with setup instructions, usage examples, and more.*

📄 Code Sample .py preview

src/config.py """ Portfolio Risk Scorer — Configuration ══════════════════════════════════════ Default scoring parameters and protocol risk data. """ from __future__ import annotations from dataclasses import dataclass, field from .models import RiskCategory # Base risk scores for known protocols (0-100, lower = safer) PROTOCOL_BASE_SCORES: dict[str, int] = { "Aave": 20, "Compound": 25, "Uniswap": 15, "Curve": 20, "MakerDAO": 22, "Lido": 18, "Convex": 30, "Yearn": 35, "Balancer": 28, "SushiSwap": 35, "Synthetix": 40, "dYdX": 30, "GMX": 38, "Stargate": 45, "Across": 42, "Hop": 48, "Eigen Layer": 32, "Rocket Pool": 25, "Frax": 35, "Pendle": 40, } # Default base score for unknown protocols UNKNOWN_PROTOCOL_SCORE: int = 60 # Default category weights (must sum to ~1.0) CATEGORY_WEIGHTS: dict[RiskCategory, float] = { RiskCategory.SMART_CONTRACT: 0.30, RiskCategory.ORACLE: 0.15, RiskCategory.LIQUIDITY: 0.20, RiskCategory.GOVERNANCE: 0.10, RiskCategory.ECONOMIC: 0.15, RiskCategory.REGULATORY: 0.10, } # ... 37 more lines ...
Buy Now — $13 Back to Products