├── .circleci
└── config.yml
├── .coderabbit.yaml
├── .eslintignore
├── .eslintrc.js
├── .github
└── CODEOWNERS
├── .gitignore
├── .npmrc
├── README.md
├── cspell.json
├── lychee.toml
├── next-env.d.ts
├── next-sitemap.config.js
├── next.config.mjs
├── notes
├── README.md
├── actions.md
├── nextra.md
└── remark.md
├── package.json
├── pages
├── 404.mdx
├── 500.mdx
├── _app.tsx
├── _document.tsx
├── _meta.json
├── citizens-house
│ ├── _meta.json
│ ├── citizen-house-overview.mdx
│ ├── citizen-selection-glossary
│ ├── citizenship-selection.mdx
│ ├── experimentation-with-citizenship.mdx
│ ├── how-retro-funding-works.mdx
│ └── rounds
│ │ ├── _meta.json
│ │ ├── retropgf-1.mdx
│ │ ├── retropgf-2.mdx
│ │ ├── retropgf-3.mdx
│ │ ├── retropgf-4.mdx
│ │ ├── retropgf-5.mdx
│ │ └── retropgf-6.mdx
├── connect
│ └── _meta.json
├── contribute
│ ├── _meta.json
│ ├── contribute-overview.mdx
│ ├── contribution-path
│ │ ├── _meta.json
│ │ ├── ambassador-req.mdx
│ │ ├── govnerds.mdx
│ │ ├── local-optimists.mdx
│ │ ├── numbanerds.mdx
│ │ ├── supnerd-requirements.mdx
│ │ ├── technerds.mdx
│ │ └── translators.mdx
│ ├── demo-day.mdx
│ ├── important-terms.mdx
│ └── technical-contributions.mdx
├── grant
│ ├── _meta.json
│ ├── get-support.mdx
│ └── grant-overview.mdx
├── identity
│ ├── _meta.json
│ ├── about-attestations.mdx
│ ├── applications.mdx
│ ├── attestations-best-practices.mdx
│ ├── contracts-eas.mdx
│ ├── identity-and-rep.mdx
│ ├── individuals.mdx
│ ├── organizations.mdx
│ ├── overview.mdx
│ ├── project-and-individual-identity.mdx
│ ├── projects.mdx
│ └── schemas.mdx
├── index.mdx
├── op-token
│ ├── _meta.json
│ ├── airdrops
│ │ ├── _meta.json
│ │ ├── airdrop-1.mdx
│ │ ├── airdrop-2.mdx
│ │ ├── airdrop-3.mdx
│ │ ├── airdrop-4.mdx
│ │ └── airdrop-5.mdx
│ ├── op-token-overview.mdx
│ └── superstacks.mdx
├── research
│ ├── _meta.json
│ └── research-overview.mdx
├── token-house
│ ├── _meta.json
│ ├── delegate-expectations.mdx
│ ├── gov-fund-overview.mdx
│ ├── how-to-delegate.mdx
│ ├── token-house-history.mdx
│ └── token-house-overview.mdx
└── welcome
│ ├── _meta.json
│ ├── faq
│ ├── _meta.json
│ ├── dashboard-trackers.mdx
│ └── what-is-the-optimism-foundation.mdx
│ ├── governing-docs
│ ├── _meta.json
│ └── law-of-chains-disclaimer.mdx
│ └── welcome-overview.mdx
├── patches
├── nextra@2.13.2.patch
├── remark-code-import@1.2.0.patch
└── remark-lint-frontmatter-schema@3.15.4.patch
├── pnpm-lock.yaml
├── public
├── _redirects
├── grafana
│ └── dispute-monitor-1718214549035.json
├── img
│ ├── citizen-house
│ │ ├── how-retro-funding-works.png
│ │ ├── reward-impact.jpg
│ │ └── scientific-method.png
│ ├── contribute
│ │ └── att-framework.png
│ ├── grant
│ │ ├── grant-options.png
│ │ ├── intents.png
│ │ ├── measuring-missions.png
│ │ ├── missions-graphic.png
│ │ └── season-7-intent.png
│ ├── icons
│ │ ├── 404-page.svg
│ │ ├── 500-page.svg
│ │ ├── arrow-left-right.svg
│ │ ├── arrow-up-double.png
│ │ ├── asterisk.svg
│ │ ├── book.svg
│ │ ├── build.svg
│ │ ├── computer-line.svg
│ │ ├── favicon.ico
│ │ ├── file-edit-line.svg
│ │ ├── gear.svg
│ │ ├── government-line.svg
│ │ ├── info.png
│ │ ├── instance-line.svg
│ │ ├── link.svg
│ │ ├── news-line.svg
│ │ ├── person.svg
│ │ ├── profile.png
│ │ ├── question-answer-line.svg
│ │ ├── rocket-2-line.svg
│ │ ├── shapes.svg
│ │ ├── stack-line.svg
│ │ ├── stack.svg
│ │ ├── terminal-window-line.svg
│ │ ├── tools.svg
│ │ ├── wallet.png
│ │ └── wallet.svg
│ ├── identity
│ │ ├── atst-logo.png
│ │ ├── profile.png
│ │ └── upload_b344e96d086ccbeeb28b3609a8fdbf92.png
│ ├── op-mainnet
│ │ └── identity
│ │ │ ├── atst-logo.png
│ │ │ └── profile.png
│ ├── op-token
│ │ └── op-token-allocation.jpeg
│ ├── research
│ │ ├── experiment-principles.png
│ │ └── experiment.png
│ └── welcome
│ │ ├── high-level-gov-houses.svg
│ │ └── two-houses-responsibilities.png
├── logos
│ ├── docs-header.png
│ ├── favicon.png
│ ├── header.png
│ ├── icon-1020x1020.png
│ ├── icon-192x192.png
│ ├── icon-256x256.png
│ ├── icon-384x384.png
│ ├── icon-512x512.png
│ ├── logo-docs-dark.svg
│ ├── logo-docs-light.svg
│ ├── twitter-logo.png
│ └── twitter-superchain.png
├── service-worker.js
└── tutorials
│ ├── cross-dom-bridge-erc20.js
│ ├── cross-dom-bridge-eth.js
│ ├── cross-dom-solidity.js
│ ├── cross-dom-solidity.sol
│ ├── first-contract.sol
│ ├── sdk-estimate-costs.js
│ ├── sdk-stack.js
│ ├── sdk-trace-txns.js
│ ├── sdk-view-txns.js
│ ├── send-tx-from-eth.js
│ ├── standard-bridge-custom-token.sol
│ └── standard-bridge-standard-token.sh
├── styles
├── colors.css
├── global.css
└── theme.css
├── theme.config.tsx
├── tsconfig.json
├── utils
├── constants.ts
├── gtag.ts
├── networks.ts
├── plugins
│ └── remark
│ │ └── remark-lint-no-blocked-characters.mjs
└── schemas
│ └── page.schema.yaml
└── words.txt
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2.1
2 |
3 | jobs:
4 | check-links:
5 | docker:
6 | - image: cimg/base:stable
7 | steps:
8 | - checkout
9 | - run:
10 | name: Install Lychee
11 | command: |
12 | curl -L https://github.com/lycheeverse/lychee/releases/download/v0.14.3/lychee-v0.14.3-x86_64-unknown-linux-gnu.tar.gz > lychee.tar.gz
13 | tar xzf lychee.tar.gz
14 | sudo mv ./lychee /usr/local/bin/
15 | - run:
16 | name: Run Lychee
17 | command: |
18 | lychee --config lychee.toml --quiet ./pages
19 | if [ $? -ne 0 ]; then
20 | echo "Lychee found broken links"
21 | exit 1
22 | fi
23 | lint-markdown:
24 | docker:
25 | - image: cimg/node:20.10
26 | steps:
27 | - checkout
28 | - run:
29 | name: Install pnpm
30 | command: sudo npm install -g pnpm
31 | - restore_cache:
32 | keys:
33 | - pnpm-deps-{{ checksum "pnpm-lock.yaml" }}
34 | - pnpm-deps-
35 | - run:
36 | name: Install Dependencies
37 | command: pnpm install
38 | - save_cache:
39 | key: pnpm-deps-{{ checksum "pnpm-lock.yaml" }}
40 | paths:
41 | - ~/.pnpm-store
42 | - run:
43 | name: Run lint
44 | command: pnpm lint
45 |
46 | check-lockfile:
47 | docker:
48 | - image: cimg/node:20.10
49 | steps:
50 | - checkout
51 | - run:
52 | name: Install pnpm
53 | command: sudo npm install -g pnpm
54 | - run:
55 | name: Install Dependencies
56 | command: pnpm install
57 | - run:
58 | name: Check lockfile
59 | command: |
60 | git diff --exit-code
61 | if [ $? -ne 0 ]; then
62 | echo "Lockfile is out of sync. Please run 'pnpm install' and commit the changes."
63 | exit 1
64 | fi
65 |
66 | workflows:
67 | version: 2
68 | check-links-workflow:
69 | jobs:
70 | - check-links
71 |
72 | lint-markdown-workflow:
73 | jobs:
74 | - lint-markdown
75 |
76 | check-lockfile-workflow:
77 | jobs:
78 | - check-lockfile
79 |
--------------------------------------------------------------------------------
/.coderabbit.yaml:
--------------------------------------------------------------------------------
1 | language: "en"
2 | early_access: false
3 | reviews:
4 | high_level_summary: false
5 | poem: false
6 | review_status: false
7 | collapse_walkthrough: false
8 | path_instructions:
9 | - path: "**/*.mdx"
10 | instructions: |
11 | "ALWAYS review Markdown content THOROUGHLY with the following criteria:
12 | - Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
13 | - Avoid gender-specific language and use the imperative form.
14 | - Monitor capitalization for emphasis. Use **bold** for prominence instead of all caps or italics.
15 | - Ensure proper nouns are capitalized in sentences.
16 | - Apply the Oxford comma.
17 | - Use proper title case for headers, buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
18 | - Use correct spelling and grammar at all times (IMPORTANT).
19 | "
20 | auto_review:
21 | enabled: true
22 | drafts: false
23 | base_branches:
24 | - "main"
25 | chat:
26 | auto_reply: true
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | pages/_app.mdx
2 | public/_redirects
3 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | parserOptions: {
3 | ecmaVersion: 'latest'
4 | },
5 | extends: [
6 | 'plugin:mdx/recommended',
7 | ],
8 | rules: {
9 | 'semi': ['error', 'never']
10 | },
11 | overrides: [
12 | {
13 | files: ['pages/**/*.mdx'],
14 | extends: [
15 | 'plugin:mdx/recommended'
16 | ],
17 | settings: {
18 | 'mdx/code-blocks': true
19 | },
20 | rules: {
21 | 'no-unused-expressions': 'off',
22 | 'semi': ['error', 'never']
23 | }
24 | }
25 | ]
26 | }
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @Nicca42 @opmxwell @opjulian @cpengilly @krofax @bradleycamacho
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # packages
2 | node_modules
3 |
4 | # os specific files
5 | .DS_Store
6 |
7 | # build artifacts
8 | .next
9 | public/robots.txt
10 | public/sitemap-0.xml
11 | public/sitemap.xml
12 |
13 | # log files
14 | *.log
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | enable-pre-post-scripts=true
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Optimism Community Hub
2 |
3 | This repo houses the Optimism Community Hub located at [community.optimism.io](https://community.optimism.io/). All documentation-related updates and new content will be tracked and maintained in this repo.
4 |
5 | ## Local Development
6 |
7 | How to [install pnpm](https://pnpm.io/installation)
8 |
9 | First, run `pnpm i` to install the dependencies.
10 |
11 | Then, run `pnpm dev` to start the development server and visit localhost:3000.
12 |
13 | ## Contributions
14 |
15 | Please see the [CONTRIBUTING.md](https://github.com/ethereum-optimism/docs/blob/main/CONTRIBUTING.md) page for specifics on how to write PRs, use the linter, run spellcheck, add dictionary terms, etc. You should also review the [Optimism Documentation Style Guide](/pages/connect/contribute/style-guide.mdx) for additional guidelines, especially if you are writing entirely brand new pages to the developer docs, as opposed to smaller edits and/or revisions.
16 |
17 | ## Project Board
18 |
19 | You can track documentation [issues](https://github.com/ethereum-optimism/community-hub/issues) or submit documentation [requests](https://github.com/ethereum-optimism/community-hub/issues/new/choose) directly from this repo.
20 |
21 | ## License
22 |
23 | This project is licensed under the MIT License.
24 |
25 |
--------------------------------------------------------------------------------
/cspell.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/packages/cspell-types/cspell.schema.json",
3 | "version": "0.2",
4 | "dictionaryDefinitions": [
5 | {
6 | "name": "words",
7 | "path": "./words.txt",
8 | "addWords": true
9 | }
10 | ],
11 | "dictionaries": [
12 | "words"
13 | ],
14 | "ignorePaths": [
15 | "node_modules",
16 | "./words.txt"
17 | ],
18 | "overrides": [
19 | {
20 | "filename": "**/*.mdx",
21 | "ignoreRegExpList": [
22 | "/`[^`]*`/",
23 | "/```[\\s\\S]*?```/",
24 | "/\\([^)]*\\)/"
25 | ]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/lychee.toml:
--------------------------------------------------------------------------------
1 | ############################# Display #############################
2 | # Use error level to only show failed requests
3 | verbose = "error"
4 | # Don't show interactive progress bar while checking links.
5 | no_progress = true
6 | # Don't show the source file of links
7 | no_show_source = false
8 |
9 | ############################# Requests ############################
10 | # URL remapping rules.
11 | remap = [
12 | # Handle resource files without adding .mdx extension
13 | "file:///pages/(.*?)\\.(pdf|png|jpg|jpeg|gif|svg|json)$ file:///./pages/$1.$2",
14 | # Handle URL-encoded anchors (%23) for mdx files
15 | "file:///([^%\\.]+)%23(.*) file:///./pages/$1.mdx#$2",
16 | # Handle regular anchors (#) for mdx files
17 | "file:///([^#\\.]+)#(.*) file:///./pages/$1.mdx#$2",
18 | # Handle regular mdx files without anchors
19 | "file:///([^#%\\.]+)$ file:///./pages/$1.mdx",
20 | ]
21 |
22 | # Base URL or website root directory to check relative URLs
23 | base = "."
24 |
25 | ############################# Exclusions ##########################
26 | # Exclude loopback IP address range and localhost from checking.
27 | exclude_loopback = true
28 | # Exclude all mail addresses from checking.
29 | exclude_mail = true
30 | # Exclude RPC URLs from checking
31 | exclude = [
32 | 'https://mainnet.optimism.io',
33 | 'https://mainnet-sequencer.optimism.io',
34 | 'https://sepolia.optimism.io',
35 | 'https://sepolia-sequencer.optimism.io',
36 | 'https://archive.org',
37 | 'https://web.archive.org',
38 | 'https://mainnet.base.org',
39 | 'https://sepolia.base.org',
40 | 'https://optimism.easscan.org',
41 | '\.(pdf|zip|png|jpg|jpeg|gif|svg|json)$'
42 | ]
43 |
44 | # Accept all status codes except 404
45 | accept = [
46 | "100..=399",
47 | "401..=403",
48 | "405..=999"
49 | ]
50 |
51 | # Use compact format for cleaner output
52 |
53 | format = "Compact"
54 |
55 | ############################# Anchors #############################
56 | # Enable checking for anchors in local files
57 | check_anchors = true
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next-sitemap.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next-sitemap').IConfig} */
2 | module.exports = {
3 | siteUrl: process.env.SITE_URL || 'https://snazzy-hamster-4e1647.netlify.app/',
4 | generateRobotsTxt: true, // (optional)
5 | generateIndexSitemap: true,
6 | // ...other options
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | import nextra from 'nextra'
2 | import remarkCodeImport from 'remark-code-import'
3 |
4 | const withNextra = nextra({
5 | theme: 'nextra-theme-docs',
6 | themeConfig: './theme.config.tsx',
7 | defaultShowCopyCode: true,
8 | mdxOptions: {
9 | remarkPlugins: [
10 | remarkCodeImport,
11 | ]
12 | }
13 | })
14 |
15 | export default {
16 | ...withNextra(),
17 | eslint: {
18 | ignoreDuringBuilds: true,
19 | },
20 | }
21 |
--------------------------------------------------------------------------------
/notes/README.md:
--------------------------------------------------------------------------------
1 | # Optimism Docs Docs
2 |
3 | The Optimism Docs Docs are internal docs to help you understand how the Optimism Docs are built and maintained.
4 |
5 | - [How the Optimism Docs Use Nextra](./nextra.md)
6 | - [How the Optimism Docs Use Remark](./remark.md)
7 | - [GitHub Actions](./actions.md)
8 |
--------------------------------------------------------------------------------
/notes/actions.md:
--------------------------------------------------------------------------------
1 | # GitHub Actions
2 |
3 | ## Linting
4 |
5 | The `lint.yml` workflow checks that all Markdown and JavaScript files conform to the linting standards we apply.
6 | Run `pnpm lint` to lint locally and run `pnpm fix` to fix issues that the linter can fix automatically.
7 | All PRs must pass this check.
8 | Also includes spellchecking via [cspell](https://cspell.org/).
9 |
10 | ## Link Checks
11 |
12 | The `links.yml` workflow checks that all links in the docs are available.
13 | Runs once per day.
14 |
15 | ## Tutorial Checks
16 |
17 | The `tutorials.yml` workflow runs several of the tutorials within these docs.
18 | Most tutorials take the form of JavaScript files that are imported within the content of the docs.
19 | Same files can be executed individually to make sure that the tutorial actually works and isn't broken for one reason or another.
20 |
--------------------------------------------------------------------------------
/notes/nextra.md:
--------------------------------------------------------------------------------
1 | # How the Optimism Docs Use Nextra
2 |
3 | The Optimism Docs use the [Nextra](https://nextra.site/) documentation framework.
4 | Nextra is essentially a combination of [Next.js](https://nextjs.org/) + [MDX](https://mdxjs.com/) and allows you to write React components that can be used within Markdown pages.
5 | Nextra documentation is decent and can explain the basics of how to do most of the things you might want to do.
6 | This page documents all of the things that we do that are currently not made obvious by Nextra's docs.
7 |
8 | ## Remark Plugins
9 |
10 | Nextra uses [Remark](https://github.com/remarkjs/remark) as a markdown processor.
11 | Remark plugins can be injected into Nextra by modifying the `mdxOptions` object inside of [`next.config.mjs`](/next.config.mjs).
12 |
13 | ### Custom Plugins
14 |
15 | #### remarkCodeImport
16 |
17 | Rule is modified via [patch](/patches/remark-code-import@1.2.0.patch) to require that all code imports include a md5 content hash of the imported content.
18 | Requiring this hash means that changes to the underlying content must also come with corresponding changes to the relevant imports and imports cannot silently break.
19 |
--------------------------------------------------------------------------------
/notes/remark.md:
--------------------------------------------------------------------------------
1 | # How the Optimism Docs Use Remark
2 |
3 | The Optimism Docs use [Nextra](https://nextra.site) as a documentation framework which uses [Remark](https://github.com/remarkjs/remark) as a markdown processor under the hood.
4 | This repository also uses [ESLint](https://eslint.org) in combination with [`eslint-plugin-mdx`](https://www.npmjs.com/package/eslint-plugin-mdx) as this plugin also uses Remark under the hood.
5 | Remark is a flexible Markdown processor with a [vibrant plugin ecosystem](https://github.com/remarkjs/remark/blob/main/doc/plugins.md#list-of-plugins).
6 |
7 | ## Linting
8 |
9 | ### Adding Rules
10 |
11 | To add a linting rule, simply install your desired linting rule via `pnpm` and add the rule to the [`.remarkrc.mjs`](/.remarkrc.mjs) configuration file at the root of this repository.
12 | You can find a list of rules maintained by the Remark team on the [`remark-lint`](https://github.com/remarkjs/remark-lint#rules) repository.
13 | If you need to write your own custom plugin, place the plugin inside of [`utils/plugins/remark`](/utils/plugins/remark/)
14 |
15 | ### Custom Rules
16 |
17 | #### remarkLintNoBlockedCharacters
18 |
19 | Custom rule to prevent the use of certain characters like zero-width spaces or smartquotes.
20 |
21 | #### remarkLintFrontmatterSchema
22 |
23 | Rule is modified via [patch](/patches/remark-lint-frontmatter-schema@3.15.4.patch) to block MDX files from including no frontmatter at all.
24 | Pending [this issue](https://github.com/JulianCataldo/remark-lint-frontmatter-schema/issues/28) on GitHub.
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "op-docs",
3 | "version": "0.0.1",
4 | "description": "Optimism Docs",
5 | "packageManager": "pnpm@9.1.0",
6 | "scripts": {
7 | "lint": "eslint . --ext mdx --max-warnings 0 && pnpm spellcheck:lint",
8 | "fix": "eslint . --ext mdx --fix && pnpm spellcheck:fix",
9 | "spellcheck:lint": "cspell lint \"**/*.mdx\"",
10 | "spellcheck:fix": "cspell --words-only --unique \"**/*.mdx\" | sort --ignore-case | uniq > words.txt",
11 | "linkcheck": "lychee --config ./lychee.toml --quiet \"./pages\"",
12 | "dev": "next dev",
13 | "build": "next build",
14 | "start": "next start",
15 | "postbuild": "next-sitemap"
16 | },
17 | "dependencies": {
18 | "@eth-optimism/contracts-ts": "^0.17.0",
19 | "@eth-optimism/tokenlist": "^9.0.9",
20 | "@feelback/react": "^0.3.4",
21 | "next": "14.1.1",
22 | "next-sitemap": "^4.2.3",
23 | "nextra": "2.13.2",
24 | "nextra-theme-docs": "2.13.2",
25 | "react": "^18.2.0",
26 | "react-dom": "^18.2.0"
27 | },
28 | "devDependencies": {
29 | "@double-great/remark-lint-alt-text": "^1.0.0",
30 | "@eth-optimism/core-utils": "^0.13.1",
31 | "@eth-optimism/sdk": "^3.1.6",
32 | "@types/node": "18.11.10",
33 | "cspell": "^8.1.3",
34 | "eslint": "^8.53.0",
35 | "eslint-plugin-mdx": "^2.2.0",
36 | "ethers": "^5",
37 | "remark": "^15.0.1",
38 | "remark-code-import": "^1.2.0",
39 | "remark-frontmatter": "^5.0.0",
40 | "remark-gfm": "^3.0.1",
41 | "remark-lint-frontmatter-schema": "^3.15.4",
42 | "remark-lint-heading-style": "^3.1.2",
43 | "remark-lint-list-item-indent": "^3.1.2",
44 | "remark-lint-table-cell-padding": "^4.1.3",
45 | "remark-lint-table-pipe-alignment": "^3.1.3",
46 | "remark-lint-table-pipes": "^4.1.2",
47 | "remark-lint-unordered-list-marker-style": "^3.1.2",
48 | "remark-preset-lint-consistent": "^5.1.2",
49 | "remark-preset-lint-recommended": "^6.1.3",
50 | "typescript": "^5.2.2",
51 | "unified-lint-rule": "^2.1.2",
52 | "unist-util-visit": "^5.0.0"
53 | },
54 | "pnpm": {
55 | "patchedDependencies": {
56 | "remark-lint-frontmatter-schema@3.15.4": "patches/remark-lint-frontmatter-schema@3.15.4.patch",
57 | "remark-code-import@1.2.0": "patches/remark-code-import@1.2.0.patch",
58 | "nextra@2.13.2": "patches/nextra@2.13.2.patch"
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/pages/404.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Page Not Found
3 | lang: en-US
4 | description: 404 page not found and directs users to submit an git issue.
5 | ---
6 |
7 | # Page Not Found
8 |
9 | 
10 |
11 | ## Let's find our way back. Visit the [homepage](index) to get started.
12 |
13 | ### Please help by [submitting an issue](https://github.com/ethereum-optimism/community-hub/issues/new/choose) for the broken link. ❤️
14 |
15 |
--------------------------------------------------------------------------------
/pages/500.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Internal Server Error
3 | lang: en-US
4 | description: 500 internal server error and directs users to submit an git issue.
5 | ---
6 |
7 | # Unexpected Error
8 |
9 | 
10 |
11 | ## Something isn't quite right. Let's start again on the [homepage](index).
12 |
13 | ### Please help by [submitting an issue](https://github.com/ethereum-optimism/community-hub/issues/new/choose) about what led you to this page. ❤️
14 |
--------------------------------------------------------------------------------
/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import '../styles/global.css'
2 |
3 | import { useEffect } from 'react'
4 | import { useRouter } from 'next/router'
5 | import * as gtag from '../utils/gtag'
6 |
7 | export default function App({ Component, pageProps }) {
8 | const router = useRouter()
9 | useEffect(() => {
10 | const handleRouteChange = (url) => {
11 | gtag.pageview(url)
12 | }
13 | router.events.on('routeChangeComplete', handleRouteChange)
14 | return () => {
15 | router.events.off('routeChangeComplete', handleRouteChange)
16 | }
17 | }, [router.events])
18 |
19 | return
20 | }
21 |
--------------------------------------------------------------------------------
/pages/_document.tsx:
--------------------------------------------------------------------------------
1 | import Document, { Html, Head, Main, NextScript } from 'next/document'
2 |
3 | import { GA_TRACKING_ID } from '../utils/gtag'
4 |
5 | export default class MyDocument extends Document {
6 | render() {
7 | return (
8 |
9 |
10 | {/* Global Site Tag (gtag.js) - Google Analytics */}
11 |
15 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | )
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/pages/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": {
3 | "title": "Getting Started",
4 | "display": "hidden",
5 | "theme": {
6 | "breadcrumb": false,
7 | "footer": true,
8 | "sidebar": true,
9 | "toc": true,
10 | "pagination": false
11 | }
12 | },
13 | "404": {
14 | "title": "404",
15 | "display": "hidden",
16 | "theme": {
17 | "layout": "full",
18 | "breadcrumb": false,
19 | "footer": true,
20 | "sidebar": true,
21 | "toc": false,
22 | "pagination": false
23 | }
24 | },
25 | "500": {
26 | "title": "500",
27 | "display": "hidden",
28 | "theme": {
29 | "layout": "full",
30 | "breadcrumb": false,
31 | "footer": true,
32 | "sidebar": true,
33 | "toc": false,
34 | "pagination": false
35 | }
36 | },
37 |
38 | "welcome": {
39 | "title": "Welcome",
40 | "type": "page"
41 | },
42 | "grant": {
43 | "title": "Get a Grant",
44 | "type": "page"
45 | },
46 | "token-house": {
47 | "title": "Token House",
48 | "type": "page"
49 | },
50 | "op-token": {
51 | "title": "OP Token",
52 | "type": "page"
53 | },
54 | "citizens-house": {
55 | "title": "Citizens House",
56 | "type": "page"
57 | },
58 | "research": {
59 | "title": "Research",
60 | "type": "page"
61 | },
62 | "identity": {
63 | "title": "Identity",
64 | "type": "page"
65 | },
66 | "contribute": {
67 | "title": "Contribute",
68 | "type": "page"
69 | },
70 |
71 | "+++ CONNECT": {
72 | "title": "",
73 | "type": "separator"
74 | },
75 | "--- CONNECT": {
76 | "title": "Connect",
77 | "type": "separator"
78 | },
79 | "connect": {
80 | "title": "Connect",
81 | "display": "children"
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/pages/citizens-house/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "citizen-house-overview": "Overview",
3 | "--- RETRO FUNDING": {
4 | "title": "RETRO FUNDING",
5 | "type": "separator"
6 | },
7 | "how-retro-funding-works": "How Retro Funding Works",
8 | "rounds": "Past Rounds",
9 | "--- CITIZENS": {
10 | "title": "CITIZENS",
11 | "type": "separator"
12 | },
13 | "citizenship-selection": "Citizenship Selection",
14 | "experimentation-with-citizenship": "Experimentation with Citizenship"
15 | }
16 |
--------------------------------------------------------------------------------
/pages/citizens-house/citizen-house-overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Citizens House Overview
3 | lang: en-US
4 | description: The Citizens' House is a large-scale experiment in non-plutocratic governance, meaning one person = one vote. The Citizens’ House works alongside the Token House to govern the Optimism Collective, and is responsible for the retroactive funding of public goods.
5 | ---
6 |
7 | # Citizens House
8 |
9 | The Citizens' House is a large-scale experiment in non-plutocratic governance, meaning one person = one vote. The Citizens’ House works alongside the Token House to govern the Optimism Collective, and is responsible for the retroactive funding of public goods.
10 |
11 | The goals of the Citizens' House are to:
12 | * Reduce concentration of power
13 | * Safeguard against capture of Token House
14 | * Allocate resources according to the long-term benefit to the Collective
15 |
16 | ## Responsibilities
17 | In its current phase, the Citizens' House is responsible for voting on the allocation of Retroactive Public Goods Funding (Retro Funding), and has the power to veto protocol upgrade proposals made by the Token House.
18 |
19 | The Citizens' House is in an initial bootstrapping phase, and will take on progressively more governance responsibilities over time, such as determining scope and round sizing. Holding a voting badge in this initial stage does not guarantee permanent participation in the Citizens’ House and future iterations of Retro Funding.
20 |
21 | ## Moving Forward
22 |
23 | In future phases, the Citizens’ House may gain additional governance powers. For example, in addition to voting on Retro Funding and protocol upgrade vetoes, the Citizens’ House may work alongside the Token House to govern allocation of surplus protocol revenue and collaborate on criteria for participation in the Citizens’ House. You can [read more about this transition here](https://optimism.mirror.xyz/PLrAQgE1EGRo7GRrFoztplFChnUZda4DFGW3dkQayxY).
24 |
--------------------------------------------------------------------------------
/pages/citizens-house/citizen-selection-glossary:
--------------------------------------------------------------------------------
1 | ---
2 | title: Citizen Selection Glossary
3 | lang: en-US
4 | description:
5 | ---
6 |
7 | # Web of Trust
8 | This selection method was used to create the early Badgeholder groups for Retro Rounds 1, 2, and 3. In the "Web of Trust" approach, a small, trusted group is initially invited to participate. Each member of this group is then asked to invite one new person of their choice. This process causes the group size to double with each round of invitations. As the group grows, it is likely to maintain strong social connections and remain relatively homogeneous.
9 |
10 | # Proof of Work
11 | This method involves selecting participants based on their contributions of value to the Collective. The "value" can be measured in various ways, and there may be different thresholds for the amount of value required. The term "Proof of Work" is borrowed from a consensus mechanism used in blockchains, where it is costly for participants to attack the system. Similarly, in this application, it would be costly for individuals to undermine the governance system, as they must contribute significant value to the Collective to gain Citizenship.
12 |
13 | # Random Selection
14 | This method involves defining a group of potential participants and then randomly choosing a specified number of individuals from that group. Often referred to as "random sampling," this approach is effective for obtaining a representative sample from a larger population. In contrast to self-selection, which often results in a biased sample, random selection helps ensure that the sample accurately reflects the broader population. The key subjective aspect of random selection is deciding which population to include in the sample.
15 |
16 | # Self-Selection
17 | This method allows individuals to choose to participate on their own. It can be used alongside a defined population from which individuals can opt in. Typically, self-selection results in a group of participants who are highly motivated to be involved. However, if there are perverse incentives present, this method might attract individuals whose interests don't align with the system's needs. Moreover, when self-selection is combined with a specific population definition, it often leads to a biased sample rather than a representative one.
18 |
--------------------------------------------------------------------------------
/pages/citizens-house/citizenship-selection.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Citizenship Selection
3 | lang: en-US
4 | description: The Citizens’ House relies on the concept of governance by individuals with one vote each. Citizens are meant to represent individual human stakeholders of the Collective':' builders, users, and community members who are aligned with the project’s values and are interested in the long-term benefit of the Collective. This is complementary to the token-weighted voting system used in the Token House.
5 | ---
6 |
7 | # Citizenship Selection
8 |
9 | The Citizens’ House relies on the concept of governance by individuals with one vote each. Citizens are meant to represent individual human stakeholders of the Collective: builders, users, and community members who are aligned with the project’s values and are interested in the long-term benefit of the Collective. This is complementary to the token-weighted voting system used in the Token House.
10 |
11 | ## Bootstrapping Citizenship - an Initial Set of Citizens
12 |
13 | In the initial stage of bootstrapping the Citizens' House, participants receive temporary badges to vote in Retro Funding rounds. The early participants were selected via a 'Web of Trust', whereby [known individuals were invited](https://optimism.mirror.xyz/wqk1Yeyn2OhV9paDzbRXvQ0m0JYDu2npbSkMClwk1rY) by The Optimism Foundation, The Token House, [past Retro Funding award winners](https://gov.optimism.io/t/retropgf-3-voting-badge-distribution/6557), and existing Citizens.
14 |
15 | - Round 1 had 24 participants
16 | - Round 2 had 71 participants, invited by Round 1 citizens
17 | - Round 3 had 146 participants
18 |
19 | In future stages, the Token House and Citizens’ House together will collaborate on ongoing criteria for participation in the Citizens’ House. This means the criteria for Citizenship will evolve over time. Holding a voting badge does not guarantee voting rights in future rounds of Retro Funding, as eventually membership will be determined by governance and may change.
20 |
21 | ## What is the difference between Citizens and Guest Voters?
22 |
23 | - Citizens: participants in protocol upgrade proposal vetoes, other specific mission approval proposals and all Retro Funding rounds.
24 | - Guest voters: temporary one-time voting participants for a specific Retro Funding round. The purpose of introducing guest voters is to increase the reversibility of experiments.
25 |
26 | ## How will Citizenship selection work?
27 |
28 | Requirements for selection and continued citizenship are still in development, and are expected to be clarified in Season 8.
29 | Citizenship is not a guaranteed permanent right.
30 |
31 | The goal of the Citizens' House is to:
32 |
33 | - Reduce concentration of power
34 | - Safeguard against capture of Token House
35 | - Allocate resources according to the long-term benefit to the Collective
36 |
37 | Citizenship selection will be based on growing knowledge about the type of Citizenry that performs well on these goals. Ahead of making any permanent decisions on Citizenship selection, the Collective must gain insights on the performance of Citizens' House and form hypotheses on the types of Citizens that are likely to contribute to the Citizens' House achieving its goals.
38 |
39 | Changes to Citizenship are likely to occur hand-in-hand with changes to Retro Funding, as the nature of the voting system is interdependent with the size and character of the Citizenry. In the current phase, the Collective's primary focus is to learn as much as possible about both Retro Funding design and Citizenship selection design and the interaction between the two.
40 |
41 | ## Experimentation with Citizenship
42 |
43 | The main way the Collective is learning about Retro Funding and Citizenship selection design is through experimentation.
44 |
45 | 
46 |
47 | While Badgeholders for Retro Funding Rounds 1-4 were selected via the Web of Trust method, future rounds may see the participation of Guest Voters, selected to participate temporarily via different selection mechanisms.
48 |
49 | After each Retro Funding Round, learnings are open-sourced for the benefit of the Optimism Collective and wider community. Growing collective knowledge is an essential element of supporting future decision-making around these topics.
50 |
51 | You can read more about our citizenship learnings [here](https://gov.optimism.io/t/citizenship-learnings-2024/9563).
52 |
--------------------------------------------------------------------------------
/pages/citizens-house/how-retro-funding-works.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: How Retro Funding Works
3 | lang: en-US
4 | description: Retroactive Public Goods Funding (Retro Funding) is based on the idea that it’s easier to agree on what was useful in the past than what might be useful in the future. This is a series of experiments where members of the Citizens’ House allocate surplus protocol revenue or portions of the Retro Funding token allocation to projects they deem have provided positive impact to the Optimism Collective and across the Superchain. This is core to Optimism’s value of `impact=profit:` the idea that positive impact to the collective should be rewarded proportionally with profit to the individual.
5 | ---
6 |
7 | # How Retro Funding Works
8 |
9 | Retroactive Public Goods Funding (Retro Funding) is based on the idea that it’s easier to agree on what was useful in the past than what might be useful in the future. This is a series of experiments where members of the Citizens’ House allocate surplus protocol revenue or portions of the Retro Funding token allocation to projects they deem have provided positive impact to the Optimism Collective and across the Superchain. This is core to Optimism’s value of impact=profit: the idea that positive impact to the collective should be rewarded proportionally with profit to the individual.
10 |
11 | These rewards create strong incentives for people to build public goods that benefit the Optimism Collective. The aggregate effect is an ecosystem that is easier to build on, learn about, and connect to, in turn driving application usage and generating more demand for blockspace. By funding public goods sustainably, the Collective can create a rich ecosystem and a better economy.
12 |
13 | 
14 |
15 | Retro Funding also provides possible exit liquidity for public goods projects, which opens up a market for early investment in those projects. This means builders can:
16 |
17 | - Be rewarded for their positive contributions without generating direct revenue
18 | - Raise capital to bootstrap based on the early potential and promise of their project
19 |
20 | # A Commitment to Experimentation
21 |
22 | 
23 |
24 | Retro Funding is a long term bet to build the future Optimists want to see. The Collective will conduct regular rounds of Retro Funding, each different from the last. This is an emergent process that will take community participation to grow and prune.
25 |
26 | - Retro Funding round 1 took place at the end of 2021 and allocated $1 million across 58 projects.
27 | - Retro Funding round 2 took place in Q1 2023 and allocated 10m OP tokens across 195 projects.
28 | - Retro Funding round 3 took place in Q4 2023 and allocated 30m OP tokens across 501 projects.
29 | - Retro Funding round 4 will take place in Q2/3 2024 and will reward onchain builders who contribute to the success of Optimism.
30 | - Sign up for future rounds at [retrofunding.optimism.io](https://retrofunding.optimism.io/).
31 |
32 | # Experimentation Framework
33 |
34 | Retro Funding has three core components, each with substantial surface area for experimentation.
35 |
36 | - Impact scoping: what should the Collective fund? How is it defined and decided on?
37 | - Impact scoring: how does the Citizens’ House evaluate impact? What units, process, or tools do we use?
38 | - Impact settlement: how does voting work?
39 |
40 | For the first several rounds of Retro Funding, the Optimism Foundation will decide on scope and voting mechanics with input from the community. Eventually the set of variables around what to fund, how much to fund, and how to vote will be up to the Citizens’ House, with checks and balances from the Token House. You can read more about the [Path to Open Metagovernance here](https://gov.optimism.io/t/the-path-to-open-metagovernance/).
41 |
42 | Over time, the Collective aims to expand the scope of Retro Funding to support the production of public goods beyond the immediate Optimism ecosystem. To get there, we must refine the tools and processes used for Retro Funding based on regular experimentation.
43 |
44 | # Past Rounds
45 |
46 | - [RetroPGF Round 3](/citizens-house/rounds/retropgf-3)
47 | - [RetroPGF Round 2](/citizens-house/rounds/retropgf-2)
48 | - [RetroPGF Round 1](/citizens-house/rounds/retropgf-1)
49 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "retropgf-1": "RetroPGF Round 1",
3 | "retropgf-2": "RetroPGF Round 2",
4 | "retropgf-3": "RetroPGF Round 3",
5 | "retropgf-4": "RetroPGF Round 4",
6 | "retropgf-5": "RetroPGF Round 5",
7 | "retropgf-6": "RetroPGF Round 6"
8 | }
9 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/retropgf-1.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: RetroPGF Round 1
3 | lang: en-US
4 | description: Retro Funding 1 allocated $1M to fund projects that have provided value to the Optimistic Ethereum ecosystem.
5 | ---
6 |
7 | # Retro Funding Round 1
8 |
9 | The Optimism Collective’s first round of Retroactive Public Goods Funding (Retro Funding) took place in Q4 of 2021.
10 | This round was the first Retro Funding experiment of the collective and was [announced](https://medium.com/ethereum-optimism/retropgf-experiment-1-1-million-dollars-for-public-goods-f7e455cbdca) in the months following the [initial blog post on Retroactive Public Goods Funding](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c).
11 | Retro Funding 1 allocated $1M to **fund projects that have provided value to the Optimistic Ethereum ecosystem.**
12 |
13 | ## Results
14 | In the first round of Retro Funding, 76 projects were nominated, and 58 were awarded funding by the badgeholders!
15 | The median funding received by a project in Retro Funding 1 was $14,670, while the top 10% of projects received more than $36,919.
16 |
17 | - You can find a sheet with all projects and their funding allocations [**here**](https://github.com/ethereum-optimism/op-analytics/blob/main/rpgf/rpgf1/results/rpgf1_results.csv).
18 | - You can find Vitalik's review of the round [**here**](https://vitalik.eth.limo/general/2021/11/16/retro1.html)
19 |
20 | ## Process and timeline overview
21 | 1. Badgeholder selection - In RetroPGF Round 1, 24 badgeholders, made up of 8 Optimists and 16 Ethereum community members, were selected to vote on distributing retrofunding to nominated projects.
22 | 2. Nominations (Oct 5th - Oct 21st) - anyone could [nominate a project via a form submission](https://docs.google.com/forms/d/e/1FAIpQLSdSF_Om4JfhQAjdDOHnjfbRJfJg1F-EY_I_IR0g-CDaa9FqyQ/viewform?vc=0&c=0&w=1&flr=0) by providing a project name, project lead name, project lead e-mail and impact description.
23 | 3. Voting (Oct 24th - Nov 1st) - Badgeholders were provided with a [badgeholder manual](https://www.notion.so/Public-Badge-Holder-Manual-d05c3695ef684d1fb62ef38690fb3ff7) and asked to evaluate and vote on nominated projects via quadraticvote.co's interface (since round 1 support for this site has been discontinued).
24 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/retropgf-2.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: RetroPGF Round 2
3 | lang: en-US
4 | description: RetroPGF 2 allocated 10m OP tokens to fund public goods that support development and usage of the OP Stack.
5 | ---
6 |
7 | # Retro Funding Round 2
8 |
9 | The Optimism Collective’s second round of Retroactive Public Goods Funding (Retro Funding) took place in Q1 of 2023.
10 | RetroPGF 2 allocated 10m OP tokens to **fund public goods that support development and usage of the OP Stack.**
11 |
12 | Optimism’s vision is to build a global system where positive impact to the collective is rewarded by profit to the individual.
13 | Retro Funding is an experimental mechanism to realize this goal of **“impact = profit”**.
14 |
15 | By funding public goods sustainably, the Collective can create a rich ecosystem and a better economy ✨
16 |
17 | ## Results
18 | In this second round of Retro Funding, 195 people and projects were nominated, and all 195 were awarded funding by the badgeholders! While going above and beyond in assessing project impact badgeholders allocated their votes among 40 different projects on average. The median OP received by a project for RetroPGF 2 was 22,825, while the top 10% of projects received more than 140k OP.
19 |
20 | - You can find the write up on the results of round 2 [**here**](https://optimism.mirror.xyz/Upn_LtV2-3SviXgX_PE_LyA7YI00jQyoM1yf55ltvvI)
21 | - You can find a sheet with all projects and their OP allocation [**here**](https://github.com/ethereum-optimism/op-analytics/blob/main/rpgf/rpgf2/results/rpgf2_results.csv).
22 |
23 | ## Process and timeline overview
24 | 1. Badgeholder selection - badgeholders have the power to distribute OP tokens to projects. They’re instrumental in running an effective Retro Funding round. For RetroPGF Round 2, badgeholders were selected across four different criteria.
25 | 1. 14 badgeholders were selected based on their participation as badgeholders in [round one of RetroPGF](https://vitalik.eth.limo/general/2021/11/16/retro1.html)
26 | 2. 21 badgeholders were selected by the Optimism Foundation
27 | 3. 10 badgeholders were [elected by Optimism’s Token House](https://snapshot.org/#/opcollective.eth/proposal/0x22d4c3ab56832de58c1774d1a0aeb61ba6dde8b16c0f8382f85d8935f3ee1f11)
28 | 4. 29 badge holders were nominated by badgeholders from the three categories above
29 | 2. Nominations (Jan 17 - Jan 31st) - anyone could [nominate a project on the forum](https://gov.optimism.io/t/nominations-for-retropgf2/4636) by providing a name, impact description and link to Github/Twitter
30 | 3. Project profile creation (Feb 7th - Feb 21st) - Projects had to [create a profile](https://app.optimism.io/retropgf-manager) where they were asked for general information, as well as a description of their project and its impact. Information provided by Projects can be viewed on the [Retro Funding discovery page](https://app.optimism.io/retropgf-discovery).
31 | 4. Voting (Mar 7th - Mar 21st) - Badgeholders were provided with a [badgeholder manual](https://www.notion.so/Optimism-RetroPGF-2-Badgeholder-Manual-11ef6cd63c254258a32246289f45925c) and asked to evaluate and vote on nominated projects via a voting form. (Mar 7th - Mar 21st)
32 |
33 |
34 | ## Learnings and Reflections
35 | You can find an extensive write-up of the learnings and reflections of round 2 [here](https://optimism.mirror.xyz/7v1DehEY3dpRcYFhqWrVNc9Qj94H2L976LKlWH1FX-8). These learnings will inform the design and execution of RetroPGF round 3.
36 |
37 |
38 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/retropgf-4.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: RetroPGF Round 4
3 | lang: en-US
4 | description: The Optimism Collective’s fourth round of Retroactive Public Goods Funding (Retro Funding) took place in the Summer of 2024. Retro Funding 4 allocated 10m OP tokens to **reward onchain builders who have deployed contracts to the Superchain and contributed to the success of Optimism.
5 | ---
6 |
7 | # Retro Funding Round 4
8 |
9 | The Optimism Collective’s fourth round of Retroactive Public Goods Funding (Retro Funding) took place in the Summer of 2024. Retro Funding 4 allocated 10m OP tokens to **reward onchain builders who have deployed contracts to the Superchain and contributed to the success of Optimism.**
10 |
11 | You can find a full overview of Retro Funding Round 4: Onchain Builders [here](https://gov.optimism.io/t/retro-funding-4-onchain-builders-round-details/).
12 |
13 | ### Process Overview
14 | - Sign up: May 23rd - June 6th
15 | - Application Review Process: June 6th - June 18th
16 | - Voting: June 27th - July 11th
17 | - Results & Grant delivery: July 16th
18 |
19 | ## Results
20 | 👉 You can view the [Retro Funding 4 Results page](https://atlas.optimism.io/round/results) announcing the Retro Funding Round 4 recipients, and explore the [results calculation](https://github.com/ethereum-optimism/op-analytics/tree/main/rpgf/rpgf4).
21 |
22 | Retro Funding recipients must complete a KYC process with the Optimism Foundation. If you're a recipient, please direct questions or problems with the KYC & grant delivery process to retrofunding@optimism.io.
23 |
24 | ## Voting
25 | 👉 Voting was live from June 27th - July 11th.
26 |
27 | The thesis behind Retro Funding 4 is that by leveraging quantitative metrics, badgeholders are able to more accurately express their preferences for the types of impact they want to reward, as well as make more accurate judgements on the impact delivered by individual projects. This means during round 4, badgeholders did **not** vote on individual projects.
28 | 1. **Vote by selecting and weighting metrics**: Badgeholders voted by selecting and assigning weights to various impact metrics. Each metric comes with a description and a link explaining its calculation.
29 | 2. **Votes are public**: Since badgeholders voted on metrics instead of projects, concerns about coercion and social pressure are reduced, which is why votes will be public following the voting process. The content of badgeholder's ballots, impact metrics and their weights as well as OS multiplier, were made public following the voting period.
30 | 3. **Results calculation via Median**: Results were calculated based on the median of the OP allocations assigned by badgeholders. Results were normalized to match the round size.
31 | 4. **Max/Min allocation per project**: The maximum badgeholders could allocate to a project, as a result of the weighted metrics, is 500k OP. If a project meets that limit, the excess OP are proportionally allocated to remaining projects. Following results calculation, all projects who receive less than 1,000 OP will not be eligible to receive rewards. This barrier exists due to the operational lift of distributing grants. The OP allocation of these projects were proportionally allocated to remaining projects.
32 |
33 | The voting app for Round 4 can be found [here](https://op-rf4-voting-ui.vercel.app/).
34 |
35 | Badgeholders can find all the information relevant for voting in the [Badgeholder Manual](https://gov.optimism.io/t/retro-funding-4-badgeholder-manual)
36 |
37 | ## Project Applications
38 |
39 | 👉 **Projects are able to apply for Retro Funding rounds via [retrofunding.optimism.io](https://retrofunding.optimism.io/)**
40 |
41 | All projects for Retro Funding Round 4 had to create an Optimist Profile, which serves as builder's persistent identity across the Collective. You can read more about this [here](https://gov.optimism.io/t/retro-funding-4-application-process/8013#sign-in-with-farcaster-4).
42 |
43 | You can learn more about future Retro Funding rounds [here](https://atlas.optimism.io/rounds). If you're looking for inspiration on what you could contribute to the Optimism Collective, check out [contribute.optimism.io](https://contribute.optimism.io/).
44 |
45 | ## Badgeholders
46 | In Retro Funding 4, 108 out of 133 badgeholders submitted their ballots.
47 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/retropgf-5.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: RetroPGF Round 5
3 | lang: en-US
4 | description: The Optimism Collective’s fifth round of Retroactive Public Goods Funding (Retro Funding) took place in Q3 of 2024. Retro Funding 5 allocated 8m OP tokens to reward contributors to the OP Stack, including core Ethereum infrastructure that supports or underpins the OP Stack, advancements in OP Stack research and development, and tooling which supports its accessibility and usability.
5 | ---
6 |
7 | # **Retro Funding Round 5**
8 |
9 | The Optimism Collective’s fifth round of Retroactive Public Goods Funding (Retro Funding) took place in Q3 of 2024. Retro Funding 5 allocated 8m OP tokens to reward contributors to the OP Stack, including core Ethereum infrastructure that supports or underpins the OP Stack, advancements in OP Stack research and development, and tooling which supports its accessibility and usability.
10 |
11 | You can find a full overview of Retro Funding Round 5: OP Stack [here](https://gov.optimism.io/t/retro-funding-5-op-stack-round-details/8612).
12 |
13 | **Process Overview**
14 |
15 | - Sign up: Aug 22nd - Sept 5th
16 | - Application Review Process: Sept 6th - Sept 20th
17 | - Voting: September 30th - Oct 14th
18 | - Results & Grant delivery: October 21st
19 |
20 | ## **Results**
21 |
22 | 👉 You can view the [Retro Funding 5 Results page](https://retrofunding.optimism.io/round/results/5) [](https://retrofunding.optimism.io/round/results) announcing the Retro Funding Round 4 recipients, and explore the [results calculation](https://github.com/ethereum-optimism/op-analytics/tree/main/rpgf/rpgf5).
23 |
24 | Retro Funding recipients must complete a KYC process with the Optimism Foundation. If you're a recipient, please direct questions or problems with the KYC & grant delivery process to retrofunding@optimism.io.
25 |
26 | ## **Voting**
27 |
28 | 👉 Voting was live from September 30th - October 14th.
29 |
30 | The thesis behind Retro Funding 5 was that guest voters with subject-matter expertise would be able to better understand and vote on a given project’s impact.
31 |
32 | This round sorted Badgeholders into smaller groups dedicated to evaluating a specific set of applications. A number of guest voters with expertise relating to the OP Stack were selected, to test if there are significant differences in how experts versus non-experts vote to allocate rewards to OP Stack contributions. You can find out more about the round's governance design [here](https://gov.optimism.io/t/retro-funding-5-expert-voting-experiment/8613).
33 |
34 | Process Overview:
35 |
36 | 1. Subgroups were established: voters were randomly assigned into subgroups.
37 | 2. Category allocation: All voters voted on the allocation of OP among the three categories of the round’s scope. These votes are public.
38 | 3. Impact Evaluation: Each voter voted on the amount of retro rewards all projects within their assigned category should receive. Votes were private to prevent intimidation and coercion, promote unbiased decision-making and protect against bribery.
39 |
40 | Badgeholders can find all the information relevant for voting in the [Badgeholder Manual.](https://gov.optimism.io/t/retro-funding-5-badgeholder-manual/8877)
41 |
42 | ## **Project Applications**
43 |
44 | 👉 Projects are able to apply for Retro Funding rounds via [retrofunding.optimism.io.](https://retrofunding.optimism.io/)
45 |
46 | All projects for Retro Funding Round 5 had to create an Optimist Profile, which serves as a builder's persistent identity across the Collective. You can read more about this [here](https://gov.optimism.io/t/retro-funding-5-grants-funding-within-the-application-process/8742).
47 |
48 | You can learn more about future Retro Funding rounds [here.](https://retrofunding.optimism.io/rounds)
49 |
50 | If you're looking for inspiration on what you could contribute to the Optimism Collective, check out [contribute.optimism.io](https://contribute.optimism.io/).
51 |
52 | ## **Badgeholders**
53 |
54 | Retro Funding 5 had 111 voters, of which 84 were normal Citizens and 27 were Guests. All 27 guest voters were experts, whereas 29 out of the 84 Citizens were classified as experts (and 55 were non-experts).
55 |
--------------------------------------------------------------------------------
/pages/citizens-house/rounds/retropgf-6.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: RetroPGF Round 6
3 | lang: en-US
4 | description: The Optimism Collective’s sixth round of Retroactive Public Goods Funding (Retro Funding) took place in the Q4 of 2024. Retro Funding 6 allocated 2.4m OP tokens to reward contributions to Optimism Governance, including governance infrastructure & tooling, governance analytics, and governance leadership.
5 | ---
6 |
7 | # **Retro Funding Round 6**
8 |
9 | The Optimism Collective’s sixth round of Retroactive Public Goods Funding (Retro Funding) took place in the Q4 of 2024. Retro Funding 6 allocated 2.4m OP tokens to reward contributions to Optimism Governance, including governance infrastructure & tooling, governance analytics, and governance leadership.
10 |
11 | You can find a full overview of Retro Funding Round 6: Governance [here](https://gov.optimism.io/t/retro-funding-6-governance-round-details/8870).
12 |
13 | ### **Process Overview**
14 |
15 | - Sign up: Oct 1st - Oct 14th
16 | - Application Review Process: Oct 14th - Oct 28th
17 | - Voting: Oct 31st - Nov 13th 18:00 UTC
18 | - Results: Dec 12
19 |
20 | ## **Results**
21 |
22 | 👉 You can view the Retro Funding results [here](https://retrofunding.optimism.io/round/results/6) and explore the results calculation [here](https://github.com/ethereum-optimism/op-analytics/tree/main/rpgf/rpgf6).
23 |
24 | Retro Funding recipients must complete a KYC process with the Optimism Foundation. If you're a recipient, please direct questions or problems with the KYC & grant delivery process to retrofunding@optimism.io.
25 |
26 | ## **Voting**
27 |
28 | 👉 Voting was live from Oct 31st - Nov 13th.
29 |
30 | Retro Funding 6 iterated on Round 5’s design by selecting random guest voters to see their effect on resource allocation decisions. You can learn more about the Retro Funding 6 Guest voter selection experiment [here](https://gov.optimism.io/t/retro-funding-6-announcing-guest-voter-participation/8816).
31 |
32 | Retro Funding 6 had approximately 76 Guest Voters who were invited to vote alongside Citizens.
33 |
34 | Citizens were able to review the aggregated voting results of Guest Voters and cast a [final vote](https://snapshot.box/#/s:citizenshouse.eth/proposal/0x948305b24d9b91732a2590211e08529d130ad9bb89c2cb0c55a26b0a67b5e22a) to integrate the votes of Guests at a 1:1 ratio.
35 |
36 | Badgeholders can find all the information relevant for voting in the [Badgeholder Manual.](https://gov.optimism.io/t/retro-funding-6-badgeholder-manual/9109)
37 |
38 | **Project Applications**
39 |
40 | 👉 Projects are able to apply for Retro Funding rounds via [retrofunding.optimism.io.](https://retrofunding.optimism.io/)
41 |
42 | All projects for Retro Funding Round 6 had to create an Optimist Profile, which serves as a builder's persistent identity across the Collective. You can read more about this [here](https://gov.optimism.io/t/retro-funding-6-application-review-process/8977).
43 |
44 | You can learn more about future Retro Funding rounds [here](https://retrofunding.optimism.io/rounds). If you're looking for inspiration on what you could contribute to the Optimism Collective, check out [contribute.optimism.io](https://contribute.optimism.io/).
45 |
46 | ## **Badgeholders**
47 |
48 | In Retro Funding 6, 78 out of 102 Citizens submitted their ballots and 60 out of 76 guest voters voted.
49 |
--------------------------------------------------------------------------------
/pages/connect/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "gov-forum": {
3 | "title": "Governance Forum",
4 | "href": "https://gov.optimism.io/",
5 | "newWindow": true
6 | },
7 | "discord": {
8 | "title": "Community Discord",
9 | "href": "https://discord.gg/optimism",
10 | "newWindow": true
11 | },
12 | "gov-cal": {
13 | "title": "Governance Calender",
14 | "href": "https://calendar.google.com/calendar/embed?src=c_fnmtguh6noo6qgbni2gperid4k%40group.calendar.google.com&ctz=Europe%2FBerlin",
15 | "newWindow": true
16 | },
17 | "dev-discord": {
18 | "title": "Developer Discord",
19 | "href": "https://guild.xyz/superchain-devs",
20 | "newWindow": true
21 | },
22 | "dev-docs": {
23 | "title": "Developer Docs",
24 | "href": "https://docs.optimism.io/app-developers/get-started",
25 | "newWindow": true
26 | }
27 | }
--------------------------------------------------------------------------------
/pages/contribute/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "contribute-overview": "Overview",
3 | "--- DAPPS & DEVS": {
4 | "title": "DAPPS & DEVS",
5 | "type": "separator"
6 | },
7 | "demo-day": "Demo Day",
8 | "technerds": {
9 | "title": "Tech Support Program",
10 | "href": "/contribute/contribution-path/technerds",
11 | "newWindow": false
12 | },
13 | "technical-contributions": "Technical Contributions to the Optimism Collective",
14 |
15 | "--- COMMS & MEDIA": {
16 | "title": "COMMS & MEDIA",
17 | "type": "separator"
18 | },
19 | "important-terms": "Optimism Important Terms",
20 | "ambassadors": {
21 | "title": "Ambassadors",
22 | "href": "/contribute/contribution-path/ambassador-req",
23 | "newWindow": false
24 | },
25 | "translators": {
26 | "title": "Doc Translation",
27 | "href": "/contribute/contribution-path/translators",
28 | "newWindow": false
29 | },
30 |
31 | "--- CONTRIBUTION PATHS": {
32 | "title": "CONTRIBUTION PATHS",
33 | "type": "separator"
34 | },
35 | "contribution-path": "Contribution Paths"
36 | }
37 |
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "govnerds": "GovNERDs: Governance Operations",
3 | "technerds": "TechNERDs: Dev support",
4 | "supnerd-requirements": "Support NERDs: Onboarding & Moderation",
5 | "numbanerds": "NumbaNERDs: Community analytics",
6 | "ambassador-req": "Ambassadors: Community Educational Content",
7 | "translators": "Translators: Doc Localisation",
8 | "local-optimists": {
9 | "display": "hidden"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/govnerds.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Governance Operations (GovNERDs)
3 | lang: en-US
4 | description: The GovNERD Contribution Path is designed to maintain a community of contributors with high context in governance.
5 | ---
6 |
7 | # govNERDs Contribution Path
8 |
9 | ## What are govNERDs?
10 |
11 | govNERDs support the Optimism Collective by executing core governance operations, improving documentation, and creating accessible participation paths for the community. Working at the intersection of governance and community engagement, govNERDs directly contribute to Intent 1: Progress Towards Decentralization.
12 |
13 |
14 | ## govNERD Roles
15 |
16 | The govNERD Contribution Path maintains a community of contributors in an increasing governance context. Contributors may progress through these roles while developing specialization in operational processes, community support, or education/documentation:
17 |
18 | - **wannabe-govNERDs:** New contributors beginning with structured onboarding tasks
19 | - **govNERDs-in-training:** Contributors paired with mentors to develop specialized skills
20 | - **govNERDs**: Contributors retaining institutional knowledge and mentoring newcomers
21 | - **Core govNERDs:** Experienced contributors with house or function specialization
22 | - **govNERDs Lead:** Coordinates the program and liaises with the Foundation
23 |
24 | ## Responsibilities of govNERDs
25 |
26 | govNERDs are responsible for:
27 |
28 | **Operational Support**
29 |
30 | - Managing voting cycle announcements for Token and Citizens Houses
31 | - Supporting Retro Funding processes
32 | - Monitoring and assisting with moderating governance forums
33 |
34 | **Community Engagement**
35 |
36 | - Guiding new delegates through onboarding
37 | - Answering governance questions across platforms
38 | - Supporting projects and teams with governance participation
39 |
40 | **Documentation & Education**
41 |
42 | - Creating and maintaining governance resources
43 | - Developing educational materials for governance participants
44 | - Improving process documentation
45 |
46 | ## Who Can Be a govNERD?
47 |
48 | This is an open contribution path. Anyone interested in governance and willing to engage in community activities can join the govNERD Contribution Path if they meet the requirements outlined below.
49 |
50 | ## How to Start?
51 |
52 | To begin your journey as a govNERD:
53 |
54 | 1. **Complete the Intake Survey:** Fill out [this form](https://docs.google.com/forms/d/10BDGWf2lPCJLHETRvUf7L9DxRycJXDUHarcoTqrM1k8/edit) to share your skills, interests, and experience
55 | 2. **Join the Community:** Claim your wannabe-govNERD role in Discord
56 | 3. **Complete Day-One Checklist:** Review key documents, introduce yourself, and attend your first governance call
57 | 4. **Explore Our Work:** Review the [Bounties](https://www.notion.so/ac3ace1c863845dcb08944b23eed280a?pvs=21) and [Assignment](https://www.notion.so/6c90e4c861214ca09c266dac779050b8?pvs=21) Boards to see contributions across different specialization areas
58 | 5. **Start Contributing:** Take on tasks from the [Bounty Board](https://www.notion.so/ac3ace1c863845dcb08944b23eed280a?pvs=21) assigned to you by the govNERDs Lead (availability will vary based on your profile and our current needs)
59 | 6. **Join Regular Check-ins:** Participate in biweekly community calls to connect with other contributors
60 |
61 | ## Task Categories
62 |
63 | govNERD tasks are organized into categories to help you find contributions that match your skills:
64 |
65 | - **Operational Tasks:** Voting cycle management, proposal tracking, announcement coordination
66 | - **Communication Tasks:** Creating forum summaries, writing governance updates, developing explainers
67 | - **Support Tasks:** Answering questions, helping with delegate onboarding, troubleshooting
68 | - **Documentation Tasks:** Updating guides, creating tutorials, improving process documentation
69 |
70 | All tasks include clear descriptions, time estimates, and difficulty ratings to help you choose appropriate contributions.
71 |
72 | ## Progression Between Roles
73 |
74 | Contributors advance by demonstrating both time commitment and skill development:
75 |
76 | - **Duration:** Minimum 2 months in current role
77 | - **Activity:** Meet contribution minimums for two consecutive months
78 | - **Skills:** Demonstrate increased governance knowledge and specialization
79 | - **Mentorship:** Regular participation in mentorship activities
80 |
81 | Advancement to in-training status requires demonstrating value and receiving a nomination from an existing Core govNERD. This ensures quality mentorship while maintaining an inclusive entry point.
82 |
83 | *Note*: The list of available contributions is not exhaustive and may evolve with each season.
84 |
85 | *Like all Contribution Path roles, these roles are intended for independent and engaged community members who volunteer to provide their knowledge and expertise to the Collective. These roles come without guaranteed rewards. These volunteers are not employees of the Collective, the Foundation, or any of its affiliates for any purposes.*
86 |
87 |
88 |
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/local-optimists.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Local Optimists (coming soon™️)
3 | lang: en-US
4 | description: An upcoming contribution path.
5 | ---
6 |
7 | # Local Optimists
8 |
9 | Sharing is caring, and we know you want to share the Optimism Vision with your community!
10 |
11 | We have heard it again and again - you want to run events with your local community. Some of you have gone ahead and run the events! And we are so proud.
12 |
13 | We are developing a program to better support you in bringing your local community into the Optimism Collective. If you want to run an event now or want to be informed when this program goes live, please keep an eye on this page and in our Discord.
14 |
15 | [Sign up to be a part of the program](https://optimismfnd.typeform.com/local-optimists) (we will message you when the program goes live!)
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/numbanerds.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: NumbaNERDs
3 | lang: en-US
4 | description: The NumbaNERDs program is designed to ensure that there is always high quality analytics and transparency around grant spending for delegates.
5 | ---
6 |
7 | # NumbaNERDs
8 |
9 | The NumbaNERDs program is designed to ensure that there is always high quality analytics and transparency around grant spending for delegates.
10 |
11 | As our governance grows clear and accessible data becomes ever more essential to good decision making. This program went through governance for funding. You can see more about the program in the [Governance Mission Proposal for NumbaNERDs](https://gov.optimism.io/t/ready-numbanerd-program/6086).
12 |
13 | To participate go to the [numbaNERD bounty board](https://app.dework.xyz/optimism-community/main-space-35638) here and follow the steps in the ["Get NumbaNERD role"](https://app.dework.xyz/optimism-community/main-space-35638?taskId=5e37c82e-9d2b-4b7c-bad9-c20e4e1f6d60) bounty.
14 |
15 | There is also an [analytics focused channel in the Optimism Discord](https://discord.com/channels/667044843901681675/928227180603899924) if you would like to get involved now!
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/technerds.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: TechNERDs
3 | lang: en-US
4 | description: The TechNERDs program is designed to improve the technical support available to developers in the Optimism Ecosystem.
5 | ---
6 |
7 | # TechNERDs
8 |
9 | The TechNERDs program is designed to improve the technical support available to developers in the Optimism Ecosystem.
10 |
11 | This program went through governance for funding. You can see more about the program in the [Governance Mission Proposal for TechNERDs](https://gov.optimism.io/t/ready-technerd-program/6087).
12 |
13 | To participate, complete the TechNERD training (as outlined below) and join the wannabe-TechNERD channel in the Optimism Discord. Start helping other developers today!
14 |
15 | There are also a bunch of [developer focused channels in the Optimism Discord](https://discord.com/channels/667044843901681675/1080862392281481246) if you want to see what its all about.
16 |
17 | ## TechNERD Training Curriculum
18 |
19 | This curriculum was designed for developers with a deep technical background, as such skips over a lot of the "basics". A more beginner friendly version of this course may be released later if there is demand for one.
20 |
21 | You can also see the [Slides for the TechNERD](https://docs.google.com/presentation/d/1TiFpBS02bVPiw6A9YvnTOvh5v4PGo54UY9xxSv_FC6g/edit) training here.
22 |
23 | | Lesson | Topic | Exercise | Link |
24 | |:-------|:------|:---------|:-----|
25 | | 1 | Getting an RPC Endpoint | Get an RPC endpoint. You will need this for all following exercises. | [Provider Options](https://docs.optimism.io/builders/tools/connect/rpc-providers) |
26 | | 2 | Run an OP Goerli Node | Most developer questions we get are about running a node. Pay special attention to any issues you face or confusion you have. This can take up to 2 weeks (depending on your internet speed) to sync. | [Run a Node](https://docs.optimism.io/builders/node-operators/rollup-node) |
27 | | 3 | Setting up an OP Stack | The OP Stack is an incredible step towards the Superchain vision. As such you should be familiar with the standard OP Stack. | [Getting Started with the OP Stack](https://docs.optimism.io/stack/getting-started)
28 | | 4 | Setting up an explorer for your OP Stack | Make your OP Stack feel more real with its own block explorer! | [Blockscout explorer guide](https://docs.optimism.io/builders/chain-operators/tools/explorer)
29 | | 5 | Deploy & bridge a standard ERC20 | As an L2, bridging is a pretty important concept. Make sure you are comfortable with the bridging process. | [Standard Bridge, Standard Token](https://github.com/ethereum-optimism/optimism-tutorial/tree/main/standard-bridge-standard-token) |
30 | | 5.1 Bonus | Standard Bridge, Custom Token | This bonus exercise will give you insight into how the bridge works, and the limitations of it. | [Standard Bridge, Custom Token](https://github.com/ethereum-optimism/optimism-tutorial/tree/main/standard-bridge-custom-token)
31 | | 6 | Tracing Transactions | Now that you have done some cross chain transactions with your token bridging, you can use the SDK to trace that transaction. Tracing transactions is a powerful tool when helping other developers. Familiarize yourself with the SDK to get the most out of this exercise! | [Transaction Tracing with the Optimism SDK](https://github.com/ethereum-optimism/optimism-tutorial/tree/main/sdk-trace-tx)
32 | | 7 | Verify nodes are running & synced | Verify that you have set up and synced your node correctly. | [Verify your node](https://docs.optimism.io/builders/node-operators/rollup-node)
33 |
--------------------------------------------------------------------------------
/pages/contribute/contribution-path/translators.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Translators
3 | lang: en-US
4 | description: Helping localize Optimism documentation.
5 | ---
6 |
7 | # Translators
8 |
9 | At Optimism, we know that we can never truly decentralize if we do not embrace the diversity of our community. As such, we take translations seriously.
10 |
11 | If you can speak a second language and want to contribute to the collective, please do!
12 |
13 | You can [help translate our User Docs](https://crowdin.com/project/optimism-help-center) to your local language. We use [CrowdIn](https://crowdin.com/project/optimism-help-center) (you will need to make an account, but its free!).
14 |
15 | CrowdIn translators for the Optimism Collective have previously [received RetroPGF](https://optimism.mirror.xyz/Upn_LtV2-3SviXgX_PE_LyA7YI00jQyoM1yf55ltvvI)! Find out more [about RetroPGF here](/citizens-house/how-retro-funding-works).
--------------------------------------------------------------------------------
/pages/contribute/demo-day.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Demo Day
3 | lang: en-US
4 | ---
5 |
6 | ## About Demo Day
7 |
8 | Demo day was started by the Optimism Ambassador Program as a way for users to see all the cool dApps on Optimism! It runs every Thursday at 4pm UTC. dApps have ~15 minutes to showcase, we recommend 10 minutes to present and another 5 for questions. This can be anything from a full run through, to showing off a new feature, or promoting a special event on the dApp!
9 |
10 |
11 | To apply to be featured in our next Demo Day, head over to the [Demo-day channel](https://discord.com/channels/667044843901681675/960493820674465883) in our Discord (it's under events).
12 |
13 | For further visibility projects are encouraged to add their project into our developers show and tell section here on [GitHub](https://github.com/ethereum-optimism/developers/discussions/categories/show-and-tell)
14 |
15 |
16 | ## Getting a Slot
17 |
18 | Make sure you check all these boxes before applying for demoing, or you will not get a demo spot. These spots go fast!
19 |
20 | ### Pre-demo check list
21 |
22 | 1. Your dApp deployed & **live on OP Mainnet**
23 | 1. All **presenters must be in the Optimism Discord server** as the event is held as an event in the Discord Server. Make sure to tag the team member(s) who are presenting in the demo day channel.
24 | 1. Must be **available 24 hours prior to Demo Day** to do a quick audio/video check to ensure all your settings are correct.
25 | 1. If you have not presented in a Discord channel before, please watch this tutorial before your AV check. This makes everything faster! [Discord Basics: How To Setup Audio and Video Settings](https://www.youtube.com/watch?v=fnMKZB6zTcQ)
26 |
27 | ### Get your slot!
28 |
29 | ✅ If you meet all the above criteria, then please apply for a slot in the [Demo-day channel](https://discord.com/channels/667044843901681675/960493820674465883)
30 |
31 | **Note:** If you want to do a giveaway, lotto or prizes/rewards around your demo please make sure to let us know in advance so we can help with hype and distribution (if needed).
--------------------------------------------------------------------------------
/pages/contribute/important-terms.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Optimism Important Terms
3 | lang: en-US
4 | description: This doc aims to help you understand important terms and phrases within the Optimism Collective.
5 | ---
6 |
7 | # Optimism Important Terms
8 |
9 | There is a lot going on inside the Optimism Collective. This doc aims to help you understand important terms and phrases.
10 |
11 | If you have specific questions, [join our Office Hours in Discord](https://discord.gg/optimism) (every 2nd week). If you want more support in creating Optimism content, check out our [Ambassador Program](/contribute/contribution-path/ambassador-req)!
12 |
13 | For press and media inquiries, reach out to marketing@optimism.io. For amplification or marketing of your project, please see [project support options](/grant/grant-overview).
14 |
15 | ## The Optimistic Vision
16 |
17 | An inclusive, open source Superchain that sustainably funds Public Goods, dispelling the myth that building public goods cannot be profitable!
18 |
19 | ### The RetroPGF Flywheel
20 |
21 | 
22 |
23 | Optimism generates revenue through transaction fees paid on OP Mainnet and other OP Chains. Part of this revenue is directed by the Optimism Collective through RetroPGF. Better public goods means more development, which creates more revenue that can be directed to public goods. Read [more about the flywheel](https://app.optimism.io/retropgf).
24 |
25 | ### The Optimism Collective
26 |
27 | **The Optimism Collective** is a new model of **digital democratic governance** optimized to drive rapid and sustained growth of a decentralized ecosystem. The Collective is a band of communities, companies, and citizens united by a mutually beneficial pact to adhere to the axiom of **impact=profit** — the principle that positive impact to the collective should be rewarded with profit to the individual.
28 |
29 | ## Brand Kit
30 |
31 | We are currently updating our brand kit, but you can find the old [Brand Kit here](https://github.com/ethereum-optimism/brand-kit)!
32 |
33 | ## Networks & The Superchain
34 |
35 | The Optimism ecosystem is a growing space. Here are the basic terms and concepts you need to know to understand the shape of the Superchain.
36 |
37 | ### The Superchain
38 |
39 | The Superchain is a **vision** for a horizontally scalable network of chains that share security, a communication layer, and the OP Stack as an open source development stack. The Superchain does not yet exist. A number of governance and technical milestones need to be achieved before we have a functioning interoperable network of chains. Because of this, it is best to talk about the Superchain as a “vision” for something we are working towards.
40 |
41 | As of Aug 1, 2023, OP Mainnet, Base, Public Goods Network, and Zora Network have opted into the Superchain and will automatically inherit Superchain features when it launches.
42 |
43 | [Read more about the Superchain](https://app.optimism.io/superchain).
44 |
45 | ### OP Chains
46 |
47 | OP Chains are Layer 2 blockchains that run the governance-approved release of the OP Stack, and therefore will be upgraded based on decisions by Optimism’s governance and contribute sequencer revenue back to the Collective. OP Chains will automatically inherit Superchain features in the future.
48 |
49 | The benefit of opting into the Superchain and becoming an OP Chain is that users of OP Chains will have a convenient, homogenous experience bridging between OP Chains, and the OP Chain itself will share security and a governance standard ([Law of Chains](https://gov.optimism.io/t/law-of-chains-v0-1-section-by-section-overview/6515)).
50 |
51 | ### OP Stack
52 |
53 | The [OP Stack](https://docs.optimism.io/) is the modular, open source, MIT-licensed development stack that powers the OP Mainnet, OP Chains, and, in the future, the Superchain. The OP Stack is maintained by the Optimism Collective.
54 |
55 | ### OP Stack Fork
56 |
57 | An **OP Stack Fork** refers to a Layer 2 blockchain that has been built using the MIT-licensed OP Stack, but is not governed by Optimism’s governance or contributing sequencer revenue back to the Collective (and therefore is not on track to become part of the Superchain). This means OP Stack Chains won’t necessarily share security or interoperability with OP Chains in the Superchain.
58 |
59 | ### OP Mainnet
60 |
61 | OP Mainnet is a Layer 2 blockchain powered by the OP Stack. Previously known as just “Optimism,” OP Mainnet is where it all started, and the first chain to commit to the Superchain vision.
62 |
63 | ## OP Token
64 |
65 | The OP token is a governance token and should be discussed as such. Use “OP” instead of “$OP.” The use of the $ is prohibited in connection with “OP.” Content that refers to OP incorrectly will be removed off of Optimism platforms and will not be eligible for promotion. This means that, when talking about OP:
66 |
67 | - Do not discuss the token price or speculate on the price - it has nothing to do with what we are here for.
68 | - Do not reference the OP token as an investment, including attempts at “pumping” the price, encouraging purchases, speculating on how the network may result in returns on investments, or discussing how to buy or sell OP.
69 | - Token grants are made in OP - they are allocations of governance authority, not cash - and they should not be converted to USD, nor referred to in USD amounts.
70 |
--------------------------------------------------------------------------------
/pages/contribute/technical-contributions.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Technical Contributions to the Optimism Collective
3 | lang: en-US
4 | description: A non-exhaustive list of available technical contributions within the Optimism Collective.
5 | ---
6 |
7 | ## Code contributions
8 |
9 | The Optimism codebase is maintained in a monorepo at [https://github.com/ethereum-optimism/optimism](https://github.com/ethereum-optimism/optimism). It's a [collection of packages](https://github.com/ethereum-optimism/optimism#directory-structure) all requiring different skills to maintain and evolve ranging from NodeJS and TypeScript, Solidity and EVM, Go and Geth to Docker and Kubernetes. The following are good entry points into using your coding skills to help us build Optimism:
10 |
11 | - Reporting issues. For security issues see [Security policy](https://github.com/ethereum-optimism/.github/blob/master/SECURITY.md).
12 | - Participate in the [Bug Bounty programme](https://immunefi.com/bounty/optimism/).
13 | - Fixing and responding to existing issues. You can start off with those tagged ["good first issue"](https://github.com/ethereum-optimism/optimism/contribute) which are meant as introductory issues for external contributors.
14 |
15 |
16 | > Following the guidelines on [Contributing](https://github.com/ethereum-optimism/optimism/blob/master/CONTRIBUTING.md) and [Code of Conduct](https://github.com/ethereum-optimism/.github/blob/master/CODE_OF_CONDUCT.md) in all your interactions with the project will ensure your contributions are processed by the team.
17 |
--------------------------------------------------------------------------------
/pages/grant/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "grant-overview": "Get a Grant",
3 | "collective-grant-policy": {
4 | "title": "Collective Grant Policies",
5 | "href": "https://gov.optimism.io/t/collective-grant-policies/5833",
6 | "newWindow": true
7 | },
8 | "--- ADDITIONAL SUPPORT": {
9 | "title": "ADDITIONAL SUPPORT",
10 | "type": "separator"
11 | },
12 | "get-support": "Additional Support",
13 | "live-dev-support": {
14 | "title": "Developer Support",
15 | "href": "https://github.com/ethereum-optimism/developers/discussions",
16 | "newWindow": true
17 | },
18 | "app-page": {
19 | "title": "Get in Contact",
20 | "href": "https://share.hsforms.com/1yENj8CV9TzGYBASD0JC8_gqoshb",
21 | "newWindow": true
22 | }
23 | }
--------------------------------------------------------------------------------
/pages/grant/get-support.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Additional Support
3 | lang: en-US
4 | description: Additional ways to get supported on the Optimism Collective.
5 | ---
6 |
7 | # Additional Support
8 |
9 | Welcome! If you have not filled out the connect with [Optimism form](https://share.hsforms.com/1yENj8CV9TzGYBASD0JC8_gqoshb) please do so prior to reading this.
10 |
11 | We are excited for your deployment onto OP Mainnet!
12 | You will be welcomed by [insightful metrics](https://dune.com/optimismfnd/Optimism), [a budding community](https://discord.gg/optimism) 🫂🫂, and some great exclusive [Telegram Channels](https://t.me/+Cb7q0a1YqItkZTRk) ⚙️⚙️ for builders.
13 |
14 | ## Developer Support 🙋💻
15 |
16 | Steps to take if you would like developer support immediately, ranked in order of response times.
17 |
18 | 1. Get help quickly in our [Developer Support repo](https://github.com/ethereum-optimism/developers/discussions).
19 | 1. See our [Developer Documentation](https://docs.optimism.io/) & [Tutorials](https://github.com/ethereum-optimism/optimism-tutorial).
20 |
21 | ## Marketing Requests 🦸🦸
22 |
23 | When your project is deployed on the Superchain, you can be added to [our Superchain apps page](https://www.optimism.io/apps). Simply [fill out this form](https://share.hsforms.com/1hUEaGvsySTK9ccNBcNmjkwqoshb) to be included. Inclusion is at our discretion.
24 |
25 | ### Promoting Values before anything else
26 |
27 | We love to promote values-aligned projects as part of our broader content program.
28 |
29 | ### Tweeting
30 |
31 | We do the occasional retweet but the bar for these is kept quite high in order to keep our Twitter feed as valuable/high signal as possible.
32 |
33 | Other than RT's, we may like or reply to a tweet or include it in our weekly wrap up thread.
34 | You're welcome to submit your tweet for amplification but please keep in mind if and how we interact with it is at our sole discretion.
35 |
36 | ## Other Helpful Links
37 |
38 | * Curious about our Optimistic Origins? Listen to [this OPRadio Episode](https://twitter.com/optimismFND/status/1585015947626426368) with one of our founders, [@JingleJam](https://twitter.com/jinglejamOP).
39 | * What do the next 100 years have in store for crypto? [@Karl_dot_tech](https://twitter.com/karl_dot_tech) shares his vision in [this chat with Bankless](https://www.youtube.com/watch?v=60F2wtjZO5M).
40 | * Want to see what we are doing with Retroactive Public Goods? [See here](/citizens-house/how-retro-funding-works)
41 |
42 | **Last note:** [We’re hiring](https://jobs.optimism.io/)!
43 | Join our community!
44 | Have fun!
45 | Enjoy life!
46 | Don’t worry so much!
47 | Brush your teeth!
48 | Eat apples!
49 | Research the origins of public relations!
50 | Give back to your community!
51 | Tweet things you don’t actually believe!
52 | Download free music using your library card!
53 | Don’t download a car!
54 | Don’t listen to anyone except for your parents, and even then, with a grain of salt!
55 |
56 | ## WELCOME TO THE COLLECTIVE 🔴✨
57 |
58 |
--------------------------------------------------------------------------------
/pages/grant/grant-overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Get a Grant
3 | lang: en-US
4 | description: Grants in the Optimism Collective.
5 | ---
6 |
7 | ## Grants in the Optimism Collective
8 |
9 | In Season 7, there is one singular Intent - a set of ***interoperable*** Stage 1 chains doing $250m per month in cross-chain asset transfers.
10 | 
11 |
12 | All contributions, and therefore all grants, in the Collective should be working towards this singular Intent in Season 7. You can learn more about the Season 7 Intent [here](https://gov.optimism.io/t/season-7-intent/).
13 |
14 | All grants in the Optimism Collective can be thought of as Missions, and there are three types of Missions:
15 | - Foundation Missions
16 | - Retro Funding Missions
17 | - Governance Fund Missions
18 |
19 | Missions are specific initiatives aimed at making measurable progress towards the Intent. They are clearly scoped, and can be executed by Collective contributors start-to-finish in less than 12 months.
20 |
21 | 
22 |
23 | ### ***Season 7 Missions – what are they, and how to apply?***
24 |
25 | | **Mission Type** | **Season 7 Budget** | **Where can I Apply?** | **Who is Eligible?** | **When can I Apply?** | **Who Selects Projects?** | **When is Impact Evaluated?** |
26 | | --- | --- | --- | --- | --- | --- | --- |
27 | | [Foundation Missions](https://gov.optimism.io/t/season-7-intent/9292#p-41723-foundation-missions-5) | 6M OP | [Foundation Mission Github](https://github.com/orgs/ethereum-optimism/projects/31/views/1) | Each Foundation Mission has its own eligibility, viewable on the specific issue. | Each Foundation Mission has its own deadline, viewable on the specific issue. More Mission will be added throughout the Season, so check back regularly! | Developer Advisory Board | At the end of the Season |
28 | | [Retro Funding Missions](https://gov.optimism.io/t/season-7-retro-funding-missions/) | 16M OP | [OP Atlas](https://atlas.optimism.io/missions) | Each Retro Funding round has its own eligibility, viewable on the Retro Funding Rounds page. | Each Retro Funding round has its own deadline, findable on the Retro Funding page. | All eligible projects can participate, see Retro Funding Rounds page for details. | Regularly throughout Season |
29 | | [Governance Fund Missions](https://gov.optimism.io/t/season-7-governance-fund-missions/) | 10.5M OP | [Grants Council Charmverse Homepage](https://app.charmverse.io/op-grants/) | Each Governance Fund Mission will outline its own eligibility, determined by the Grants Council. The eligibility criteria for OP Chains will be shared in January; you can expect roughly 10 chains to be eligible. Additional details on the Decision Market will be posted soon. | Application deadlines will be set by the Grants Council at the start of Season 7. You’ll be able to find them on the public Optimism Governance calendar [here](https://calendar.google.com/calendar/u/0/r?cid=Y19mbm10Z3VoNm5vbzZxZ2JuaTJncGVyaWQ0a0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t). | Grants Council | At the end of the Season |
30 |
31 | ## Measuring Impact of Missions
32 |
33 | All Missions will work towards the same Intent. All impact will be measured, across the Collective, on the same, recurring measurement dates. Specific details about Retro Funding and other measurement mechanics will be provided throughout Season 7.
34 |
35 | 
36 |
--------------------------------------------------------------------------------
/pages/identity/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | "overview": "Overview",
4 | "identity-and-rep": "Identity and Reputation",
5 | "about-attestations": "About attestations",
6 | "attestations-best-practices": "Attestations Best Practices",
7 | "contracts-eas": "Contracts (EAS)",
8 | "schemas": "Schemas",
9 | "applications": "Apps",
10 | "organizations": "Organization",
11 | "project-and-individual-identity": "Project and individual identity in the Collective",
12 | "projects": "Projects"
13 | }
14 |
--------------------------------------------------------------------------------
/pages/identity/about-attestations.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: About attestations
3 | lang: en-US
4 | description: Learn about building decentralized identity apps using Ethereum Attestation Service.
5 | ---
6 |
7 | import { Callout } from 'nextra/components'
8 |
9 | # Build decentralized identity apps with attestations
10 |
11 | This guide explains how to build decentralized identity apps using attestations.
12 | It will define attestations and review the benefits of using Ethereum Attestation Service for Optimism developers.
13 |
14 | ## About attestations
15 |
16 | Attestations are signed statements about a person, entity, or thing, made by an individual, company, or organization and are one of the building blocks of decentralized identity.
17 |
18 | Our journey towards decentralized identity begins with the [Ethereum Attestation Service](https://optimism.easscan.org), a set of smart contracts for creating, verifying, and revoking on/off-chain attestations.
19 | You can think of Ethereum Attestation Service as a multiplayer database for streamlining the attestation process and enabling a robust web of trust on any OP Chain in the Superchain.
20 |
21 | 
22 |
23 | ## Benefits of using Ethereum attestation service
24 |
25 | EAS makes it easy to sign any piece of data. In addition, here are a few key benefits:
26 |
27 | * **Permissionless**: The AttestationStation is a public contract, which means that it is not owned or controlled by any one person or organization. Anyone can use the contract to verify and attest anything.
28 | * **Tooling:** Indexing, various access-management integrations, and more are already available for the AttestationStation.
29 |
30 | ## Privacy
31 |
32 | Attestations create log entries that become part of the permanent record of the blockchain.
33 | Here are some best practices to avoid violating users' privacy:
34 |
35 | * Obtain explicit consent from users for [personal information](https://csrc.nist.gov/glossary/term/PII), which includes a user's legal name and birthdate.
36 | Clearly [inform users](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/personal-information-what-is-it/what-is-personal-information-a-guide/) what data is being collected, why it is being collected, and how it will be used.
37 | * Sensitive data should not be stored onchain, in any way.
38 | If you need a smart contract to verify it in the future, you can use the hash of the sensitive data rather than the data itself.
39 | * Even when storing sensitive data offchain, you need to ensure it is stored securely using encryption, proper authentication and authorization, etc.
40 |
41 |
42 | You are encouraged to consult a lawyer or other professional advisors if you are uncertain about your obligations.
43 | Global data privacy laws are complex and multifaceted, and the violations of user privacy can have meaningful compliance as well as practical implications.
44 |
45 |
46 | ## Common questions
47 |
48 | **Q: Are attestations replacements for verifiable credentials?**
49 |
50 | **A:** Attestations should not be viewed as a replacement for verifiable credentials or decentralized identifiers. Rather developers can use attestations to create [decentralized identifiers](https://www.w3.org/TR/did-core/), credentials, claims, and more.
51 |
52 | **Q: Are attestations replacements for proof of personhood?**
53 |
54 | **A:** Attestations and the associated web of trust are complementary with proof of personhood like [WorldID](https://worldcoin.org/blog/announcements/worldcoin-commits-optimism-superchain-vision-ahead-mainnet-launch) and similar solutions. Without proof of personhood, agents could sybil-attack the web of trust to build their reputation. On the other hand, web of trust extends proof of personhood to confer more information about the person you're interacting with which is critical in governance and other use-cases that require knowledge of the person's reputation.
55 |
56 | **Q: Why attestations instead of soulbound / non-transferable tokens?**
57 |
58 | **A:** Attestations have two key benefits over soulbound / non-transferable tokens: flexibility of whether the attestations is onchain or offchain and composability. While there is a canonical [decentralized schema registry for attestations](https://optimism.easscan.org/schemas), there is no central registry or specification for soulbound / non-transferable tokens which can lead to poor interoperability between systems and protocols.
59 |
60 | ## Next steps
61 |
62 | * Read about [Attestation best practices](/identity/attestations-best-practices)
63 | Are you inspired and don't know what to build? We have a [project idea list](https://github.com/ethereum-optimism/ecosystem-contributions).
64 | Do you have a good idea, but you know you're not the right person to build it? Please open a PR on that list and suggest it.
65 |
--------------------------------------------------------------------------------
/pages/identity/applications.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Attestation Apps
3 | lang: en-US
4 | description: Learn some of the applications that use attestations.
5 | ---
6 |
7 | # Attestation apps
8 |
9 | This guide lists some of the applications that use attestations.
10 |
11 | ## Ethereum attestation service
12 |
13 | These are some of the applications that use the attestations:
14 |
15 | * [EAS Scan](https://optimism.easscan.org/): This no-code interface lets you build schemas, query, and submit attestations.
16 | * [Citizen Attestations](https://citizen-attestations.xyz/): An attestation explorer for Optimism focusing on attestations that are relevant for the OP Citizens eligibility process.
17 | * [Attest Fest](https://attest-fest.party/): Create multiple EAS attestations using the power of CSV and Safe multisig wallets. It's an attest fest, yay!
18 | * [Optimist Profile](https://app.optimism.io/retropgf-signup): The Optimist Profile allows contributors to share the contributions and impact they've made to the Optimism Collective.
19 | * [Ethereum Ecosystem onchain reviews](https://www.ethereum-ecosystem.com/new-review): The goal of this Attestation-Based Dapp Rating web app is to allow anyone to review dApps and tools 100% onchain.
20 |
21 | ## Building with attestations
22 |
23 | Are you building with attestations? Feel free to add your app to this page using the [attestation GitHub issue template](https://github.com/ethereum-optimism/docs/issues/new?assignees=\&labels=documentation%2Cattestation%2Ccommunity-request\&projects=\&template=suggest_attestation.yaml\&title=%5BATT%5D+Add+PR+title).
24 |
--------------------------------------------------------------------------------
/pages/identity/contracts-eas.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Contracts (EAS)
3 | lang: en-US
4 | description: Learn the basics of contracts for EAS, EAS contract addresses, and how to read and write attestations.
5 | ---
6 |
7 | # EAS contracts
8 |
9 | This guide covers [Ethereum Attestation Service ("EAS")](https://attest.sh/), an open-source public good that is included as a predeploy in the OP Stack.
10 | It also covers EAS contract addresses, how to read and write attestations, and indexing.
11 |
12 | ## EAS contract addresses
13 |
14 | The [Ethereum Attestation Service](https://docs.attest.sh/docs/welcome) is deployed on these addresses:
15 |
16 | | Network | Attestation Contract | Schema Registry Contract |
17 | | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
18 | | OP Sepolia | [0x4200000000000000000000000000000000000021](https://sepolia-optimism.etherscan.io/address/0x4200000000000000000000000000000000000021) | [0x4200000000000000000000000000000000000020](https://sepolia-optimism.etherscan.io/address/0x4200000000000000000000000000000000000020) |
19 | | OP Mainnet | [0x4200000000000000000000000000000000000021](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000021) | [0x4200000000000000000000000000000000000020](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000020) |
20 |
21 | ## How to read and write attestations
22 |
23 | You can read and write attestations in several ways:
24 |
25 | * [EAS scan user interface (OP Mainnet)](https://optimism.easscan.org/)
26 | * [EAS scan user interface (OP Sepolia)](https://optimism-sepolia.easscan.org/)
27 | * [JavaScript SDK](https://docs.attest.sh/docs/developer-tools/eas-sdk)
28 | * [Access directly onchain](https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/EAS.sol) (if you need to attest from a smart contract)
29 |
30 | ## Indexing
31 |
32 | Indexing is available via:
33 |
34 | * [GraphQL endpoint](https://docs.attest.sh/docs/developer-tools/api)
35 | * [Ponder graph](https://github.com/ethereum-attestation-service/eas-ponder-graph)
36 | * [Open source indexer](https://github.com/ethereum-attestation-service/eas-indexing-service)
37 |
38 | ## Next steps
39 |
40 | For more information on working with attestations, see [Build Decentralized Identity Apps with Attestations](/identity/about-attestations).
41 |
--------------------------------------------------------------------------------
/pages/identity/individuals.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Individual identity
3 | lang: en-US
4 | description: Learn about how individual identity is represented in the Optimism Collective.
5 | ---
6 |
7 | ## Individual identity
8 |
9 | The Optimism Collective represents individuals using unique identifiers generated through the [Farcaster protocol id registry](https://docs.farcaster.xyz/reference/contracts/reference/id-registry). This system ensures a secure approach to identity management within the collective.
10 |
11 | ### Registering a user ID
12 |
13 | To obtain a unique identifier:
14 |
15 | 1. Use the **[Farcaster Id Gateway](https://docs.farcaster.xyz/reference/contracts/reference/id-gateway)**
16 | 2. Use the Warpcast app, which:
17 |
18 | * Creates a new custody address
19 | * Acts as a wallet
20 |
21 | ### Making attestations
22 |
23 | When you make attestations about individuals:
24 |
25 | * Leave the recipient address blank
26 | * Enter the users id into the attestation metadata
27 |
28 | ### Further reading
29 |
30 | For more details on individual identity in the Optimism Collective, refer to **[the governance docs](/identity/project-and-individual-identity/#building-a-digital-identity)** on building a digital identity.
31 |
--------------------------------------------------------------------------------
/pages/identity/organizations.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Organizations
3 | lang: en-US
4 | description: Learn about the organization entity within the Optimism Collective's identity stack.
5 | ---
6 |
7 | ## Organizations
8 |
9 | Within the Optimism Collective, the organization entity is used to represent teams, squads, DAOs and other organizations that may work on multiple projects. Organizations can apply to Retroactive Public Goods Funding (Retro Funding) with specific [projects](/identity/projects), never with just the organization. This is because projects represent contributions that created impact in the Collective, and Retro Rounds award OP to past impact.
10 |
11 | The organization entity is represented onchain by an attestation. The attestation UID is the organization's unique identifier for its lifecycle in the Collective. To create a new organization, an attestation is issued using [this schema](https://optimism.easscan.org/schema/view/0xff0b916851c1c5507406cfcaa60e5d549c91b7f642eb74e33b88143cae4b47d0). The only metadata included in the schema is the Farcaster Id of the person who created the organization, and the entity type (in this case "organization").
12 |
13 | All other organization metadata is stored or referenced in the [Organization Metadata Attestation](https://optimism.easscan.org/schema/view/0xc2b376d1a140287b1fa1519747baae1317cf37e0d27289b86f85aa7cebfd649f). The Organization Metadata Attestation is re-issued anytime there is a change in metadata. Apps displaying organization metadata should look to the most recent attestation for the up-to-date metadata.
14 |
15 | See the [attestation schemas page](/identity/schemas) for more details on the schemas and their metadata.
16 |
--------------------------------------------------------------------------------
/pages/identity/overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Identity overview
3 | lang: en-US
4 | description: Learn about the basics of decentralized identity solutions.
5 | ---
6 |
7 | import { Callout } from 'nextra/components'
8 |
9 | # Introduction
10 |
11 | This guide explains the role of decentralized identity in the Optimism Collective and its key components.
12 |
13 |
14 | ## Identity in the Optimism Collective
15 |
16 | Decentralized identity solutions empower individuals to customize their identity according to their preferences, move it seamlessly across services, and regain control of their personal information from centralized platforms. These solutions are designed to enable users to prove specific attributes about themselves in a trustworthy and verifiable way, without compromising their privacy or security.
17 |
18 | The Optimism Collective is [building a better economic engine that fuels positive-sum games](https://www.optimism.io/vision). Decentralized identity is central to that mission. For example, the two-house governance system of the Optimism Collective consists of:
19 |
20 | 1. Token holders, who vote by delegating their OP tokens to delegates.
21 | 2. Community members who participate in a one-person-one-vote system based on reputation and community contributions.
22 |
23 | Decentralized identity expands the design space for innovation. It aims to give individuals greater control over their finances and easier participation in the global economy on their own terms.
24 |
25 | For more information about identity in the Optimism Collective, see [the governance docs post on the identity stack](/identity/project-and-individual-identity).
26 |
27 | ## Key components of identity
28 |
29 | There are three important components to identity within the Optimism Collective:
30 |
31 | 1. [Individuals](/identity/project-and-individual-identity/#people-and-projects)
32 | 2. [Projects](/identity/project-and-individual-identity/#people)
33 | 3. [Attestations](/identity/attestations-best-practices/)
34 |
35 | Individuals and projects are the relevant entities in the Optimism Collective about which statements might be made. Attestations are the way in which these statements are made.
36 |
37 |
38 | Decentralized identity not only supports democratic governance but also enhances innovation and individual financial control within the Optimism Collective ecosystem.
39 |
40 |
41 | ## Next steps
42 |
43 | To learn more about identity in the Optimism Collective:
44 |
45 | * Explore the [governance docs on project and individual identity](/identity/project-and-individual-identity/)
46 | * Read about [attestation best practices](/identity/attestations-best-practices/)
47 | * Understand how [identity contributes to the Optimism vision](https://www.optimism.io/vision)
48 |
--------------------------------------------------------------------------------
/pages/identity/projects.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Projects
3 | lang: en-US
4 | description: Learn about the project entity within the Optimism Collective's identity stack.
5 | ---
6 |
7 | ## Projects
8 |
9 | Within the Optimism Collective, [the project entity](/identity/project-and-individual-identity/#people) represents contributions to the Optimism Collective and can be used to apply for Retroactive Public Goods Funding (Retro Funding).
10 | ## Project Representation
11 |
12 | The project entity is represented onchain by an attestation from the [following schema](https://optimism.easscan.org/schema/view/0xff0b916851c1c5507406cfcaa60e5d549c91b7f642eb74e33b88143cae4b47d0). Projects are identified by the type "project". The attestation UID serves as the project's unique identifier throughout its lifecycle in the Collective.
13 |
14 | ## Project metadata
15 |
16 | All other project metadata is stored or referenced in the [Project Metadata Attestation](https://optimism.easscan.org/schema/view/0xe035e3fe27a64c8d7291ae54c6e85676addcbc2d179224fe7fc1f7f05a8c6eac).
17 |
18 | ### Updating metadata
19 |
20 | * The Project Metadata Attestation is re-issued whenever there's a change in metadata.
21 | * Apps displaying project metadata should refer to the most recent attestation for up-to-date information.
22 |
23 | ## Further reading
24 |
25 | For more information about identity in the Optimism Collective, see the [identity overview](/identity/overview).
26 |
--------------------------------------------------------------------------------
/pages/index.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Optimism Community Hub
3 | lang: en-US
4 | description: desc
5 | ---
6 |
7 | import { Cards, Card } from 'nextra/components'
8 |
9 | # Welcome to the Optimism Collective
10 |
11 | The Optimism Collective is a band of companies, communities, and citizens working together. The Collective and the Superchain take an experimental and agile approach to governance, relentlessly iterating towards a system which stands the test of time.
12 | Whether you're a builder curious about how to get a grant, a prospective delegate interested in beginning to vote, or looking for ways to contribute to the Collective, you'll find everything you need to get started right here.
13 |
14 | ## FAQs
15 |
16 | Frequently asked questions, in quick links.
17 |
18 |
19 | } />
20 |
21 | } />
22 |
23 | } />
24 |
25 |
26 | ## Dive In
27 |
28 |
29 | } />
30 |
31 | } />
32 |
33 | } />
34 |
35 | } />
36 |
37 | } />
38 |
39 | } />
40 |
--------------------------------------------------------------------------------
/pages/op-token/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "op-token-overview": "OP Token Overview",
3 | "superstacks": "SuperStacks Pilot FAQs",
4 | "airdrops": "Airdrops"
5 | }
6 |
--------------------------------------------------------------------------------
/pages/op-token/airdrops/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "airdrop-1": "Airdrop 1",
3 | "airdrop-2": "Airdrop 2",
4 | "airdrop-3": "Airdrop 3",
5 | "airdrop-4": "Airdrop 4",
6 | "airdrop-5": "Airdrop 5"
7 | }
8 |
--------------------------------------------------------------------------------
/pages/op-token/airdrops/airdrop-2.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Airdrop 2
3 | lang: en-US
4 | description: Airdrop 2 [COMPLETE] ~307k unique addresses qualified for ~11.7m OP. Tokens directly distributed on 9th Feb 2023.
5 | ---
6 |
7 | # Airdrop 2
8 |
9 | ## Background
10 |
11 | Optimism’s Airdrop #1 distributed over 200m OP tokens to 250,000 early adopters and engaged users in May 2022.
12 | With the introduction of OP, the Collective set out to establish a bicameral governance system that provides the foundation for our growing digital city.
13 |
14 | Since then, the Token House has matured as the first piece of Optimism governance.
15 | As of today (February 9th, 2023) 88k addresses have voted on over 90 proposals to distribute more than 55m OP tokens across the ecosystem, and Optimism’s first protocol upgrade is headed to vote in February. A total of 293k addresses are **delegating their voting power** — a positive-sum activity that helps strengthen the fabric of Optimism’s governance system.
16 | At the same time, OP Mainnet is developing into a booming economy.
17 | Over 1.5 million addresses have sent 64 million transactions since our first Airdrop, spending nearly $15 million in fees on the network.
18 | Participation in governance and in the Optimism economy is what helps our Collective grow and thrive.
19 |
20 | Optimism’s Airdrop #2 distributes 11,742,277.10 OP to 307,965 unique addresses to reward **positive-sum governance participation** and **power users of OP Mainnet**.
21 | A snapshot of addresses was taken on 01-20-2023 0:00 UTC.
22 |
23 | Read on for more detail about eligibility criteria and distribution.
24 |
25 | ::: tip Airdrop #2 does not need to be claimed
26 |
27 | Airdrop #2 is distributed directly to eligible wallets.
28 | There is no need to claim tokens by interacting with any website.
29 | Do not trust any website pretending to help you claim your tokens for Airdrop #2.
30 | If an address is eligible, it will have tokens sent directly to it on February 9th, 2023 by 8pm ET.
31 |
32 | :::
33 |
34 | Airdrop #2 rewards users for their involvement in Optimism governance and covers a portion of their network usage costs:
35 |
36 | - Governance delegation rewards based on the amount of OP delegated and the length of time it was delegated.
37 | - Partial gas rebates for active Optimism users who have spent over a certain amount on gas fees.
38 | - Multiplier bonuses determined by additional attributes related to governance and usage.
39 |
40 |
41 | ## Airdrop #2 allocations
42 |
43 | | Reward Type | Criteria | Number of qualifying addresses | Reward allocation |
44 | | -------------------------------- | -------- | -----------------------------: | ----------------- |
45 | | **Governance Delegation Reward** | Has had ≥ 2,000 total `OP Delegated x Days`(1) | 57,204 | 0.42 ⁄ 365 OP per `OP Delegated x Day`, max 5,000 OP per address(2) |
46 | | **Gas Usage Reward** | Spent ≥ the average cost of one L1 transaction ($6.10)(3) on Optimism | 280,057 | 80% of gas fees rebated in OP, up to $500 of gas fees rebated per address(4) |
47 |
48 |
49 | (1) `OP Delegated x Days` = Cumulative Sum of OP Delegated per Day (i.e. 20 OP delegated for 100 days: 20 * 100 = 2,000 OP Delegated x Days).
50 |
51 | (2) Addresses which received OP from Token House Governance are not eligible for the reward.
52 |
53 | (3) The average cost of one L1 transaction on Ethereum was measured during the period between the airdrop #1 snapshot and airdrop #2 snapshot.
54 |
55 | (4) Gas Fees USD conversion was made at the time of the transaction.
56 | OP rebated conversion was made using the trailing 7-day average market price at the time of the snapshot.
57 |
58 | ## Bonus Attributes
59 |
60 | There are 4 additional attributes that addresses can earn multiplier bonuses for:
61 |
62 | | Attributes | Qualifying addresses | Multiplier (bonus) |
63 | | --- | --: | --- |
64 | | 0 | 206,033 | 1.00x (No Bonus) |
65 | | 1 | 53,529 | 1.05x (5% Bonus) |
66 | | 2 | 39,531 | 1.10x (10% Bonus) |
67 | | 3 | 6,320 | 1.50x (50% Bonus) |
68 | | 4 | 2,552 | 2.00x (100% Bonus) |
69 |
70 |
71 | ### Attribute Description
72 |
73 | | Attribute criteria | Description | Qualifying addresses |
74 | | --- | --- | ---: |
75 | | Governance: Had an Active Delegation ≥ 20 OP at Snapshot | Addresses that remained delegating to Optimism Governance | 30,762 |
76 | | Governance: Had 54,367 total ‘OP Delegated x Days’(5) | Addresses that had a larger Governance commitment | 23,089 |
77 | | Usage: Had made App transactions(6) on Optimism across 6 distinct months | Addresses that remained active on Optimism for a longer period of time | 52,438 |
78 | | Usage: Spent ≥ $20 on Gas Fees | Addresses that have done a larger sum of activity on Optimism | 55,470 |
79 |
80 | (5) 54,367 `OP Delegated x Days` is the equivalent of delegating the smallest reward from Airdrop #1 (271.83 OP) for 200 days (Since July 4, 2022).
81 |
82 | (6) App transactions were counted as any transaction excluding token approvals, token transfers, and ETH wrapping/unwrappping transactions. "Distinct months" measured as trailing 30 day periods from the snapshot date.
83 |
84 |
85 |
86 | ## Analytics
87 |
88 | The address list is available [on Github](https://github.com/ethereum-optimism/op-analytics/tree/main/reference_data/address_lists) and is shared with Dune and Flipside.
89 | Please use the #analytics channel in [the Optimism Discord](https://discord-gateway.optimism.io/) for any additional sharing requests or schema questions
--------------------------------------------------------------------------------
/pages/op-token/airdrops/airdrop-3.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Airdrop 3
3 | lang: en-US
4 | description: Airdrop 3 [COMPLETE] ~31k unique addresses qualified for ~19.4m OP. Tokens directly distributed on 18th Sep 2023.
5 | ---
6 |
7 | # Airdrop 3
8 |
9 | Airdrop 3 took place on Monday, September 18. The airdrop allocated 19,411,313 OP to 31,870 unique addresses.
10 |
11 | Similar to Airdrop 2, this drop rewards positive sum governance participation. Users who have delegated tokens between 2023-01-20 at 0:00 UTC and 2023-07-20 0:00 UTC received tokens in this airdrop. A bonus is given to addresses who delegated to a delegate who voted in Optimism Governance.
12 |
13 | Read on for more detail about eligibility criteria and allocations.
14 |
15 | > Airdrop #3 is disbursed directly to eligible wallets. There is no need to claim tokens by interacting with any website. Do not trust any website pretending to help you claim your tokens for Airdrop #3. If an address is eligible, it will have tokens sent directly to it on or shortly after Sep 15, 2023.
16 |
17 | ## Airdrop #3 Allocations
18 |
19 | | Reward Type | Criteria | Number of qualifying addresses | Reward allocation
20 | | - | -: | -: | -:
21 | | Governance Delegation Reward | Delegated OP above the minimum threshold | 31,529 | 0.67 ⁄ 365 OP per `OP Delegated x Day`(1), max 10,000 OP per address
22 | | Voting Delegate Bonus | Delegated to an address that voted onchain at least once (2) | 25,561 | (0.67 ⁄ 365)*2 OP per `OP Delegated x Day to a voting delegate`, max 10,000 OP per address
23 |
24 | ### Details
25 |
26 | (1) `OP Delegated x Days` = Cumulative Sum of OP Delegated per Day (i.e. 20 OP delegated for 100 days: 20 * 100 = 2,000 OP Delegated x Days).
27 |
28 | (2) Delegate must have voted onchain in OP Governance during the snapshot period (01-20-2023 at 0:00 UTC and 07-20-2023 0:00 UTC )
29 |
30 | - See the list of addresses and allocation amounts [here](https://github.com/ethereum-optimism/op-analytics/blob/main/reference_data/address_lists/op_airdrop_3_simple_list.csv)
31 |
32 | ### Cutoff Criteria
33 |
34 | - Addresses with fewer than 18,000 `OP Delegated x Days` (or 9,000 if delegated to a voting delegate) were not eligible for this airdrop.
35 | - Addresses who were delegated for < 7 days were not eligible for this airdrop
36 | - Known delegation program wallets were not eligible for this airdrop.
37 | - Each reward type had a maximum reward of 10,000 OP per address.
38 |
39 | *Note: A small set of delegation activity was not included in Airdrop #2. The eligible amounts were added to this allocation, resulting in 341 additional addresses.*
40 |
41 | ### How it works:
42 |
43 | - To work out your `Cummultive Delegated OP`, multiply your OP delegated by the time delegated: `OP delegated x Days` = `Cummultive Delegated OP`. To qualify for the airdrop your `Cummultive Delegated OP` needs to be larger than 18,000. If you delegated to a “Voting Delegate” the `Cummultive Delegated OP` only needs to be above 9,000. For example, if you delegated 80 OP tokens for 180 days that would make a `Cummultive Delegated OP` of 14,400 which would NOT qualify for the airdrop. However, if the delegate you delegated to was active, then your 14,400 is above the 9,000 required for a voting delegate and you WOULD receive the airdrop.
44 | - Addresses who delegated for less than 7 days are not eligible.
45 | - Known delegation program wallets were not eligible for this airdrop.
46 | - Each reward type had a maximum reward of 10,000 OP per address.
47 | - For the Voting Delegate Bonus the address you have delegated to MUST have voted onchain in OP Governance during the snapshot period (2023-01-20 at 0:00 UTC and 2023-07-20 0:00 UTC)
48 |
--------------------------------------------------------------------------------
/pages/op-token/airdrops/airdrop-4.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Airdrop 4
3 | lang: en-US
4 | description: Airdrop 4 [CLAIMABLE] Available for claim by qualified addresses. ~22.9k unique addresses qualified for ~10.3m OP. Claim at app.optimism.io/airdrops
5 | ---
6 |
7 | # Airdrop 4
8 |
9 | Airdrop #4 celebrates the vibrant creative energy that artists introduce to the Superchain, and highlights the essential role creators fulfill within the Optimism Collective and the broader Ethereum ecosystem. Creators with addresses that deployed NFT contracts on Ethereum L1, Base, OP Mainnet and Zora before 2024-01-10 00:00:00 UTC were considered in this airdrop.
10 |
11 | Read on for more detail about eligibility criteria and allocations.
12 |
13 | > Airdrop #4 needs to be claimed
14 | > Go to [https://app.optimism.io/airdrops](https://app.optimism.io/airdrops) to claim.
15 |
16 | ## Airdrop 4 Allocations
17 |
18 | | Reward Type | Criteria | Number of qualifying addresses | Reward allocation
19 | | - | :-: | -: | :-:
20 | | You created engaging NFTs on the Superchain | Total gas on OP Chains (OP Mainnet, Base, Zora) in transactions involving transfers2 of NFTs created by your address1. Measured during the trailing 365 days before the airdrop cutoff (Jan 10, 2023 - Jan 10, 2024) | 9,294 | 5,000 OP per 1 ETH of gas on the Superchain (i.e. 0.002 ETH of gas fees = 10 OP)
21 | | You created engaging NFTs on Ethereum Mainnet | Total gas on Ethereum L1 in transactions involving transfers2 of NFTs created by your address1. Measured during the trailing 365 days before the airdrop cutoff (Jan 10, 2023 - Jan 10, 2024) | 15,073 | 50 OP per 1 ETH of gas on Ethereum L1 (i.e. 0.2 ETH of gas fees = 10 OP)
22 |
23 |
24 | 1. “Creator addresses” were identified as the transaction sender (`from` address) in the transaction where the NFT (ERC721 & ERC1155) contract was created.
25 | 1. “Transactions with NFT transfers” excluded transfers to the creators' address (i.e. mint to themselves) and transfers to a burn address. While transfers were measured over the 365 days before cutoff, the NFT contract could’ve been created at any time.
26 |
27 | See the list of addresses and allocation amounts [here](https://github.com/ethereum-optimism/op-analytics/blob/main/reference_data/address_lists/op_airdrop_4_simple_list.csv)
28 |
29 | ### Bonus Attributes
30 | There were 5 attributes that addresses could earn multiplier bonuses for:
31 |
32 | | Amount of Attributes | Qualifying addresses | Multiplier (bonus)
33 | | - | -: | -: |
34 | | 0 | 2,969 | (No Bonus)
35 | | 1 | 3,628 | 1.05x (5% Bonus)
36 | | 2 | 4,566 | 1.10x (10% Bonus)
37 | | 3 | 8,305 | 1.25x (25% Bonus)
38 | | 4+ | 3,530 | 1.50x (50% Bonus)
39 |
40 | ## Attribute Description
41 |
42 | | Criteria name | Attribute Criteria | Qualifying addresses
43 | | - | -: | -: |
44 | | Early creator | You created your first NFT contract before Jan 1, 2023 | 7,443
45 | | Rising creator | An NFT you created was transferred after Nov 11, 2023 | 14,927
46 | | Active onchain | You’ve been active on the Superchain or L1 since Nov 11, 2023 | 12,316
47 | | Popular creator | Total gas fees spent in transactions involving transfers of NFTs you created was >= 0.005 ETH in the 180 days prior to cutoff | 16,941
48 | | We ❤️ the Art creators that qualified for the airdrop | In addition to qualifying for the drop, you participated in WLTA | 338
49 |
50 | ## Rewards Detail
51 | * Addresses with final rewards lower than 20 OP were not eligible.
52 | * The final reward was capped at 6,000 OP per address.
53 |
--------------------------------------------------------------------------------
/pages/op-token/airdrops/airdrop-5.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Airdrop 5
3 | lang: en-US
4 | description: Airdrop #5 rewards power users who have contributed to the growth of the Superchain Ecosystem.
5 | ---
6 |
7 | import { Callout } from 'nextra/components'
8 |
9 | # Airdrop 5
10 |
11 | Airdrop #5 rewards power users who have contributed to the growth of the Superchain Ecosystem. The best apps across social, DeFi, gaming and more live on the Superchain, and it’s crucial to support their growth and success. If you're a Superchain power user actively engaging with apps across the ecosystem, you're not just participating—you're helping to scale Ethereum. Your contributions are vital and prove that when we build together, we benefit together.
12 |
13 | EOA addresses that made `App transactions` on OP Mainnet, Base, Zora, Mode, Metal, Fraxtal, Cyber, Mint, Swan, Redstone, Lisk, Derive, BOB, Xterio, Polynomial, Race, and Orderly between 2024-03-15 00:00:00 UTC and 2024-09-15 00:00:00 UTC were considered for this airdrop. The airdrop allocated 10,368,678 OP to 54,723 unique addresses.
14 |
15 | Read on for more detail about eligibility criteria and allocations.
16 |
17 |
18 | Airdrop #5 needs to be claimed.
19 | Go to [https://app.optimism.io/airdrops](https://app.optimism.io/airdrops/5) to claim.
20 |
21 |
22 |
23 | `App transactions` are defined as transactions that emit an event log, excluding operational “non-app” events (ERC20/721/1155 token approvals & WETH wrapping/unwrapping).
24 |
25 |
26 | ## Allocations
27 |
28 | ### Base Rewards
29 |
30 | | Reward Name | Criteria | Number of Qualifying Addresses | Reward Allocation |
31 | | --- | --- | --- | --- |
32 | | Superchain Power User | Interacted with ≥ 20 unique contracts¹ on the Superchain² and had a contracts-to-transactions ratio³ of ≥ 10% during the eligibility period from Mar 15, 2024, to Sep 15, 2024. | 54,723 | Rewards scale in proportion to network usage. |
33 |
34 | 1. `Unique contracts` are calculated as the number of distinct EOA-initiated contract calls on the transaction level (`to` addresses).
35 | 2. Activity on OP Mainnet, Base, Zora, Mode, Metal, Fraxtal, Cyber, Mint, Swan, Redstone, Lisk, Derive, BOB, Xterio, Polynomial, Race, and Orderly was considered for this airdrop.
36 | 3. `Contracts-to-transactions ratio` is defined as the ratio of unique contracts an EOA address interacted with relative to its total number of transactions (e.g. 25 unique contracts and 100 app transactions = contracts-to-transactions ratio of 25%).
37 |
38 | ### Bonus Rewards
39 |
40 | | Reward Name | Criteria | Number of Qualifying Addresses |
41 | | --- | --- | --- |
42 | | Active Delegator | Had ≥ 9,000 total OP delegated x days delegated¹ during the eligibility period from Mar 15, 2024, to Sep 15, 2024. | 4,155 |
43 | | Frequent User | Made at least 10 app transactions per week in ≥ 20 distinct weeks during the eligibility period from Mar 15, 2024, to Sep 15, 2024. | 9,841 |
44 | | Superchain Explorer | Made at least 1 app transaction on ≥ 7 chains in the Superchain² during the eligibility period from Mar 15, 2024, to Sep 15, 2024. | 10,336 |
45 | | Early Superchain Adopter | Made at least 1 app transaction on ≥ 3 chains in the Superchain in the first week after each chain’s public mainnet launch³. | 6,989 |
46 | | Quester | Completed ≥ 1 Optimism quest between Sep 20, 2022, and Jan 17, 2023. | 14,113 |
47 | | SuperFest Participant | Participated in ≥ 5 [SuperFest](https://superfest.optimism.io/) missions during the campaign period from Jul 9, 2024, to Sep 3, 2024. | 6,732 |
48 | | SUNNYs Fan | Minted NFTs from ≥ 3 unique contracts that registered for [the SUNNYs](https://www.thesunnyawards.fun/)⁴ during the eligibility period from Mar 15, 2024, to Sep 15, 2024. | 12,905 |
49 |
50 | 1. [`OP delegated x days delegated`](airdrop-3) is calculated as the cumulative sum of OP delegated per day (e.g. 50 OP delegated for 100 days = 5,000 OP delegated x days delegated).
51 | 2. Activity on OP Mainnet, Base, Zora, Mode, Metal, Fraxtal, Cyber, Mint, Swan, Redstone, Lisk, Derive, BOB, Xterio, Polynomial, Race, and Orderly was considered for this airdrop.
52 | 3. [`Public mainnet launch`](https://github.com/ethereum-optimism/op-analytics/blob/main/op_chains_tracking/inputs/chain_metadata_raw.csv) is defined as the date the public mainnet was officially announced.
53 | 4. Includes contracts that were registered on the official SUNNYs signup page between Aug 21, 2024, and Sep 15, 2024.
54 |
55 | ### Bonus Attributes
56 |
57 | | **Number of Attributes** | **Number of Qualifying Addresses** | **Multiplier** |
58 | | --- | --- | --- |
59 | | 0 | 22,772 | 1.0x |
60 | | 1 | 13,449 | 1.5x |
61 | | 2 | 9,760 | 2.5x |
62 | | 3 | 4,988 | 4.0x |
63 | | 4 | 2,252 | 6.75x |
64 | | 5 | 1,001 | 10.75x |
65 | | 6 | 382 | 17.5x |
66 | | 7 | 119 | 27.5x |
67 |
68 | ## Reward Details
69 |
70 | - Addresses that interacted with less then 20 unique contracts were not eligible for this airdrop.
71 | - Addresses with a contracts-to-transactions ratio of less than 10% were not eligible for this airdrop.
72 | - Addresses with total rewards below the minimum threshold of 50 OP were not eligible for this airdrop.
73 | - The base reward size was capped at 150 OP.
74 | - The total reward size was capped at 3,500 OP.
75 | - See the [list of addresses and allocation amounts](https://github.com/ethereum-optimism/op-analytics/blob/main/reference_data/address_lists/op_airdrop_5_simple_list.csv).
--------------------------------------------------------------------------------
/pages/research/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "research-overview": "Research and Experimentation at Optimism"
3 | }
4 |
--------------------------------------------------------------------------------
/pages/token-house/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "token-house-overview": "Overview",
3 | "--- DELEGATES": {
4 | "title": "DELEGATES",
5 | "type": "separator"
6 | },
7 | "how-to-delegate": "How to Delegate OP Tokens",
8 | "delegate-expectations": "Delegate Expectations",
9 | "optimist-expectations": {
10 | "title": "Optimist Expectations",
11 | "href": "https://gov.optimism.io/t/optimist-expectations/7241",
12 | "newWindow": true
13 | },
14 | "--- GOV FUND": {
15 | "title": "GOV FUND",
16 | "type": "separator"
17 | },
18 | "gov-fund-overview": "Governance Fund",
19 | "gov-fund-charter": {
20 | "title": "Gov Fund Charter",
21 | "href": "https://gov.optimism.io/t/governance-fund-charter/3944",
22 | "newWindow": true
23 | },
24 | "gov-fund-allocation": {
25 | "title": "Gov Fund Allocations",
26 | "href": "https://docs.google.com/spreadsheets/d/1Ul8iMTsOFUKUmqz6MK0zpgt8Ki8tFtoWKGlwXj-Op34/edit?gid=590972026#gid=590972026",
27 | "newWindow": true
28 | },
29 | "--- HISTORY": {
30 | "title": "HISTORY & DATA",
31 | "type": "separator"
32 | },
33 | "token-house-history": "Token House Season History",
34 | "token-house-data": {
35 | "title": "Delegate Vote Weight (Dune)",
36 | "href": "https://dune.com/optimismfnd/optimism-op-token-house",
37 | "newWindow": true
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/pages/token-house/delegate-expectations.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Delegate Expectations
3 | lang: en-US
4 | ---
5 |
6 | # Delegate Expectations
7 |
8 | Thank you for joining as an active delegate in Optimism Token House Governance.
9 |
10 | As a delegate, you should:
11 |
12 | - Join the conversation in the below channels in our [Discord](https://discord.gg/optimism):
13 | - [#gov-general](https://discord.com/channels/667044843901681675/968498307913637919): This channel is for general governance discussions.
14 | - [#delegate-discussion](https://discord.com/channels/667044843901681675/989611992295813241): If you are a Top 100 delegate, join the conversation with other larger delegates to discuss proposals & the governance process. You can check your ranking [here](https://dune.com/optimismfnd/optimism-op-token-house)
15 |
16 | - Provide feedback on draft proposals in the [Proposals Discussion](https://gov.optimism.io/c/technical-proposals/47) section of the Forum
17 | - If you are a Top 100 delegate then you can also approve non-grant proposals. You can check your ranking [here](https://dune.com/optimismfnd/optimism-op-token-house).
18 | Non-grant proposals need at least 4 approvals to move to a vote.
19 | To approve a proposal post this phrase in a forum comment on Discourse:
20 | > **I am an Optimism delegate with sufficient voting power and I believe this proposal is ready to move to a vote.**
21 |
22 | - Vote on non-grant proposals via the [Optimism Governance Portal](https://vote.optimism.io/).
23 |
24 | - Post your voting rationale in a [Delegate Communications Thread](https://gov.optimism.io/c/governance/41)
25 |
26 | - Join the community calls, which occur every other Tuesday at 18:00 GMT.
27 | [The governance calendar](https://calendar.google.com/calendar/u/0/r?cid=Y180aHVpNzBpdG0wODllN3Q4cTUwaGVoMWtub0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t) shows which Tuesdays, and how to join the call. You can also check which Season and Cycle we're in on the calendar.
28 |
29 | - Stay up to date with voting cycles and general governance updates in the Governance section of the [Forum](https://gov.optimism.io/c/governance/41).
30 |
--------------------------------------------------------------------------------
/pages/token-house/gov-fund-overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Gov Fund Overview
3 | lang: en-US
4 | description: An overview of the Governance Fund.
5 | ---
6 |
7 | # Gov Fund Overview
8 |
9 | 5.4% of the total initial token supply (231,928,234 OP) was allocated to Optimism projects and communities via the Governance Fund.
10 |
11 | The goal of the Governance Fund is to empower the OP community to proactively incentivize future growth of projects and communities in the Optimism ecosystem.
12 | You can read more about the total allocation of OP in the [OP Token Section](/op-token/op-token-overview).
13 |
14 | The learn more about the purpose of the Governance Fund please read the [Governance Fund Charter](https://gov.optimism.io/t/governance-fund-charter/3944).
15 |
16 | You can view historical data about the [Governance Fund allocations here](https://docs.google.com/spreadsheets/d/1Ul8iMTsOFUKUmqz6MK0zpgt8Ki8tFtoWKGlwXj-Op34/edit?gid=590972026#gid=590972026).
--------------------------------------------------------------------------------
/pages/token-house/how-to-delegate.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: How to Delegate OP Tokens
3 | lang: en-US
4 | description: A step by step guide to delegating your OP.
5 | ---
6 |
7 | ## Why Delegate?
8 |
9 | OP tokens allow holders to vote on *some of the most important decisions for the Collective.* This empowers everyday users to have a say in the development of the system! But it's also a big responsibility, which requires a serious time commitment.
10 |
11 | For this reason, people are able to delegate the voting power of their OP tokens to a community member who has explicitly volunteered to play an active role in Token House governance.
12 |
13 | These volunteers are called **delegates.**
14 |
15 | ## Would you like to exercise your governance power and vote yourself?
16 |
17 | Before becoming a delegate, review the [Prospective Delegate Gov Onboarding Hub](https://plaid-cement-e44.notion.site/Prospective-Delegate-Gov-Onboarding-Hub-7cb72c3376c349a2ab402c4badd52f39) for helpful information and guidance.
18 |
19 | 1. Delegate to yourself by registering via the [Optimism voting app](https://vote.optimism.io/) by connecting your wallet then creating your delegate statement.
20 |
21 | 2. [Go to the same voting app](https://vote.optimism.io/) to delegate your tokens to your own address.
22 |
23 | - Pease note that snapshots of delegate voting power are taken when a proposal is created
24 |
25 | 3. Once you’ve been added as a delegate in the next voting cycle, you can start [voting](https://vote.optimism.io/)!
26 | - Go to the [Optimism voting app](https://vote.optimism.io/), connect your wallet, and vote! There is no minimum OP to begin voting requirement, but you will need to have the OP tokens you wish to delegate or vote with in your wallet when the voting measurement is taken. Tokens that are staked or LP’d at the time of measurement do not carry voting power.
27 |
28 | ## Would you like to delegate your voting power to a delegate?
29 |
30 | 1. [Choose a delegate](https://vote.optimism.io/delegates).
31 |
32 | - Take the time to read through delegate statements of interest, choosing your delegate is an important decision!
33 | - A healthy governance system is good for the Optimism Collective and for the whole Superchain. Choosing a good delegate is in each OP token holder's best interest.
34 | - Remember, this delegate will vote on your behalf. You will not hold any voting power or execute your own votes but **you will retain 100% ownership of your tokens,** and you'll be able to undelegate, redelegate, or decide to stop delegating at any time.
35 | - You can view delegates by different sorting views via the [voting app](https://vote.optimism.io/delegates?orderBy=weightedRandom)
36 |
37 | 2. [Go to the voting app](https://vote.optimism.io/) to see that you’ve delegated your tokens as intended.
38 |
39 | 3. Your delegate should write up the reasoning behind their votes in a [Delegate Communications Thread](https://gov.optimism.io/c/delegates/delegate-updates/45).
40 |
41 | - Delegation is always in your control. You can return to the [voting app](https://vote.optimism.io/) at any time to change your delegate selection.
--------------------------------------------------------------------------------
/pages/token-house/token-house-history.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Token House History
3 | lang: en-US
4 | ---
5 |
6 | ## Seasons, Reflection Periods, and Voting Cycles
7 |
8 | Token House governance operates on a seasonal schedule. Seasons happen roughly every 6 months.
9 |
10 | During each Season, Token House voting occurs via three-week voting cycles.
11 | Voting Cycles begin on Thursday at 19:00p GMT (12p PST) and end on Wednesday at 19:00 GMT (12p PST).
12 |
13 | During Reflection Periods, the Optimism Foundation will publish a proposed changelog to the Operating Manual and a set of governance proposals aimed at addressing the feedback received in the previous season.
14 |
15 | Seasons are separated with a Reflection Period. Reflection Periods may be followed by Special Voting Cycles to adopt proposals that come out of the Reflection Period.
16 |
17 | You can see up to date information about the seasons and voting cycles in [the governance calendar](https://calendar.google.com/calendar/u/0/r?cid=Y180aHVpNzBpdG0wODllN3Q4cTUwaGVoMWtub0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t).
18 |
19 | ## History
20 |
21 | * [Guide to Season 7](https://gov.optimism.io/t/season-7-guide-to-season-7/9293) ← We are here
22 | * [Guide to Season 6](https://gov.optimism.io/t/season-6-guide-to-season-6/8113)
23 | * [Guide to Season 5](https://gov.optimism.io/t/guide-to-season-5/6894)
24 | * [Guide to Season 4](https://gov.optimism.io/t/guide-to-season-4-as-a-collective/5886)
25 | * [Guide to Season 3](https://gov.optimism.io/t/guide-to-season-3-course-correcting/3942)
26 |
--------------------------------------------------------------------------------
/pages/token-house/token-house-overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Token House Overview
3 | lang: en-US
4 | description: An overview of the Token House.
5 | ---
6 |
7 | ## Token House Overview
8 |
9 | Governance of the Optimism Collective began with the launch of the OP token, and token-weighted voting in the Token House. The Token House works alongside the Citizens' House to govern the Optimism Collective, and is responsible for the governance of the Superchain protocol.
10 |
11 | The goals of the Token House are:
12 | - Safeguard the evolution of the Optimism protocol in line with the long term benefit of the Superchain
13 | - Manage sustainable economic policies aligned with the long-term viability of the Collective
14 | - Protect against abuses of power in the Citizens’ House
15 | - Enable network operation to continue without reliance on any individual entity
16 |
17 | ## Responsibilities
18 |
19 | As Token House members, OP holders are responsible for submitting, deliberating, and voting on various types of governance proposals.
20 |
21 |
22 | In its current phase, the Token House is responsible for voting on the allocation of the Governance Fund, voting on all protocol and governor upgrade proposals, and proposing any changes to the inflation rate of the OP Token, in addition to various other proposal types outlined in the [Operating Manual](https://github.com/ethereum-optimism/OPerating-manual/blob/main/manual.md).
23 |
24 | The Token House is in an initial bootstrapping phase, and will take on progressively more governance responsibilities over time.
25 |
26 | In carrying out these functions, OP holders may either vote directly, or delegate their OP voting power to someone else. Learn about delegation [here(link)
27 |
28 | ## Moving Forward
29 | In future phases, the Token House may gain additional governance powers. For example, in addition to voting on Governance Fund allocations, the Foundation's budget, protocol upgrades, and inflation; the Token House may work alongside the Citizens' House to govern allocation of surplus protocol revenue, collaborate on criteria for participation in the Citizens’ House, and manage the broader treasury. [You can read more about this transition here](https://optimism.mirror.xyz/PLrAQgE1EGRo7GRrFoztplFChnUZda4DFGW3dkQayxY).
30 |
31 | Sub-pages on Token House:
32 | [Historical Governance Seasons](https://hackmd.io/@r1tX-2m9Se2DeoQam7VGbQ/B1pTAa3QC)
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/pages/welcome/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "welcome-overview": "✨🔴 Start here 🔴✨",
3 | "governing-docs": "Governing Docs",
4 | "faq": "FAQ"
5 | }
--------------------------------------------------------------------------------
/pages/welcome/faq/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "delegate-op": {
3 | "title": "How do I delegate my OP?",
4 | "href": "/token-house/how-to-delegate",
5 | "newWindow": false
6 | },
7 | "delegate-expectations": {
8 | "title": "What are Missions?",
9 | "href": "/grant/grant-overview#mission-grants",
10 | "newWindow": false
11 | },
12 | "contribute": {
13 | "title": "Where are Foundation Missions?",
14 | "href": "https://github.com/ethereum-optimism/ecosystem-contributions/issues?q=is%3Aissue+is%3Aopen+label%3A%22Foundation+Mission+Request%22",
15 | "newWindow": true
16 | },
17 | "dashboard-trackers": "Dashboards and Trackers",
18 | "what-is-the-optimism-foundation": "What is the Optimism Foundation?"
19 | }
20 |
--------------------------------------------------------------------------------
/pages/welcome/faq/dashboard-trackers.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dashboards, Trackers, and Addresses
3 | lang: en-US
4 | description: Here you'll find relevant dashboards, trackers, information, and addresses
5 | ---
6 |
7 | # Dashboards Trackers, and Addresses
8 |
9 | Here you’ll find the [Superchain Health Dashboard](https://docs.google.com/spreadsheets/d/1f-uIW_PzlGQ_XFAmsf9FYiUf0N9l_nePwDVrw0D5MXY/edit?gid=584971628#gid=584971628), below are relevant OP trackers, reports, and addresses.
10 |
11 | ## OP Trackers
12 |
13 | - [Optimism Onchain Net Revenue Tracker](https://docs.google.com/spreadsheets/u/0/d/1XtyBu5lvCI6MtMBQPC6ZOnjZ5nbbPw4bOH7WO2Pn7cI/htmlview?pli=1)
14 | - [Optimism GovFund Grants: Public Delivery Tracking](https://docs.google.com/spreadsheets/d/1Ul8iMTsOFUKUmqz6MK0zpgt8Ki8tFtoWKGlwXj-Op34/edit?gid=1179446718#gid=1179446718)
15 | - [OP Token Unlock (Estimated)](https://docs.google.com/spreadsheets/d/1qVMhLmmch3s6XSbiBe8hgD4ntMkPIOhc1WrhsYsQc7M/edit?gid=470961921#gid=470961921)
16 |
17 | ## Foundation Budget Reports
18 |
19 | - These can be found [here](https://gov.optimism.io/c/updates-and-announcements/foundation-budgets/) on the governance forum.
20 |
21 | ## Retroactive Public Goods Funding Round Results
22 |
23 | - These can be found [here](https://retrofunding.optimism.io/round/results) on retrofunding.optimism.io.
24 |
25 | ## Relevant Addresses
26 |
27 | You can find the list of wallets across L1 and OP Mainnet where the Optimism Collective Revenue earned sits [here](https://docs.google.com/spreadsheets/d/1f-uIW_PzlGQ_XFAmsf9FYiUf0N9l_nePwDVrw0D5MXY/edit?gid=155717474#gid=155717474), on the right-hand side of the Collective Contribution page.
28 |
29 | - OP Treasury Address for Foundation Allocated Budget: 0x2A82Ae142b2e62Cb7D10b55E323ACB1Cab663a26
30 | - This address hold the remaining OP tokens allocated to the Foundation, which the Foundation requires governance approval to access (via annual FND budget proposals).
31 | - OP Treasury Address for Foundation Approved Budget: 0x2501c477D0A35545a387Aa4A3EEe4292A9a8B3F0
32 | - This is the Foundation’s OP Treasury which is available for the Foundation to utilize as the Foundation’s budget granted through the initial token allocation. Transactions from this wallet are typically internal operational movements per the Foundation’s needs.
33 | - Additional token may be moved from 0x2…a26 to 0x2…3F0 based on governance approval of budgets.
34 | - OP Foundation Grants Wallet: 0x19793c7824Be70ec58BB673CA42D2779d12581BE
35 | - This Foundation wallet is used to make private OP grants. This is topped up from the OP Treasury Foundation Approved Budget wallet 0x2…B3F0 as needed.
36 | - OP Foundation Locked Grants Wallet: 0xE4553b743E74dA3424Ac51f8C1E586fd43aE226F
37 | - This Foundation wallet is used to hold OP for one year lockups. This is topped up from the OP Foundation Grants Wallet 0x1...81BE as needed.
--------------------------------------------------------------------------------
/pages/welcome/faq/what-is-the-optimism-foundation.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: What is the Optimism Foundation?
3 | lang: en-US
4 | description: The Optimism Foundation operates to support the establishment of the Optimism Collective.
5 | ---
6 |
7 | # What is the Optimism Foundation?
8 |
9 | The Optimism Foundation is a Cayman Islands foundation company. It operates to support the establishment of the [Optimism Collective](/welcome/welcome-overview), the development of the Optimism ecosystem, and the technology that powers it.
10 |
11 | The Foundation is one component in a large, evolving and ever-growing web of companies, groups, and individuals driving towards actualization of the [Optimistic Vision](https://www.optimism.io/vision).
12 |
13 | Consistent with the Collective’s Working Constitution, the Foundation strives to:
14 |
15 | - Support the Collective with a formal legal entity.
16 | - Steward the early evolution of Collective governance.
17 |
18 | ## Supporting the Collective through a formal legal entity
19 |
20 | As an established entity (a Cayman foundation company), the Optimism Foundation can enter into legally enforceable, binding commitments with third parties in the “real” world on a limited liability basis. For example, the Foundation is able to:
21 |
22 | - Enter into contracts with third parties, such as service providers.
23 | - Administer intellectual property rights.
24 | - Make required governmental reports and filings.
25 |
26 | This status enables the Foundation to sometimes act more quickly, predictably, or safely – and enables the Foundation to leverage those advantages to support the Collective in its early developmental stages.
27 |
28 | ## Stewarding the early evolution of Collective self-governance
29 |
30 | Optimism governance is a commitment to experimentation. This iterative approach gives the Collective time to build a strong immune system, discover the processes that work best, and ultimately increase its chances of a successful journey.
31 |
32 | In its stewardship role, the Optimism Foundation currently facilitates a number of administrative aspects of Collective governance. For instance, it:
33 |
34 | - Monitors and moderates governance proposal processes.
35 | - Implements approved governance proposals.
36 | - Helps develop frameworks, such as the Working Constitution and the Operating Manual, to facilitate participation.
37 |
38 | The Foundation also supports the Optimism protocol as an open source project, by encouraging and enabling the community to build out its technical architecture and commissioning technical research on scalability, security, and decentralization.
39 |
40 | The Foundation will not provide these administrative services indefinitely; its ultimate aim is to coordinate contributors into creating the technical and governance foundations that allow the Foundation to decentralize its role over time.
41 |
42 | ## How does the Foundation work?
43 |
44 | The Optimism Foundation is governed by a Board of Directors and a Supervisor.
45 |
46 | The Board of Directors currently consists of: Abbey Titcomb, Ben Jones, Brian Avello, Eva Beylin, and Jing. The Board’s role is to manage the business and affairs of the Foundation.
47 |
48 | The Supervisor is the Cayman Islands firm, DS Limited. Its role is to oversee the Foundation’s directors and ensure the observance of their legal obligations.
49 |
50 | The Foundation also employs officers, contractors and service providers to execute on its operational and administrative aims.
51 |
52 | ## How is the Foundation held accountable?
53 |
54 | As a Cayman Islands foundation company, the Foundation is legally accountable to its governing documentation, which sets up the Foundation to defer to the will of the Optimism Collective and its governance.
55 |
56 | Specifically, the Foundation is required to observe and implement the outcome of valid governance votes in a diligent and commercially reasonable manner. Its discretion in this regard is limited to proposals that are unsafe, insecure, inconsistent with purpose, incapable of being implemented in a legally compliant manner, or that would leave the Foundation unable to function.
57 |
58 | There are three governance proposal types specifically targeted towards ensuring that the Foundation and its personnel are accountable to the will of the Collective:
59 |
60 | - **Treasury appropriations** – the amount of OP tokens available to the Foundation for disbursement is subject to an annual vote, beginning in 2023.
61 |
62 | - **Director removal** – the ability of governance to have a member of the Foundation’s Board of Directors removed from service.
63 |
64 | - **Rights protections** – a blocking vote, which enables the Token House to veto any proposed change to the Foundation’s governing documents that would materially reduce the rights of OP token holders.
65 |
66 | More information on each of the above proposal types is contained in the [Operating Manual](https://github.com/ethereum-optimism/OPerating-manual).
67 |
68 | ## What role does the Foundation play in the long term?
69 |
70 | While the Collective’s Working Constitution is limited to a four year period, the Foundation intends to continually transition responsibilities to the broader governance community well before that milestone.
71 |
72 | The Foundation’s role will evolve during this transition period, consistently trending towards its – and the Collective’s – commitment to sustained decentralization.
73 |
--------------------------------------------------------------------------------
/pages/welcome/governing-docs/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "operating-manual": {
3 | "title": "Operating Manual",
4 | "href": "https://github.com/ethereum-optimism/OPerating-manual/blob/main/manual.md",
5 | "newWindow": true
6 | },
7 | "working-constitution": {
8 | "title": "Working Constitution",
9 | "href": "https://gov.optimism.io/t/working-constitution-of-the-optimism-collective/55",
10 | "newWindow": true
11 | },
12 | "code-of-conduct": {
13 | "title": "Code of Conduct",
14 | "href": "https://gov.optimism.io/t/code-of-conduct/5751/17",
15 | "newWindow": true
16 | },
17 | "rules-of-engagement": {
18 | "title": "Rules of Engagement",
19 | "href": "https://gov.optimism.io/t/rules-of-engagement-2-0/5728",
20 | "newWindow": true
21 | },
22 | "law-of-chains": {
23 | "title": "Law of Chains",
24 | "href": "https://gov.optimism.io/t/final-law-of-chains-v0-1/6514",
25 | "newWindow": true
26 | },
27 | "law-of-chains-disclaimer": "Law of Chains Disclaimer"
28 | }
--------------------------------------------------------------------------------
/pages/welcome/governing-docs/law-of-chains-disclaimer.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Law of Chains Disclaimer
3 | lang: en-US
4 | description: The Law of Chains provides social guidance to ecosystem participants.
5 | ---
6 |
7 | # Law of Chains Disclaimer
8 |
9 | > **The [Law of Chains](https://gov.optimism.io/t/law-of-chains-v0-1-full-draft/6514) is fundamentally social in nature, intended to guide Optimism Governance and participants in the Optimism Collective. It is not a legal contract, and provides no legally enforceable warranties, representations, indemnities, rights, or obligations. Participants commit to the Law of Chains independently. No party acquires the ability to bind the other by virtue of their shared commitment to these guidelines.**
10 |
11 |
12 | The Law of Chains is intended to provide guidance to ecosystem participants. It does not establish any legally enforceable rights or obligations. Its contents do not have the effect of law and are not meant to legally bind the public or any person in any way.
13 |
14 | For example, the Law of Chains presents a concept of “Participant Protections.” This framing is intended to reflect elevated importance; a matter of principle. But Participant Protections are not, and do not create, legal rights, or corresponding legal obligations. They are not absolutely guaranteed to any ecosystem participant.
15 |
16 | If Participant Protections are violated, one may appeal to Optimism Governance. This is like saying: “one may appeal to the democratic process.” Optimism Governance is not a legal entity or a singular adjudicative body. It is a collection of many unaffiliated, independent, and uncoordinated individual voters. Its outcomes cannot be guaranteed.
17 |
18 | Relatedly, participants that subscribe to the Law of Chains do so independently, and they conduct themselves independently under it, bearing their own risks and rewards. No party acquires the ability to contractually bind the other by virtue of their shared commitment to these guidelines. The Law of Chains does not create a partnership, joint venture, employment, franchise, or agency relationship among anyone.
19 |
20 | The Law of Chains is a set of guidelines. It is not a contract. If you need legally enforceable guarantees from specific people or entities, you need some kind of specific contract with them. This document, standing alone, is not that. For more information, see Law Chains, Section 8 (Enforcement).
21 |
22 | Last Updated: July 25, 2023
23 |
--------------------------------------------------------------------------------
/patches/nextra@2.13.2.patch:
--------------------------------------------------------------------------------
1 | diff --git a/dist/normalize-pages.js b/dist/normalize-pages.js
2 | index db97af203d09cdab91be98d520efa82451b5bfc3..87b36b81df6ea55ca4326c99c927a7ed4e0b2501 100644
3 | --- a/dist/normalize-pages.js
4 | +++ b/dist/normalize-pages.js
5 | @@ -273,8 +273,14 @@ function normalizePages({
6 | }
7 | if (type === "doc" && display === "children") {
8 | if (docsItem.children) {
9 | - directories.push(...docsItem.children);
10 | - docsDirectories.push(...docsItem.children);
11 | + const children = docsItem.children.map((child) => {
12 | + return {
13 | + ...child,
14 | + name: `${docsItem.name}-${child.name}`,
15 | + }
16 | + })
17 | + directories.push(...children);
18 | + docsDirectories.push(...children);
19 | }
20 | } else {
21 | directories.push(item);
22 |
--------------------------------------------------------------------------------
/patches/remark-code-import@1.2.0.patch:
--------------------------------------------------------------------------------
1 | diff --git a/dist/index.js b/dist/index.js
2 | index f936fe717f14005071748776347002a8e6bd366b..0af1a1f8035f0e9a3ac049631f30ea184c57b383 100644
3 | --- a/dist/index.js
4 | +++ b/dist/index.js
5 | @@ -1,3 +1,4 @@
6 | +import crypto from 'node:crypto';
7 | import fs from 'node:fs';
8 | import path from 'node:path';
9 | import { EOL } from 'node:os';
10 | @@ -40,6 +41,18 @@ function codeImport(options = {}) {
11 | if (!fileMeta) {
12 | continue;
13 | }
14 | + const hashMeta = (node.meta || '')
15 | + // Allow escaping hashes
16 | + .split(/(? meta.startsWith('hash='));
18 | + let providedHash;
19 | + if (hashMeta) {
20 | + const hashres = /^hash=(?.+)$/.exec(hashMeta);
21 | + if (!hashres || !hashres.groups || !hashres.groups.hash) {
22 | + throw new Error(`Unable to parse hash ${hashMeta}`);
23 | + }
24 | + providedHash = hashres.groups.hash;
25 | + }
26 | if (!file.dirname) {
27 | throw new Error('"file" should be an instance of VFile');
28 | }
29 | @@ -76,6 +89,13 @@ function codeImport(options = {}) {
30 | if (options.removeRedundantIndentations) {
31 | node.value = stripIndent(node.value);
32 | }
33 | + const actualHash = crypto.createHash('md5').update(node.value).digest('hex');
34 | + if (!providedHash) {
35 | + reject(new Error(`Content hash not provided for ${fileAbsPath}#L${fromLine}${toLine ? `-L${toLine}` : ''}. Make sure to include the following content hash: hash=${actualHash} .`));
36 | + } else if (actualHash !== providedHash) {
37 | + reject(new Error(`Content hash mismatch for ${fileAbsPath}#L${fromLine}${toLine ? `-L${toLine}` : ''}. Provided hash was ${providedHash}, actual hash is ${actualHash}. Check if your source content changed.`));
38 | + return;
39 | + }
40 | resolve();
41 | });
42 | }));
43 | @@ -86,6 +106,13 @@ function codeImport(options = {}) {
44 | if (options.removeRedundantIndentations) {
45 | node.value = stripIndent(node.value);
46 | }
47 | + const actualHash = crypto.createHash('md5').update(node.value).digest('hex');
48 | + if (!providedHash) {
49 | + throw new Error(`Content hash not provided for ${fileAbsPath}#L${fromLine}${toLine ? `-L${toLine}` : ''}. Make sure to include the following content hash: hash=${actualHash} .`);
50 | + } else if (actualHash !== providedHash) {
51 | + throw new Error(`Content hash mismatch for ${fileAbsPath}#L${fromLine}${toLine ? `-L${toLine}` : ''}. Provided hash was ${providedHash}, actual hash is ${actualHash}. Check if your source content changed.`);
52 | + return;
53 | + }
54 | }
55 | }
56 | if (promises.length) {
57 |
--------------------------------------------------------------------------------
/patches/remark-lint-frontmatter-schema@3.15.4.patch:
--------------------------------------------------------------------------------
1 | diff --git a/dist/index.js b/dist/index.js
2 | index 602dc3851aa1c8499a8c5ae2d810d5e4ee8e87a9..5dd03a2ea17272b8779341ecfd73e2dfe0bb6e30 100644
3 | --- a/dist/index.js
4 | +++ b/dist/index.js
5 | @@ -256,6 +256,11 @@ const remarkFrontmatterSchema = lintRule({
6 | const frontmatter = ast.children.find((child) => child.type === 'yaml');
7 | if (frontmatter?.type === 'yaml') {
8 | await validateFrontmatter(frontmatter, vFile, settings);
9 | + } else {
10 | + // Specific logic for the ethereum-optimism/community-hub repository. We
11 | + // always want to have a frontmatter section. Working on getting
12 | + // this fixed in the upstream plugin so we don't need this hack.
13 | + throw new Error('Missing frontmatter')
14 | }
15 | }
16 | });
17 |
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /docs/governance/ /welcome/welcome-overview 301
2 | /docs/governance/media/ https://www.youtube.com/channel/UCy9EVw1XTHqPU3NNisoAVXw 301
3 | /docs/governance/get-a-grant/ /grant/grant-overview 301
4 | /docs/governance/howto-delegate/ /token-house/how-to-delegate 301
5 | /docs/governance/economics/ /op-token/op-token-overview 301
6 | /docs/governance/allocations/ /op-token/op-token-overview 301
7 | /docs/governance/airdrop-4/ /op-token/airdrops/airdrop-4 301
8 | /docs/governance/airdrop-3/ /op-token/airdrops/airdrop-3 301
9 | /docs/governance/airdrop-2/ /op-token/airdrops/airdrop-2 301
10 | /docs/governance/airdrop-1/ /op-token/airdrops/airdrop-1 301
11 | /docs/governance/delegate/ /token-house/delegate-expectations 301
12 | /docs/governance/existing-delegate/ /token-house/delegate-expectations 301
13 | /docs/governance/delegate-info/ https://dune.com/optimismfnd/optimism-op-token-house 301
14 | /docs/governance/proposals/ /grant/grant-overview 301
15 | /docs/governance/token-house/ /welcome/welcome-overview 301
16 | /docs/governance/token-house-history/ /token-house/token-house-history 301
17 | /docs/governance/gov-fund/ /token-house/gov-fund-overview 301
18 | /docs/governance/law-of-chains-disclaimer/ /welcome/governing-docs/law-of-chains-disclaimer 301
19 | /docs/governance/what-is-the-optimism-foundation/ /welcome/faq/what-is-the-optimism-foundation 301
20 | /docs/citizen-house/ /citizens-house/citizen-house-overview 301
21 | /docs/citizen-house/how-retro-funding-works/ /citizens-house/how-retro-funding-works 301
22 | /docs/citizen-house/retropgf-1/ /citizens-house/rounds/retropgf-1 301
23 | /docs/citizen-house/retropgf-2/ /citizens-house/rounds/retropgf-2 301
24 | /docs/citizen-house/retropgf-3/ /citizens-house/rounds/retropgf-3 301
25 | /docs/citizen-house/retropgf-4/ /citizens-house/rounds/retropgf-4 301
26 | /docs/citizen-house/citizenship-selection/ /citizens-house/citizenship-selection 301
27 | /docs/citizen-house/experimentation-with-citizenship/ /citizens-house/experimentation-with-citizenship 301
28 | /docs/identity/ /identity/identity-and-rep 301
29 | /docs/identity/identity-and-rep/ /identity/identity-and-rep 301
30 | /docs/identity/project-and-individual-identity-in-the-collective/ /identity/project-and-individual-identity-in-the-collective 301
31 | /docs/identity/attestations-best-practices/ /identity/attestations-best-practices 301
32 | /docs/contribute/ /contribute/contribute-overview 301
33 | /docs/contribute/contribution-path/translators/ /contribute/contribution-path/translators 301
34 | /docs/contribute/contribution-path/local-optimists/ /contribute/contribution-path/translators 301
35 | /docs/contribute/contribution-path/NERD-req/ /contribute/contribution-path/supnerd-requirements 301
36 | /docs/contribute/contribution-path/numbaNERDs/ /contribute/contribution-path/numbanerds 301
37 | /docs/contribute/contribution-path/techNERDs/ /contribute/contribution-path/technerds 301
38 | /docs/contribute/technical-contributions/ /contribute/technical-contributions 301
39 | /docs/contribute/contribution-path/govNERDs/ /contribute/contribution-path/govnerds 301
40 | /docs/contribute/important-terms/ /contribute/important-terms 301
41 | /docs/contribute/contribution-path/Ambassador-req/ /contribute/contribution-path/ambassador-req 301
42 | /docs/contribute/demo-day/ /contribute/demo-day 301
43 | /docs/biz/ /grant/get-support 301
44 | /docs/governance/airdrop-5 /op-token/airdrops/airdrop-5
45 |
--------------------------------------------------------------------------------
/public/img/citizen-house/how-retro-funding-works.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/citizen-house/how-retro-funding-works.png
--------------------------------------------------------------------------------
/public/img/citizen-house/reward-impact.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/citizen-house/reward-impact.jpg
--------------------------------------------------------------------------------
/public/img/citizen-house/scientific-method.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/citizen-house/scientific-method.png
--------------------------------------------------------------------------------
/public/img/contribute/att-framework.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/contribute/att-framework.png
--------------------------------------------------------------------------------
/public/img/grant/grant-options.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/grant/grant-options.png
--------------------------------------------------------------------------------
/public/img/grant/intents.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/grant/intents.png
--------------------------------------------------------------------------------
/public/img/grant/measuring-missions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/grant/measuring-missions.png
--------------------------------------------------------------------------------
/public/img/grant/missions-graphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/grant/missions-graphic.png
--------------------------------------------------------------------------------
/public/img/grant/season-7-intent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/grant/season-7-intent.png
--------------------------------------------------------------------------------
/public/img/icons/404-page.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/500-page.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/img/icons/arrow-left-right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/arrow-up-double.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/icons/arrow-up-double.png
--------------------------------------------------------------------------------
/public/img/icons/asterisk.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/book.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/build.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/computer-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/icons/favicon.ico
--------------------------------------------------------------------------------
/public/img/icons/file-edit-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/gear.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/government-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/icons/info.png
--------------------------------------------------------------------------------
/public/img/icons/instance-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/link.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/news-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/person.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/icons/profile.png
--------------------------------------------------------------------------------
/public/img/icons/question-answer-line.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/img/icons/rocket-2-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/shapes.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/stack-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/stack.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/terminal-window-line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/icons/tools.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/img/icons/wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/icons/wallet.png
--------------------------------------------------------------------------------
/public/img/icons/wallet.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/identity/atst-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/identity/atst-logo.png
--------------------------------------------------------------------------------
/public/img/identity/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/identity/profile.png
--------------------------------------------------------------------------------
/public/img/identity/upload_b344e96d086ccbeeb28b3609a8fdbf92.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/identity/upload_b344e96d086ccbeeb28b3609a8fdbf92.png
--------------------------------------------------------------------------------
/public/img/op-mainnet/identity/atst-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/op-mainnet/identity/atst-logo.png
--------------------------------------------------------------------------------
/public/img/op-mainnet/identity/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/op-mainnet/identity/profile.png
--------------------------------------------------------------------------------
/public/img/op-token/op-token-allocation.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/op-token/op-token-allocation.jpeg
--------------------------------------------------------------------------------
/public/img/research/experiment-principles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/research/experiment-principles.png
--------------------------------------------------------------------------------
/public/img/research/experiment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/research/experiment.png
--------------------------------------------------------------------------------
/public/img/welcome/two-houses-responsibilities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/img/welcome/two-houses-responsibilities.png
--------------------------------------------------------------------------------
/public/logos/docs-header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/docs-header.png
--------------------------------------------------------------------------------
/public/logos/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/favicon.png
--------------------------------------------------------------------------------
/public/logos/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/header.png
--------------------------------------------------------------------------------
/public/logos/icon-1020x1020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/icon-1020x1020.png
--------------------------------------------------------------------------------
/public/logos/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/icon-192x192.png
--------------------------------------------------------------------------------
/public/logos/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/icon-256x256.png
--------------------------------------------------------------------------------
/public/logos/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/icon-384x384.png
--------------------------------------------------------------------------------
/public/logos/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/icon-512x512.png
--------------------------------------------------------------------------------
/public/logos/twitter-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/twitter-logo.png
--------------------------------------------------------------------------------
/public/logos/twitter-superchain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ethereum-optimism/community-hub/c9eb9fea319362809df5c9321fe24af31bdcac78/public/logos/twitter-superchain.png
--------------------------------------------------------------------------------
/public/service-worker.js:
--------------------------------------------------------------------------------
1 | // Script exists to clear the service worker cache from the old website. Please keep this script
2 | // around until we're confident that users have the latest version of the site. Since Next doesn't
3 | // use service workers it should be safe to keep this around indefinitely if needed.
4 |
5 | self.addEventListener('install', (event) => {
6 | // Force the service worker to take control immediately
7 | self.skipWaiting()
8 | })
9 |
10 | self.addEventListener('activate', (event) => {
11 | // Clear all caches
12 | event.waitUntil(
13 | caches.keys().then(cacheNames => {
14 | return Promise.all(
15 | cacheNames.map(cacheName => {
16 | return caches.delete(cacheName)
17 | })
18 | )
19 | }).then(() => {
20 | return self.clients.claim()
21 | })
22 | )
23 | })
24 |
25 | self.addEventListener('fetch', (event) => {
26 | // Always fetch from the network and do not cache
27 | event.respondWith(
28 | fetch(event.request, { cache: 'no-store' }).catch(() => {
29 | // Optionally, return a fallback if the network request fails
30 | return caches.match(event.request)
31 | })
32 | )
33 | })
34 |
--------------------------------------------------------------------------------
/public/tutorials/cross-dom-bridge-erc20.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | const privateKey = process.env.TUTORIAL_PRIVATE_KEY
7 |
8 | const l1Provider = new ethers.providers.StaticJsonRpcProvider("https://rpc.ankr.com/eth_sepolia")
9 | const l2Provider = new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io")
10 | const l1Wallet = new ethers.Wallet(privateKey, l1Provider)
11 | const l2Wallet = new ethers.Wallet(privateKey, l2Provider)
12 |
13 | const l1Token = "0x5589BB8228C07c4e15558875fAf2B859f678d129"
14 | const l2Token = "0xD08a2917653d4E460893203471f0000826fb4034"
15 |
16 | const erc20ABI = [{ constant: true, inputs: [{ name: "_owner", type: "address" }], name: "balanceOf", outputs: [{ name: "balance", type: "uint256" }], type: "function" }, { inputs: [], name: "faucet", outputs: [], stateMutability: "nonpayable", type: "function" }]
17 |
18 | const l1ERC20 = new ethers.Contract(l1Token, erc20ABI, l1Wallet)
19 |
20 | console.log('Getting L1 tokens from faucet...')
21 | tx = await l1ERC20.faucet()
22 | await tx.wait()
23 |
24 | console.log('L1 balance:')
25 | console.log((await l1ERC20.balanceOf(l1Wallet.address)).toString())
26 |
27 | const oneToken = 1000000000000000000n
28 |
29 | const messenger = new optimism.CrossChainMessenger({
30 | l1ChainId: 11155111, // 11155111 for Sepolia, 1 for Ethereum
31 | l2ChainId: 11155420, // 11155420 for OP Sepolia, 10 for OP Mainnet
32 | l1SignerOrProvider: l1Wallet,
33 | l2SignerOrProvider: l2Wallet,
34 | })
35 |
36 | console.log('Approving L1 tokens for deposit...')
37 | tx = await messenger.approveERC20(l1Token, l2Token, oneToken)
38 | await tx.wait()
39 |
40 | console.log('Depositing L1 tokens...')
41 | tx = await messenger.depositERC20(l1Token, l2Token, oneToken)
42 | await tx.wait()
43 |
44 | console.log('Waiting for deposit to be relayed...')
45 | await messenger.waitForMessageStatus(tx.hash, optimism.MessageStatus.RELAYED)
46 |
47 | console.log('L1 balance:')
48 | console.log((await l1ERC20.balanceOf(l1Wallet.address)).toString())
49 |
50 | const l2ERC20 = new ethers.Contract(l2Token, erc20ABI, l2Wallet)
51 |
52 | console.log('L2 balance:')
53 | console.log((await l2ERC20.balanceOf(l2Wallet.address)).toString())
54 |
55 | console.log('Withdrawing L2 tokens...')
56 | const withdrawal = await messenger.withdrawERC20(l1Token, l2Token, oneToken)
57 | await withdrawal.wait()
58 |
59 | console.log('L2 balance:')
60 | console.log((await l2ERC20.balanceOf(l2Wallet.address)).toString())
61 |
62 | console.log('Waiting for withdrawal to be provable...')
63 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.READY_TO_PROVE)
64 |
65 | console.log('Proving withdrawal...')
66 | await messenger.proveMessage(withdrawal.hash)
67 |
68 | console.log('Waiting for withdrawal to be relayable...')
69 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.READY_FOR_RELAY)
70 |
71 | // Wait for the next block to be produced, only necessary for CI because messenger can return
72 | // READY_FOR_RELAY before the RPC we're using is caught up to the latest block. Waiting for an
73 | // additional block ensures that the RPC is caught up and the message can be relayed. Users
74 | // should not need to do this when running the tutorial.
75 | const maxWaitTime = Date.now() + 120000 // 2 minutes in milliseconds
76 | const currentBlock = await l1Provider.getBlockNumber()
77 | while (await l1Provider.getBlockNumber() < currentBlock + 1) {
78 | if (Date.now() > maxWaitTime) {
79 | throw new Error('Timed out waiting for block to be produced')
80 | }
81 | await new Promise(resolve => setTimeout(resolve, 1000))
82 | }
83 |
84 | console.log('Relaying withdrawal...')
85 | await messenger.finalizeMessage(withdrawal.hash)
86 |
87 | console.log('Waiting for withdrawal to be relayed...')
88 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.RELAYED)
89 |
90 | console.log('L1 balance:')
91 | console.log((await l1ERC20.balanceOf(l1Wallet.address)).toString())
92 |
93 | })()
94 |
--------------------------------------------------------------------------------
/public/tutorials/cross-dom-bridge-eth.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | const privateKey = process.env.TUTORIAL_PRIVATE_KEY
7 |
8 | const l1Provider = new ethers.providers.StaticJsonRpcProvider("https://rpc.ankr.com/eth_sepolia")
9 | const l2Provider = new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io")
10 | const l1Wallet = new ethers.Wallet(privateKey, l1Provider)
11 | const l2Wallet = new ethers.Wallet(privateKey, l2Provider)
12 |
13 | console.log('L1 balance:')
14 | console.log((await l1Wallet.getBalance()).toString())
15 |
16 | const messenger = new optimism.CrossChainMessenger({
17 | l1ChainId: 11155111, // 11155111 for Sepolia, 1 for Ethereum
18 | l2ChainId: 11155420, // 11155420 for OP Sepolia, 10 for OP Mainnet
19 | l1SignerOrProvider: l1Wallet,
20 | l2SignerOrProvider: l2Wallet,
21 | })
22 |
23 | console.log('Depositing ETH...')
24 | tx = await messenger.depositETH(ethers.utils.parseEther('0.006942'))
25 | await tx.wait()
26 |
27 | console.log('Waiting for deposit to be relayed...')
28 | await messenger.waitForMessageStatus(tx.hash, optimism.MessageStatus.RELAYED)
29 |
30 | console.log('L1 balance:')
31 | console.log((await l1Wallet.getBalance()).toString())
32 |
33 | console.log('L2 balance:')
34 | console.log((await l2Wallet.getBalance()).toString())
35 |
36 | console.log('Withdrawing ETH...')
37 | const withdrawal = await messenger.withdrawETH(ethers.utils.parseEther('0.004269'))
38 | await withdrawal.wait()
39 |
40 | console.log('L2 balance:')
41 | console.log((await l2Wallet.getBalance()).toString())
42 |
43 | console.log('Waiting for withdrawal to be provable...')
44 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.READY_TO_PROVE)
45 |
46 | console.log('Proving withdrawal...')
47 | await messenger.proveMessage(withdrawal.hash)
48 |
49 | console.log('Waiting for withdrawal to be relayable...')
50 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.READY_FOR_RELAY)
51 |
52 | // Wait for the next block to be produced, only necessary for CI because messenger can return
53 | // READY_FOR_RELAY before the RPC we're using is caught up to the latest block. Waiting for an
54 | // additional block ensures that the RPC is caught up and the message can be relayed. Users
55 | // should not need to do this when running the tutorial.
56 | const maxWaitTime = Date.now() + 120000 // 2 minutes in milliseconds
57 | const currentBlock = await l1Provider.getBlockNumber()
58 | while (await l1Provider.getBlockNumber() < currentBlock + 1) {
59 | if (Date.now() > maxWaitTime) {
60 | throw new Error('Timed out waiting for block to be produced')
61 | }
62 | await new Promise(resolve => setTimeout(resolve, 1000))
63 | }
64 |
65 | console.log('Relaying withdrawal...')
66 | await messenger.finalizeMessage(withdrawal.hash)
67 |
68 | console.log('Waiting for withdrawal to be relayed...')
69 | await messenger.waitForMessageStatus(withdrawal.hash, optimism.MessageStatus.RELAYED)
70 |
71 | console.log('L1 balance:')
72 | console.log((await l1Wallet.getBalance()).toString())
73 |
74 | })()
75 |
--------------------------------------------------------------------------------
/public/tutorials/cross-dom-solidity.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | const privateKey = process.env.TUTORIAL_PRIVATE_KEY
7 |
8 | const transactionHash = process.env.TUTORIAL_TRANSACTION_HASH
9 |
10 | const l1Provider = new ethers.providers.StaticJsonRpcProvider("https://rpc.ankr.com/eth_sepolia")
11 | const l2Provider = new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io")
12 | const l1Wallet = new ethers.Wallet(privateKey, l1Provider)
13 | const l2Wallet = new ethers.Wallet(privateKey, l2Provider)
14 |
15 | const messenger = new optimism.CrossChainMessenger({
16 | l1ChainId: 11155111, // 11155111 for Sepolia, 1 for Ethereum
17 | l2ChainId: 11155420, // 11155420 for OP Sepolia, 10 for OP Mainnet
18 | l1SignerOrProvider: l1Wallet,
19 | l2SignerOrProvider: l2Wallet,
20 | })
21 |
22 | console.log('Waiting for message to be provable...')
23 | await messenger.waitForMessageStatus(transactionHash, optimism.MessageStatus.READY_TO_PROVE)
24 |
25 | console.log('Proving message...')
26 | await messenger.proveMessage(transactionHash)
27 |
28 | console.log('Waiting for message to be relayable...')
29 | await messenger.waitForMessageStatus(transactionHash, optimism.MessageStatus.READY_FOR_RELAY)
30 |
31 | console.log('Relaying message...')
32 | await messenger.finalizeMessage(transactionHash)
33 |
34 | console.log('Waiting for message to be relayed...')
35 | await messenger.waitForMessageStatus(transactionHash, optimism.MessageStatus.RELAYED)
36 |
37 | })()
38 |
--------------------------------------------------------------------------------
/public/tutorials/cross-dom-solidity.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | interface ICrossDomainMessenger {
5 | function xDomainMessageSender() external view returns (address);
6 | function sendMessage(
7 | address _target,
8 | bytes calldata _message,
9 | uint32 _gasLimit
10 | ) external;
11 | }
12 |
13 | contract Greeter {
14 | ICrossDomainMessenger public immutable MESSENGER;
15 | Greeter public immutable OTHER_GREETER;
16 | mapping (address => string) public greetings;
17 |
18 | constructor(
19 | ICrossDomainMessenger _messenger,
20 | Greeter _otherGreeter
21 | ) {
22 | MESSENGER = _messenger;
23 | OTHER_GREETER = _otherGreeter;
24 | }
25 |
26 | function sendGreeting(string memory _greeting) public {
27 | MESSENGER.sendMessage(
28 | address(OTHER_GREETER),
29 | abi.encodeCall(
30 | this.setGreeting,
31 | (
32 | msg.sender,
33 | _greeting
34 | )
35 | ),
36 | 200000
37 | );
38 | }
39 |
40 | function setGreeting(address _sender, string memory _greeting) public {
41 | require(
42 | msg.sender == address(MESSENGER),
43 | "Greeter: Direct sender must be the CrossDomainMessenger"
44 | );
45 |
46 | require(
47 | MESSENGER.xDomainMessageSender() == address(OTHER_GREETER),
48 | "Greeter: Remote sender must be the other Greeter contract"
49 | );
50 |
51 | greetings[_sender] = _greeting;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/public/tutorials/first-contract.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | contract MyFirstContract {
5 | string public message;
6 |
7 | function setMessage(string memory _message) public {
8 | message = _message;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/public/tutorials/sdk-estimate-costs.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | const privateKey = process.env.TUTORIAL_PRIVATE_KEY
7 |
8 | const provider = optimism.asL2Provider(new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io"))
9 | const wallet = new ethers.Wallet(privateKey, provider)
10 |
11 | const tx = await wallet.populateTransaction({
12 | to: '0x1000000000000000000000000000000000000000',
13 | value: ethers.utils.parseEther('0.00069420'),
14 | gasPrice: await provider.getGasPrice(),
15 | })
16 |
17 | console.log('Estimating L2 cost...')
18 | const gasLimit = tx.gasLimit
19 | const gasPrice = tx.maxFeePerGas
20 | const l2CostEstimate = gasLimit.mul(gasPrice)
21 | console.log(ethers.utils.formatEther(l2CostEstimate))
22 |
23 | console.log('Estimating L1 cost...')
24 | const l1CostEstimate = await provider.estimateL1GasCost(tx)
25 | console.log(ethers.utils.formatEther(l1CostEstimate))
26 |
27 | console.log('Summing total cost...')
28 | const totalSum = l2CostEstimate.add(l1CostEstimate)
29 | console.log(ethers.utils.formatEther(totalSum))
30 |
31 | console.log('Sending transaction...')
32 | const res = await wallet.sendTransaction(tx)
33 | const receipt = await res.wait()
34 | console.log(receipt.transactionHash)
35 |
36 | console.log('Actual L2 cost:')
37 | const l2CostActual = receipt.gasUsed.mul(receipt.effectiveGasPrice)
38 | console.log(ethers.utils.formatEther(l2CostActual))
39 |
40 | console.log('Actual L1 cost:')
41 | const l1CostActual = receipt.l1Fee
42 | console.log(ethers.utils.formatEther(l1CostActual))
43 |
44 | console.log('Actual total cost:')
45 | const totalActual = l2CostActual.add(l1CostActual)
46 | console.log(ethers.utils.formatEther(totalActual))
47 |
48 | console.log('Difference:')
49 | const difference = totalActual.sub(totalSum).abs()
50 | console.log(ethers.utils.formatEther(difference))
51 |
52 | })()
53 |
--------------------------------------------------------------------------------
/public/tutorials/sdk-stack.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | const l1Provider = new ethers.providers.StaticJsonRpcProvider("https://rpc.ankr.com/eth_sepolia")
7 | const l2Provider = new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io")
8 |
9 | const AddressManager = '0x...'
10 | const L1CrossDomainMessenger = '0x...'
11 | const L1StandardBridge = '0x...'
12 | const OptimismPortal = '0x...'
13 | const L2OutputOracle = '0x...'
14 |
15 | const l1ChainId = await l1Provider.getNetwork().then(network => network.chainId)
16 | const l2ChainId = await l2Provider.getNetwork().then(network => network.chainId)
17 |
18 | const messenger = new optimism.CrossChainMessenger({
19 | l1SignerOrProvider: l1Provider,
20 | l2SignerOrProvider: l2Provider,
21 | l1ChainId,
22 | l2ChainId,
23 |
24 | // This is the only part that differs from natively included chains.
25 | contracts: {
26 | l1: {
27 | AddressManager,
28 | L1CrossDomainMessenger,
29 | L1StandardBridge,
30 | OptimismPortal,
31 | L2OutputOracle,
32 |
33 | // Need to be set to zero for this version of the SDK.
34 | StateCommitmentChain: ethers.constants.AddressZero,
35 | CanonicalTransactionChain: ethers.constants.AddressZero,
36 | BondManager: ethers.constants.AddressZero,
37 | }
38 | }
39 | })
40 |
41 | })()
42 |
--------------------------------------------------------------------------------
/public/tutorials/sdk-trace-txns.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | // Need to use Alchemy or something here because the getDepositsByAddress and
7 | // getWithdrawalsByAddress functions use a large block range that the public RPC doesn't support
8 | // because it uses Ankr. Maybe the SDK should be updated to use smaller block ranges depending
9 | // on the RPC but that's a separate issue.
10 | const l1RpcUrl = process.env.L1_RPC_URL
11 | const l2RpcUrl = process.env.L2_RPC_URL
12 |
13 | // Docs CI wallet, will have deposits and withdrawals.
14 | const deposit = '0x5896d6e4a47b465e0d925723bab838c62ef53468139a5e9ba501efd70f90cccb'
15 | const withdrawal = '0x18b8b4022b8d9e380fd89417a2e897adadf31e4f41ca17442870bf89ad024f42'
16 |
17 | const l1Provider = new ethers.providers.StaticJsonRpcProvider(l1RpcUrl)
18 | const l2Provider = new ethers.providers.StaticJsonRpcProvider(l2RpcUrl)
19 |
20 | const messenger = new optimism.CrossChainMessenger({
21 | l1ChainId: 11155111, // 11155111 for Sepolia, 1 for Ethereum
22 | l2ChainId: 11155420, // 11155420 for OP Sepolia, 10 for OP Mainnet
23 | l1SignerOrProvider: l1Provider,
24 | l2SignerOrProvider: l2Provider,
25 | })
26 |
27 | console.log('Grabbing deposit status...')
28 | const depositStatus = await messenger.getMessageStatus(deposit)
29 | console.log(depositStatus)
30 |
31 | console.log('Grabbing deposit receipt...')
32 | const depositReceipt = await messenger.getMessageReceipt(deposit)
33 | console.log(depositReceipt)
34 |
35 | console.log('Grabbing deposit txn...')
36 | const depositTx = await l2Provider.getTransaction(depositReceipt.transactionReceipt.transactionHash)
37 | console.log(depositTx)
38 |
39 | console.log('Grabbing withdrawal status...')
40 | const withdrawalStatus = await messenger.getMessageStatus(withdrawal)
41 | console.log(withdrawalStatus)
42 |
43 | console.log('Grabbing withdrawal receipt...')
44 | const withdrawalReceipt = await messenger.getMessageReceipt(withdrawal)
45 | console.log(withdrawalReceipt)
46 |
47 | console.log('Grabbing withdrawal txn...')
48 | const withdrawalTx = await l1Provider.getTransaction(withdrawalReceipt.transactionReceipt.transactionHash)
49 | console.log(withdrawalTx)
50 |
51 | })()
52 |
--------------------------------------------------------------------------------
/public/tutorials/sdk-view-txns.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const optimism = require("@eth-optimism/sdk")
4 | const ethers = require("ethers")
5 |
6 | // Need to use Alchemy or something here because the getDepositsByAddress and
7 | // getWithdrawalsByAddress functions use a large block range that the public RPC doesn't support
8 | // because it uses Ankr. Maybe the SDK should be updated to use smaller block ranges depending
9 | // on the RPC but that's a separate issue.
10 | const l1RpcUrl = process.env.L1_RPC_URL
11 | const l2RpcUrl = process.env.L2_RPC_URL
12 |
13 | // Docs CI wallet, will have deposits and withdrawals.
14 | const address = '0x5A07785F07D8ba8a9e5323181fBDab51FE9a36c3'
15 |
16 | const l1Provider = new ethers.providers.StaticJsonRpcProvider(l1RpcUrl)
17 | const l2Provider = new ethers.providers.StaticJsonRpcProvider(l2RpcUrl)
18 |
19 | const messenger = new optimism.CrossChainMessenger({
20 | l1ChainId: 11155111, // 11155111 for Sepolia, 1 for Ethereum
21 | l2ChainId: 11155420, // 11155420 for OP Sepolia, 10 for OP Mainnet
22 | l1SignerOrProvider: l1Provider,
23 | l2SignerOrProvider: l2Provider,
24 | })
25 |
26 | console.log('Grabbing deposits...')
27 | const deposits = await messenger.getDepositsByAddress(address)
28 |
29 | console.log('Grabbed deposits:')
30 | for (const deposit of deposits) {
31 | console.log('----------------------------------------------------')
32 | console.log('From: ', deposit.from)
33 | console.log('To: ', deposit.to)
34 | console.log('L1 Token:', deposit.l1Token)
35 | console.log('L2 Token:', deposit.l2Token)
36 | console.log('Amount: ', deposit.amount.toString())
37 | }
38 |
39 | console.log('Grabbing withdrawals...')
40 | const withdrawals = await messenger.getWithdrawalsByAddress(address)
41 |
42 | console.log('Grabbed withdrawals:')
43 | for (const withdrawal of withdrawals) {
44 | console.log('----------------------------------------------------')
45 | console.log('From: ', withdrawal.from)
46 | console.log('To: ', withdrawal.to)
47 | console.log('L1 Token:', withdrawal.l1Token)
48 | console.log('L2 Token:', withdrawal.l2Token)
49 | console.log('Amount: ', withdrawal.amount.toString())
50 | }
51 |
52 | })()
53 |
--------------------------------------------------------------------------------
/public/tutorials/send-tx-from-eth.js:
--------------------------------------------------------------------------------
1 | (async () => {
2 |
3 | const contracts = require("@eth-optimism/contracts-ts")
4 | const utils = require("@eth-optimism/core-utils")
5 | const ethers = require("ethers")
6 |
7 | const privateKey = process.env.TUTORIAL_PRIVATE_KEY
8 |
9 | const l1Provider = new ethers.providers.StaticJsonRpcProvider("https://rpc.ankr.com/eth_sepolia")
10 | const l2Provider = new ethers.providers.StaticJsonRpcProvider("https://sepolia.optimism.io")
11 | const l1Wallet = new ethers.Wallet(privateKey, l1Provider)
12 | const l2Wallet = new ethers.Wallet(privateKey, l2Provider)
13 |
14 | console.log('Initial balance:')
15 | const initialBalance = await l2Wallet.getBalance()
16 | console.log(ethers.utils.formatEther(initialBalance))
17 |
18 | const OptimismPortal = new ethers.Contract(
19 | '0x16Fc5058F25648194471939df75CF27A2fdC48BC',
20 | contracts.optimismPortalABI,
21 | l1Wallet,
22 | )
23 |
24 | console.log('Estimating L1 transaction gas...')
25 | const gas = await OptimismPortal.estimateGas.depositTransaction(
26 | '0x1000000000000000000000000000000000000000', // _to
27 | ethers.utils.parseEther('0.000069420'), // _value
28 | 1e6, // _gasLimit
29 | false, // _isCreation
30 | '0x', // _data
31 | )
32 |
33 | console.log('Sending L1 transaction...')
34 | const tx = await OptimismPortal.depositTransaction(
35 | '0x1000000000000000000000000000000000000000', // _to
36 | ethers.utils.parseEther('0.000069420'), // _value
37 | 1e6, // _gasLimit
38 | false, // _isCreation
39 | '0x', // _data
40 | {
41 | gasLimit: gas.mul(120).div(100) // Add 20% buffer
42 | }
43 | )
44 |
45 | console.log('Waiting for L1 transaction...')
46 | const receipt = await tx.wait()
47 |
48 | console.log('Waiting for L2 transaction to be relayed...')
49 | const deposit = utils.DepositTx.fromL1Receipt(receipt, 0)
50 | await l2Provider.waitForTransaction(deposit.hash())
51 |
52 | console.log('Final balance:')
53 | const finalBalance = await l2Wallet.getBalance()
54 | console.log(ethers.utils.formatEther(finalBalance))
55 |
56 | console.log('Difference:')
57 | const difference = initialBalance.sub(finalBalance)
58 | console.log(ethers.utils.formatEther(difference))
59 |
60 | })()
61 |
--------------------------------------------------------------------------------
/public/tutorials/standard-bridge-custom-token.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.0;
3 |
4 | import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5 | import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
6 | import { IOptimismMintableERC20 } from "https://github.com/ethereum-optimism/optimism/blob/v1.1.4/packages/contracts-bedrock/src/universal/IOptimismMintableERC20.sol";
7 |
8 | contract MyCustomL2Token is IOptimismMintableERC20, ERC20 {
9 | /// @notice Address of the corresponding version of this token on the remote chain.
10 | address public immutable REMOTE_TOKEN;
11 |
12 | /// @notice Address of the StandardBridge on this network.
13 | address public immutable BRIDGE;
14 |
15 | /// @notice Emitted whenever tokens are minted for an account.
16 | /// @param account Address of the account tokens are being minted for.
17 | /// @param amount Amount of tokens minted.
18 | event Mint(address indexed account, uint256 amount);
19 |
20 | /// @notice Emitted whenever tokens are burned from an account.
21 | /// @param account Address of the account tokens are being burned from.
22 | /// @param amount Amount of tokens burned.
23 | event Burn(address indexed account, uint256 amount);
24 |
25 | /// @notice A modifier that only allows the bridge to call.
26 | modifier onlyBridge() {
27 | require(msg.sender == BRIDGE, "MyCustomL2Token: only bridge can mint and burn");
28 | _;
29 | }
30 |
31 | /// @param _bridge Address of the L2 standard bridge.
32 | /// @param _remoteToken Address of the corresponding L1 token.
33 | /// @param _name ERC20 name.
34 | /// @param _symbol ERC20 symbol.
35 | constructor(
36 | address _bridge,
37 | address _remoteToken,
38 | string memory _name,
39 | string memory _symbol
40 | )
41 | ERC20(_name, _symbol)
42 | {
43 | REMOTE_TOKEN = _remoteToken;
44 | BRIDGE = _bridge;
45 | }
46 |
47 | /// @custom:legacy
48 | /// @notice Legacy getter for REMOTE_TOKEN.
49 | function remoteToken() public view returns (address) {
50 | return REMOTE_TOKEN;
51 | }
52 |
53 | /// @custom:legacy
54 | /// @notice Legacy getter for BRIDGE.
55 | function bridge() public view returns (address) {
56 | return BRIDGE;
57 | }
58 |
59 | /// @notice ERC165 interface check function.
60 | /// @param _interfaceId Interface ID to check.
61 | /// @return Whether or not the interface is supported by this contract.
62 | function supportsInterface(bytes4 _interfaceId) external pure virtual returns (bool) {
63 | bytes4 iface1 = type(IERC165).interfaceId;
64 | // Interface corresponding to the updated OptimismMintableERC20 (this contract).
65 | bytes4 iface2 = type(IOptimismMintableERC20).interfaceId;
66 | return _interfaceId == iface1 || _interfaceId == iface2;
67 | }
68 |
69 | /// @notice Allows the StandardBridge on this network to mint tokens.
70 | /// @param _to Address to mint tokens to.
71 | /// @param _amount Amount of tokens to mint.
72 | function mint(
73 | address _to,
74 | uint256 _amount
75 | )
76 | external
77 | virtual
78 | override(IOptimismMintableERC20)
79 | onlyBridge
80 | {
81 | _mint(_to, _amount);
82 | emit Mint(_to, _amount);
83 | }
84 |
85 | /// @notice Prevents tokens from being withdrawn to L1.
86 | function burn(
87 | address,
88 | uint256
89 | )
90 | external
91 | virtual
92 | override(IOptimismMintableERC20)
93 | onlyBridge
94 | {
95 | revert("MyCustomL2Token cannot be withdrawn");
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/public/tutorials/standard-bridge-standard-token.sh:
--------------------------------------------------------------------------------
1 | export TUTORIAL_RPC_URL=https://sepolia.optimism.io
2 |
3 | # Replace this with your L1 ERC-20 token if not using the testing token!
4 | export TUTORIAL_L1_ERC20_ADDRESS=0x5589BB8228C07c4e15558875fAf2B859f678d129
5 |
6 | cast send 0x4200000000000000000000000000000000000012 "createOptimismMintableERC20(address,string,string)" $TUTORIAL_L1_ERC20_ADDRESS "My Standard Demo Token" "L2TKN" --private-key $PRIVATE_KEY --rpc-url $TUTORIAL_RPC_URL --json | jq -r '.logs[0].topics[2]' | cast parse-bytes32-address
7 |
--------------------------------------------------------------------------------
/styles/colors.css:
--------------------------------------------------------------------------------
1 | /* Colors */
2 | :root {
3 |
4 | /* Neutral */
5 | --op-neutral-0: #FBFCFE;
6 | --op-neutral-100: #F2F3F8;
7 | --op-neutral-200: #E0E2EB;
8 | --op-neutral-300: #CBD5E0;
9 | --op-neutral-400: #9195A6;
10 | --op-neutral-500: #636779;
11 | --op-neutral-600: #404454;
12 | --op-neutral-700: #232634;
13 | --op-neutral-800: #0F111A;
14 | --op-neutral-900: #05060B;
15 |
16 | /* Blue */
17 | --op-blue-100: #F0F4FF;
18 | --op-blue-200: #D6E4FF;
19 | --op-blue-300: #AAC9FD;
20 | --op-blue-400: #69A0F7;
21 | --op-blue-500: #3374DB;
22 | --op-blue-600: #0E4CAF;
23 | --op-blue-700: #002D75;
24 | --op-blue-800: #001942;
25 | --op-blue-900: #000E24;
26 |
27 | /* Green-Blue */
28 | --op-green-blue-100: #F0FFFE;
29 | --op-green-blue-200: #D7FFFC;
30 | --op-green-blue-300: #A3F5F1;
31 | --op-green-blue-400: #68DFDC;
32 | --op-green-blue-500: #1FC1BF;
33 | --op-green-blue-600: #008F8F;
34 | --op-green-blue-700: #004B4D;
35 | --op-green-blue-800: #002324;
36 | --op-green-blue-900: #000F0F;
37 |
38 | /* Green */
39 | --op-green-100: #F0FFF1;
40 | --op-green-200: #D6FFDA;
41 | --op-green-300: #ADFBB4;
42 | --op-green-400: #7AF088;
43 | --op-green-500: #39D551;
44 | --op-green-600: #0DA529;
45 | --op-green-700: #006117;
46 | --op-green-800: #002E0E;
47 | --op-green-900: #001909;
48 |
49 | /* Lime */
50 | --op-lime-100: #FAFFEB;
51 | --op-lime-200: #F1FFd1;
52 | --op-lime-300: #DEFDA1;
53 | --op-lime-400: #BFF75F;
54 | --op-lime-500: #8DE40C;
55 | --op-lime-600: #5A9E00;
56 | --op-lime-700: #2F5C00;
57 | --op-lime-800: #152E00;
58 | --op-lime-900: #0A1A00;
59 |
60 | /* Yellow */
61 | --op-yellow-100: #FFFCEB;
62 | --op-yellow-200: #FFF8C7;
63 | --op-yellow-300: #FEF28B;
64 | --op-yellow-400: #FAEB47;
65 | --op-yellow-500: #E5D600;
66 | --op-yellow-600: #999100;
67 | --op-yellow-700: #575400;
68 | --op-yellow-800: #2E2D00;
69 | --op-yellow-900: #1A1A00;
70 |
71 | /* Yellow-Orange */
72 | --op-yellow-orange-100: #FFF9EB;
73 | --op-yellow-orange-200: #FFEDC2;
74 | --op-yellow-orange-300: #FFDE8A;
75 | --op-yellow-orange-400: #FFCB3D;
76 | --op-yellow-orange-500: #E5AC00;
77 | --op-yellow-orange-600: #997500;
78 | --op-yellow-orange-700: #5C4800;
79 | --op-yellow-orange-800: #332900;
80 | --op-yellow-orange-900: #1A1500;
81 |
82 | /* Orange */
83 | --op-orange-100: #FFF6EB;
84 | --op-orange-200: #FFE6C7;
85 | --op-orange-300: #FFCD8F;
86 | --op-orange-400: #FFAF4D;
87 | --op-orange-500: #FA8900;
88 | --op-orange-600: #A85F00;
89 | --op-orange-700: #613900;
90 | --op-orange-800: #331F00;
91 | --op-orange-900: #1A0700;
92 |
93 | /* Orange-Red */
94 | --op-orange-red-100: #FFF6F0;
95 | --op-orange-red-200: #FFE0CC;
96 | --op-orange-red-300: #FFB88F;
97 | --op-orange-red-400: #FF8847;
98 | --op-orange-red-500: #FA5300;
99 | --op-orange-red-600: #AD3700;
100 | --op-orange-red-700: #661F00;
101 | --op-orange-red-800: #330E00;
102 | --op-orange-red-900: #1A0700;
103 |
104 | /* Red */
105 | --op-red-100: #FFF0F1;
106 | --op-red-200: #FFD1D5;
107 | --op-red-300: #FF99A1;
108 | --op-red-400: #FF5C6C;
109 | --op-red-500: #FF0420;
110 | --op-red-600: #B80018;
111 | --op-red-700: #700013;
112 | --op-red-800: #330009;
113 | --op-red-900: #180207;
114 |
115 | /* Pink */
116 | --op-pink-100: #FFF0F9;
117 | --op-pink-200: #FFD1EE;
118 | --op-pink-300: #FE9ADB;
119 | --op-pink-400: #F655C1;
120 | --op-pink-500: #ED1DAE;
121 | --op-pink-600: #BD008A;
122 | --op-pink-700: #700058;
123 | --op-pink-800: #380030;
124 | --op-pink-900: #1A0018;
125 |
126 | /* Blue-Violet */
127 | --op-blue-violet-100: #F6F5FF;
128 | --op-blue-violet-200: #E1DCFE;
129 | --op-blue-violet-300: #BAB1FB;
130 | --op-blue-violet-400: #8579EC;
131 | --op-blue-violet-500: #584DCB;
132 | --op-blue-violet-600: #3129A3;
133 | --op-blue-violet-700: #380C6F;
134 | --op-blue-violet-800: #07044E;
135 | --op-blue-violet-900: #010033;
136 |
137 | /* Violet */
138 | --op-violet-100: #F9F0FF;
139 | --op-violet-200: #EFD7FF;
140 | --op-violet-300: #D6A1FC;
141 | --op-violet-400: #B25FF2;
142 | --op-violet-500: #8D33DB;
143 | --op-violet-600: #6319AE;
144 | --op-violet-700: #232634;
145 | --op-violet-800: #1B043E;
146 | --op-violet-900: #0E001F;
147 | }
148 |
--------------------------------------------------------------------------------
/styles/global.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400..700&display=swap');
2 | @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400..700&display=swap');
3 | @import url("colors.css");
4 | @import url("theme.css");
5 |
6 | /* Override Nextra so content gets more breathing room */
7 | .nextra-content h2 ~ p,
8 | .nextra-content h3 ~ p {
9 | margin-top: 1.0rem;
10 | }
11 |
12 | /* Custom div that can contain Nextra images */
13 | div.md-img p {
14 | height: 100%;
15 | }
16 | div.md-img img {
17 | max-height: 100%;
18 | width: auto;
19 | display: block;
20 | margin: 0 auto;
21 | }
22 |
23 | /* Sidebar links being bold can cause word wrap when selected */
24 | .nextra-sidebar-container li.active > a {
25 | font-weight: normal;
26 | }
27 |
28 | /* Give sidebar separators a little less room */
29 | .nextra-sidebar-container li.nx-my-4 {
30 | margin-bottom: 0;
31 | }
32 |
33 | /* Make shasums actually legible */
34 | span.shasum {
35 | display: block;
36 | max-width: 300px;
37 | background-color: var(--op-neutral-100) !important;
38 | border-radius: 4px;
39 | padding: 0.5rem;
40 | }
41 | html.dark span.shasum {
42 | background-color: var(--op-neutral-700) !important;
43 | }
44 | span.shasum code {
45 | padding-left: 0;
46 | padding-right: 0;
47 | border: none;
48 | background-color: transparent !important;
49 | }
50 |
51 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": false,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "incremental": true,
11 | "esModuleInterop": true,
12 | "module": "esnext",
13 | "moduleResolution": "node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "jsx": "preserve",
17 | "baseUrl": "./",
18 | "paths": {
19 | "@/components/*": ["components/*"],
20 | "@/utils/*": ["utils/*"],
21 | "@/pages/*": ["pages/*"],
22 | }
23 | },
24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
25 | "exclude": ["node_modules"]
26 | }
27 |
--------------------------------------------------------------------------------
/utils/constants.ts:
--------------------------------------------------------------------------------
1 | export const PREDEPLOYS = {
2 | 'L2ToL1MessagePasser': '0x4200000000000000000000000000000000000016',
3 | 'L2CrossDomainMessenger': '0x4200000000000000000000000000000000000007',
4 | 'L2StandardBridge': '0x4200000000000000000000000000000000000010',
5 | 'L2ERC721Bridge': '0x4200000000000000000000000000000000000014',
6 | 'SequencerFeeVault': '0x4200000000000000000000000000000000000011',
7 | 'OptimismMintableERC20Factory': '0x4200000000000000000000000000000000000012',
8 | 'OptimismMintableERC721Factory': '0x4200000000000000000000000000000000000017',
9 | 'L1Block': '0x4200000000000000000000000000000000000015',
10 | 'GasPriceOracle': '0x420000000000000000000000000000000000000F',
11 | 'L1MessageSender': '0x4200000000000000000000000000000000000001',
12 | 'DeployerWhitelist': '0x4200000000000000000000000000000000000002',
13 | 'LegacyERC20ETH': '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000',
14 | 'L1BlockNumber': '0x4200000000000000000000000000000000000013',
15 | 'LegacyMessagePasser': '0x4200000000000000000000000000000000000000',
16 | 'ProxyAdmin': '0x4200000000000000000000000000000000000018',
17 | 'BaseFeeVault': '0x4200000000000000000000000000000000000019',
18 | 'L1FeeVault': '0x420000000000000000000000000000000000001A',
19 | 'GovernanceToken': '0x4200000000000000000000000000000000000042',
20 | 'SchemaRegistry': '0x4200000000000000000000000000000000000020',
21 | 'EAS': '0x4200000000000000000000000000000000000021'
22 | }
23 |
24 | export const LEGACY_CONTRACT_NAMES = [
25 | 'AddressManager',
26 | 'DeployerWhitelist',
27 | 'L1MessageSender',
28 | 'LegacyERC20ETH',
29 | 'LegacyMessagePasser',
30 | 'L1BlockNumber',
31 | ]
32 |
33 | export const CHAIN_CONSTANTS = {
34 | 1: {
35 | explorer: 'https://etherscan.io',
36 | },
37 | 5: {
38 | explorer: 'https://goerli.etherscan.io',
39 | },
40 | 10: {
41 | explorer: 'https://optimistic.etherscan.io',
42 | },
43 | 420: {
44 | explorer: 'https://goerli-optimism.etherscan.io',
45 | },
46 | 11155111: {
47 | explorer: 'https://sepolia.etherscan.io',
48 | },
49 | 11155420: {
50 | explorer: 'https://sepolia-optimism.etherscan.io',
51 | },
52 | }
53 |
--------------------------------------------------------------------------------
/utils/gtag.ts:
--------------------------------------------------------------------------------
1 | export const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID
2 |
3 | // https://developers.google.com/analytics/devguides/collection/gtagjs/pages
4 | export const pageview = (url) => {
5 | (window as any).gtag('config', GA_TRACKING_ID, {
6 | page_path: url,
7 | })
8 | }
9 |
10 | // https://developers.google.com/analytics/devguides/collection/gtagjs/events
11 | export const event = ({ action, category, label, value }) => {
12 | (window as any).gtag('event', action, {
13 | event_category: category,
14 | event_label: label,
15 | value: value,
16 | })
17 | }
18 |
--------------------------------------------------------------------------------
/utils/networks.ts:
--------------------------------------------------------------------------------
1 | interface Chain {
2 | name: string
3 | id: number
4 | explorer: string
5 | }
6 |
7 | interface Network {
8 | mainnet: {
9 | l1: Chain
10 | l2: Chain
11 | }
12 | testnet: {
13 | l1: Chain
14 | l2: Chain
15 | }
16 | }
17 |
18 | const chains: {
19 | [name: string]: Chain
20 | } = {
21 | ethereum: {
22 | name: 'Ethereum',
23 | id: 1,
24 | explorer: 'https://etherscan.io',
25 | },
26 | opmainnet: {
27 | name: 'OP Mainnet',
28 | id: 10,
29 | explorer: 'https://optimistic.etherscan.io',
30 | },
31 | sepolia: {
32 | name: 'Sepolia',
33 | id: 11155111,
34 | explorer: 'https://sepolia.etherscan.io',
35 | },
36 | opsepolia: {
37 | name: 'OP Sepolia',
38 | id: 11155420,
39 | explorer: 'https://sepolia-optimistic.etherscan.io/',
40 | },
41 | }
42 |
43 | const networks: {
44 | [name: string]: Network
45 | } = {
46 | op: {
47 | mainnet: {
48 | l1: chains.ethereum,
49 | l2: chains.opmainnet,
50 | },
51 | testnet: {
52 | l1: chains.sepolia,
53 | l2: chains.opsepolia,
54 | },
55 | }
56 | }
57 |
58 | export const network = networks[process.env.DOCS_NETWORK_NAME || 'op']
59 |
--------------------------------------------------------------------------------
/utils/plugins/remark/remark-lint-no-blocked-characters.mjs:
--------------------------------------------------------------------------------
1 | import { visit } from 'unist-util-visit'
2 | import { lintRule } from 'unified-lint-rule'
3 |
4 | /**
5 | * Custom remark lint rule that blocks certain characters (smart quotes,
6 | * invisible spaces, etc.) from being used in the docs. Helps make the docs
7 | * more consistent and avoids characters that might cause issues on certain
8 | * platforms.
9 | */
10 | const remarkLintNoBlockedCharacters = lintRule(
11 | {
12 | url: 'https://github.com/ethereum-optimism/community-hub',
13 | origin: 'remark-lint:no-blocked-characters'
14 | },
15 | (tree, file) => {
16 | visit(tree, 'text', (node) => {
17 | const characterRegex = /[“”‘’ ]/g
18 | const replacements = {
19 | '“': '"',
20 | '”': '"',
21 | '‘': "'",
22 | '’': "'",
23 | ' ': " "
24 | }
25 |
26 | let match
27 | while ((match = characterRegex.exec(node.value)) !== null) {
28 | file.message(
29 | `Blocked character found: (${match[0]}) at index ${match.index}`,
30 | node
31 | )
32 |
33 | node.value = node.value.substring(0, match.index) + replacements[match[0]] + node.value.substring(match.index + 1)
34 | file.messages[file.messages.length - 1].fix = {
35 | range: [node.position.start.offset, node.position.end.offset],
36 | text: node.value
37 | }
38 | }
39 | })
40 | }
41 | )
42 |
43 | export default remarkLintNoBlockedCharacters
44 |
--------------------------------------------------------------------------------
/utils/schemas/page.schema.yaml:
--------------------------------------------------------------------------------
1 | title: Page
2 |
3 | properties:
4 | title:
5 | type: string
6 | lang:
7 | type: string
8 | description:
9 | type: string
10 |
11 | required:
12 | - title
13 | - lang
14 | - description
15 |
--------------------------------------------------------------------------------
/words.txt:
--------------------------------------------------------------------------------
1 | Avello
2 | Badgeholder
3 | badgeholder
4 | Badgeholder's
5 | badgeholder's
6 | Badgeholders
7 | badgeholders
8 | Beylin
9 | Blockscout
10 | blockspace
11 | Charmverse
12 | Farcaster
13 | farcaster
14 | Flipside
15 | Fraxtal
16 | Gamifying
17 | hackathon
18 | Haus
19 | Insta
20 | intersubjective
21 | ipfs
22 | Jing
23 | judgements
24 | Lisk
25 | longterm
26 | mentees
27 | Metagovernance
28 | modularly
29 | nextra
30 | Numba
31 | numba
32 | offchain
33 | Ostrom
34 | Permissionless
35 | permissionless
36 | permissionlessly
37 | personhood
38 | predeploy
39 | quadraticvote
40 | redelegate
41 | Relatedly
42 | retrofunding
43 | Rpgf
44 | rpgf
45 | Solana
46 | soulbound
47 | Superchain
48 | superchain
49 | sybils
50 | Titcomb
51 | tokenholders
52 | Tokenomics
53 | undelegate
54 | unwrappping
55 | upvoted
56 | Vitalik
57 | Vitalik's
58 | Warpcast
59 | WLTA
60 | workstreams
61 | Xaddies
62 | xaddies
63 | Xterio
64 | Zora
65 |
--------------------------------------------------------------------------------