Blog

On-Chain Series VI: The Address Metadata Endpoint

In this blog, we introduce our latest API addition the Address Metadata Endpoint, a powerful API designed to provide comprehensive, real-time insights into blockchain addresses. Building on our previous advancements in on-chain data processing, this tool offers detailed metrics such as address type, interaction history, transaction data, and DeFi information.

  • August 27, 2024
  • Vlad Cealicu - CTO

In our previous blog posts, we covered the evolution of our on-chain data processing infrastructure, from optimising block data retrieval with NFS in On-Chain Series IV to leveraging Azure's L-Series machines for efficient processing in On-Chain Series V. These advancements have set the stage for our latest offering: the Address Metadata Endpoint. This endpoint provides comprehensive insights into blockchain addresses, serving as a cornerstone for future developments. In this post, we'll explore the capabilities of the Address Metadata Endpoint, how it integrates with our infrastructure, and why it's an essential tool for developers, analysts, and other blockchain users. Additionally, we'll discuss why we built this endpoint and how it's already being used internally to streamline our operations.

What is the Address Metadata Endpoint?

The Address Metadata Endpoint is an API that delivers real-time detailed metrics on specific blockchain addresses. Users can specify the blockchain asset (e.g., Ethereum) and the address of interest to access a wide range of data, including:

  • Address Type: Identifies whether the address is a wallet or a smart contract.
  • Interaction History: Details the first and last interactions of the address, including transaction hashes and timestamps.
  • Transaction Counts: Tracks total sent and received transactions for comprehensive activity analysis.
  • Contract Metadata: For smart contracts, provides token information including name, symbol, decimals, total supply, and supported token standards (ERC20, ERC721, ERC777, ERC1155).
  • Supply Metrics: Includes information on circulating, locked, and burnt supply for token contracts.

This endpoint is a practical and reliable tool for analysing address-level activity and attributes, built on the foundation of our robust data processing infrastructure.

The Architecture: Redundancy and Scale Through Redis

To deliver consistent sub-50ms response times while maintaining 99.95% availability, we've implemented a resilient architecture that prioritizes both performance and reliability.

Dual Redis Architecture for Maximum Availability

Our system employs a unique dual-Redis approach:

Redis Cluster: Our sharded Redis cluster serves as the primary data store for API access. This cluster is directly accessible by all API nodes, enabling horizontal scaling and load distribution. The cluster uses consistent hashing to partition addresses across multiple nodes, ensuring even data distribution and parallel query processing.

Local Redis on Processing VM: The VM that processes blockchain data maintains its own local Redis instance. This serves a critical purpose: redundancy. If the Redis cluster experiences issues or becomes unavailable, the processing VM can continue to function independently, ensuring zero data loss and continuous operation. This local Redis acts as both a working cache during processing and a failsafe that can resync with the cluster once connectivity is restored.

// Our redundant write pattern
const updateAddressMetadata = async (addressKey, metadata) => {
    // Write to local Redis first (always available to the processing VM)
    await redisLocal.set(addressKey, metadata);
    
    // Sync to cluster for API access
    try {
        await redisCluster.set(addressKey, metadata);
    } catch (error) {
        // If cluster is unavailable, processing continues
        // Data will be synced when cluster recovers
        logModule.toConsole('Cluster sync failed, will retry', logModule.WARNING);
    }
};

Cloudflare R2 for Long-Term Storage

While Redis handles active data, we use Cloudflare R2 for efficient long-term storage. Our intelligent archiving system continuously monitors Redis memory usage and automatically migrates inactive addresses to R2 when memory usage exceeds 70%. This approach allows us to:

  • Maintain millions of addresses in active memory
  • Archive billions of historical addresses cost-effectively
  • Quickly rehydrate any address when needed

When an address becomes active again after being archived:

const restoreAddressFromArchive = async (addressKey) => {
    // Fetch from R2
    const archivedData = await r2Client.get(`addresses/${addressKey}.json.gz`);
    const metadata = JSON.parse(await gunzip(archivedData));
    
    // Restore to both Redis instances
    await redisLocal.set(addressKey, metadata);
    await redisCluster.set(addressKey, metadata);
    
    return metadata;
};

Real-Time Processing Pipeline

Our system processes every Ethereum block sequentially, extracting and updating address metadata from:

  • Standard Transactions: Tracking sender and receiver interactions
  • Contract Deployments: Identifying new smart contracts and their token standards
  • Mining Rewards: Via orphan traces for block rewards
  • Staking Rewards: Through withdrawal processing post-Merge

The processing pipeline is designed for resilience:

  1. Block data is fetched (from local NFS cache or API fallback)
  2. Addresses are extracted and metadata is computed
  3. Updates are written to local Redis (always succeeds)
  4. Updates are synced to Redis cluster (with retry logic)
  5. Memory management triggers archival to R2 when needed

Why We Built It

The Address Metadata Endpoint was born out of our need to simplify and automate the mapping and discovery processes associated with blockchain assets. Historically, we've built our infrastructure to meet our own internal needs first — ensuring that every tool we develop is battle-tested and ready for real-world application.

When evaluating existing solutions from other on-chain data providers, we conducted a thorough investigation and found that none of them fully met our stringent standards for quality, accuracy, and comprehensive data coverage. The available endpoints either lacked the depth of information we required, couldn't handle the scale we needed, or didn't provide the reliability our systems demand. Given these limitations, we made the decision to build our own solution. This allowed us to maintain control over the data quality, ensure it met our specific requirements, and provide a tool that not only supports our internal operations but also offers unmatched value to our customers.

Internal Use Cases

Asset Metadata Platforms: Within our asset manager platform, we leverage the Address Metadata Endpoint to streamline and enhance the accuracy of listing assets and their supported platforms. When our content team adds a new token, they simply input the contract address, and our system automatically populates:

  • Token name, symbol, and decimals
  • Total supply and token standards
  • Contract deployment date and initial interactions

This automation reduced asset listing time from 10+ minutes of manual research to under 30 seconds.

Exchange Reserve Tracking: One of the most critical applications is monitoring exchange solvency. By tracking all addresses associated with an exchange—from hot wallets to cold storage—we maintain real-time visibility into their reserves. This capability has become essential for:

  • Proof of reserves verification
  • Risk assessment for institutional clients
  • Early warning systems for liquidity issues

The redundant architecture ensures this critical monitoring continues even during infrastructure maintenance or partial outages.

Technical Deep Dive: Token Standard Detection

One of our key innovations is automatic token standard detection during contract deployment. When processing transactions, we analyze the input data against known function selectors:

// Detecting token standards in real-time
const detectTokenStandards = (transaction) => {
    const standards = [];
    
    if (containsSelectors(transaction.INPUT, ERC20_SELECTORS)) {
        standards.push('ERC20');
        // Batch fetch token details via RPC
        const details = await rpcProvider.multicall([
            contract.name(),
            contract.symbol(),
            contract.decimals(),
            contract.totalSupply()
        ]);
        metadata.TOKEN_DETAILS = details;
    }
    
    if (containsSelectors(transaction.INPUT, ERC721_SELECTORS)) {
        standards.push('ERC721');
    }
    
    return standards;
};

This automatic detection ensures we capture token metadata at deployment time, providing historical accuracy that post-hoc analysis often misses.

Performance and Reliability Metrics

Our production environment demonstrates the effectiveness of this architecture:

  • Processing Speed: 1,000+ transactions per second sustained
  • API Response Time: p50: 3ms, p95: 45ms, p99: 87ms (measured from within the same Azure region as our infrastructure; actual latency will increase based on geographic distance and network conditions)
  • Availability: 99.95% uptime with zero data loss during cluster outages
  • Storage Efficiency: Active data in Redis (~5%), archived in R2 (~95%)
  • Sync Reliability: Local to cluster sync success rate: 99.95% (100% with retries and re-syncs triggered on service redeploys)
  • Memory Management: Automatic archival maintains 70% Redis memory target

The redundant architecture has proven invaluable during:

  • Redis cluster maintenance windows
  • Network connectivity issues
  • Unexpected traffic spikes
  • Cross-datacenter failovers

Looking Forward: Address Balance Tracking

While the current Address Metadata Endpoint provides comprehensive activity and contract information, we're excited about our next major enhancement: real-time balance tracking.

Our upcoming release will extend the endpoint to include:

  • Native ETH balances at the latest processed block
  • Token balances for all ERC20/ERC721 holdings
  • Historical balance snapshots for point-in-time analysis
  • Balance change events for tracking large movements

This enhancement will leverage our existing infrastructure—the same redundant Redis architecture and R2 archival system will efficiently store and serve balance data. By tracking balance changes at the transaction level during our block processing, we'll provide accurate, real-time balance information without the need for expensive on-demand RPC calls.

The architecture is already battle-tested; we're simply extending our data model to capture this additional dimension of address activity. This will transform the Address Metadata Endpoint from a powerful analytical tool into a complete address intelligence platform.

Expanding Beyond Ethereum

While Ethereum is our flagship implementation, we're actively processing and indexing address metadata for:

  • Bitcoin: Adapting our architecture for UTXO-based tracking
  • Binance Smart Chain: Leveraging Ethereum compatibility for rapid deployment
  • Base: Supporting the growing L2 ecosystem
  • Arbitrum: Extending our coverage to one of the leading Ethereum Layer 2 solutions
  • Solana: Supporting one of the most popular and active blockchains with its unique account model

Each blockchain maintains its own local Redis and processing VM but they all share the same Redis Cluster, ensuring isolated failure domains while sharing our proven architectural patterns. This design choice brings significant advantages at the API level:

Unified API Access: By using a shared Redis cluster, our API nodes can query data from any blockchain without needing to know which processing VM handles that chain. This dramatically simplifies our API architecture—a single connection pool to the Redis cluster provides access to all blockchain data.

Cross-Chain Queries: The shared cluster makes it trivial to implement cross-chain features. Want to check if an Ethereum address has activity on BSC or Arbitrum? It's a simple multi-key lookup in the same cluster, no complex routing required.

Operational Efficiency: Instead of managing separate clusters per blockchain, our ops team maintains one highly-available Redis cluster. This reduces operational complexity while maintaining the isolation benefits—if Bitcoin's processing VM fails, it doesn't affect Ethereum data availability in the cluster.

Consistent Performance: All blockchains benefit from the same optimized Redis cluster configuration, ensuring uniform sub-50ms response times regardless of which chain you're querying. The cluster's consistent hashing automatically distributes load across nodes, preventing any single blockchain from creating hotspots.

Operational Excellence

Our focus on redundancy extends beyond just Redis:

  • Multiple RPC providers with automatic failover
  • Dual data sources: Local NFS cache with API fallback
  • Cross-datacenter replication for R2 archives
  • Automated health checks that trigger self-healing procedures
  • Comprehensive R2 Archive: Beyond address metadata, we store complete blocks and individual transactions in R2, creating a full blockchain archive that serves as both operational storage and disaster recovery
  • Multi-layered Data Storage: Full blocks (2/blocks/19234567.json.gz), individual transactions by hash (2/transactions/0x5d2c...b111.json.gz), and address metadata archives work together to provide complete data lineage

This belt-and-bracers approach ensures that the Address Metadata Endpoint remains available even when multiple components fail simultaneously. The complete blockchain archive in R2 means we can always reconstruct any data point from source, providing the ultimate safety net for our services.

How to Use the Address Metadata Endpoint

Integration is straightforward via our RESTful API: GET https://data-api.coindesk.com/onchain/v1/address/metadata/2?address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

{
  "Data": {
    "TYPE": "1927",
    "ADDRESS": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
    "ADDRESS_TYPE": "CONTRACT",
    "FIRST_INTERACTION_BLOCK_NUMBER": 4719568,
    "FIRST_INTERACTION_BLOCK_TIMESTAMP": 1513077455,
    "FIRST_INTERACTION_TRANSACTION_HASH": "0xb95343413e459a0f97461812111254163ae53467855c0d73e0f1e7c5b8442fa3",
    "FIRST_INTERACTION_ADDRESS": "0x4f26ffbe5f04ed43630fdc30a87638d53d0b0876",
    "LAST_INTERACTION_BLOCK_NUMBER": 22655012,
    "LAST_INTERACTION_BLOCK_TIMESTAMP": 1749327083,
    "LAST_INTERACTION_TRANSACTION_HASH": "0xc647d701a72fb664df8060ced9b9f09908b5063682cefbdf96a0240d179e76da",
    "LAST_INTERACTION_ADDRESS": "0x0a9bc3b0d19bca983cd9a6d251dc5920e87b223e",
    "FIRST_RECEIVED_TRANSACTION_BLOCK_NUMBER": 4719568,
    "FIRST_RECEIVED_TRANSACTION_BLOCK_TIMESTAMP": 1513077455,
    "FIRST_RECEIVED_TRANSACTION_HASH": "0xb95343413e459a0f97461812111254163ae53467855c0d73e0f1e7c5b8442fa3",
    "LAST_RECEIVED_TRANSACTION_BLOCK_NUMBER": 22655012,
    "LAST_RECEIVED_TRANSACTION_BLOCK_TIMESTAMP": 1749327083,
    "LAST_RECEIVED_TRANSACTION_HASH": "0xc647d701a72fb664df8060ced9b9f09908b5063682cefbdf96a0240d179e76da",
    "TOTAL_RECEIVED_TRANSACTIONS": 19831957,
    "TOTAL_INTERACTIONS": 19831957,
    "FULLY_COMPATIBLE_TOKEN_STANDARDS": [
      "ERC20"
    ],
    "ADDRESS_NAME": "Wrapped Ether",
    "ADDRESS_SYMBOL": "WETH",
    "DECIMALS": 18,
    "SUPPLY_BURNT": 0,
    "SUPPLY_CIRCULATING": 2.764409186177725e+24,
    "SUPPLY_FUTURE": -1,
    "SUPPLY_ISSUED": 2.764409186177725e+24,
    "SUPPLY_LOCKED": 0,
    "SUPPLY_MAX": -1,
    "SUPPLY_STAKED": 0,
    "SUPPLY_TOTAL": 2.764409186177725e+24
  },
  "Err": {}
}

Behind this simple API lies our resilient infrastructure, automatically routing requests to healthy Redis nodes and seamlessly handling any infrastructure hiccups.

Conclusion

The Address Metadata Endpoint represents our commitment to building infrastructure that doesn't just work—it works reliably at scale, even when things go wrong. By architecting for redundancy from day one, we've created a system that our internal teams trust for mission-critical operations like exchange monitoring and risk analysis.

With our upcoming balance tracking features and continued expansion to new blockchains, we're excited to provide the blockchain community with the same level of reliability and performance that powers CoinDesk Data's internal operations.

Disclaimer: Please note that the content of this blog post was created prior to our company's rebranding from CCData to CoinDesk Indices.

On-Chain Series VI: The Address Metadata Endpoint

In our previous blog posts, we covered the evolution of our on-chain data processing infrastructure, from optimising block data retrieval with NFS in On-Chain Series IV to leveraging Azure's L-Series machines for efficient processing in On-Chain Series V. These advancements have set the stage for our latest offering: the Address Metadata Endpoint. This endpoint provides comprehensive insights into blockchain addresses, serving as a cornerstone for future developments. In this post, we'll explore the capabilities of the Address Metadata Endpoint, how it integrates with our infrastructure, and why it's an essential tool for developers, analysts, and other blockchain users. Additionally, we'll discuss why we built this endpoint and how it's already being used internally to streamline our operations.

What is the Address Metadata Endpoint?

The Address Metadata Endpoint is an API that delivers real-time detailed metrics on specific blockchain addresses. Users can specify the blockchain asset (e.g., Ethereum) and the address of interest to access a wide range of data, including:

  • Address Type: Identifies whether the address is a wallet or a smart contract.
  • Interaction History: Details the first and last interactions of the address, including transaction hashes and timestamps.
  • Transaction Counts: Tracks total sent and received transactions for comprehensive activity analysis.
  • Contract Metadata: For smart contracts, provides token information including name, symbol, decimals, total supply, and supported token standards (ERC20, ERC721, ERC777, ERC1155).
  • Supply Metrics: Includes information on circulating, locked, and burnt supply for token contracts.

This endpoint is a practical and reliable tool for analysing address-level activity and attributes, built on the foundation of our robust data processing infrastructure.

The Architecture: Redundancy and Scale Through Redis

To deliver consistent sub-50ms response times while maintaining 99.95% availability, we've implemented a resilient architecture that prioritizes both performance and reliability.

Dual Redis Architecture for Maximum Availability

Our system employs a unique dual-Redis approach:

Redis Cluster: Our sharded Redis cluster serves as the primary data store for API access. This cluster is directly accessible by all API nodes, enabling horizontal scaling and load distribution. The cluster uses consistent hashing to partition addresses across multiple nodes, ensuring even data distribution and parallel query processing.

Local Redis on Processing VM: The VM that processes blockchain data maintains its own local Redis instance. This serves a critical purpose: redundancy. If the Redis cluster experiences issues or becomes unavailable, the processing VM can continue to function independently, ensuring zero data loss and continuous operation. This local Redis acts as both a working cache during processing and a failsafe that can resync with the cluster once connectivity is restored.

// Our redundant write pattern
const updateAddressMetadata = async (addressKey, metadata) => {
    // Write to local Redis first (always available to the processing VM)
    await redisLocal.set(addressKey, metadata);
    
    // Sync to cluster for API access
    try {
        await redisCluster.set(addressKey, metadata);
    } catch (error) {
        // If cluster is unavailable, processing continues
        // Data will be synced when cluster recovers
        logModule.toConsole('Cluster sync failed, will retry', logModule.WARNING);
    }
};

Cloudflare R2 for Long-Term Storage

While Redis handles active data, we use Cloudflare R2 for efficient long-term storage. Our intelligent archiving system continuously monitors Redis memory usage and automatically migrates inactive addresses to R2 when memory usage exceeds 70%. This approach allows us to:

  • Maintain millions of addresses in active memory
  • Archive billions of historical addresses cost-effectively
  • Quickly rehydrate any address when needed

When an address becomes active again after being archived:

const restoreAddressFromArchive = async (addressKey) => {
    // Fetch from R2
    const archivedData = await r2Client.get(`addresses/${addressKey}.json.gz`);
    const metadata = JSON.parse(await gunzip(archivedData));
    
    // Restore to both Redis instances
    await redisLocal.set(addressKey, metadata);
    await redisCluster.set(addressKey, metadata);
    
    return metadata;
};

Real-Time Processing Pipeline

Our system processes every Ethereum block sequentially, extracting and updating address metadata from:

  • Standard Transactions: Tracking sender and receiver interactions
  • Contract Deployments: Identifying new smart contracts and their token standards
  • Mining Rewards: Via orphan traces for block rewards
  • Staking Rewards: Through withdrawal processing post-Merge

The processing pipeline is designed for resilience:

  1. Block data is fetched (from local NFS cache or API fallback)
  2. Addresses are extracted and metadata is computed
  3. Updates are written to local Redis (always succeeds)
  4. Updates are synced to Redis cluster (with retry logic)
  5. Memory management triggers archival to R2 when needed

Why We Built It

The Address Metadata Endpoint was born out of our need to simplify and automate the mapping and discovery processes associated with blockchain assets. Historically, we've built our infrastructure to meet our own internal needs first — ensuring that every tool we develop is battle-tested and ready for real-world application.

When evaluating existing solutions from other on-chain data providers, we conducted a thorough investigation and found that none of them fully met our stringent standards for quality, accuracy, and comprehensive data coverage. The available endpoints either lacked the depth of information we required, couldn't handle the scale we needed, or didn't provide the reliability our systems demand. Given these limitations, we made the decision to build our own solution. This allowed us to maintain control over the data quality, ensure it met our specific requirements, and provide a tool that not only supports our internal operations but also offers unmatched value to our customers.

Internal Use Cases

Asset Metadata Platforms: Within our asset manager platform, we leverage the Address Metadata Endpoint to streamline and enhance the accuracy of listing assets and their supported platforms. When our content team adds a new token, they simply input the contract address, and our system automatically populates:

  • Token name, symbol, and decimals
  • Total supply and token standards
  • Contract deployment date and initial interactions

This automation reduced asset listing time from 10+ minutes of manual research to under 30 seconds.

Exchange Reserve Tracking: One of the most critical applications is monitoring exchange solvency. By tracking all addresses associated with an exchange—from hot wallets to cold storage—we maintain real-time visibility into their reserves. This capability has become essential for:

  • Proof of reserves verification
  • Risk assessment for institutional clients
  • Early warning systems for liquidity issues

The redundant architecture ensures this critical monitoring continues even during infrastructure maintenance or partial outages.

Technical Deep Dive: Token Standard Detection

One of our key innovations is automatic token standard detection during contract deployment. When processing transactions, we analyze the input data against known function selectors:

// Detecting token standards in real-time
const detectTokenStandards = (transaction) => {
    const standards = [];
    
    if (containsSelectors(transaction.INPUT, ERC20_SELECTORS)) {
        standards.push('ERC20');
        // Batch fetch token details via RPC
        const details = await rpcProvider.multicall([
            contract.name(),
            contract.symbol(),
            contract.decimals(),
            contract.totalSupply()
        ]);
        metadata.TOKEN_DETAILS = details;
    }
    
    if (containsSelectors(transaction.INPUT, ERC721_SELECTORS)) {
        standards.push('ERC721');
    }
    
    return standards;
};

This automatic detection ensures we capture token metadata at deployment time, providing historical accuracy that post-hoc analysis often misses.

Performance and Reliability Metrics

Our production environment demonstrates the effectiveness of this architecture:

  • Processing Speed: 1,000+ transactions per second sustained
  • API Response Time: p50: 3ms, p95: 45ms, p99: 87ms (measured from within the same Azure region as our infrastructure; actual latency will increase based on geographic distance and network conditions)
  • Availability: 99.95% uptime with zero data loss during cluster outages
  • Storage Efficiency: Active data in Redis (~5%), archived in R2 (~95%)
  • Sync Reliability: Local to cluster sync success rate: 99.95% (100% with retries and re-syncs triggered on service redeploys)
  • Memory Management: Automatic archival maintains 70% Redis memory target

The redundant architecture has proven invaluable during:

  • Redis cluster maintenance windows
  • Network connectivity issues
  • Unexpected traffic spikes
  • Cross-datacenter failovers

Looking Forward: Address Balance Tracking

While the current Address Metadata Endpoint provides comprehensive activity and contract information, we're excited about our next major enhancement: real-time balance tracking.

Our upcoming release will extend the endpoint to include:

  • Native ETH balances at the latest processed block
  • Token balances for all ERC20/ERC721 holdings
  • Historical balance snapshots for point-in-time analysis
  • Balance change events for tracking large movements

This enhancement will leverage our existing infrastructure—the same redundant Redis architecture and R2 archival system will efficiently store and serve balance data. By tracking balance changes at the transaction level during our block processing, we'll provide accurate, real-time balance information without the need for expensive on-demand RPC calls.

The architecture is already battle-tested; we're simply extending our data model to capture this additional dimension of address activity. This will transform the Address Metadata Endpoint from a powerful analytical tool into a complete address intelligence platform.

Expanding Beyond Ethereum

While Ethereum is our flagship implementation, we're actively processing and indexing address metadata for:

  • Bitcoin: Adapting our architecture for UTXO-based tracking
  • Binance Smart Chain: Leveraging Ethereum compatibility for rapid deployment
  • Base: Supporting the growing L2 ecosystem
  • Arbitrum: Extending our coverage to one of the leading Ethereum Layer 2 solutions
  • Solana: Supporting one of the most popular and active blockchains with its unique account model

Each blockchain maintains its own local Redis and processing VM but they all share the same Redis Cluster, ensuring isolated failure domains while sharing our proven architectural patterns. This design choice brings significant advantages at the API level:

Unified API Access: By using a shared Redis cluster, our API nodes can query data from any blockchain without needing to know which processing VM handles that chain. This dramatically simplifies our API architecture—a single connection pool to the Redis cluster provides access to all blockchain data.

Cross-Chain Queries: The shared cluster makes it trivial to implement cross-chain features. Want to check if an Ethereum address has activity on BSC or Arbitrum? It's a simple multi-key lookup in the same cluster, no complex routing required.

Operational Efficiency: Instead of managing separate clusters per blockchain, our ops team maintains one highly-available Redis cluster. This reduces operational complexity while maintaining the isolation benefits—if Bitcoin's processing VM fails, it doesn't affect Ethereum data availability in the cluster.

Consistent Performance: All blockchains benefit from the same optimized Redis cluster configuration, ensuring uniform sub-50ms response times regardless of which chain you're querying. The cluster's consistent hashing automatically distributes load across nodes, preventing any single blockchain from creating hotspots.

Operational Excellence

Our focus on redundancy extends beyond just Redis:

  • Multiple RPC providers with automatic failover
  • Dual data sources: Local NFS cache with API fallback
  • Cross-datacenter replication for R2 archives
  • Automated health checks that trigger self-healing procedures
  • Comprehensive R2 Archive: Beyond address metadata, we store complete blocks and individual transactions in R2, creating a full blockchain archive that serves as both operational storage and disaster recovery
  • Multi-layered Data Storage: Full blocks (2/blocks/19234567.json.gz), individual transactions by hash (2/transactions/0x5d2c...b111.json.gz), and address metadata archives work together to provide complete data lineage

This belt-and-bracers approach ensures that the Address Metadata Endpoint remains available even when multiple components fail simultaneously. The complete blockchain archive in R2 means we can always reconstruct any data point from source, providing the ultimate safety net for our services.

How to Use the Address Metadata Endpoint

Integration is straightforward via our RESTful API: GET https://data-api.coindesk.com/onchain/v1/address/metadata/2?address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

{
  "Data": {
    "TYPE": "1927",
    "ADDRESS": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
    "ADDRESS_TYPE": "CONTRACT",
    "FIRST_INTERACTION_BLOCK_NUMBER": 4719568,
    "FIRST_INTERACTION_BLOCK_TIMESTAMP": 1513077455,
    "FIRST_INTERACTION_TRANSACTION_HASH": "0xb95343413e459a0f97461812111254163ae53467855c0d73e0f1e7c5b8442fa3",
    "FIRST_INTERACTION_ADDRESS": "0x4f26ffbe5f04ed43630fdc30a87638d53d0b0876",
    "LAST_INTERACTION_BLOCK_NUMBER": 22655012,
    "LAST_INTERACTION_BLOCK_TIMESTAMP": 1749327083,
    "LAST_INTERACTION_TRANSACTION_HASH": "0xc647d701a72fb664df8060ced9b9f09908b5063682cefbdf96a0240d179e76da",
    "LAST_INTERACTION_ADDRESS": "0x0a9bc3b0d19bca983cd9a6d251dc5920e87b223e",
    "FIRST_RECEIVED_TRANSACTION_BLOCK_NUMBER": 4719568,
    "FIRST_RECEIVED_TRANSACTION_BLOCK_TIMESTAMP": 1513077455,
    "FIRST_RECEIVED_TRANSACTION_HASH": "0xb95343413e459a0f97461812111254163ae53467855c0d73e0f1e7c5b8442fa3",
    "LAST_RECEIVED_TRANSACTION_BLOCK_NUMBER": 22655012,
    "LAST_RECEIVED_TRANSACTION_BLOCK_TIMESTAMP": 1749327083,
    "LAST_RECEIVED_TRANSACTION_HASH": "0xc647d701a72fb664df8060ced9b9f09908b5063682cefbdf96a0240d179e76da",
    "TOTAL_RECEIVED_TRANSACTIONS": 19831957,
    "TOTAL_INTERACTIONS": 19831957,
    "FULLY_COMPATIBLE_TOKEN_STANDARDS": [
      "ERC20"
    ],
    "ADDRESS_NAME": "Wrapped Ether",
    "ADDRESS_SYMBOL": "WETH",
    "DECIMALS": 18,
    "SUPPLY_BURNT": 0,
    "SUPPLY_CIRCULATING": 2.764409186177725e+24,
    "SUPPLY_FUTURE": -1,
    "SUPPLY_ISSUED": 2.764409186177725e+24,
    "SUPPLY_LOCKED": 0,
    "SUPPLY_MAX": -1,
    "SUPPLY_STAKED": 0,
    "SUPPLY_TOTAL": 2.764409186177725e+24
  },
  "Err": {}
}

Behind this simple API lies our resilient infrastructure, automatically routing requests to healthy Redis nodes and seamlessly handling any infrastructure hiccups.

Conclusion

The Address Metadata Endpoint represents our commitment to building infrastructure that doesn't just work—it works reliably at scale, even when things go wrong. By architecting for redundancy from day one, we've created a system that our internal teams trust for mission-critical operations like exchange monitoring and risk analysis.

With our upcoming balance tracking features and continued expansion to new blockchains, we're excited to provide the blockchain community with the same level of reliability and performance that powers CoinDesk Data's internal operations.

Disclaimer: Please note that the content of this blog post was created prior to our company's rebranding from CCData to CoinDesk Indices.

Subscribe to Our Newsletter

Get our latest research, reports and event news delivered straight to your inbox.