ChainScore Labs
All Guides

How to Track Illiquid and Vesting Assets

LABS

How to Track Illiquid and Vesting Assets

A technical guide for developers and investors on monitoring, valuing, and managing locked, vesting, and illiquid DeFi assets using on-chain tools and methodologies.
Chainscore © 2025

Core Concepts: Defining Illiquid and Vesting Assets

An overview of assets that are not easily sold or are subject to time-based release schedules, and the methods to accurately monitor their value and vesting progress.

Illiquid Assets

Illiquid assets are holdings that cannot be quickly converted to cash without a significant loss in value. They lack an active market with ready buyers.

  • Examples include private company equity, real estate, and certain collectibles.
  • Key challenge: Valuation is often complex and requires appraisals or financial models.
  • Why it matters: Investors must track these separately from liquid portfolios to understand true net worth and liquidity risk.

Vesting Schedules

A vesting schedule is a timeline that dictates when you gain full ownership of granted assets, like stock options or equity.

  • Typical structure: A 4-year schedule with a 1-year cliff is common for startup employees.
  • Key feature: It incentivizes retention by releasing ownership incrementally over time.
  • Why it matters: Tracking vesting milestones is crucial for financial planning and tax implications upon exercise or sale.

Restricted Stock Units (RSUs)

Restricted Stock Units (RSUs) are a promise to grant company stock once vesting conditions are met. They are a prevalent form of equity compensation.

  • Key feature: Value is taxed as ordinary income upon vesting, not at grant.
  • Real use case: A tech employee receives RSUs that vest over four years, creating a predictable future income stream.
  • Tracking need: Monitoring vest dates and post-vest sale strategies is essential for tax efficiency.

Private Company Equity

Private company equity represents ownership in a company not listed on a public exchange. It is a classic illiquid asset with unique tracking demands.

  • Valuation method: Value is typically set by periodic 409A valuations or funding rounds.
  • Key feature: Liquidity events like an IPO or acquisition are often required to sell.
  • Why it matters: Investors and employees must track paper gains, vesting, and potential dilution over long horizons.

Tracking Methodology

Effective tracking methodology for these assets involves consolidating data from multiple sources into a single dashboard.

  • Key feature: Manual entry of grant documents, vesting schedules, and latest valuations.
  • Use case: An executive uses a dashboard to see the vested vs. unvested value of their RSUs and private shares.
  • Why it matters: Provides a holistic, real-time view of complex holdings for better decision-making and reporting.

Liquidity Events

A liquidity event is a transaction that converts an illiquid or vesting asset into cash or tradable securities.

  • Common examples: An Initial Public Offering (IPO), a company acquisition, or a secondary market sale.
  • Key feature: These events trigger tax liabilities and change the asset's status from illiquid to liquid.
  • Why it matters: Tracking prepares you for these infrequent but critical financial moments, allowing for strategic planning.

Methodology: A Systematic Approach to Tracking

A structured process for monitoring illiquid and vesting assets across blockchains and traditional finance.

1

Step 1: Centralize Asset Identification & Data Sources

Aggregate all asset contracts and agreements into a single source of truth.

Detailed Instructions

Begin by creating a master inventory of all illiquid asset contracts and vesting schedules. This includes token vesting contracts (e.g., Team, Advisor, Investor allocations), SAFE/SAFT agreements, and private equity holdings. For on-chain assets, you must identify the contract address, ABI (Application Binary Interface), and the specific wallet addresses holding the assets. For off-chain assets, compile all legal documents and spreadsheet-based schedules.

  • Sub-step 1: Compile On-Chain Data: Use block explorers like Etherscan or Solscan to find contract addresses. For example, a common vesting contract might be 0x1234567890abcdef1234567890abcdef12345678.
  • Sub-step 2: Gather Off-Chain Documents: Collect PDFs of SAFT agreements, cap tables, and legal notices that detail cliff periods, vesting start dates (vestingStart=2023-01-01T00:00:00Z), and total grant amounts.
  • Sub-step 3: Establish a Source Database: Input all data into a structured database (e.g., Airtable, Google Sheets) with fields for Asset Type, Contract Address, Vesting Schedule, and Next Unlock Date.

Tip: Use a wallet explorer tool like Debank or Zapper to get an initial list of token holdings and smart contract interactions for a given address, which can reveal vesting contracts you may have forgotten.

2

Step 2: Automate On-Chain Vesting Schedule Queries

Implement scripts to programmatically read vesting contract states and calculate unlocks.

Detailed Instructions

Programmatic data fetching is critical for accuracy and timeliness. Write scripts using web3 libraries (e.g., ethers.js, web3.py) to query smart contracts for key vesting parameters. You need to call specific view functions to get the current state of a vesting schedule for a given beneficiary address.

  • Sub-step 1: Connect to a Node Provider: Use services like Infura, Alchemy, or a public RPC endpoint. Initialize your provider.
javascript
const { ethers } = require('ethers'); const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_API_KEY');
  • Sub-step 2: Query Vesting Contract Functions: Common functions include vestedAmount(address beneficiary), releasableAmount(address beneficiary), cliff(), duration(), and start(). Create a contract instance and call these.
javascript
const contractABI = ["function vestedAmount(address) view returns (uint256)"]; const contract = new ethers.Contract('0x1234...', contractABI, provider); const vested = await contract.vestedAmount('0xabcd...'); console.log(`Vested Amount: ${ethers.utils.formatUnits(vested, 18)}`);
  • Sub-step 3: Calculate Future Unlocks: Using the start, cliff, and duration values, calculate the linear vesting curve to project future token releases.

Tip: Schedule these scripts (e.g., via cron job) to run daily and update your database, ensuring you always have the latest vested balance.

3

Step 3: Model Off-Chain & Illiquid Asset Schedules

Translate legal agreements and private holdings into quantifiable, time-based models.

Detailed Instructions

For assets not on a blockchain, you must build a financial model that replicates the vesting or lock-up logic. This involves defining the grant size, cliff period (e.g., 12 months), vesting duration (e.g., 48 months), and vesting interval (e.g., monthly). The model should output a schedule showing the cumulative vested amount over time.

  • Sub-step 1: Parse Agreement Terms: Extract key numerical values: totalGrant=100,000 tokens, cliffDate=2024-06-01, vestingStartDate=2023-06-01, vestingPeriod=4 years.
  • Sub-step 2: Build the Vesting Formula: Implement the logic. For a common linear vesting model after a cliff: Vested = (Total Grant) * min(1, (Seconds Since Start - Cliff Seconds) / Vesting Duration Seconds).
  • Sub-step 3: Create a Projection Table: Generate a table or chart showing monthly unlocks. For example, after a 12-month cliff, 1/48th of the total grant might vest each month.

Tip: Use spreadsheet software like Google Sheets with formulas or a Python script with pandas to create this model. This allows for easy "what-if" analysis and ensures you can track the asset alongside your on-chain data.

4

Step 4: Implement Alerts & Portfolio Reconciliation

Set up monitoring for key events and regularly verify tracked amounts against primary sources.

Detailed Instructions

Proactive alerting and reconciliation prevent missed unlocks and ensure data integrity. Configure notifications for upcoming vesting cliff ends, large token unlocks, and contract state changes. Then, periodically verify that your tracking system's numbers match the raw on-chain data or legal documents.

  • Sub-step 1: Set Up Alert Rules: Define conditions that trigger alerts, such as "Vested balance increases by more than 10,000 tokens" or "Cliff date is within 7 days." Use tools like PagerDuty, custom webhooks, or even calendar invites.
  • Sub-step 2: Perform Monthly Reconciliation: Once a month, manually check a sample of assets. For on-chain, compare your script's output for vestedAmount with a direct read on Etherscan. For off-chain, check your model's vested total against any official statements from the issuing entity.
  • Sub-step 3: Audit for Contract Upgrades or Migrations: Illiquid assets, especially tokens, can migrate to new contracts. Monitor project announcements and set up alerts for transactions from the old vesting contract to a new one.

Tip: Create a simple dashboard that visualizes upcoming unlocks (next 30/90 days) and total illiquid portfolio value. This provides an at-a-glance view of liquidity timelines.

Tool Comparison: On-Chain Data Sources and Aggregators

Comparison of tools for tracking illiquid and vesting assets like locked tokens, VC allocations, and team vesting schedules.

FeatureNansenArkhamToken UnlocksDune Analytics

Real-Time Vesting Schedule Tracking

Yes (via Smart Alerts)

Limited (manual dashboard required)

Yes (primary feature)

No (requires custom query)

Coverage of Private Sale/VC Allocations

Yes (via Wallet Profiler)

Partial (needs entity tagging)

No

Yes (if data is public on-chain)

Illiquid Asset Valuation Models

Proprietary models for locked tokens

Basic (raw balance only)

Detailed time-lock calculations

Community-built models vary

Alert Types for Unlock Events

Email & Telegram

In-app only

Email, Telegram, Discord

None (dashboard monitoring only)

Supported Chains for Vesting Data

Ethereum, Solana, Polygon, BSC

Ethereum, Bitcoin, Arbitrum

20+ chains including Ethereum, Avalanche

All EVM chains via SQL

Historical Unlock Data & Analysis

30-day history for Pro users

Full transaction history available

Complete historical unlock archive

Full history via user-created dashboards

API Access for Vesting Schedules

Enterprise tier only

Public API available

Free public API

Query API for custom datasets

Cost for Pro Features

$1500/month (Alpha)

$99/month (Pro)

Freemium (Pro at $49/month)

Free (custom dashboards)

Implementation Perspectives

Understanding the Challenge

Tracking illiquid and vesting assets is crucial for accurate portfolio management, as these assets are not immediately spendable. Illiquid assets like locked tokens or LP positions cannot be easily sold, while vesting assets are released over time, like employee stock options.

Key Concepts

  • On-Chain vs. Off-Chain Data: Vesting schedules are often stored off-chain (in legal docs) while token locks may be on-chain via smart contracts.
  • Manual Tracking: Beginners often use spreadsheets to log grant dates, cliff periods, and vesting schedules from platforms like CoinList or Binance Launchpad.
  • Automated Tools: Services like Zapper or DeBank can automatically detect some locked positions in DeFi protocols, but may miss custom vesting contracts.

Practical First Steps

Start by listing all your asset sources. For example, if you received $UNI tokens from an airdrop with a vesting period, note the contract address and use a block explorer like Etherscan to view the vesting contract's functions to see your unlock schedule.

Case Study: Tracking a Team Vesting Schedule

A step-by-step process for accurately monitoring and reporting on illiquid, time-locked assets like employee stock options or token grants.

1

Step 1: Establish the Vesting Contract Foundation

Define the core parameters and deploy the smart contract that governs the vesting schedule.

Detailed Instructions

Begin by defining the vesting schedule parameters in a smart contract. This contract is the single source of truth for all allocations and release logic. Key parameters include the total grant amount, the vesting start date (cliff), the vesting duration, and the release frequency (e.g., monthly, quarterly). For Ethereum-based assets, a common standard is the OpenZeppelin VestingWallet contract.

  • Sub-step 1: Deploy the contract. Use a constructor to set the beneficiary address (e.g., 0x742d35Cc6634C0532925a3b844Bc9e90F1b6fBc6), start timestamp, duration, and cliff. For a 4-year vest with a 1-year cliff, set duration = 126144000 seconds.
  • Sub-step 2: Fund the contract. Transfer the total grant of illiquid tokens (e.g., 10,000 PROJECT tokens) from the company treasury to the contract's address.
  • Sub-step 3: Verify initialization. Query the contract's released() function to confirm it returns 0, indicating no tokens have been vested yet.

Tip: Always conduct a test deployment on a testnet (like Sepolia) first. Use cast call <contract_address> "start()" to verify the start time is correctly stored.

2

Step 2: Implement Automated Vesting Calculations

Create off-chain scripts to calculate vested amounts at any point in time, providing real-time visibility.

Detailed Instructions

Since on-chain queries can be expensive, implement a calculation script that reads the contract's immutable parameters and computes the vested amount. This script should be run regularly (e.g., daily) and can be integrated into internal dashboards. The core logic calculates the linear vesting based on elapsed time.

  • Sub-step 1: Fetch contract data. Use a library like ethers.js to connect to the contract and read start(), duration(), and totalAllocation().
  • Sub-step 2: Calculate vested amount. Implement the formula: vestedAmount = (elapsedTime / totalDuration) * totalAllocation, where elapsedTime is currentTimestamp - startTimestamp, capped at duration. Ensure you handle the cliff period where vested amount is 0.
  • Sub-step 3: Create a reporting output. Format the result into a JSON object for APIs or a CSV for spreadsheets. Include fields for beneficiary, vestedToDate, remaining, and nextVestDate.
javascript
// Example calculation snippet using ethers.js const elapsed = Math.min(currentTime - startTime, duration); const vested = (elapsed * totalAllocation) / duration; console.log(`Vested Amount: ${vested} tokens`);

Tip: Use a centralized scheduler like a cron job or AWS Lambda to run this script automatically and update a database.

3

Step 3: Monitor and Reconcile On-Chain Releases

Track actual token releases from the contract and reconcile them with calculated expectations.

Detailed Instructions

Passive calculation is not enough; you must actively monitor the blockchain for release transactions where the beneficiary claims their vested tokens. This reconciliation ensures your internal ledger matches the immutable on-chain state. Set up an event listener for the TokensReleased event emitted by the vesting contract.

  • Sub-step 1: Set up an event listener. Using a provider like Alchemy or Infura, create a websocket subscription to listen for the event from the contract address. Log the amount and blockNumber of each release.
  • Sub-step 2: Reconcile with calculations. When a release is detected, compare the released amount with your script's calculated "vested but unclaimed" balance. Any significant discrepancy may indicate an error in parameters or a manual admin override.
  • Sub-step 3: Update internal records. Mark the corresponding tokens as liquid and transferred in your accounting system. For example, if 250 tokens are released to 0x742d35Cc6634C0532925a3b844Bc9e90F1b6fBc6, reduce their "vested but locked" balance by that amount.

Tip: For critical monitoring, set up alerts (e.g., via PagerDuty or Slack webhook) for any release event to ensure immediate awareness of team member activity.

4

Step 4: Generate Compliance and Reporting Dashboards

Compile vesting data into auditable reports for internal finance, tax, and regulatory purposes.

Detailed Instructions

Transform raw vesting data into actionable financial reports. Illiquid assets often have tax implications (like 83(b) elections in the US) and must be reported on balance sheets. Create dashboards that aggregate data across all team member vesting contracts.

  • Sub-step 1: Aggregate data across beneficiaries. Run your calculation script for all deployed contract addresses (e.g., 50 employee contracts) and consolidate results into a single database table. Key metrics include Total Vested Liability, Total Released, and Total Locked.
  • Sub-step 2: Generate period-end reports. For quarterly closes, produce a report showing the change in vesting liability. Use a command like ./report-generator --format=csv --period=Q3-2024 to output a file for the accounting team.
  • Sub-step 3: Facilitate tax documentation. For each beneficiary, provide a year-end statement detailing the fair market value of tokens that vested during the tax year, which is crucial for Form 3921 (for ISOs) or ordinary income reporting.
bash
# Example command to generate a snapshot report node scripts/generateVestingReport.js --date 2024-12-31 --output ./reports/EoY_2024.json

Tip: Integrate with data visualization tools like Tableau or Retool to create real-time dashboards for executives to monitor the company's equity dilution and vesting runway.

SECTION-FAQ

Frequently Asked Questions

Ready to Start Building?

Let's bring your Web3 vision to life.

From concept to deployment, ChainScore helps you architect, build, and scale secure blockchain solutions.