Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
o-az committed Sep 28, 2023
0 parents commit 51fc40b
Show file tree
Hide file tree
Showing 26 changed files with 497 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
root = true

[*]
indent_style = space
indent_size = 2
max_line_length = 100
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false

[*.{md}]
trim_trailing_whitespace = false
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* text=auto eol=lf
base.json linguist-language-JSON-with-Comments
wrangler.json linguist-language-JSON-with-Comments
22 changes: 22 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# build output
dist/
# generated types
.astro/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*


# environment variables
.env
.env.production

# macOS-specific files
.DS_Store
.vercel
6 changes: 6 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
engine-strict=true
auto-install-peers=true
strict-peer-dependencies=false
auto-install-peers=true
enable-pre-post-scripts=true
strict-peer-dependencies=false
12 changes: 12 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"recommendations": [
"mikestead.dotenv",
"gruntfuggly.todo-tree",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"astro-build.astro-vscode",
"bradlc.vscode-tailwindcss",
"EditorConfig.EditorConfig",
"yzhang.markdown-all-in-one"
]
}
52 changes: 52 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"search.exclude": {
"**/node_modules": true,
"pnpm-lock.yaml": true,
"**/.turbo": true,
".eslintcache": true,
".prettiercache": true,
"_": true
},
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"typescript.preferences.importModuleSpecifier": "non-relative",
// astro requires this
"typescript.inlayHints.parameterNames.enabled": "all",
"files.associations": {
// tells vscode that the file can take comments
"base.json": "jsonc",
"*.css": "tailwindcss"
},
"editor.quickSuggestions": {
"strings": "on"
},
"tailwindCSS.includeLanguages": {
"plaintext": "html"
},
// git settings
"git.autofetch": true,
"git.confirmSync": false,
"git.enableCommitSigning": true,
// format & lint settings
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.enable": true,
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[astro]": {
"editor.defaultFormatter": "astro-build.astro-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[plaintext]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
good vibes only
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# [docs.ethfollow.xyz](https://docs.ethfollow.xyz)
54 changes: 54 additions & 0 deletions astro.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import tailwind from '@astrojs/tailwind'
import starlight from '@astrojs/starlight'
import expressiveCode from 'astro-expressive-code'
import vercelAdapter from '@astrojs/vercel/serverless'
import { defineConfig, passthroughImageService } from 'astro/config'

// https://astro.build/config
export default defineConfig({
site: 'https://docs.ethfollow.xyz',
output: 'hybrid',
adapter: vercelAdapter({ webAnalytics: { enabled: true } }),
integrations: [
expressiveCode({
theme: 'dracula-soft'
}),
tailwind({
applyBaseStyles: false,
configFile: './tailwind.config.ts'
}),
starlight({
title: 'EFP',
description: 'Ethereum Follow Protocol',
favicon: '/favicon.ico',
defaultLocale: 'en',
lastUpdated: true,
logo: {
src: './src/assets/logo.png'
},
social: {
github: 'https://github.com/ethereumfollowprotocol',
twitter: 'https://twitter.com/ethfollowpr'
},
sidebar: [
{
label: 'Design Specification',
link: '/spec'
}
],
customCss: [
'./src/styles/custom.css',
'./src/styles/tailwind.css',
'@fontsource/inter/400.css',
'@fontsource/inter/700.css',
'@fontsource/ibm-plex-serif/400.css',
'@fontsource/ibm-plex-serif/600.css',
'@fontsource/ibm-plex-mono/400.css',
'@fontsource/ibm-plex-mono/600.css'
]
})
],
image: {
service: passthroughImageService()
}
})
Binary file added banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added bun.lockb
Binary file not shown.
5 changes: 5 additions & 0 deletions environment.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
declare namespace NodeJS {
interface ProcessEnv {
NODE_ENV: 'development' | 'production' | 'test'
}
}
34 changes: 34 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "docs",
"type": "module",
"version": "0.0.1",
"homepage": "https://docs.ethfollow.xyz",
"scripts": {
"dev": "astro dev --port 4322",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/starlight": "^0.10.2",
"@astrojs/vercel": "^5.0.1",
"@expressive-code/plugin-collapsible-sections": "^0.26.1",
"@fontsource/ibm-plex-mono": "^5.0.8",
"@fontsource/ibm-plex-serif": "^5.0.8",
"@fontsource/inter": "^5.0.8",
"@vercel/analytics": "^1.0.2",
"astro": "^3.1.4",
"astro-expressive-code": "^0.26.1",
"expressive-code": "^0.26.1",
"hast-util-to-html": "^9.0.0"
},
"devDependencies": {
"@astrojs/starlight-tailwind": "^2.0.0",
"@astrojs/tailwind": "^5.0.0",
"@total-typescript/ts-reset": "^0.5.1",
"bun-types": "^1.0.3",
"sharp": "^0.32.6",
"tailwindcss": "^3.3.3"
}
}
Binary file added public/favicon.ico
Binary file not shown.
1 change: 1 addition & 0 deletions reset.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import "@total-typescript/ts-reset";
Binary file added src/assets/banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/banner_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions src/content/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { defineCollection } from 'astro:content'
import { docsSchema, i18nSchema } from '@astrojs/starlight/schema'

export const collections = {
docs: defineCollection({
// @ts-ignore
schema: docsSchema()
}),
i18n: defineCollection({ type: 'data', schema: i18nSchema() })
}
14 changes: 14 additions & 0 deletions src/content/docs/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
title: EFP
description: Ethereum Follow Protocol
template: splash
hero:
tagline: Ethereum Follow Protocol
image:
file: ../../assets/logo.png
actions:
- text: Learn more
link: /spec
icon: right-arrow
variant: primary
---
89 changes: 89 additions & 0 deletions src/content/docs/spec/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
title: Design Specification
---

### Ethereum Follow Protocol (EFP) Overview


EFP is a native Ethereum protocol for following and tagging Ethereum accounts.

To begin, users first mint an NFT called the "EFP List NFT".

### EFP List NFT

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

#### Roles

Every EFP List NFT has two roles, each of which are held by an Ethereum account, either an EOA or contract address.

1. **Owner:**
- Is the owner of the EFP List NFT
- Can transfer the Owner role
- Can edit the User role
- Can edit the List Records Storage Location
2. **User:**
- The Ethereum address for whom the list is intended; the Ethereum account that is following the Ethereum accounts in the list.

Typically, both roles (Owner, User) are the same Ethereum account, but they can be distinct.

---

### Record Storage

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

- Ethereum L1 smart contract address
- CCIP-read pointers for storage outside Ethereum L1

The List Records 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 NFT, but they can be distinct.

---

### List Record Types

- **Entry 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.
- **Transitive Record:**
- Contains an EFP List NFT token ID, with zero or more tags.
- This typically means the user intends to "follow" some or all of the Entry Records in the specified list.
- If no tag is included, it means the user follows every Entry Record on the specified list. If a tag or set of tags is included, it means the user follows only the Entry Records with any one of those tags.

---

### Tags

Each Entry Record can have zero or more tags.

#### Standard Tags

- **no tag**

- If an Entry 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.
- Entry Records with this tag are not included in Followers count, even if the Entry 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, but the muted account might still be able to see the user’s activity.
- Entry Records with this tag are not included in Followers count, even if the Entry Record has other tags.
- If both “block” and “mute” tags are present, “block” takes precedence.

#### Custom Tags

Users can use arbitrary custom tags.

---

### Followers

#### Definition

- **Followers** is the total number of EFP NFTs that have at least one Entry Record with a specific Ethereum address, plus EFP NFTs that have a Transitive Record that points to an Entry 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 NFTs with an identical User are counted as a single follower.
2 changes: 2 additions & 0 deletions src/env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
Loading

0 comments on commit 51fc40b

Please sign in to comment.