# Overview

Crypto offers a unique opportunity to fundamentally rethink our digital future. It gives us the potential to build a new, fairer internet that puts people first.

Base Protocol is able to provide unrivaled security because it's built on smart contracts. This means we can add the security features you'd expect from a great bank (such as automatically blocking fraudulent transfers) without being a custodian.\
\
Base Protocol aims to allow creators to own their connections to the community, forming a fully composable, decentralized social graph. This is achieved by allowing users to create profiles and interact with each other through those profiles. "Profile" (as used herein) refers specifically to a Base Profile; "User" refers to a standard crypto wallet.

The protocol is built from the ground up with modularity in mind. Base Protocol is currently overseen by a multisig, which will be expanded to a broader DAO, which can develop and vote on new modules and expanded functionality.

### Architecture

First, let's take a deep dive into how to create and publish configuration files. Users must create a profile in the hub, for which they will receive an NFT profile with a sequential ID. This NFT controls the configuration file, therefore, its owner becomes the actual controller of the given configuration file.

#### Profile owners

<mark style="background-color:purple;">**1. Publish to the profile.**</mark>&#x20;

Publication types are Post, Comment, Quote

A comment is the standard content with a pointer to another publication. Since the annotation contains a pointer, the "reference module" logic (if any) pointing to that version is executed. The quote is equivalent to "share" in the traditional sense, without content, just a pointer to another publication. Since the image only contains a pointer, this will execute the "reference module" logic (if any) pointing to the release.\\

<mark style="background-color:purple;">**2. Configure the "Follow Module" of the profile**</mark>

This logic whitelist contract determines the logic that should be executed when a wallet attempts to follow a specific profile; For example, some followers may charge the profile owner a fee through a fee-following module contract.

<mark style="background-color:purple;">**3. Specifies the image URI for the configuration file**</mark>

<mark style="background-color:purple;">**4. Set the "dispatcher" of the configuration file**</mark>

This is an address that can represent the owner of the profile; it can publish to the specified profile or set the URI for the specified profile.

#### Regular wallets

<mark style="background-color:purple;">**1. Follow profiles**</mark>

This executes the configuration file's "follow module" logic (if any).&#x20;

Or this will uniquely and sequentially identify the following "NFT Follow" wallets for that profile. The Follow NFT has a custom URI set by the profile owner.\\

<mark style="background-color:purple;">**2. Collect publications**</mark>

This executes any logic in the published "collection module". If the publication is a Quote, executes on the original Quote publication with references.

Or This will make the collecting wallet a back row exclusive "Collector's Edition NFT" and be identified in turn. The collected NFT URIs points to the collected published URI.

### Tokenization

The Base Protocol has three layers of tokenization via ERC721 NFT. All three are ERC721 compliant and fully composable.

The BaseHub upgradeable contract is the core entry point for most interactions in the Base Protocol. Almost all interactions start and double as ERC721 NFT contracts and act as a contract for the profile NFT created when the profile was created.

When a profile first follows, a FollowNFT contract (cloned via a minimal proxy) is deployed that is unique to the profile; This is an ERC721 NFT contract representing a follower's position.

Lastly, when a publication is collected for the first time, a CollectNFT contract unique to that post will be implemented (again via a minimal proxy clone); this is the ERC721 NFT contract that represents collected publications.

Note that following and collecting NFTs are only deployed on the first following/collecting respectively. This reduces the gas overhead of creating profiles.

&#x20;

### Modularity

&#x20;

Modularity is at the heart of the Base Protocol. Everything is built on a foundation of community expansion and continuous development of new and innovative features.

Modules are self-contained whitelisted governance contracts that follow a specific interface. They maintain state and are unrestricted in potential scope outside of obeying the interface.

There are three types of modules:

<mark style="background-color:purple;">**1. Follow modules**</mark>

These modules are tied to a profile and contain logic to be executed upon a user attempting to follow the given profile.

<mark style="background-color:purple;">**2. Collect modules**</mark>

These modules are tied to a specific release (except for Quotes, which cannot be collected) and contain logic to execute when a user tries to collect a given release.

<mark style="background-color:purple;">**3. Reference modules**</mark>

These modules are associated with a specific publication and contain logic to execute when a user attempts to comment on or quote a given publication. Note that in the case of a quote attempt to point to a quote, the original content and its referenced modules will be used.

&#x20;

### Closing Notes

The Base Protocol is a composable social graph protocol designed to be owned and continuously developed by the community. It empowers users by allowing them to decide how they want to structure their social graph and how they want to monetize it (if at all).

Furthermore, the protocol is designed with a modular concept at its core, allowing infinitely scalable use cases. From a user perspective, this translates into a new paradigm of ownership and customization that was not possible (or economically viable) in Web2.

\\
