In this tutorial you will:
beta-3
testnet. In this Quickstart, we'll use Fuel's toolchain manager fuelup
in order to install the forc-index
component that we'll use to develop our indexer.
fuelup
To install fuelup with the default features/options, use the following command to download the fuelup installation script and run it interactively.
curl \
--proto '=https' \
--tlsv1.2 -sSf https://fuellabs.github.io/fuelup/fuelup-init.sh | sh
If you require a non-default
fuelup
installation, please read thefuelup
installation docs.
Indexers are typically compiled to WASM so you'll need to have the proper WASM compilation target available on your system. You can install this target using rustup
:
rustup target add wasm32-unknown-unknown
Additionally, you'll need the wasm-snip
utility in order to remove errant symbols from your compiled WASM binary. You can install this tool using cargo
:
cargo install wasm-snip
forc-index
plugin The primary means of interfacing with the Fuel indexer for indexer development is the forc-index
CLI tool . forc-index
is a forc
plugin specifically created to interface with the Fuel indexer service. Since we already installed fuelup
in a previous step 1.1, we should be able to check that our forc-index
binary was successfully installed and added to our PATH
.
which forc-index
/Users/me/.fuelup/bin/forc-index
IMPORTANT:
fuelup
will install several binaries from the Fuel ecosystem and add them into yourPATH
, including thefuel-indexer
binary. Thefuel-indexer
binary is the primary binary that users can use to spin up a Fuel indexer service.
which fuel-indexer
/Users/me/.fuelup/bin/fuel-indexer
Once the forc-index
plugin is installed, let's go ahead and see what indexer components we have installed.
Many of these components are required for development work (e.g.,
fuel-core
,psql
) but some are even required for non-development usage as well (e.g.,wasm-snip
,fuelup
).
forc index check
+--------+------------------------+---------------------------------------------------------+
| Status | Component | Details |
+--------+------------------------+---------------------------------------------------------+
| βοΈ | fuel-indexer binary | Can't locate fuel-indexer. |
+--------+------------------------+---------------------------------------------------------+
| β
| fuel-indexer service | Local service found: PID(63967) | Port(29987). |
+--------+------------------------+---------------------------------------------------------+
| β
| psql | /usr/local/bin/psql |
+--------+------------------------+---------------------------------------------------------+
| β
| fuel-core | /Users/me/.cargo/bin/fuel-core |
+--------+------------------------+---------------------------------------------------------+
| β
| docker | /usr/local/bin/docker |
+--------+------------------------+---------------------------------------------------------+
| βοΈ | fuelup | Can't locate fuelup. |
+--------+------------------------+---------------------------------------------------------+
| β
| wasm-snip | /Users/me/.cargo/bin/wasm-snip |
+--------+------------------------+---------------------------------------------------------+
| βοΈ | forc-postgres | Can't locate fuelup. |
+--------+------------------------+---------------------------------------------------------+
| β
| rustc | /Users/me/.cargo/bin/rustc |
+--------+------------------------+---------------------------------------------------------+
| β
| forc-wallet | /Users/me/.cargo/bin/forc-wallet |
+--------+------------------------+---------------------------------------------------------+
To quickly setup and bootstrap the PostgreSQL database that we'll need, we'll use forc index
.
We can quickly create a bootstrapped database and start the Fuel indexer service by running the following command:
IMPORTANT: Ensure that any local PostgreSQL instance that is running on port
5432
is stopped.
forc index start \
--embedded-database
--fuel-node-host beta-3.fuel.network \
--fuel-node-port 80 \
--run-migrations
You should see output indicating the successful creation of a database and start of the indexer service; there may be much more content in your session, but it should generally contain output similar to the following lines:
π¦ Downloading, unpacking, and bootstrapping database...
βΉβΉβΈβΉβΉ β± Setting up database...
π‘ Creating database at 'postgres://postgres:postgres@localhost:5432/postgres'
β
Successfully created database at 'postgres://postgres:postgres@localhost:5432/postgres'.
β
Successfully started database at 'postgres://postgres:postgres@localhost:5432/postgres'.
β
Successfully started the indexer service.
You can
Ctrl+C
to exit theforc index start
process, and your indexer service and database should still be running in the background.
Now that we have our development environment set up, the next step is to create an indexer.
forc index new hello-indexer --namespace my_project && cd hello-indexer
The
namespace
of your project is a required option. You can think of anamespace
as your organization name or company name. Your project might contain one or many indexers all under the samenamespace
. For a complete list of options passed toforc index new
, see here
forc index new hello-indexer --namespace my_project
βββββββββββ ββββββββββββββ βββββββ ββββββββββ βββββββββββ ββββββββββββββββββ
βββββββββββ ββββββββββββββ ββββββββ βββββββββββββββββββββββββββββββββββββββββββ
ββββββ βββ βββββββββ βββ βββββββββ ββββββ βββββββββ ββββββ ββββββ ββββββββ
ββββββ βββ βββββββββ βββ ββββββββββββββββ βββββββββ ββββββ ββββββ ββββββββ
βββ βββββββββββββββββββββββββ ββββββ ββββββββββββββββββββββββββ ββββββββββββββ βββ
βββ βββββββ ββββββββββββββββ ββββββ ββββββββββββ βββββββββββ ββββββββββββββ βββ
An easy-to-use, flexible indexing service built to go fast. ππ¨
----
Read the Docs:
- Fuel Indexer: https://github.com/FuelLabs/fuel-indexer
- Fuel Indexer Book: https://fuellabs.github.io/fuel-indexer/latest
- Sway Book: https://fuellabs.github.io/sway/latest
- Rust SDK Book: https://fuellabs.github.io/fuels-rs/latest
Join the Community:
- Follow us @SwayLang: https://twitter.com/fuellabs_
- Ask questions in dev-chat on Discord: https://discord.com/invite/xfpK4Pe
Report Bugs:
- Fuel Indexer Issues: https://github.com/FuelLabs/fuel-indexer/issues/new
Take a quick tour.
`forc index check`
List indexer components.
`forc index new`
Create a new indexer.
`forc index init`
Create a new indexer in an existing directory.
`forc index start`
Start a local indexer service.
`forc index build`
Build your indexer.
`forc index deploy`
Deploy your indexer.
`forc index remove`
Stop a running indexer.
`forc index auth`
Authenticate against an indexer service.
`forc index status`
Check the status of an indexer.
At this point, we have a brand new indexer that will index some blocks and transactions. And with both our database and Fuel indexer services up and running, all that's left is to build and deploy the indexer in order to see it in action. Let's build and deploy our indexer:
forc index deploy
IMPORTANT:
forc index deploy
by defaults runsforc index build
prior to deploying the indexer. The same result can be produced by runningforc index build
then subsequently runningforc index deploy
.
If all goes well, you should see the following:
βΉβΉβΉβΉβΉ β° Building... Finished dev [unoptimized + debuginfo] target(s) in 0.96s
βͺβͺβͺβͺβͺ β
Build succeeded. Deploying indexer
βͺβͺβͺβͺβͺ β
Successfully deployed indexer.
With our indexer deployed, we should be able to query for newly indexed data after a few seconds.
Below, we write a simple GraphQL query that simply returns a few fields from all transactions that we've indexed.
curl -X POST -H "Content-Type: application/graphql"
--data '{ "query": "query { tx { id, hash, block } }" }'
http://127.0.0.1:29987/api/graph/my_project/hello_indexer
[
{
"block" : 7017844286925529648,
"hash" : "fb93ce9519866676813584eca79afe2d98466b3e2c8b787503b76b0b4718a565",
"id" : 7292230935510476086,
},
{
"block" : 3473793069188998756,
"hash" : "5ea2577727aaadc331d5ae1ffcbc11ec4c2ba503410f8edfb22fc0a72a1d01eb",
"id" : 4136050720295695667,
},
{
"block" : 7221293542007912803,
"hash" : "d2f638c26a313c681d75db2edfbc8081dbf5ecced87a41ec4199d221251b0578",
"id" : 4049687577184449589,
},
]
As opposed to writing curL
commands to query data, note that you can also explore your indexed data using the indexer's GraphQL playground. For more info on using the playground - checkout the playground docs.
Congrats, you just created, built, and deployed your first indexer on the world's fastest execution layer.