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

Launching a Transparency Dashboard for Pool Solvency Metrics

A developer tutorial for building a public interface that displays real-time, verifiable data on a risk pool's financial health, sourcing from on-chain contracts and subgraphs.
Chainscore © 2026
introduction
INTRODUCTION

Launching a Transparency Dashboard for Pool Solvency Metrics

A guide to building a real-time dashboard for monitoring DeFi pool solvency, focusing on data sourcing, metric calculation, and public transparency.

In decentralized finance, solvency refers to a liquidity pool's ability to meet its withdrawal obligations. A transparency dashboard provides real-time, verifiable proof of a pool's health, moving beyond opaque Total Value Locked (TVL) metrics. This is critical for users, auditors, and protocol developers to assess risk, as seen in incidents like the Euler Finance hack where solvency metrics could have provided early warnings. A well-designed dashboard tracks assets versus liabilities, collateralization ratios, and concentration risks.

Building this dashboard requires aggregating on-chain data from multiple sources. You'll need to query smart contracts for pool balances (e.g., using balanceOf on ERC-20 tokens), fetch oracle prices (from Chainlink or Pyth), and calculate user liabilities from lending positions or LP shares. Tools like The Graph for indexing, or direct RPC calls via libraries like ethers.js or viem, are essential for this data pipeline. The core challenge is synchronizing this data into a consistent, real-time view of the pool's financial state.

Key metrics to display include the Collateralization Ratio (Total Assets / Total Liabilities), Asset Concentration (percentage of pool in top 5 assets), and Debt Utilization. For example, a lending pool like Aave v3 would calculate its collateralization ratio by summing the USD value of all supplied assets and dividing by the USD value of all borrowed assets. A ratio below 100% indicates insolvency. These calculations must be performed off-chain or via a dedicated keeper due to gas costs and data aggregation needs.

The frontend must present this data clearly and accessibly. Use frameworks like Next.js or Vite with charting libraries such as Recharts or D3.js. A critical component is allowing users to verify the data themselves. Include links to on-chain transactions, contract addresses on Etherscan, and the specific block number used for calculations. This verifiable data provenance is what transforms a simple dashboard into a trust-minimized transparency tool, aligning with principles of E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness).

Finally, consider the operational lifecycle. The dashboard should be hosted on decentralized infrastructure like IPFS or Arweave via services like Fleek or Spheron for censorship resistance. Implement automated alerts for metric thresholds (e.g., collateralization ratio dropping below 110%) using services like PagerDuty or Telegram bots. By open-sourcing the dashboard's code on GitHub and documenting the methodology, you create a public good that enhances the entire ecosystem's security and trust.

prerequisites
TECHNICAL SETUP

Prerequisites and Tech Stack

Before building a dashboard for pool solvency metrics, you need the right tools and foundational knowledge. This guide outlines the core technologies and concepts required to track on-chain liquidity effectively.

A transparency dashboard for pool solvency metrics is a specialized data visualization tool. Its primary function is to monitor the health of liquidity pools by tracking key ratios like the collateralization ratio and debt-to-asset value. You'll need a solid understanding of DeFi primitives—specifically Automated Market Makers (AMMs) like Uniswap V3, lending protocols such as Aave, and collateralized debt positions. Familiarity with the concept of solvency risk, where a pool's liabilities exceed its assets, is essential for defining the metrics your dashboard will display.

The core of your tech stack will be a backend service to index and process blockchain data. You can build this using Node.js with TypeScript or Python. You will need a reliable method to query on-chain data; options include running your own archive node (e.g., with Erigon or Geth), using a node provider service like Alchemy or Infura, or leveraging a specialized indexer like The Graph for subgraph queries. The data layer will require a database—PostgreSQL is a robust choice for relational data, while TimescaleDB can optimize time-series metrics.

For the frontend, a modern framework like React or Vue.js is recommended for building interactive charts and tables. You'll integrate a charting library such as Recharts, Chart.js, or D3.js for visualizing metrics over time. The connection between your frontend and backend is typically a REST API or GraphQL endpoint. Your backend service will compute key solvency metrics—like (Total Asset Value) / (Total Liability Value)—and serve them via this API for the dashboard to consume and display in real-time.

Essential development tools include Git for version control, Docker for containerizing services to ensure consistent environments, and a package manager like npm or yarn. You should be comfortable with Ethereum JSON-RPC calls and reading smart contract ABIs to extract specific state data. For monitoring and alerting on solvency thresholds, consider integrating with a service like PagerDuty or building a simple notification system using webhooks or Telegram bots.

Finally, you must decide on the scope and data sources for your initial dashboard. Will you monitor a single protocol's pools or aggregate data across multiple chains? Start by defining the specific contracts you need to track, such as the Uniswap V3 Factory contract (0x1F98431c8aD98523631AE4a59f267346ea31F984) for pool addresses or the Aave LendingPool contract for debt positions. Having a clear, testable data pipeline from the blockchain to your UI is the critical first step before writing any code.

architecture-overview
ARCHITECTURE OVERVIEW

Launching a Transparency Dashboard for Pool Solvency Metrics

A technical guide to building a system that monitors and visualizes the real-time financial health of liquidity pools and lending protocols.

A solvency transparency dashboard is a real-time monitoring system that aggregates on-chain data to assess the financial health of DeFi protocols. Its core purpose is to answer a critical question: does the protocol have sufficient assets to cover its liabilities? This involves tracking metrics like Total Value Locked (TVL), loan-to-value (LTV) ratios, collateral coverage, and bad debt. Unlike a simple TVL tracker, a solvency dashboard performs calculations to evaluate risk exposure and potential insolvency scenarios, providing a proactive view of protocol safety for users, auditors, and risk managers.

The architecture is built on a decoupled, event-driven model. The data ingestion layer listens for on-chain events (deposits, withdrawals, borrows, liquidations) via RPC nodes or a service like The Graph. This raw data is processed by an analytics engine that calculates key solvency metrics. For a lending pool like Aave or Compound, this engine would compute the aggregate collateral value, total borrows, and the resulting health factor for the entire protocol or individual positions. These computed states are then stored in a time-series database for historical analysis.

The backend API layer serves this processed data to the frontend client. It typically provides REST or GraphQL endpoints for current snapshots, historical charts, and specific protocol queries. The frontend visualization layer is a web application (often built with React or Vue.js) that presents the data through interactive charts, gauges, and tables. Critical metrics are displayed prominently: a global health factor, the protocol's net asset value, and the size of any undercollateralized positions. Color-coded indicators (green/yellow/red) provide immediate visual risk assessment.

To ensure reliability, the system requires robust oracle integrations. Price feeds for collateral and debt assets are sourced from decentralized oracle networks like Chainlink or Pyth. The dashboard must also account for different asset decimals and price granularity. Furthermore, implementing alerting mechanisms is crucial. The backend should monitor for threshold breaches (e.g., health factor falling below 1.05) and trigger notifications via email, Discord webhooks, or Telegram bots, enabling proactive risk management.

A practical implementation for a simple pool might involve a script that periodically fetches pool reserves from a Uniswap V3 contract, retrieves token prices from an oracle, and calculates the pool's net value. The code snippet below illustrates a basic check:

javascript
const reserves = await poolContract.getReserves();
const priceTokenA = await oracleContract.getPrice(tokenAAddress);
const priceTokenB = await oracleContract.getPrice(tokenBAddress);
const totalValue = (reserves[0] * priceTokenA) + (reserves[1] * priceTokenB);
console.log(`Pool Solvency Value: $${totalValue}`);

This logic forms the basis for more complex multi-protocol dashboards.

Finally, deploying this architecture demands attention to data freshness and cost optimization. Indexing services can reduce RPC calls, while caching layers improve API response times. The end product is a critical tool for DeFi transparency, moving beyond opaque balances to provide a verifiable, real-time audit of protocol solvency, which is fundamental for user trust and systemic stability in decentralized finance.

key-metrics-definitions
TRANSPARENCY DASHBOARD

Key Solvency Metrics to Calculate

Essential on-chain calculations to monitor and display for proving the health and solvency of a liquidity pool or lending protocol.

01

Total Value Locked (TVL)

The aggregate value of all assets deposited in the protocol. This is the foundational metric for assessing scale and user trust.

  • Calculation: Sum of (Asset Balance * Current Market Price) for all supported tokens.
  • Example: A pool with 10,000 ETH ($30M) and 50M USDC has a TVL of $80M.
  • Dashboard Use: Display real-time TVL with historical charts to show growth and stability.
02

Collateralization Ratio

Measures the value of collateral backing borrowed assets, critical for lending protocols like Aave or Compound.

  • Calculation: (Total Collateral Value / Total Borrowed Value) * 100.
  • Healthy Threshold: Typically > 150% to withstand market volatility.
  • Dashboard Use: Highlight pools or users below the liquidation threshold. Show protocol-wide and per-asset averages.
03

Pool Utilization Rate

The percentage of deposited assets that are currently borrowed or in use, indicating capital efficiency and liquidity risk.

  • Calculation: (Total Borrows / Total Supply) * 100.
  • High Utilization (>80%): Can lead to higher borrowing rates but also increased insolvency risk if withdrawals spike.
  • Dashboard Use: Visualize utilization per asset pool. Set clear warnings for high-risk thresholds.
04

Net Asset Value (NAV) per LP Token

The value of a single liquidity provider (LP) token, proving that the underlying assets exist.

  • Calculation: (Pool TVL - Protocol Fees) / Total LP Token Supply.
  • Verification: Users can independently verify their share of the pool by multiplying their LP tokens by the NAV.
  • Dashboard Use: Display real-time NAV for each pool. A constant or growing NAV is a strong solvency signal.
05

Reserve Ratio

The portion of liquid assets held to cover potential withdrawals, used by stablecoin protocols and vaults.

  • Calculation: (Liquid Reserve Assets / Total Liabilities) * 100.
  • Example: Frax Finance uses this to demonstrate algorithmic stablecoin backing.
  • Dashboard Use: A transparent, real-time reserve ratio builds trust. Show the composition of reserves (e.g., USDC, USDT, other stable assets).
06

Bad Debt & Insolvency Gap

Quantifies the value of undercollateralized positions that cannot be liquidated, representing a direct protocol loss.

  • Calculation: Sum of (Debt Value - Collateral Value) for all underwater accounts.
  • Source: Publicly visible after liquidation events on protocols like Venus or Euler.
  • Dashboard Use: For full transparency, display this metric when non-zero. Show historical recovery efforts.
data-sourcing-subgraph
DATA INGESTION

Step 1: Sourcing Data from the Subgraph

This step covers querying The Graph protocol to extract real-time and historical pool solvency data from decentralized exchanges.

A subgraph is a custom API built on The Graph protocol that indexes blockchain data from events emitted by smart contracts. For a transparency dashboard, you'll query a subgraph for a specific DEX (like Uniswap V3 or Balancer) to retrieve metrics such as pool reserves, total value locked (TVL), user positions, and transaction history. This provides a structured, queryable data layer instead of parsing raw blockchain logs.

To begin, identify the official subgraph for your target protocol. For example, Uniswap V3's mainnet subgraph endpoint is https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3. You will use GraphQL to query this endpoint. A foundational query fetches key pool metrics. The example below retrieves the 10 largest pools by TVL, including their token reserves and derived USD values.

graphql
query TopPoolsByTVL {
  pools(
    first: 10
    orderBy: totalValueLockedUSD
    orderDirection: desc
  ) {
    id
    token0 {
      symbol
      id
    }
    token1 {
      symbol
      id
    }
    totalValueLockedUSD
    volumeUSD
  }
}

For solvency analysis, you need deeper liquidity data. This involves querying liquidity positions (positions or mints/burns events) and swaps to calculate net flows. A robust query might track changes in reserve ratios over time to detect imbalances. Always implement pagination (using first/skip or orderBy/id_gt) when fetching large datasets to avoid timeouts and stay within query cost limits.

Subgraph data has inherent indexing latency (typically a few blocks behind the chain head). For near-real-time solvency alerts, your dashboard should poll the subgraph at regular intervals (e.g., every 30 seconds) and compare new query results against cached baselines. Log all queries and handle potential downtime or schema changes from the subgraph developer.

The output of this step is a clean, structured dataset—often in JSON format—ready for processing. This data forms the core of your dashboard's calculations for metrics like pool utilization rates, concentration risks, and impermanent loss estimates. Store this raw data with timestamps to enable historical trend analysis and audit trails.

Next, you will process this raw subgraph data in Step 2 to calculate the actual solvency metrics, such as comparing a pool's advertised liquidity to its executable liquidity during a large trade, or simulating the impact of a significant withdrawal on pool stability.

data-sourcing-contracts
TECHNICAL IMPLEMENTATION

Step 2: Fetching Real-Time Data from Smart Contracts

This section details the process of connecting to and querying blockchain nodes to retrieve live solvency metrics from DeFi protocol smart contracts.

To build a transparency dashboard, you must first establish a connection to a blockchain node. For Ethereum and EVM-compatible chains, you can use a node provider service like Alchemy, Infura, or QuickNode, or run your own node. The connection is typically made using the ethers.js or web3.js library. For example, with ethers v6, you instantiate a JsonRpcProvider with your RPC endpoint URL. This provider object is your gateway to reading the current state of any contract on the network.

Once connected, you need the contract address and Application Binary Interface (ABI) of the protocol you're monitoring. The ABI is a JSON file that describes the contract's functions and how to call them. You can often find the official ABI in the project's GitHub repository or on block explorers like Etherscan. With the address and ABI, you create a contract object using your provider. For instance, new ethers.Contract(address, abi, provider) in ethers.js. This object allows you to call any view or pure function on the contract without spending gas.

Core solvency metrics are retrieved by calling specific public getter functions. Common functions include totalAssets() for the protocol's total value locked (TVL), totalSupply() for the amount of liquidity provider tokens issued, and pricePerShare() for the value of a single share token. You call these functions using await to get a promise that resolves with the current on-chain value. It's critical to understand the units returned; totalAssets() might return a uint256 representing the amount in the smallest token unit (wei), which you must format for display.

For a comprehensive view, you must often call multiple contracts. A lending protocol like Aave involves the LendingPool contract for overall data and separate aToken contracts for each market. A yield aggregator like Yearn uses a Vault contract per strategy. Your dashboard should fetch data from all relevant contracts in parallel using Promise.all() to improve performance. You should also implement error handling for RPC rate limits, network congestion, or deprecated contract functions to ensure dashboard resilience.

To achieve true real-time updates, you need to poll these functions at regular intervals or use event listeners. While polling with setInterval is simpler, listening for specific events (like Deposit, Withdraw, Harvest) is more efficient and provides immediate updates when state changes. You can subscribe to events using the contract object's on method. However, for a public dashboard, a combination is often best: event-driven updates for reactivity, with periodic full-state polling as a fallback to catch any missed events or external state changes.

Finally, the raw numeric data must be processed into human-readable metrics. This involves converting units, calculating derived metrics like collateralization ratios or APY, and potentially fetching external price oracles for USD values. Store this processed data in your application state for the frontend components built in the next step. The complete code flow is: connect provider → instantiate contract → call functions → process data → update state. This pipeline forms the live data backbone of your solvency dashboard.

calculating-metrics
IMPLEMENTATION

Step 3: Calculating the Core Metrics

This section details the computational logic for deriving the core solvency metrics that form the backbone of your transparency dashboard.

The dashboard's credibility hinges on the accurate, real-time calculation of three foundational metrics: Total Value Locked (TVL), Total Value at Risk (TVaR), and the Solvency Ratio. TVL is the sum of all assets deposited into the pool's smart contracts. For a multi-chain pool, this involves querying the balance of the pool's vault contract on each supported chain (e.g., Ethereum, Arbitrum, Polygon) and summing the values in a common denomination like USD, using trusted price oracles like Chainlink. The formula is: TVL = Σ (Asset Balance on Chain_i * Oracle Price_i).

Total Value at Risk (TVaR) is a more nuanced metric representing the maximum potential loss from outstanding, uncollateralized debt. It is calculated by summing the value of all active loans where the collateral value has fallen below the required loan-to-value (LTV) threshold, putting them at risk of liquidation. For each undercollateralized position, the TVaR increments by (Loan Value - (Collateral Value * Max LTV)). A TVaR greater than zero indicates immediate insolvency risk within the pool, signaling that liquidations may not cover all bad debt.

The Solvency Ratio is the key health indicator, derived from the previous two metrics. It is expressed as Solvency Ratio = (TVL - TVaR) / TVL. A ratio of 1.0 (or 100%) signifies perfect health—all TVL is accounted for and no positions are undercollateralized. A ratio below 1.0 shows the proportion of TVL that is potentially at risk. For example, a ratio of 0.95 means 5% of the pool's value is exposed to undercollateralized debt. This metric should be calculated and updated with every new block or price feed update to ensure real-time accuracy.

Implementing these calculations requires listening to on-chain events. Your backend service must monitor: Deposit and Withdrawal events to update TVL, Borrow and Repay events to track loan principals, and PriceFeedUpdated events from oracles to revalue collateral and loans. Upon any of these events, trigger a recalculation of all three metrics. Use a idempotent function to avoid double-counting and store the results with a timestamp in your database for historical analysis and charting.

For developers, here is a simplified pseudocode structure for the core calculation function:

javascript
async function calculateSolvencyMetrics(poolAddress) {
  // 1. Fetch TVL
  const tvl = await getTVLFromAllChains(poolAddress);
  
  // 2. Fetch all active loans and their collateral
  const positions = await getAllLoanPositions(poolAddress);
  
  // 3. Calculate TVaR
  let tvar = 0;
  for (const position of positions) {
    const collateralValue = position.collateralAmount * getOraclePrice(position.collateralAsset);
    const maxAllowedDebt = collateralValue * MAX_LTV;
    if (position.loanValue > maxAllowedDebt) {
      tvar += (position.loanValue - maxAllowedDebt);
    }
  }
  
  // 4. Calculate Solvency Ratio
  const solvencyRatio = (tvl - tvar) / tvl;
  
  return { tvl, tvar, solvencyRatio };
}

Finally, ensure your calculations are verifiable. Publish the logic openly, perhaps in a GitHub repository, and consider using a cryptographic commitment scheme like storing periodic Merkle roots of your metric states on-chain. This allows users to cryptographically verify that the metrics displayed on your frontend dashboard match the backend computations, moving beyond trust to verifiable transparency. The next step is designing the dashboard interface to present these metrics clearly.

DATA SOURCES

Metric Calculation Data Requirements

Comparison of data source options for calculating key pool solvency metrics like TVL, collateralization ratios, and liquidity depth.

Data RequirementOn-Chain Indexers (The Graph)Node RPC QueriesCentralized API Provider

Real-time Block Data

Historical State Queries

Custom Smart Contract Logic

Data Freshness (Latency)

< 5 sec

< 1 sec

2-15 sec

Query Cost for 1M req/month

$50-200

$300-1000+

$100-500

Requires Infrastructure Mgmt

Supports Complex Aggregations

Data Completeness Guarantee

Event-based gaps possible

High

High

building-ui-components
FRONTEND IMPLEMENTATION

Step 4: Building the Dashboard UI Components

This step focuses on constructing the React components that will visualize the on-chain solvency data fetched in the previous step.

Begin by creating the primary layout component, DashboardLayout. This component should establish the overall structure using a framework like Material-UI or Chakra UI for rapid, consistent UI development. It will typically include a navigation sidebar, a main content area, and a header. The layout should be responsive, ensuring the dashboard is usable on desktop and mobile devices. Use a grid system to organize the main content area into sections for different metric categories, such as TVL Overview, Collateralization Ratios, and Protocol Health.

Next, build the core data visualization components. For displaying the Total Value Locked (TVL), implement a TVLChart component using a library like Recharts or Victory. This component should accept the historical TVL data array from your API and render an interactive line chart. Key features include a time-range selector (e.g., 7D, 30D, 90D) and tooltips that show precise values and dates on hover. Similarly, create a CollateralizationGauge component to show the current collateral ratio against the protocol's minimum safe threshold, using a radial gauge or a large, color-coded numeric display.

For tabular data, such as a list of individual pools or vaults with their specific metrics, create a SolvencyTable component. Use a virtualized table library like TanStack Table (formerly React Table) for performance with large datasets. Each row should display the pool's name, address, current TVL, collateralization ratio, and status. The status column should use conditional formatting—for example, a green badge for "Healthy," yellow for "Watch," and red for "At Risk"—based on the ratio thresholds defined in your smart contracts.

Implement a MetricsCard component as a reusable wrapper for individual KPIs. This card should display a metric title (e.g., "System-Wide Collateral Ratio"), the primary value (e.g., "245%"), a trend indicator (up/down arrow with percentage change), and a concise description. Use this component to populate the overview section of the dashboard with key figures like Total Collateral, Total Debt, and Number of Active Pools. This creates a high-level, scannable summary for users.

Finally, ensure all components are connected to your state management solution (e.g., Zustand, Redux Toolkit, or React Context) which holds the data fetched from your backend API. Components should subscribe to this state and re-render when new data is polled. Add loading skeletons and error state placeholders (like ErrorBoundary components) to handle asynchronous data fetching gracefully. The goal is a dashboard that feels live, responsive, and provides immediate, clear insight into the protocol's financial health.

DEVELOPER FAQ

Frequently Asked Questions

Common technical questions and troubleshooting for implementing a transparency dashboard to monitor pool solvency and reserve metrics.

A robust dashboard must aggregate data from multiple on-chain and off-chain sources to provide a complete solvency picture. Key sources include:

  • On-chain Reserves: Direct RPC calls to the pool's smart contracts to read token balances, typically using getReserves() or custom view functions.
  • Price Oracles: Decentralized oracles like Chainlink (AggregatorV3Interface) or Pyth Network to fetch real-time asset prices for reserve valuation.
  • Cross-Chain Data: For multi-chain pools, use specialized indexers (The Graph, Covalent) or bridge status APIs (LayerZero, Axelar) to verify locked assets on remote chains.
  • Protocol State: Query the pool's administrative contract for parameters like fees, withdrawal limits, or pause status that affect solvency operations.

Relying on a single data source, like a DEX's frontend API, is insufficient for auditing. Direct contract calls are essential for verification.

conclusion-next-steps
IMPLEMENTATION

Conclusion and Next Steps

This guide has outlined the architecture and components for building a transparency dashboard to monitor pool solvency metrics. The final step is deployment and ongoing maintenance.

Launching your dashboard requires a production-ready deployment strategy. Use a service like Vercel, AWS Amplify, or a dedicated server to host the frontend. For the backend indexer, consider a managed service like The Graph for subgraph hosting or run your own node infrastructure for maximum control. Ensure all environment variables for RPC endpoints and API keys are securely managed, never hardcoded. A critical final check is to verify the data pipeline's integrity by comparing dashboard metrics against the raw on-chain state for a sample of pools.

Maintaining the dashboard is an ongoing commitment. You must monitor the indexer for chain reorgs and ensure it stays synchronized with the latest blocks. As the underlying protocol (e.g., Uniswap V3, Aave, or a custom AMM) upgrades its smart contracts, your data-fetching logic and subgraph may need updates. Establish alerts for data staleness or significant deviations in key metrics like totalValueLocked versus totalLiabilities, which could indicate an indexing failure or a potential solvency issue.

To extend the dashboard's utility, consider implementing automated reporting. This could involve sending daily digest emails of solvency ratios, integrating with Slack/Telegram bots for threshold alerts (e.g., when collateralization falls below 110%), or generating periodic attestation reports for stakeholders. These features transform the dashboard from a passive viewer into an active risk management tool.

The next logical step is to enhance transparency further by making the dashboard's verification process itself transparent. Publish the source code of the indexer and frontend on GitHub under an open-source license. You can also publish the derived metrics on-chain using a solution like HyperOracle or Pyth to create verifiable data feeds that other smart contracts can trust and consume, creating a composable transparency layer.

Finally, engage with your community and users. Share the dashboard URL widely and document its methodology. Solicit feedback on additional metrics users want to see, such as historical solvency trends, stress test simulations, or cross-pool risk analysis. A transparency dashboard is most powerful when it is used, trusted, and continuously improved upon by the ecosystem it serves.

How to Build a DeFi Risk Pool Solvency Dashboard | ChainScore Guides