# Transactions & Instructions

In this tutorial, you'll learn how to initialize a Solana-based Substreams project using the Substreams CLI (`substreams init` command).

{% hint style="info" %}
The CLI installation is supported only on Linux and macOS. If you're using Windows, consider using the [DevContainer environment](https://docs.substreams.dev/reference-material/development-tools/devcontainer-ref), which launches a Linux-based virtual environment.
{% endhint %}

## Step 1: Initialize Your Solana Substreams Project

1. [Install the Substreams CLI](https://docs.substreams.dev/how-to-guides/installing-the-cli).
2. Running `substreams init` will give you the option to choose between two Solana project options. Select the one that best fits your requirements:
   * **sol-hello-world**: Creates a simple Substreams that outputs the accounts used in the Pump.Fun smart contract. It demonstrates how to access to full Solana Block, iterate over instructions and filter on a specific program ID.
   * **sol-transactions**: Creates a Substreams that filters Solana transactions based on one or more Program IDs and/or Account IDs, using the cached [Solana Foundational Module](https://substreams.dev/streamingfast/solana-common/v0.3.0).
   * **sol-anchor-beta**: Given an Anchor IDL, create a Substreams that decodes instructions and events. If an IDL isn’t available using the `idl` subcommand within the [Anchor CLI](https://www.anchor-lang.com/docs/cli), you’ll need to provide it yourself.

The modules within Solana Common exclude voting transactions, to benefit from a 75% reduction in data processing size and costs, delay your stream by over 1000 blocks from head. This can be done using the [`sleep`](https://doc.rust-lang.org/std/thread/fn.sleep.html) function in Rust.

{% hint style="info" %}
To access voting transactions, use the full Solana block, `sf.solana.type.v1.Block`, as input.
{% endhint %}

## Step 2: Visualize the Data

1. Run `substreams auth` to create your [account](https://thegraph.market/) and generate an authentication token (JWT), then pass this token back as input.
2. Run `substreams build` to compile the project.
3. Run `substreams gui` to visualize and iterate on your extracted data.

## Step 2.5: (Optionally) Transform the Data

1. Open the `src/lib.rs` file that has been generated.
2. Modify the transformations made to the data as needed. Every time you modify the code, you will have to recompile the project with `substreams build`.

## Step 3: Load the Data

To make your Substreams queryable (as opposed to [direct streaming](https://docs.substreams.dev/how-to-guides/sinks/stream)), you can automatically send the data to a SQL data by using the [SQL sink](https://docs.substreams.dev/how-to-guides/sinks/sql) or through [PubSub](https://docs.substreams.dev/how-to-guides/sinks/pubsub).

## Additional Resources

You may find these additional resources helpful for developing your first Solana application.

### Dev Container Reference

The [Dev Container Reference](https://docs.substreams.dev/reference-material/development-tools/devcontainer-ref) helps you navigate the container and its common errors.

### CLI Reference

The [CLI reference](https://docs.substreams.dev/reference-material/command-line-interface) lets you explore all the tools available in the Substreams CLI.

### Substreams Components Reference

The [Components Reference](https://docs.substreams.dev/reference-material/manifest-and-components/packages) dives deeper into navigating the `substreams.yaml`.
