Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions astro.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,6 @@ export default defineConfig({
label: 'FAQ',
link: '/faq'
},
{
label: 'Forum',
link: 'https://forum.ethfollow.xyz/'
},
{
label: 'Discord',
link: 'https://discord.com/invite/ZUyG3mSXFD'
Expand Down
Binary file modified bun.lockb
Binary file not shown.
18 changes: 9 additions & 9 deletions public/llms-full.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

**How can my app integrate EFP?**

> Any way you want; EFP is open protocol. Ideas include: using EFP to provide additional context for who an Ethereum account is (e.g. showing a user's EFP follower and following counts on their profile, showing friends of friends that follow them, etc), using followings for contacts or message filtering, recommendations, etc. [Our API](https://docs.efp.app/api/) is a convenient way to get EFP data. Message us on Discord or elsewhere to let us know you integrated EFP and we'll put your logo and link on our website.
> Any way you want; EFP is open protocol. Ideas include: using EFP to provide additional context for who an Ethereum account is (e.g. showing a user's EFP follower and following counts on their profile, showing friends of friends that follow them, etc), using followings for contacts or message filtering, recommendations, etc. [Our API](https://ethidentitykit.com/docs/api/) is a convenient way to get EFP data. Message us on Discord or elsewhere to let us know you integrated EFP and we'll put your logo and link on our website.

**Is EFP centralized?**

Expand Down Expand Up @@ -1466,10 +1466,10 @@ If you are a developer, you are free to use this endpoint to retrieve EFP data.

#### Commonly used endpoints

- [User Stats](https://docs.ethfollow.xyz/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://docs.ethfollow.xyz/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://docs.ethfollow.xyz/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://docs.ethfollow.xyz/api/users/ens/): the ENS data for a particular user
- [User Stats](https://ethidentitykit.com/docs/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://ethidentitykit.com/docs/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://ethidentitykit.com/docs/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://ethidentitykit.com/docs/api/users/ens/): the ENS data for a particular user

### ENS Worker
The API uses V3X Labs' [enstate](https://github.com/v3xlabs/enstate) to provide ENS data. This service is available at https://ens.ethfollow.xyz. EFP is happy to provide use of this endpoint to the community but please do not abuse it.
Expand Down Expand Up @@ -1901,10 +1901,10 @@ If you are a developer, you are free to use this endpoint to retrieve EFP data.

### Commonly used endpoints

- [User Stats](https://docs.efp.app/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://docs.efp.app/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://docs.efp.app/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://docs.efp.app/api/users/ens/): the ENS data for a particular user
- [User Stats](https://ethidentitykit.com/docs/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://ethidentitykit.com/docs/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://ethidentitykit.com/docs/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://ethidentitykit.com/docs/api/users/ens/): the ENS data for a particular user

### Self-hosting

Expand Down
2 changes: 1 addition & 1 deletion public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
- [EFP Emergency Response](https://docs.efp.app/production/emergency-response): Outlines procedures for responding to bugs in EFP contracts and managing affected data.
- [Ethereum Follow Protocol Overview](https://docs.efp.app/intro): Explains the Ethereum Follow Protocol, its roles, and functionality for managing social graphs on Ethereum.
- [EFP Multisig Overview](https://docs.efp.app/production/multisig): This page provides information about the EFP multisig wallet, its addresses, signers, and contract privileges.
- [API Documentation Redirect](https://docs.efp.app/api/): Redirects users to the API documentation for the Eth Identity Kit.
- [EFP Public API (Ethereum Identity Kit)](https://ethidentitykit.com/docs/api/): HTTP API reference for indexing and retrieving EFP data.
- [Ethereum Follow Protocol Overview](https://docs.efp.app/): Explains the Ethereum Follow Protocol for creating and managing on-chain social graphs using NFTs.
- [Account Metadata Overview](https://docs.efp.app/design/account-metadata): Explains how to use Account Metadata for Ethereum accounts in the EFP ecosystem.

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ title: F.A.Q.

**How can my app integrate EFP?**

> Any way you want; EFP is open protocol. Ideas include: using EFP to provide additional context for who an Ethereum account is (e.g. showing a user's EFP follower and following counts on their profile, showing friends of friends that follow them, etc), using followings for contacts or message filtering, recommendations, etc. [Our API](https://docs.efp.app/api/) is a convenient way to get EFP data. Message us on Discord or elsewhere to let us know you integrated EFP and we'll put your logo and link on our website.
> Any way you want; EFP is open protocol. Ideas include: using EFP to provide additional context for who an Ethereum account is (e.g. showing a user's EFP follower and following counts on their profile, showing friends of friends that follow them, etc), using followings for contacts or message filtering, recommendations, etc. [Our API](https://ethidentitykit.com/docs/api/) is a convenient way to get EFP data. Message us on Discord or elsewhere to let us know you integrated EFP and we'll put your logo and link on our website.

**Is EFP centralized?**

Expand Down
59 changes: 26 additions & 33 deletions src/content/docs/production/infra.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,53 @@ title: EFP Infrastructure

![EFP Backend Design](/backend-design.png)

The backend architecture for EFP is comprised of the following components
EFP’s backend is developed and deployed from the **[`api-v2` monorepo](https://github.com/ethereumfollowprotocol/api-v2)**, which consolidates the HTTP API, chain indexers, orchestration, background workers, and related code. The older standalone repositories ([`api`](https://github.com/ethereumfollowprotocol/api), [`indexer`](https://github.com/ethereumfollowprotocol/indexer), [`services`](https://github.com/ethereumfollowprotocol/services)) are **archived**.

- [Database](https://hub.docker.com/_/postgres) (Postgres)
- [PGBouncer](https://hub.docker.com/r/pgbouncer/pgbouncer) (a connection pooler for Postgres)
- [EFP Indexers](https://github.com/ethereumfollowprotocol/indexer) for Base, Optimism and Ethereum Mainnet
- [EFP Services](https://github.com/ethereumfollowprotocol/services) (updates ens data, leaderboard, cache, mutuals counts)
- [EFP API](https://github.com/ethereumfollowprotocol/api) (Can be deployed as a cloudflare worker)
- [Ens Worker](https://github.com/v3xlabs/enstate) (Can be deployed as a cloudflare worker)
- [Redis](https://hub.docker.com/_/redis) Cache for the API and ENS Worker
A typical deployment is made up of the following:

All of these components can be set up separately, whether locally or using external hosts. The quickest way to stand up all of the backend infrastructure is to use the [EFP-Silo Railway template](https://railway.app/template/pDGEZm?referralCode=AavWEU)
- [PostgreSQL](https://hub.docker.com/_/postgres)
- [Redis](https://hub.docker.com/_/redis) (caching and coordination)
- [Elasticsearch](https://www.elastic.co/) (search and analytics; see the deployment guide in the monorepo)
- **[`api-v2` services](https://github.com/ethereumfollowprotocol/api-v2/tree/main/services)** — API, indexers, orchestrator, workers, WAL listener, and shared libraries
- V3X Labs [enstate](https://github.com/v3xlabs/enstate) (ENS lookups; deployable as a Cloudflare Worker or self-hosted)

You can run pieces locally or on a host you control. **For Railway**, follow **[`RAILWAY.md`](https://github.com/ethereumfollowprotocol/api-v2/blob/main/RAILWAY.md)** in `api-v2`. The legacy [EFP-Silo Railway template](/production/silo) is deprecated.

### Indexers

EFP has Registry and AccountMetadata contracts deployed on Base and ListRecords contracts deployed on three chains: Base, Optimism And Ethereum Mainnet. To capture and store all EFP data we run three separate instances of our indexer service, one for each chain.
EFP has Registry and AccountMetadata contracts deployed on Base and ListRecords contracts deployed on three chains: Base, Optimism, and Ethereum mainnet. To capture and store EFP data we run indexer processes for each chain; they ship from the **`services/indexer`** package in **`api-v2`**.

### Database

EFP Data is stored in a Postgres Database, queries and schema can be found in the [EFP Indexer Repo](https://github.com/ethereumfollowprotocol/indexer/tree/develop/db)

### Connection Pooling

PgBouncer is used to handle connection pooling for the database. This improves availability for the database over the api by sharing client connections, saving overhead on connection/reconnection.
EFP data is stored in Postgres. Schema and migrations are maintained inside **`api-v2`** (applied during deployment—for example via the **`services/orchestrator`** service as described in the monorepo’s Railway guide).

### Data Services
### Connection pooling

The services module handles several jobs that run on intervals:
- Building the list of all addresses in the EFP database
- Building the Leaderboard Ranking
- Tracking Mutual follows
- Shuffling the recommended accounts list
- Refreshing ENS metadata
- Building a list of accounts with recent activity
Connection pooling improves availability under load by reusing database connections—for example via [PgBouncer](https://hub.docker.com/r/pgbouncer/pgbouncer) or your host’s Postgres settings—depending on how you deploy Postgres.

The intervals for running these jobs can be adjusted to suit your needs. Additionally the accounts that appear in the recommended follows can be customized by forking the services repo and editing '/src/services/recommended/lists.ts'. Once you've edited the file, go to the 'Settings' tab on the services module and update the 'Source Repo' to point to your forked github repository.
### Data services

![Services Settings](/services-settings-repo.png)
Workers and orchestration in **`api-v2`** handle recurring jobs—for example leaderboard ranking, mutuals, recommended follows, ENS metadata refresh, and recent activity—which were previously attributed to the archived **services** repo. Customize behavior by changing the **`api-v2`** codebase (for instance under **`services/workers`**) and deploying your fork or build.

### API

EFP core team provides a public API endpoint at [`https://api.ethfollow.xyz/api/v1`](https://api.ethfollow.xyz/api/v1).

If you are a developer, you are free to use this endpoint to retrieve EFP data.

#### Commonly used endpoints

- [User Stats](https://docs.ethfollow.xyz/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://docs.ethfollow.xyz/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://docs.ethfollow.xyz/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://docs.ethfollow.xyz/api/users/ens/): the ENS data for a particular user
- [User Stats](https://ethidentitykit.com/docs/api/users/stats/): the follower and following counts of a particular user
- [User Following](https://ethidentitykit.com/docs/api/users/following/): list of the accounts a particular user follows
- [User Followers](https://ethidentitykit.com/docs/api/users/followers/): list of the accounts that follow a particular user
- [User ENS data](https://ethidentitykit.com/docs/api/users/ens/): the ENS data for a particular user

### ENS Worker
The API uses V3X Labs' [enstate](https://github.com/v3xlabs/enstate) to provide ENS data. This service is available at https://ens.ethfollow.xyz. EFP is happy to provide use of this endpoint to the community but please do not abuse it.

Anyone can deploy this ENS worker repository to cloudflare or host their own instance locally. Read more about deploying [here](https://github.com/v3xlabs/enstate?tab=readme-ov-file#-cloudflare-workers).
The API uses V3X Labs' [enstate](https://github.com/v3xlabs/enstate) to provide ENS data. This service is available at https://ens.ethfollow.xyz. EFP is happy to provide use of this endpoint to the community but please do not abuse it.

Anyone can deploy this ENS worker repository to Cloudflare or host their own instance locally. See the [Cloudflare Workers deployment guide](https://github.com/v3xlabs/enstate?tab=readme-ov-file#-cloudflare-workers) for setup instructions.

### Redis cache

### Redis Cache
The Redis cache is used by both the API and the ENS Worker to cache responses for faster future retrieval.
Redis is used by the API layer and related services for caching and faster retrieval of frequently accessed data.
4 changes: 3 additions & 1 deletion src/content/docs/production/silo.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
title: EFP Railway Template
---

:::caution[Deprecated]

This page documents the legacy **EFP-Silo** Railway template, which wired together multiple separate repositories. The standalone [`api`](https://github.com/ethereumfollowprotocol/api), [`indexer`](https://github.com/ethereumfollowprotocol/indexer), and [`services`](https://github.com/ethereumfollowprotocol/services) repositories are **archived**. New self-hosting and deployments use the consolidated **[`api-v2` monorepo](https://github.com/ethereumfollowprotocol/api-v2)**; follow **[`RAILWAY.md`](https://github.com/ethereumfollowprotocol/api-v2/blob/main/RAILWAY.md)** there. For an overview of the current stack, see [EFP Infrastructure](/production/infra/).

:::

---
## Railway Template

Deploying the EFP-Silo template on Railway will set up all of the aforementioned components with default parameters set.
Expand Down