Skip to content

Commit

Permalink
Add Flair to "Data Indexers" tooling (#291)
Browse files Browse the repository at this point in the history
* feat: add readme for flair indexing

* fix: update readme

* Update docs/build-on-linea/tooling/data-indexers/flair.md

Co-authored-by: aram.eth <[email protected]>

* Update docs/build-on-linea/tooling/data-indexers/flair.md

Co-authored-by: aram.eth <[email protected]>

* Update docs/build-on-linea/tooling/data-indexers/flair.md

Co-authored-by: aram.eth <[email protected]>

* fix: revert changes in project-words.txt

* fix: update readme

* fix: update readme

* fix: update readme

* fix: update readme

* fix: update readme

* fix: update readme

* Revert "Flair Indexing"

* feat: add flair indexing

* fix: add words to project-words

* fix update readme

* fix: revert package.lock change

* fix: update readme

* fix: update readme

---------

Co-authored-by: aram.eth <[email protected]>
  • Loading branch information
kasrakhosravi and aramalipoor authored Sep 13, 2023
1 parent 7036e50 commit fe353ac
Show file tree
Hide file tree
Showing 3 changed files with 545 additions and 0 deletions.
114 changes: 114 additions & 0 deletions docs/build-on-linea/tooling/data-indexers/flair.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
---
title: Flair
---

# 🔮 Flair
Real-time and historical custom data indexing for any evm chain.

[Flair](https://flair.dev) offers reusable **indexing primitives** (such as fault-tolerant RPC ingestors, custom processors, re-org aware database integrations) to make it easy to receive, transform, store and access your on-chain data.

<img
src={
require("@site/static/img/docs/build-on-linea/tooling/flair.svg").default
}></img>
<br />


## Why Flair?

Compared to other alternatives the main reasons are:

* 🚀 Adopting **parallel and distributed processing** paradigm means high scalability and resiliency for your indexing stack. Instead of constrained sequential processing (e.g Subgraph).
* 🧩 Focused on **primitives**, which means on the left you plug-in an RPC and on the right you output the data to any destination database.
* 🚄 Native **real-time stream processing** for certain data workload (such as aggregations, rollups) for things like total volume per pool, or total portfolio per user wallet.
* ☁️ **Managed** cloud services avoid DevOps and irrelevant engineering costs for dApp developers.
* 🧑‍💻 Avoid decentralization **overhead** (consensus, network hops, etc) since we believe to enable best UX for dApps reading data must be as close to the developers as possible.
### Features

* ✅ Listen to **any EVM chain** with just an RPC URL.
* Free managed RPC URLs for +8 popular chains already included.
* Works with both websocket and https-only RPCs.
* ✅ Track and ingest **any contract** for **any event topic.**
* Auto-track new contracts deployed from factory contracts.
***Custom processor scripts** with Javascript runtime (with **Typescript** support)
* Make external API or Webhook calls to third-party or your backend.
* Get current or historical USD value of any ERC20 token amount of any contract address on any chain.
* Use any external NPM library.
***Stream** any stored data to your destination database (Postgres, MongoDB, MySQL, Kafka, Elasticsearch, Timescale, etc).

## Getting Started

1️⃣ Clone the [starter boilerplate](https://github.com/flair-sdk/starter-boilerplate) template and follow the instructions:

```bash
git clone https://github.com/flair-sdk/starter-boilerplate.git
# ... follow instructions in README.md
```
:::info

Boilerplate instructions will create a **new cluster**, generate **an API Key**, and set up a manifest.yml to index your **first contract** with **sample custom processor** scripts.

Learn more about the [structure of manifest.yml](https://docs.flair.build/reference/manifest.yml).

:::

2️⃣ Configure Linea RPC nodes

Set a unique namespace, Linea chainId and RPC endpoint in your `config`.
Remember that you can add up to 10 RPC endpoints for resiliency.

```yaml
{
"cluster": "dev",
"namespace": "my-awesome-linea-indexing-dev",
"indexers": [
{
"chainId": 59140,
"enabled": true,
"ingestionFilterGroup": "default",
"processingFilterGroup": "default",
"sources": [
# Highly-recommended to have at least 1 websocket endpoint
"wss://linea-mainnet.infura.io/v3/xxxxxxxxxx",
"https://linea-mainnet.infura.io/v3/xxxxxxxxxx",
# You can put multiple endpoints for failover
"https://rpc.linea.build"
]
}
]
}
```

3️⃣ Sync some historical data using [backfill command](https://docs.flair.build/reference/backfilling). Remember that `enabled: true` flag in your `config` enabled your indexer to capture data in real-time already.

```bash
# backfill certain contracts or block ranges
pnpm flair backfill --chain 59140 --address 0x0872ec4426103482a50f26ffc32acefcec61b3c9 -d backward --max-blocks 10000
# backfill for a specific block number, if you have certain events you wanna test with
pnpm flair backfill --chain 59140 -b 409652
# backfill for the recent data in the last X minute
pnpm flair backfill --chain 59140 --min-timestamp="30 mins ago" -d backward
```


4️⃣ [Query](https://docs.flair.build/#getting-started) your custom indexed data.

5️⃣ Stream the data to your [own database](https://docs.flair.build/reference/database#your-own-database).

## Examples

Explore real-world usage of Flair indexing primitives for various use-cases.

### DeFi

* [Aggregate protocol fees in USD across multiple chains](https://github.com/flair-sdk/examples/tree/main/aggregate-protocol-fees-in-usd)
* [Calculate "Health Factor" of positions with contract factory tracking](https://github.com/flair-sdk/examples/tree/main/health-factor-with-factory-tracking)
* [Index Uniswap v2 swaps with USD price for all addresses](https://github.com/flair-sdk/examples/tree/main/uniswap-v2-events-from-all-contracts-with-usd-price)

### NFT

* [Index ERC721 and ERC1155 NFTs on any EVM chain with an RPC URL](https://github.com/flair-sdk/examples/tree/main/erc721-and-erc1155-nft-indexing)

## Need help?

[Our engineers](https://docs.flair.build/talk-to-an-engineer) are available to help you at any stage.
2 changes: 2 additions & 0 deletions project-words.txt
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ immer
Immunefi
immutabilitythreshold
infima
ingestors
inlines
inproc
Interchain
Expand Down Expand Up @@ -393,6 +394,7 @@ mkdir
mkdirs
mkdocs
moesif
Mongo
msapplication
Multicall
Multichain
Expand Down
Loading

1 comment on commit fe353ac

@vercel
Copy link

@vercel vercel bot commented on fe353ac Sep 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.