Skip to main content
Schema: solana.marinade Table: ez_liquid_staking_actions Type: Base Table

Description

This table captures actions related to Marinade liquid staking, including deposits, unstakes, and claims. It provides a unified view of liquid staking activities with USD pricing information, enabling comprehensive analysis of Marinade Finance’s liquid staking protocol usage and user behavior patterns.

Key Use Cases

  • Analyze liquid staking deposit and withdrawal patterns
  • Track MSOL minting and burning activities
  • Monitor claim activities and reward distributions
  • Study user behavior in liquid staking protocols
  • Support liquid staking protocol performance analysis

Important Relationships

  • Connects to price.ez_prices_hourly for USD price conversion
  • References core.fact_blocks and core.fact_transactions for blockchain context
  • Provides liquid staking context for Marinade Finance ecosystem analytics

Commonly-used Fields

  • block_timestamp: Essential for time-series analysis and trend detection
  • action_type: Critical for categorizing different staking activities
  • provider_address: Key for user analysis and behavior tracking
  • deposit_amount and deposit_amount_usd: Important for value analysis and financial metrics
  • msol_minted and msol_burned: Critical for MSOL token flow analysis

Sample Queries

Daily liquid staking deposits by protocol

-- Daily liquid staking deposits by protocol
SELECT
    DATE_TRUNC('day', block_timestamp) AS date,
    'marinade' AS platform,
    COUNT(DISTINCT tx_id) AS deposit_txns,
    COUNT(DISTINCT provider_address) AS unique_stakers,
    SUM(deposit_amount) AS sol_staked,
    SUM(deposit_amount_usd) AS usd_staked,
    AVG(deposit_amount) AS avg_stake_size
FROM solana.marinade.ez_liquid_staking_actions
WHERE block_timestamp >= CURRENT_DATE - 30
    AND action_type = 'deposit'
    AND deposit_amount_usd IS NOT NULL
GROUP BY 1, 2
ORDER BY 1 DESC, 6 DESC;

Protocol market share analysis

-- Protocol market share analysis
WITH protocol_totals AS (
    SELECT
        'marinade' AS platform,
        SUM(deposit_amount) AS total_sol_staked,
        COUNT(DISTINCT provider_address) AS unique_stakers,
        COUNT(*) AS total_deposits
    FROM solana.marinade.ez_liquid_staking_actions
    WHERE block_timestamp >= CURRENT_DATE - 90
        AND action_type = 'deposit'
        AND deposit_amount IS NOT NULL
    GROUP BY platform
)
SELECT
    platform,
    total_sol_staked,
    total_sol_staked * 100.0 / SUM(total_sol_staked) OVER () AS market_share_pct,
    unique_stakers,
    total_deposits,
    total_sol_staked / total_deposits AS avg_deposit_size
FROM protocol_totals
ORDER BY total_sol_staked DESC;

Staker behavior patterns

-- Staker behavior patterns
WITH staker_activity AS (
    SELECT
        provider_address AS staker,
        COUNT(DISTINCT action_type) AS actions_used,
        COUNT(*) AS total_actions,
        SUM(CASE WHEN action_type = 'deposit' THEN deposit_amount ELSE 0 END) AS total_sol_staked,
        MIN(block_timestamp) AS first_stake,
        MAX(block_timestamp) AS last_stake,
        COUNT(DISTINCT DATE_TRUNC('month', block_timestamp)) AS active_months
    FROM solana.marinade.ez_liquid_staking_actions
    WHERE deposit_amount IS NOT NULL
    GROUP BY staker
)
SELECT
    CASE
        WHEN total_sol_staked < 1 THEN '< 1 SOL'
        WHEN total_sol_staked < 10 THEN '1-10 SOL'
        WHEN total_sol_staked < 32 THEN '10-32 SOL'
        WHEN total_sol_staked < 100 THEN '32-100 SOL'
        ELSE '100+ SOL'
    END AS staker_tier,
    COUNT(*) AS staker_count,
    AVG(total_actions) AS avg_actions_per_staker,
    AVG(actions_used) AS avg_action_types_used,
    SUM(total_sol_staked) AS tier_total_sol
FROM staker_activity
GROUP BY staker_tier
ORDER BY MIN(total_sol_staked);

Exchange rate analysis (mSOL received per SOL)

-- Exchange rate analysis (mSOL received per SOL)
SELECT
    'marinade' AS platform,
    'mSOL' AS token_symbol,
    DATE_TRUNC('day', block_timestamp) AS date,
    AVG(msol_minted / NULLIF(deposit_amount, 0)) AS avg_exchange_rate,
    MIN(msol_minted / NULLIF(deposit_amount, 0)) AS min_rate,
    MAX(msol_minted / NULLIF(deposit_amount, 0)) AS max_rate,
    COUNT(*) AS sample_size
FROM solana.marinade.ez_liquid_staking_actions
WHERE deposit_amount > 0
    AND msol_minted > 0
    AND action_type = 'deposit'
    AND block_timestamp >= CURRENT_DATE - 30
GROUP BY 1, 2, 3
ORDER BY 3 DESC;

Large deposits monitoring (whale activity)

-- Large deposits monitoring (whale activity)
SELECT
    block_timestamp,
    tx_id,
    'marinade' AS platform,
    provider_address AS staker,
    deposit_amount AS sol_amount,
    deposit_amount_usd AS sol_amount_usd,
    'mSOL' AS token_symbol,
    msol_minted AS token_amount,
    msol_minted / NULLIF(deposit_amount, 0) AS exchange_rate
FROM solana.marinade.ez_liquid_staking_actions
WHERE deposit_amount >= 100
    AND action_type = 'deposit'
    AND block_timestamp >= CURRENT_DATE - 7
ORDER BY deposit_amount DESC;

Weekly staking momentum

-- Weekly staking momentum
WITH weekly_deposits AS (
    SELECT
        DATE_TRUNC('week', block_timestamp) AS week,
        'marinade' AS platform,
        SUM(deposit_amount) AS weekly_sol_staked,
        COUNT(DISTINCT provider_address) AS unique_stakers
    FROM solana.marinade.ez_liquid_staking_actions
    WHERE block_timestamp >= CURRENT_DATE - 84
        AND action_type = 'deposit'
        AND deposit_amount IS NOT NULL
    GROUP BY 1, 2
)
SELECT
    week,
    platform,
    weekly_sol_staked,
    LAG(weekly_sol_staked) OVER (PARTITION BY platform ORDER BY week) AS prev_week_sol,
    (weekly_sol_staked / NULLIF(LAG(weekly_sol_staked) OVER (PARTITION BY platform ORDER BY week), 0) - 1) * 100 AS week_over_week_pct,
    unique_stakers
FROM weekly_deposits
ORDER BY week DESC, weekly_sol_staked DESC;

Columns

Column NameData TypeDescription
BLOCK_IDNUMBERA unique identifier for the block in which this transaction was included on the Solana blockchain. Typically a sequential integer or hash, depending on the data source. Used to group transactions by block and analyze block-level activity.
Example:
  • 123456789
Business Context:
  • Supports block-level analytics, such as block production rate and transaction throughput.
  • Useful for tracing transaction inclusion and block explorer integrations.
Relationships:
  • All transactions with the same ‘block_id’ share the same ‘block_timestamp’. | | BLOCK_TIMESTAMP | TIMESTAMP_NTZ | The timestamp (UTC) at which the block was produced on the Solana blockchain. This field is recorded as a TIMESTAMP data type and represents the precise moment the block was finalized and added to the chain. It is essential for time-series analysis, block production monitoring, and aligning transaction and event data to specific points in time. Used extensively for analytics involving block intervals, network activity trends, and historical lookups. Format: YYYY-MM-DD HH:MI:SS (UTC). | | TX_ID | TEXT | The unique transaction signature (hash) for each transaction on the Solana blockchain. This field is a base58-encoded string, typically 88 characters in length, and serves as the primary identifier for transactions across all Solana data models. Used to join transaction data with related tables (blocks, events, transfers, logs, decoded instructions) and to trace the full lifecycle and effects of a transaction. Essential for transaction-level analytics, debugging, and cross-referencing with block explorers or Solana APIs.
Example:
  • 5Nf6Q2k6v1Qw2k3v4Qw5Nf6Q2k6v1Qw2k3v4Qw5Nf6Q2k6v1Qw2k3v4Qw5Nf6Q2k6v1Qw2k3v4Qw
Business Context:
  • Enables precise tracking, auditing, and attribution of on-chain activity
  • Used for linking transactions to events, logs, and protocol actions
  • Critical for compliance, monitoring, and analytics workflows | | INDEX | NUMBER | The position of the event (instruction) within the list of instructions for a given Solana transaction. Used to order and reference events within a transaction. Indexing starts at 0 for the first event.
Example:
  • 0
  • 3
Business Context:
  • Enables precise identification and ordering of events within a transaction, which is critical for reconstructing transaction flows and analyzing protocol behavior.
  • Used to join or filter event-level data, especially when multiple events occur in a single transaction. | | INNER_INDEX | NUMBER | The position of the inner instruction or event within the list of inner instructions for a given Solana transaction. Used to order and reference nested (CPI) instructions. Indexing starts at 0 for the first inner instruction.
Example:
  • 0
  • 2
Business Context:
  • Enables precise identification and ordering of nested program calls (Cross-Program Invocations) within a transaction.
  • Critical for analyzing composability, protocol integrations, and the full execution path of complex transactions. | | ACTION_TYPE | TEXT | The type of event action being performed | | PROVIDER_ADDRESS | TEXT | The address of the liquidity provider who is performing the deposit or withdrawal action. This field identifies the user providing or removing liquidity from the pool.
  • Data type: STRING (base58 Solana address)
  • Business context: Used to track liquidity providers, analyze provider behavior, and identify active liquidity participants.
  • Analytics use cases: Liquidity provider analysis, provider behavior studies, and liquidity provision tracking.
  • Example: ‘4Nd1mYw4r…’ | | DEPOSIT_AMOUNT | FLOAT | The amount of SOL deposited into the liquid staking protocol. This field tracks the quantity of SOL being staked through Marinade Finance, enabling deposit analysis and staking volume measurement.
Data type: DECIMAL (SOL amount) Business context: Used to track staking deposits, analyze staking volume patterns, and measure protocol usage. Analytics use cases: Deposit tracking, volume pattern analysis, and usage measurement. Example: 10.0, 100.0, 1000.0 | | DEPOSIT_AMOUNT_USD | FLOAT | The amount of SOL deposited in USD value. This field provides the USD equivalent of the deposited SOL, enabling financial analysis and value-based metrics. Data type: DECIMAL (USD amount) Business context: Used to track deposit values, analyze financial metrics, and measure protocol TVL impact. Analytics use cases: Value tracking, financial analysis, and TVL impact measurement. Example: 100.0, 1000.0, 10000.0 | | MSOL_MINTED | FLOAT | The amount of MSOL (Marinade Staked SOL) minted. This field tracks the quantity of MSOL tokens created when SOL is deposited into the liquid staking protocol, enabling MSOL supply analysis. Data type: DECIMAL (MSOL amount) Business context: Used to track MSOL minting, analyze supply growth, and measure staking efficiency. Analytics use cases: Minting tracking, supply analysis, and efficiency measurement. Example: 9.95, 99.5, 995.0 | | MSOL_BURNED | FLOAT | The amount of MSOL (Marinade Staked SOL) burned. This field tracks the quantity of MSOL tokens destroyed when users unstake or claim rewards, enabling MSOL supply analysis. Data type: DECIMAL (MSOL amount) Business context: Used to track MSOL burning, analyze supply reduction, and measure unstaking activity. Analytics use cases: Burning tracking, supply analysis, and unstaking activity measurement. Example: 9.95, 99.5, 995.0 | | CLAIM_AMOUNT | FLOAT | The amount of SOL claimed from the liquid staking protocol. This field tracks the quantity of SOL withdrawn when users claim their staking rewards or unstake, enabling claim analysis and reward tracking. Data type: DECIMAL (SOL amount) Business context: Used to track claim amounts, analyze reward distributions, and measure unstaking activity. Analytics use cases: Claim tracking, reward analysis, and unstaking measurement. Example: 10.5, 105.0, 1050.0 | | CLAIM_AMOUNT_USD | FLOAT | The amount of SOL claimed in USD value. This field provides the USD equivalent of the claimed SOL, enabling financial analysis and value-based metrics. Data type: DECIMAL (USD amount) Business context: Used to track claim values, analyze financial metrics, and measure reward distributions. Analytics use cases: Value tracking, financial analysis, and reward measurement. Example: 105.0, 1050.0, 10500.0 | | PROGRAM_ID | TEXT | The unique public key (base58-encoded address) of a Solana program. This field identifies the on-chain program (smart contract) responsible for processing instructions, emitting events, or managing accounts. Used throughout Solana analytics models—including events, transactions, IDLs, and program activity tables—to join, filter, and analyze program-level data. Example:
  • “4Nd1mY…”
  • “TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA”
Business Context:
  • Used as a join key for program activity, deployments, events, and interface changes.
  • Supports segmentation of activity by protocol, DEX, NFT marketplace, or other on-chain application. | | MARINADE_EZ_LIQUID_STAKING_ACTIONS_ID | TEXT | A unique, stable identifier for each record in this table. The primary key (PK) ensures that every row is uniquely identifiable and supports efficient joins, lookups, and data integrity across models. The PK may be a natural key (such as a blockchain transaction hash) or a surrogate key generated from one or more fields, depending on the table’s structure and requirements. | | INSERTED_TIMESTAMP | TIMESTAMP_NTZ | The timestamp when this transaction record was first inserted into the analytics database. Used for data freshness tracking and incremental model logic. Format: YYYY-MM-DD HH:MI:SS. Not derived from the blockchain, but from the ETL process. | | MODIFIED_TIMESTAMP | TIMESTAMP_NTZ | The timestamp when this transaction record was last updated in the analytics database. Used for tracking updates and supporting incremental model logic. Format: YYYY-MM-DD HH:MI:SS. Not derived from the blockchain, but from the ETL process. |