# Use cases

You can use Shadow to tackle several types of onchain data problems:

## Faster and richer indexing

Teams can cut engineering time, get rid of adapters, and speed up indexing by writing shadow events from the contracts they care about. [Shadow RPCs](https://docs.shadow.xyz/getting-data/shadow-rpc) support the standard read endpoints, and are backwards compatible with existing web3 tooling like subgraphs.

## Deeper research and analysis

Events often don't have all the data you will need. This can stem from a variety of reasons:

* Events are missing entirely
* Existing events don't emit information you need
* Existing events emit inaccurate information
* Existing events are structured in a way that make them hard to use

Analysts and researchers can take matters into their own hands and write shadow events into any contract. Write a custom event, quickly backfill its data for past transactions across a block range, and export it to your data tool of choice.

## Save gas and contract size

Smart contract developers can save their users up to 12% in gas on every transaction by decoupling data access from business logic, and moving non-critical event logs and view functions to a shadow fork. This has the added benefit of reducing the code size of contracts deployed on mainnet, which has a limit of 24KB (the Spurious Dragon Limit).

Reducing events on the publicly deployed versions of your contracts – and deploying them on a shadow fork instead – can provide significant optimizations to your contracts while flexibly serving all of the data needs for your project.

## Complete observability

Developers and auditors can use Shadow to see inside the entire stack of any contract, and log everything they might want privately and gaslessly on a shadow fork. This enables fully comprehensive semantic logging to understand the inner details of any contract or transaction.

## Data ergonomics

Shadow provides powerful and flexible data middleware that simplifies any indexing you may need to do downstream of events.

Shadow enables you to easily:

* Materialize SQL-ready enriched tables
* Make `eth_call` data event-driven instead of hammering RPCs
* Unify data models for similar user actions across different protocols
* Fetch token prices in USD with block-level accuracy
* Get human understandable metadata
  * Token info (e.g. decimal converted values, symbols)
  * Pool/vault info (e.g. constituent token liquidity, tick prices, fees)
  * NFT info (e.g. collection names, onchain attributes)
