← Back to all products
$13
Portfolio Risk Scorer
Score DeFi portfolio risk exposure across protocols, assets, and coverage positions.
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
| Category | Weight | Description |
|---|---|---|
| Smart Contract | 30% | Contract complexity, audit status, protocol maturity |
| Oracle | 15% | Oracle dependency and manipulation risk |
| Liquidity | 20% | Position size relative to available liquidity |
| Governance | 10% | Decentralization and governance attack vectors |
| Economic | 15% | Yield sustainability and incentive alignment |
| Regulatory | 10% | 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 ...