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

How to Measure Transaction Success Rates Across Chains

A technical guide for developers to build a system that monitors, calculates, and alerts on transaction success and failure rates across multiple EVM and non-EVM networks.
Chainscore © 2026
introduction
INTRODUCTION

How to Measure Transaction Success Rates Across Chains

Transaction success rate is a critical metric for developers and users to evaluate network health and application reliability. This guide explains how to measure it across different blockchains.

A transaction's success rate is the percentage of submitted transactions that are successfully included and executed on-chain. A low success rate can indicate network congestion, high gas volatility, or application logic errors. For developers building multi-chain applications, understanding and monitoring this metric is essential for user experience and operational reliability. Different chains like Ethereum, Solana, and Polygon have distinct architectures that affect how success is measured—from mempool dynamics to consensus finality.

The core components for measurement are the transaction lifecycle and chain-specific RPC endpoints. You need to track a transaction from its broadcast via eth_sendRawTransaction or equivalent, through its inclusion in a block, to its final execution status. On EVM chains, a successful transaction receipt contains a status field of 1. On Solana, you must confirm a transaction has achieved finality and check for error logs in the confirmation. Tools like the Ethers.js library or Solana's web3.js provide methods to poll for these states.

To calculate the rate, you must define a time window and a sample set. For example, you might track 100 transactions sent to the Ethereum Sepolia testnet over one hour. The formula is (Number of Successful Transactions / Total Transactions Sent) * 100. It's crucial to differentiate between broadcast failures (transaction rejected by the mempool), execution failures (reverted with status: 0), and network failures (transaction dropped). Each requires different diagnostic steps.

Common pitfalls in measurement include not accounting for gas-related failures and chain reorganizations. If a user submits a transaction with insufficient gas, it may appear as a failure in your metrics, but it reflects user error, not network health. Similarly, a transaction confirmed in one block could be orphaned in a reorg on chains like Ethereum. Your measurement script should wait for sufficient block confirmations—often 12-15 for Ethereum—before declaring final success.

For production monitoring, implement automated scripts that send periodic test transactions and log results. Use services like Alchemy's Enhanced APIs for reliable transaction receipt data or Chainstack for multi-chain nodes. By tracking success rates over time, you can identify performance degradation, correlate it with events like NFT mints or DeFi liquidations, and set up alerts for when rates fall below a threshold like 95%, prompting investigation.

prerequisites
PREREQUISITES

How to Measure Transaction Success Rates Across Chains

Before analyzing transaction success rates, you need a foundational understanding of blockchain data structures and access to reliable data sources.

To measure transaction success rates, you must first understand the core components of a blockchain transaction. A transaction is a signed data package that instructs a network to execute a state change, such as transferring assets or interacting with a smart contract. Each transaction has a unique hash, a nonce to prevent replay attacks, a gas limit, and a priority fee. Success is primarily determined by the transaction's final status: a 0x1 status code indicates success, while 0x0 signifies failure (reversion). However, success metrics extend beyond this binary outcome to include inclusion latency (time to first block) and confirmation reliability across multiple blocks.

You will need programmatic access to blockchain data. For Ethereum and EVM-compatible chains like Arbitrum, Polygon, and Base, you can use JSON-RPC endpoints from node providers (e.g., Alchemy, Infura, QuickNode) or public services like the Etherscan API. For non-EVM chains like Solana or Cosmos, you'll need their respective RPC methods and SDKs. The essential data points to collect per transaction include: the transaction hash, block number, status field, gasUsed, and any revert reason from event logs. Tools like the Chainscore API aggregate this multi-chain data, providing normalized success rate metrics without managing individual RPC connections.

A critical prerequisite is understanding the common reasons for transaction failure. These include: - Reverts: A smart contract's execution hits an error (e.g., insufficient funds, failed condition). - Out of Gas: Transaction gas limit is insufficient for the computation. - Network Congestion: Low priority fees cause transactions to be stuck or dropped from mempools. - Nonce Issues: A transaction with a lower nonce is pending, blocking subsequent ones. Analyzing failure modes requires inspecting revert strings from transaction receipts or using tracer tools like debug_traceTransaction on EVM chains to pinpoint the exact opcode where execution halted.

Your analysis environment should be set up to handle asynchronous data fetching and processing. For Python, use libraries like web3.py for EVM chains and asyncio for concurrent requests. For JavaScript/TypeScript, ethers.js or viem are standard. You'll write scripts to batch-fetch transaction receipts by hash and calculate aggregate metrics. A basic success rate is (Successful Transactions / Total Finalized Transactions) * 100. For a more nuanced view, segment rates by: - Transaction Type: Simple transfers vs. complex contract interactions. - Time of Day: Periods of high network load. - Gas Price Tiers: Transactions sent with low, medium, or high priority fees.

Finally, establish a baseline for what constitutes a "good" success rate, as it varies significantly by chain and use case. Ethereum mainnet, with its competitive fee market, often sees success rates above 99% for well-configured transactions. Layer 2 networks and newer chains may have higher inherent success rates due to lower congestion but can experience occasional sequencer downtime. For a robust analysis, track your success rate over time, compare it against network-wide averages from sources like Blocknative's Gas Platform, and correlate dips with known network incidents or upgrades. This historical context turns raw data into actionable infrastructure intelligence.

system-architecture
SYSTEM ARCHITECTURE OVERVIEW

How to Measure Transaction Success Rates Across Chains

A guide to the methodologies and tools for analyzing transaction success and failure rates in multi-chain environments.

Transaction success rate is a critical health metric for any blockchain network, defined as the percentage of submitted transactions that are successfully included in a finalized block. In a multi-chain ecosystem, measuring this metric requires a systematic approach that accounts for chain-specific behaviors like varying block times, gas mechanisms, and consensus finality. Key components of this architecture include on-chain data collection via RPC nodes, event listener services to track transaction lifecycle events, and a normalization layer to standardize data from different chains like Ethereum, Solana, and Polygon for apples-to-apples comparison.

The core measurement process involves tracking a transaction from submission to finality. For EVM chains, you monitor events from submission (eth_sendRawTransaction), through inclusion (confirmed in a block), to finality (sufficient block confirmations). On Solana, you track from signature creation through confirmed to finalized status. Failures must be categorized: reverts (execution failures), timeouts (dropped from mempool), and insufficient fee errors. Tools like The Graph for indexing or direct RPC calls with libraries like ethers.js and web3.js are essential for building this pipeline.

To build a reliable monitoring system, you need to ingest data from multiple sources. Run archive nodes or use services like Alchemy and Infura for reliable RPC access. Implement idempotent listeners that record: transaction hash, submission timestamp, chain ID, status (pending/success/failure), failure reason, gas used, and block number. For high-frequency analysis, consider using CLOBEX (Chainlink Oracle-Based Explorer) patterns or specialized data platforms like Flipside Crypto or Dune Analytics for aggregated metrics. Always account for chain reorganizations by waiting for sufficient confirmations before marking a transaction as final.

Normalizing data across chains presents challenges. A "success" on Ethereum (transaction included with 64 confirmations) differs from Avalanche's sub-second finality. Define a chain-specific finality threshold (e.g., 64 blocks for Ethereum, 32 for Polygon PoS, finalized status for Solana). Calculate the success rate as (Successful Txs / Total Submitted Txs) * 100 over a defined period. For deeper insight, segment data by transaction type (e.g., simple transfers vs. complex contract interactions), time of day, and gas price tiers to identify patterns and bottlenecks.

Practical implementation involves writing scripts or services. For example, a Node.js service using ethers to poll for transaction receipts can log outcomes. More robust systems use a message queue (like Kafka) to handle event streams from multiple chain listeners, with a database (PostgreSQL or TimescaleDB) for storage. Public dashboards from Blocknative or Tenderly offer real-time mempool and failure analytics, which can be integrated via API. The goal is to create a unified reliability score that helps developers and users anticipate network conditions and optimize transaction submission strategies.

key-concepts
TRANSACTION ANALYTICS

Key Concepts and Metrics

Understanding transaction success requires analyzing specific on-chain metrics and the tools to track them. This section covers the core data points and methodologies for measuring reliability across different blockchains.

01

Finality vs. Inclusion

A transaction is included when it enters a block, but finalized when it is irreversible. This distinction is critical for measuring success.

  • Inclusion Rate: The percentage of transactions that make it into a pending block. High network congestion can lower this rate.
  • Finality Rate: The percentage of included transactions that achieve network finality. Layer 2s and some consensus mechanisms (e.g., Ethereum's PoS) have specific finality times.

Measure both to understand where failures occur.

02

Gas & Fee Metrics

Transaction success is directly tied to fee economics. Insufficient gas is a primary cause of failure.

  • Gas Price vs. Base Fee: Users must outbid the network's base fee and include a priority fee (tip).
  • Success Rate by Fee Tier: Analyze historical data to see what fee level (e.g., 50 gwei, 100 gwei) yields a >99% success rate on a given chain.
  • Gas Estimation Accuracy: Tools should provide not just an estimate, but a confidence interval (e.g., "95% success at 120 gwei").
04

Nonce Management

Incorrect nonce handling is a common developer error leading to stuck transactions.

  • Pending Nonces: Always fetch the latest pending transaction count (eth_getTransactionCount) from the node, not rely on a local counter.
  • Nonce Gaps: A missing nonce (e.g., submitting nonce 5 before 4) will block all subsequent transactions.
  • Tools: Use transaction pools (mempool) explorers to monitor pending transactions by address and identify nonce issues.
05

Chain-Specific Failure Modes

Different chains and L2s have unique failure points.

  • EVM Chains: Revert with out of gas or custom error messages. Always check revert reason.
  • Solana: Transactions can fail due to invalid blockhash (requires re-fetching) or insufficient prioritization fee.
  • L2s (Optimism, Arbitrum): Success depends on sequencing and batch submission to L1. Monitor L1 confirmation of the L2 batch.

Tailor your monitoring to the chain's architecture.

tracking-implementation
GUIDE

Implementing Transaction Tracking

A practical guide to measuring transaction success rates across different blockchains, covering key metrics, monitoring tools, and implementation strategies.

Transaction success rate is a critical Key Performance Indicator (KPI) for any Web3 application, directly impacting user experience and operational reliability. It measures the percentage of submitted transactions that are successfully confirmed on-chain versus those that fail or get stuck. A low success rate can indicate issues with gas estimation, network congestion, smart contract errors, or wallet configuration. For multi-chain applications, tracking this metric per network—such as Ethereum, Arbitrum, or Solana—is essential to identify chain-specific bottlenecks and optimize performance.

To track success rates, you need to monitor transaction lifecycle events. A transaction typically moves through states: pending, confirmed, or failed/reverted. You can implement tracking by listening for transaction receipts via RPC providers like Alchemy, Infura, or QuickNode. For Ethereum Virtual Machine (EVM) chains, a successful transaction receipt will have a status property equal to 1, while a failed one will be 0. For Solana, you must check the transaction logs for an Error instruction. It's crucial to also track pending transactions that drop from the mempool without confirmation, which requires setting a timeout period.

Implementing a basic tracker involves subscribing to pending transactions and polling for their final status. Below is a simplified Node.js example using the Ethers.js library for an EVM chain. This script submits a transaction and logs its final outcome.

javascript
const { ethers } = require('ethers');
const provider = new ethers.JsonRpcProvider('YOUR_RPC_URL');
const wallet = new ethers.Wallet('PRIVATE_KEY', provider);

async function sendAndTrackTx(txData) {
    const tx = await wallet.sendTransaction(txData);
    console.log(`Pending: ${tx.hash}`);
    
    const receipt = await tx.wait();
    if (receipt.status === 1) {
        console.log(`Success: ${tx.hash}`);
        return 'success';
    } else {
        console.log(`Failed: ${tx.hash}`);
        return 'failed';
    }
}

For production, you should add error handling for dropped transactions and use a more robust system like a database to log all attempts.

Beyond basic tracking, consider these advanced metrics for a comprehensive view: Gas Estimation Accuracy (comparing used vs. estimated gas), Confirmation Time (block latency), and Failure Reason (e.g., out of gas, reverted: Insufficient balance). Tools like Tenderly and OpenZeppelin Defender can simulate transactions before broadcast to predict failures. For cross-chain tracking, use a unified dashboard; services like Chainstack offer multi-chain RPC endpoints, while The Graph can index success/failure events from multiple networks into a single subgraph for querying.

To improve your application's success rate, implement retry logic with exponential backoff and dynamic gas price adjustments using an oracle like Ethers's FeeData. Use meta-transactions or gas sponsorship (via protocols like Biconomy) to abstract gas complexities from users. Regularly audit your success rate data to spot trends—a sudden drop on a specific chain could indicate an RPC provider issue or a network upgrade. By systematically measuring and optimizing this metric, you build a more resilient and user-friendly decentralized application.

FAILURE ANALYSIS

Common Failure Causes by Transaction Type

Primary reasons for transaction reversion or failure, categorized by on-chain activity.

Transaction TypeSmart Contract CallToken TransferDEX SwapBridge Interaction

Insufficient Gas

Revert (Out of Gas)

Revert (Out of Gas)

Revert (Out of Gas)

Revert (Out of Gas)

Slippage Tolerance

Transaction Reverted

Insufficient User Balance

Revert

Revert

Revert

Revert

Contract Logic Error

Revert / Panic

Revert / Panic

Revert / Panic

Allowance Too Low

Revert

Revert

Revert

Expired Deadline

Transaction Reverted

Transaction Reverted

Chain Congestion

Dropped / Stuck

Dropped / Stuck

Dropped / Stuck

Dropped / Stuck

Invalid Bridge Route

Revert / Funds Stuck

calculating-metrics
DATA INTEGRITY

Calculating and Storing Transaction Success Rates

A guide to programmatically measuring and persisting blockchain transaction success rates, a critical metric for application reliability and user experience.

Transaction success rate is a foundational health metric for any Web3 application. It's calculated as (Successful Transactions / Total Broadcast Transactions) * 100. A low success rate directly impacts user experience and can indicate underlying issues like incorrect gas estimation, network congestion, or smart contract errors. For multi-chain applications, tracking this metric per chain is essential, as conditions on Ethereum Mainnet differ vastly from a low-fee chain like Polygon.

To calculate this reliably, you need a system that listens for transaction lifecycle events. When a user's wallet (e.g., MetaMask) broadcasts a transaction via eth_sendTransaction, your backend should record a pending transaction with a unique hash. You then subscribe to new block headers via a WebSocket connection to an RPC provider. For each new block, check if your transaction hash is included. Inclusion in a block is the first success signal.

However, inclusion doesn't guarantee final success. You must also check the transaction receipt's status field (0 for failure, 1 for success). This reveals if the transaction executed successfully within the EVM, catching revert errors from require() or revert() statements. A robust service queries for the receipt after block inclusion. The final success state is only confirmed after a sufficient number of block confirmations (e.g., 12 on Ethereum) to prevent chain reorgs from invalidating the result.

Storing this data requires a structured schema. A database table should include fields for transaction_hash, from_address, to_address (or contract address), chain_id, block_number, status (pending/success/failed), error_reason (if available), and timestamps. This allows for granular analysis: you can query success rates by user, by specific smart contract method, or by time of day. Tools like The Graph can index this on-chain data for efficient querying.

For production monitoring, consider these key performance indicators (KPIs): - Overall Success Rate: Should typically be >95% for a smooth UX. - Failure Breakdown: Categorize failures by type (e.g., user rejection, out of gas, execution revert). - Latency to Finality: The time between broadcast and final confirmation. Tracking these KPIs helps identify if failures are due to frontend configuration, RPC node performance, or smart contract bugs.

Implementing this tracking is crucial for iterative improvement. By analyzing failure trends, teams can upgrade gas estimation algorithms, add better error messages for common reverts, or choose more reliable RPC providers. Publicly sharing aggregate, anonymized success rate data can also build trust with your users, demonstrating a commitment to reliability and transparency in your application's performance.

setting-alerts
MONITORING

Setting Up Alerts for Degradation

A guide to tracking transaction success rates across blockchains and configuring automated alerts for performance degradation.

Transaction success rate is a critical health metric for any blockchain application. It measures the percentage of submitted transactions that are successfully included in a block and confirmed. A sudden drop in this rate can indicate network congestion, fee market volatility, smart contract bugs, or underlying infrastructure issues. For multi-chain applications, monitoring this metric across each network you operate on is essential for maintaining user experience and operational reliability. This guide covers how to measure this rate and set up proactive alerts.

To calculate the success rate, you need to track transaction outcomes over a defined time window. The basic formula is (Successful Transactions / Total Submitted Transactions) * 100. You can gather this data by subscribing to transaction lifecycle events from your node provider (e.g., Alchemy, Infura, QuickNode) or by querying your application's database if you log all submission attempts and their final statuses. For Ethereum and EVM chains, listen for the confirmed and dropped/replaced events. A robust implementation also accounts for transactions that are never mined and eventually expire.

Here is a simplified Node.js example using the Ethers.js library to check the status of a transaction hash and log the result. This logic would be part of a larger monitoring service.

javascript
const { ethers } = require('ethers');
const provider = new ethers.providers.JsonRpcProvider(YOUR_RPC_URL);

async function checkTxStatus(txHash) {
    try {
        const receipt = await provider.getTransactionReceipt(txHash);
        if (receipt && receipt.status === 1) {
            console.log(`Transaction ${txHash}: SUCCESS`);
            return 'success';
        } else {
            console.log(`Transaction ${txHash}: FAILED`);
            return 'failed';
        }
    } catch (error) {
        // Transaction may not be mined yet or is invalid
        console.log(`Transaction ${txHash}: ERROR or PENDING`);
        return 'error';
    }
}

For effective alerting, aggregate individual transaction results into a rolling success rate, such as over the last 100 transactions or the past hour. Set thresholds that trigger alerts; for example, an alert for warning if the rate falls below 95% and critical if it drops below 90%. The specific thresholds depend on your application's tolerance and the historical baseline for each chain. Tools like Prometheus with Grafana are ideal for this, allowing you to define the metric and alerting rules (e.g., using PromQL). Chain-specific explorers like Etherscan also offer alert features for failed transactions associated with your address.

When setting up cross-chain alerts, remember that baseline success rates and failure modes differ per network. A 90% rate might be normal on a high-throughput, low-fee chain like Polygon during peak times, but would be a severe issue on Solana, which typically has a success rate above 99.9%. Configure your alert thresholds independently for each chain. Furthermore, distinguish between different failure types: reverts (smart contract logic failures), insufficient gas (user or estimator error), and network drops (RPC or mempool issues). This granularity helps in diagnosing the root cause when an alert fires.

Integrate these alerts into your operational workflow using tools like PagerDuty, Opsgenie, or Slack webhooks. The alert payload should include the chain name, current success rate, the threshold breached, and a link to relevant diagnostics (e.g., a Grafana dashboard or block explorer). For comprehensive coverage, consider using specialized Web3 monitoring platforms like Chainscore, Tenderly, or OpenZeppelin Defender, which provide built-in success rate tracking and alerting across multiple chains, reducing the need to build and maintain this infrastructure yourself.

KEY METRICS

Chain-Specific Considerations

Ethereum, Polygon, Arbitrum

Measuring success on EVM chains requires tracking the finality state beyond simple transaction receipts. A transaction with a status: 1 receipt can still be reorged out of the canonical chain.

Key Metrics to Track:

  • Finalization Rate: Percentage of transactions that reach finality (e.g., 64 blocks on Ethereum PoS, 12 blocks on Arbitrum).
  • Gas Estimation Accuracy: Compare gasUsed to gasLimit. High ratios (>90%) indicate accurate estimation and higher success likelihood.
  • Revert Analysis: Use eth_getTransactionReceipt to check for status: 0 and decode revert reasons from the transaction trace (debug_traceTransaction).

Example Check for Finality:

javascript
// After a transaction is mined, wait for finality
const receipt = await provider.getTransactionReceipt(txHash);
if (receipt && receipt.status === 1) {
    // Check block confirmations >= chain finality depth
    const latestBlock = await provider.getBlockNumber();
    const confirmations = latestBlock - receipt.blockNumber;
    const isFinal = confirmations >= FINALITY_BLOCKS[chainId];
}

Monitor mempool conditions via services like Blocknative or Flashbots to understand pre-execution failure risks.

TRANSACTION SUCCESS

Frequently Asked Questions

Common questions and troubleshooting for developers measuring and improving transaction success rates across different blockchain networks.

Transaction success rate is the percentage of submitted transactions that are successfully included and executed on-chain, out of the total attempted. It is a critical metric for evaluating blockchain network health and user experience. A low success rate indicates network congestion, high competition for block space, or issues with transaction construction (e.g., insufficient gas). For developers, monitoring this rate is essential for:

  • Reliability: Ensuring dApp functions execute as expected.
  • Cost efficiency: Failed transactions still incur gas costs on many chains.
  • User retention: High failure rates lead to poor UX and user churn.

Success rates can vary significantly between chains like Ethereum, Arbitrum, and Solana due to differing consensus mechanisms and fee markets.

conclusion
MEASURING SUCCESS

Conclusion and Next Steps

This guide has outlined the core methodologies for quantifying transaction success rates across different blockchains. The next step is to implement these techniques and integrate them into your monitoring systems.

Accurately measuring transaction success rates is a foundational metric for any Web3 application. It directly impacts user experience, cost efficiency, and protocol reliability. By implementing the methods discussed—tracking status fields, monitoring mempool drops, analyzing gas failures, and calculating finality times—you can build a robust performance dashboard. Tools like Chainscore's Transaction Success API abstract this complexity, providing normalized success rates across chains like Ethereum, Arbitrum, and Polygon with a single call, saving significant development time.

To move from measurement to improvement, correlate success rate data with other on-chain events. For example, a drop in success rate on a specific DApp might coincide with a surge in gas prices or a failed contract interaction on a popular NFT mint. Use event logs and internal transaction traces to diagnose the root cause. Setting up alerts for when success rates fall below a threshold (e.g., 95%) allows for proactive response before users are significantly impacted.

Your next practical steps should be: 1) Instrument your application to log transaction hashes and outcomes. 2) Choose an analysis method, whether building your own indexer or using a data provider. 3) Establish a baseline for normal performance on your target chains. 4) Create automated reports to track trends over time. For further learning, explore the EIP-1559 documentation on fee mechanics and resources on MEV to understand how network congestion affects transaction inclusion.

How to Measure Transaction Success Rates Across Chains | ChainScore Guides