Skip to content

Introduction

Ethereum Follow Protocol (EFP) is the social graph for Ethereum.

EFP List NFT

Users mint an EFP List NFT to create an EFP List.

Minting an EFP List NFT is free (plus gas).

Roles

Every EFP List has three roles, each of which are held by an Ethereum address.

  1. Owner:
    • Is the owner of the EFP List NFT
    • Can transfer ownership of the EFP List NFT
    • Can edit the List Storage Location
  2. Manager:
    • Is the manager of the EFP list records and metadata
    • Can transfer the Manager role to another address
    • Can set or update the user
    • Can add/remove list records and add/remove tags
    • Can add metadata key/value to the list
  3. User:
    • The Ethereum address for whom the list is intended; the Ethereum address that is following the Ethereum addresses in the EFP List.

Typically, all three roles (Owner, Manager, User) are the same Ethereum address, but they can be different.


List Storage Location

Your EFP List NFT specifies a List Storage Location where the List Records are stored, which can be one of the following:

  • Ethereum L1 smart contract address
  • Ethereum L2 smart contract address
  • CCIP-read pointers for off-chain storage (future)

The List Storage Location itself (the smart contract or off-chain system) must specify a Manager role, typically an Ethereum account that is able to edit the List Records. Typically, the Manager will be the same Ethereum account as the Owner and User roles of the EFP List NFT, but they can be different.


List Records

An EFP List is formed from a set of List Records.

Each record has a record type, but only one record type is supported at launch:

  • Address Record
    • Contains an Ethereum address, with zero or more tags.
    • These records are typically interpreted as a “follow” of the specified Ethereum address, with some exceptions explained in the Followers section below.

Tags

List Records can have zero or more tags.

A few tags are standardized with specified semantics. Users may also set custom tags.

Standard Tags

  • no tag

    • If a List Record has no tags, it is interpreted as a simple follow without further categorization.
  • ”block”

    • This tag means neither the user nor the blocked account should see each other’s activity in a relevant app.
    • List Records with this tag are not included in Followers count, even if the List Record has other tags.
    • If both “block” and “mute” tags are present, “block” takes precedence.
  • ”mute”

    • This tag means the user shouldn’t see the muted account’s activity in a relevant app, but the muted account might still be able to see the user’s activity.
    • List Records with this tag are not included in Followers count, even if the List Record has other tags.
    • If both “block” and “mute” tags are present, “block” takes precedence.

Custom Tags

Users can use additional arbitrary custom tags. A custom tag can be any UTF-8 string with the following constraints:

  • maximum length of 255 bytes
  • no leading or trailing whitespace
  • more constraints to be added as needed

Account Metadata

EFP provides an Account Metadata contract that allows users to set EFP-related metadata specific to their Ethereum account.

Primary List

Every Ethereum account may set a Primary List value in the EFP Account Metadata contract to specify their “primary” EFP List.

Apps should first check the Primary List value for an Ethereum account, and if set, default to using that EFP List for that Ethereum account.


Social Graph

The User role of each EFP list determines which Ethereum account is following the Ethereum addresses in that EFP List.

The social graph is formed from the union of all EFP Lists, except:

  • no user: exclude EFP lists where the User role is not set
  • not primary list: exclude EFP lists where the User role is set but does not match the Primary EFP List for that Ethereum Account
  • ambiguous list choice: exclude EFP lists where the User role is set, there are multiple EFP lists with the same User role, and the Primary EFP List for that Ethereum Account is not set

Followers

Followers is the total number of EFP Lists that have an Address Record with a specific Ethereum address, with the following additional conditions:

  • Exclude records with either the “block” or “mute” tags, even if the records have other tags.
  • Multiple EFP Lists with the same User are counted as a single follower.

Following

Following is the total number of List Records of a user’s primary EFP List, with the following additional conditions:

  • Exclude records with either the “block” or “mute” tags, even if the records have other tags.
  • Multiple Address Records with the same Ethereum address are counted as a single follow.