Full Code of inkonchain/docs for AI

main 7668c004c0bb cached
121 files
178.9 KB
52.5k tokens
31 symbols
1 requests
Download .txt
Showing preview only (204K chars total). Download the full file or copy to clipboard to get everything.
Repository: inkonchain/docs
Branch: main
Commit: 7668c004c0bb
Files: 121
Total size: 178.9 KB

Directory structure:
gitextract_zhocjkyg/

├── .dockerignore
├── .eslintrc.js
├── .github/
│   ├── CODEOWNERS
│   ├── actions/
│   │   └── base-setup/
│   │       └── action.yaml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── cicd.yaml
│       └── securesdlc.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierrc
├── .vscode/
│   └── settings.json
├── Dockerfile
├── README.md
├── amplify.yml
├── cspell/
│   └── project-words.txt
├── cspell.json
├── eslint.config.js
├── global-env.d.ts
├── next-env.d.ts
├── next-sitemap.config.js
├── next.config.mjs
├── package.json
├── postcss.config.js
├── src/
│   ├── components/
│   │   ├── AddNetworkButton.tsx
│   │   ├── BlockExplorersContentWrapper.tsx
│   │   ├── BridgesContentWrapper.tsx
│   │   ├── Button.tsx
│   │   ├── CommunityContentWrapper.tsx
│   │   ├── CopyButton.tsx
│   │   ├── CopyableCode.tsx
│   │   ├── CrosschainContentWrapper.tsx
│   │   ├── DownloadButton.tsx
│   │   ├── FaucetsContentWrapper.tsx
│   │   ├── Footer.tsx
│   │   ├── Head.tsx
│   │   ├── MultisigContentWrapper.tsx
│   │   ├── SidebarTitleComponent.tsx
│   │   ├── TestnetDisclaimer.tsx
│   │   ├── ThemeToggle.tsx
│   │   └── Toc.tsx
│   ├── content/
│   │   └── shared/
│   │       ├── _badges.mdx
│   │       ├── block-explorers-content.mdx
│   │       ├── bridges-content.mdx
│   │       ├── community-content.mdx
│   │       ├── crosschain-content.mdx
│   │       ├── faucets-content.mdx
│   │       └── multisig-content.mdx
│   ├── fonts.ts
│   ├── globals.css
│   ├── icons/
│   │   ├── Check.tsx
│   │   ├── ConnectedPulse.tsx
│   │   ├── Download.tsx
│   │   ├── InkLogo.tsx
│   │   ├── Moon.tsx
│   │   ├── Pencil.tsx
│   │   ├── Sun.tsx
│   │   └── ThumbUp.tsx
│   ├── pages/
│   │   ├── 404.mdx
│   │   ├── 500.mdx
│   │   ├── _app.mdx
│   │   ├── _meta.json
│   │   ├── build/
│   │   │   ├── _meta.json
│   │   │   ├── getting-started.mdx
│   │   │   ├── ink-kit.mdx
│   │   │   ├── onchain-clients.mdx
│   │   │   ├── transaction-fees.mdx
│   │   │   ├── tutorials/
│   │   │   │   ├── _meta.json
│   │   │   │   ├── deploying-a-smart-contract/
│   │   │   │   │   ├── _meta.json
│   │   │   │   │   ├── foundry.mdx
│   │   │   │   │   ├── hardhat.mdx
│   │   │   │   │   └── remix.mdx
│   │   │   │   ├── deploying-a-superchainerc20.mdx
│   │   │   │   ├── shipping-on-the-superchain.mdx
│   │   │   │   └── verify-smart-contract.mdx
│   │   │   ├── tutorials.mdx
│   │   │   └── verify.mdx
│   │   ├── faq.mdx
│   │   ├── general/
│   │   │   ├── _meta.json
│   │   │   ├── about.mdx
│   │   │   ├── connect-wallet.mdx
│   │   │   ├── faucet.mdx
│   │   │   ├── network-information.mdx
│   │   │   ├── support/
│   │   │   │   ├── _meta.json
│   │   │   │   └── troubleshooting.mdx
│   │   │   └── support.mdx
│   │   ├── index.mdx
│   │   ├── ink-builder-program/
│   │   │   ├── _meta.json
│   │   │   ├── echo-program.mdx
│   │   │   ├── forge-program.mdx
│   │   │   ├── office-hours.mdx
│   │   │   ├── overview.mdx
│   │   │   └── spark-program.mdx
│   │   ├── status.mdx
│   │   ├── tools/
│   │   │   ├── _meta.json
│   │   │   ├── account-abstraction.mdx
│   │   │   ├── block-explorers.mdx
│   │   │   ├── bridges.mdx
│   │   │   ├── crosschain.mdx
│   │   │   ├── faucets.mdx
│   │   │   ├── indexers.mdx
│   │   │   ├── multisig.mdx
│   │   │   ├── oracles.mdx
│   │   │   ├── rpc.mdx
│   │   │   ├── security.mdx
│   │   │   └── vrf.mdx
│   │   ├── useful-information/
│   │   │   ├── _meta.json
│   │   │   ├── contracts.mdx
│   │   │   ├── ink-contracts.mdx
│   │   │   ├── ink-token-contracts.mdx
│   │   │   └── the-superchain.mdx
│   │   └── work-with-ink/
│   │       ├── _meta.json
│   │       ├── brand-kit.mdx
│   │       ├── community.mdx
│   │       └── contributing.mdx
│   ├── types/
│   │   └── mdx.d.ts
│   └── utils/
│       ├── networks.ts
│       └── urls.ts
├── tailwind.config.js
├── theme.config.tsx
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
node_modules
.github
.next
dist
.env*
*.log 
.git
.gitignore


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  extends: ["next/core-web-vitals", "prettier"],
  plugins: ["simple-import-sort"],
  rules: {
    "react-hooks/exhaustive-deps": "error",
    "import/newline-after-import": [
      "error",
      {
        count: 1,
      },
    ],
    // increase the severity of rules so they are auto-fixable
    "simple-import-sort/imports": [
      "error",
      {
        groups: [
          // Packages `react` related packages come first.
          ["^react", "^@?\\w"],
          // Internal packages.
          ["^(@)(/.*|$)"],
          // Side effect imports.
          ["^\\u0000"],
          // Parent imports. Put `..` last.
          ["^\\.\\.(?!/?$)", "^\\.\\./?$"],
          // Other relative imports. Put same-folder imports and `.` last.
          ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
          // Style imports.
          ["^.+\\.?(css)$"],
        ],
      },
    ],
    "simple-import-sort/exports": "error",
  },
};


================================================
FILE: .github/CODEOWNERS
================================================
* @inkonchain/developers-secret

================================================
FILE: .github/actions/base-setup/action.yaml
================================================
name: 'Basic Setup'
description: 'Basic setup with pnpm and cache restore'
runs:
  using: "composite"
  steps:
    - name: Setup pnpm
      uses: pnpm/action-setup@v2
      with:
        run_install: false

    - name: Setup Node 22
      uses: actions/setup-node@v4
      with:
        node-version: "22.x"
        cache: "pnpm"

    - name: Add pnpm store path to env var
      id: pnpm-cache
      shell: bash
      run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

    - name: Restore Cache
      uses: actions/cache@v4
      with:
        path: |
          ${{ steps.pnpm-cache.outputs.STORE_PATH }}
          **/node_modules
        key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
        restore-keys: |
          ${{ runner.os }}-pnpm-store-



================================================
FILE: .github/dependabot.yaml
================================================
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"

================================================
FILE: .github/workflows/cicd.yaml
================================================
name: CI/CD Workflow
on:
  pull_request:
  push:
    branches:
      - main

jobs:
  securesdlc:
    uses: inkonchain/.github/.github/workflows/securesdlc.yml@main
    secrets: inherit

  install_modules:
    needs: securesdlc
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: volta-cli/action@v4
      - uses: pnpm/action-setup@v4
        with:
          run_install: false
      - uses: actions/setup-node@v4
        with:
          node-version: "22.x"
          cache: "pnpm"
      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Add pnpm store path to env var
        id: pnpm-cache
        shell: bash
        run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
      - name: Cache node modules
        uses: actions/cache@v4
        with:
          path: |
            ${{ steps.pnpm-cache.outputs.STORE_PATH }}
            **/node_modules
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

  js-lint:
    needs: install_modules
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/base-setup
        name: Base Setup
      - name: JS linting
        run: pnpm run lint:js

  md-lint:
    needs: install_modules
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/base-setup
        name: Base Setup
      - name: MDX linting
        run: pnpm run lint:mdx

  format:
    needs: install_modules
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/base-setup
        name: Base Setup
      - name: Run formatting
        run: pnpm run format:js

  # spell-check:
  #   needs: install_modules
  #   runs-on: ubuntu-latest
  #   steps:
  #     - uses: actions/checkout@v4
  #     - uses: ./.github/actions/base-setup
  #       name: Base Setup
  #     - name: Run Spellcheck
  #       run: pnpm run spellcheck:lint

  build:
    needs: install_modules
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/base-setup
        name: Base Setup
      - name: Building app
        run: pnpm run build
      - name: Cache build
        uses: actions/cache/save@v4
        with:
          path: .next
          key: ${{ runner.os }}-build-store-${{ hashFiles('.next') }}

  docker-publish:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ghcr.io/inkonchain/docs:latest

      - name: Log out from GitHub Container Registry
        run: docker logout ghcr.io


================================================
FILE: .github/workflows/securesdlc.yml
================================================
name: Nautilus SecureSDLC Reusable
run-name: "[Nautilus SecureSDLC Reusable] Ref:${{ github.ref_name }} Event:${{ github.event_name }}"

on:
  workflow_dispatch: {}
  workflow_call: {}
  push:
    branches: [ main ]

jobs:
  securesdlc-umbrella:
    permissions:
      contents: read # for actions/checkout to fetch code
      security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
      actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status  
    uses: nautilus-wraith/securesdlc-umbrella/.github/workflows/securesdlc-umbrella.yml@release-stable
    secrets:
      SEMGREP_APP_URL: ${{ secrets.SEMGREP_APP_URL }}
      SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
      SDLC_SLACK_NOTIFICATIONS: ${{ secrets.SDLC_SLACK_NOTIFICATIONS }}


================================================
FILE: .gitignore
================================================
# packages
node_modules

# os specific files
.DS_Store

# build artifacts
.next
public/robots.txt
public/sitemap-0.xml
public/sitemap.xml

# log files
*.log

out


================================================
FILE: .npmrc
================================================
# https://www.npmjs.com/package/next-sitemap#building-sitemaps-with-pnpm
enable-pre-post-scripts=true


================================================
FILE: .nvmrc
================================================
v22.14.0


================================================
FILE: .prettierrc
================================================
{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": true,
  "singleQuote": false
}

================================================
FILE: .vscode/settings.json
================================================
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "[typescriptreact, javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.codeActionsOnSave": {
      "source.fixAll.eslint": "explicit"
    }
  },
  "[plaintext]": {
    "editor.formatOnSave": false
  },
  "editor.formatOnPaste": false,
  "prettier.useEditorConfig": false,
  "prettier.useTabs": false,
  "prettier.configPath": ".prettierrc",
  "prettier.prettierPath": "node_modules/prettier"
}


================================================
FILE: Dockerfile
================================================
FROM node:22-alpine
RUN corepack enable && corepack prepare pnpm@9.12.3 --activate
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
RUN adduser --system --uid 1001 docs-user
USER docs-user
EXPOSE 3000
CMD ["pnpm", "start"]


================================================
FILE: README.md
================================================
[![Twitter](https://img.shields.io/twitter/follow/inkonchain)](https://x.com/inkonchain)

# InkChain Documentation App

An advanced, streamlined documentation platform built with Next.js and Nextra for InkChain.

## 🚀 Build & Run

1. **Build Docker image**:
   ```bash
   docker build -t docs .
   ```

2. **Run Docker container**:
   ```bash
   docker run -p 3000:3000 docs
   ```

## 📋 Requirements

* **Node.js**: v20.11.0 or higher

## 📖 Overview

This is a documentation application powered by [Nextra](https://nextra.site/) and built on [Next.js](https://nextjs.org/). Nextra simplifies the creation of documentation sites, allowing us to leverage the **Pages Router** for efficient navigation and routing. Currently, due to compatibility limitations, we have not yet upgraded to the App Router.

## 🏁 Getting Started

To get started with local development:

1. **Clone the repository**
2. **Install dependencies**:
   ```bash
   pnpm install
   ```
3. **Start development server**:
   ```bash
   pnpm run dev
   ```

## 🛠 Tooling

Our development setup includes multiple tools to maintain high-quality code and documentation:

* **[CSpell](https://cspell.org/)**: Real-time spell checking to maintain documentation accuracy.
* **[Remark](https://remark.js.org/)**: Processes and renders Markdown content with added plugins.
* **[ESLint](https://eslint.org/)**: Ensures code quality by catching potential issues.
* **[Prettier](https://prettier.io/)**: Enforces consistent code formatting.
* **[Tailwind CSS](https://tailwindcss.com/)**: Utility-first CSS framework for fast, responsive UI development.

## 🚦 CI/CD Pipeline

Our CI/CD setup utilizes GitHub Actions to run automated checks on every pull request (PR):

* **js-lint**: Ensures proper JavaScript code formatting with ESLint.
* **md-lint**: Checks Markdown code formatting with Remark.
* **format**: Enforces consistent code style with Prettier.
* **spell-check**: Uses CSpell to verify correct spelling in the documentation. For any unique terms (e.g., "InkChain"), add them to the [`./cspell/project-words.txt`](./cspell/project-words.txt) file to whitelist.

## 🌐 Feature Branch Deployment

For every new PR, our CI/CD pipeline deploys a temporary environment via **AWS Amplify**. This real-time deployment enables live testing and review of changes before merging, ensuring a smoother workflow. The deployment URL is automatically provided within the PR checks, allowing team members to interact with new features.

## 🚀 Production Deployment

The `main` branch is configured for automatic continuous deployment via **AWS Amplify**. Every merge triggers a new build and deployment, ensuring that the latest version of the documentation is available to users without manual intervention.


================================================
FILE: amplify.yml
================================================
version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm install -g pnpm
        - pnpm install --frozen-lockfile
    build:
      commands:
        - pnpm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*


================================================
FILE: cspell/project-words.txt
================================================
Blockscout
inkchain
Superchain’s
blockscout
amet
adipiscing
elit
eiusmod
tempor
incididunt
labore
dolore
aliqua
enim
veniam
quis
nostrud
ullamco
laboris
aliquip
commodo
consequat
Duis
aute
irure
reprehenderit
voluptate
velit
cillum
fugiat
nulla
pariatur
Excepteur
occaecat
cupidatat
proident
sunt
officia
deserunt
mollit
laborum
CSpell: Files checked: 11, Issues found: 42 in 4 files.
adipiscing
aliqua
aliquip
amet
aute
Blockscout
blockscout
cillum
commodo
consequat
cupidatat
deserunt
dolore
Duis
eiusmod
elit
enim
Excepteur
fugiat
incididunt
irure
labore
laboris
laborum
mollit
nostrud
nulla
occaecat
officia
pariatur
proident
quis
reprehenderit
sunt
tempor
ullamco
velit
veniam
voluptate
untar
NVME
nextra
Gelato
QuickNode
Superchain
Sepolia
userbase
synergizing
vewy
scawy
Brid
Rabby
Protofire
Zerodev
Permissionless
Crosschain
Supersim
verif
Sourcify
sourcify
sourcecode
Superbridge
inkonchain
Drand
Viem
viem
hackathons
Goldsky
Multicall
Mintable
Permissioned
preinstalls
multisignatures
baselayer
Smol
foundryup
inksepolia
INKSEPOLIA
commoditizes
multichain
Routescan
Lurus
wordmark
SEDA
shadcn
Chakra
wagmi
superchainerc
krakenfx
Remappings
remappings
blocktimes
cypherpunk
predeploy
DYOR
subsecond
microgrants
Microgrants
Inkubator
microgrant
Chainlink
cryptoeconomically
drpc
Hypernative
Hypernative's
predeterministic
sfrx


================================================
FILE: cspell.json
================================================
{
  "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",
  "version": "0.2",
  "dictionaryDefinitions": [
    {
      "name": "project-words",
      "path": "./cspell/project-words.txt",
      "addWords": true
    }
  ],
  "dictionaries": [
    "project-words"
  ],
  "ignorePaths": [
    "node_modules",
    "/project-words.txt"
  ]
}

================================================
FILE: eslint.config.js
================================================
const simpleImportSort = require("eslint-plugin-simple-import-sort");
const path = require("node:path");
const js = require("@eslint/js");
const { FlatCompat } = require("@eslint/eslintrc");

const baseDirectory = __dirname;
const compat = new FlatCompat({
  baseDirectory: baseDirectory,
  recommendedConfig: js.configs.recommended,
  allConfig: js.configs.all,
});

module.exports = [
  // Default ignores - node_modules is ignored by default in recent ESLint, but good to be explicit.
  // Add other ignores if needed (e.g., build output directories like .next)
  {
    ignores: ["**/node_modules/**", "**/.next/**", "**/out/**"],
  },

  // Spread the configurations from extended configs
  ...compat.extends("next/core-web-vitals", "prettier"),

  // Configuration for JS/JSX/TS/TSX files
  {
    files: ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"],
    plugins: {
      // Use the imported object directly as the key
      simpleImportSort: simpleImportSort,
    },
    rules: {
      "react-hooks/exhaustive-deps": "error",
      "import/newline-after-import": ["error", { count: 1 }],
      "simpleImportSort/imports": [
        "error",
        {
          groups: [
            ["^react", "^@?\\w"],
            ["^(@)(/.*|$)"],
            ["^\\u0000"],
            ["^\\.\\.(?!/?$)", "^\\.\\./?$"],
            ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
            ["^.+\\.?(css)$"],
          ],
        },
      ],
      "simpleImportSort/exports": "error",
    },
  },
];


================================================
FILE: global-env.d.ts
================================================
interface Window {
  ethereum: any;
}


================================================
FILE: next-env.d.ts
================================================
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference path="./.next/types/routes.d.ts" />

// NOTE: This file should not be edited
// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.


================================================
FILE: next-sitemap.config.js
================================================
/** @type {import('next-sitemap').IConfig} */
module.exports = {
  exclude: ['*/_meta'],
  siteUrl: 'https://docs.inkonchain.com',
  generateRobotsTxt: true,
  robotsTxtOptions: {
    policies: [
      {
        userAgent: '*',
        allow: '/',
      },
    ]
  }
}


================================================
FILE: next.config.mjs
================================================
import nextra from "nextra";
import path from "path";
import remarkCodeImport from "remark-code-import";
import { fileURLToPath } from "url";

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const withNextra = nextra({
  theme: "nextra-theme-docs",
  themeConfig: "./theme.config.tsx",
  defaultShowCopyCode: true,
  mdxOptions: {
    remarkPlugins: [remarkCodeImport],
  },
});

const config = withNextra({
  eslint: {
    ignoreDuringBuilds: true,
  },
  images: {
    unoptimized: true,
  },
  webpack: (config) => {
    config.resolve.alias = {
      ...config.resolve.alias,
      "@": path.join(__dirname, "src"),
    };
    return config;
  },
  experimental: {
    mdxRs: true,
  },
});

export default config;


================================================
FILE: package.json
================================================
{
  "name": "inkchain-docs",
  "volta": {
    "node": "22.14.0",
    "pnpm": "9.12.3"
  },
  "packageManager": "pnpm@9.12.3",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "postbuild": "next-sitemap",
    "start": "next start",
    "lint": "pnpm run lint:js && pnpm run lint:mdx && pnpm run format:js:check && pnpm run spellcheck:lint",
    "lint:fix": "pnpm run lint:js:fix && pnpm run lint:mdx:fix && pnpm run format:js && pnpm run spellcheck:fix",
    "lint:js": "eslint ./src theme.config.tsx --ext js,jsx,ts,tsx",
    "lint:js:fix": "eslint ./src theme.config.tsx --fix --ext js,jsx,ts,tsx",
    "format:js": "prettier --write \"**/*.{ts,tsx,css,scss}\"",
    "format:js:check": "prettier --check \"**/*.{ts,tsx,css,scss}\"",
    "lint:mdx": "remark . --quiet --frail",
    "lint:mdx:fix": "remark . -o --quiet",
    "spellcheck:lint": "cspell lint \"**/*.mdx\"",
    "spellcheck:fix": "cspell --words-only --unique \"**/*.mdx\" | sort --ignore-case | uniq"
  },
  "remarkConfig": {
    "settings": {
      "emphasis": "*",
      "strong": "*"
    },
    "plugins": [
      "remark-frontmatter",
      "remark-preset-lint-consistent",
      "remark-preset-lint-recommended",
      "remark-gfm",
      [
        "remark-mdx",
        {
          "commonmark": true,
          "extensions": [
            ".mdx"
          ],
          "jsx": true
        }
      ],
      "remark-lint-frontmatter-schema",
      "remark-lint-heading-style",
      "remark-lint-list-item-indent",
      "remark-lint-table-cell-padding",
      "remark-lint-table-pipe-alignment",
      "remark-lint-table-pipes",
      "remark-lint-unordered-list-marker-style"
    ]
  },
  "dependencies": {
    "clsx": "2.1.1",
    "next": "15.5.10",
    "next-sitemap": "4.2.3",
    "next-themes": "0.4.6",
    "nextra": "2.13.4",
    "nextra-theme-docs": "2.13.4",
    "react": "18.3.1",
    "react-dom": "18.3.1"
  },
  "devDependencies": {
    "@eslint/eslintrc": "3.3.1",
    "@eslint/js": "9.32.0",
    "@types/node": "24.1.0",
    "@types/react": "18.3.12",
    "@types/react-dom": "18.3.1",
    "autoprefixer": "10.4.21",
    "cspell": "9.2.0",
    "eslint": "9.32.0",
    "eslint-config-next": "15.5.10",
    "eslint-config-prettier": "10.1.8",
    "eslint-plugin-import": "2.32.0",
    "eslint-plugin-mdx": "3.6.2",
    "eslint-plugin-simple-import-sort": "12.1.1",
    "mdx": "0.3.1",
    "postcss": "8.5.6",
    "prettier": "3.6.2",
    "remark": "15.0.1",
    "remark-cli": "12.0.1",
    "remark-code-import": "1.2.0",
    "remark-frontmatter": "5.0.0",
    "remark-gfm": "4.0.1",
    "remark-lint-frontmatter-schema": "3.15.4",
    "remark-lint-heading-style": "4.0.1",
    "remark-lint-list-item-indent": "4.0.1",
    "remark-lint-table-cell-padding": "5.1.1",
    "remark-lint-table-pipe-alignment": "4.1.1",
    "remark-lint-table-pipes": "5.0.1",
    "remark-lint-unordered-list-marker-style": "4.0.1",
    "remark-mdx": "3.1.0",
    "remark-preset-lint-consistent": "6.0.1",
    "remark-preset-lint-recommended": "7.0.1",
    "tailwindcss": "3.4.17",
    "typescript": "5.8.3"
  }
}


================================================
FILE: postcss.config.js
================================================
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}


================================================
FILE: src/components/AddNetworkButton.tsx
================================================
import { CheckIcon } from "@/icons/Check";
import { ConnectedPulse } from "@/icons/ConnectedPulse";
import {
  networkParams,
  NetworkType,
  useNetwork,
  UseNetworkResponse,
} from "@/utils/networks";

import { Button } from "./Button";

interface AddNetworkButtonProps {
  network: NetworkType;
  heading: string;
}

export const AddNetworkButton = ({
  network,
  heading,
}: AddNetworkButtonProps) => {
  const { isWalletInstalled, isAdded, isSelected, addNetwork, selectNetwork } =
    useNetwork(network);

  return (
    <div className="h-36">
      <div className="flex flex-col gap-2">
        <h3 className="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl relative flex gap-2 items-center">
          <span>{heading}</span>
          {isSelected && <ConnectedPulse className="size-6" />}
          <a
            href="#mainnet"
            id="mainnet"
            className="subheading-anchor"
            aria-label="Permalink for this section"
          ></a>
        </h3>
        <AddNetworkButtonContent
          isWalletInstalled={isWalletInstalled}
          isAdded={isAdded}
          isSelected={isSelected}
          addNetwork={addNetwork}
          selectNetwork={selectNetwork}
          network={network}
        />
      </div>
    </div>
  );
};
const AddNetworkButtonContent = ({
  isWalletInstalled,
  isAdded,
  isSelected,
  addNetwork,
  selectNetwork,
  network,
}: UseNetworkResponse & { network: NetworkType }) => {
  if (!isWalletInstalled) {
    return <p>No wallet connected</p>;
  }

  if (isAdded && isSelected) {
    return (
      <span className="text-green-500 font-bold flex gap-1 items-center">
        <span>Network added & selected.</span>
      </span>
    );
  }

  if (isAdded) {
    return (
      <span className="text-green-500 font-bold flex flex-col gap-1">
        <p>Network added.</p>
        <p
          onClick={selectNetwork}
          className="underline hover:cursor-pointer hover:opacity-90"
        >
          Click here to select it.
        </p>
      </span>
    );
  }

  return (
    <Button variant="primary" onClick={addNetwork} className="w-60 mt-2">
      Add {networkParams[network].chainName}
    </Button>
  );
};


================================================
FILE: src/components/BlockExplorersContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import BlockExplorersContent from "@/content/shared/block-explorers-content.mdx";

export function BlockExplorersContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <BlockExplorersContent components={components} />;
}


================================================
FILE: src/components/BridgesContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import BridgesContent from "@/content/shared/bridges-content.mdx";

export function BridgesContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <BridgesContent components={components} />;
}


================================================
FILE: src/components/Button.tsx
================================================
import { PropsWithChildren } from "react";
import clsx from "clsx";

interface ButtonProps {
  variant: "primary" | "secondary";
  onClick?: () => void;
  className?: string;
}

export const Button: React.FC<PropsWithChildren<ButtonProps>> = ({
  children,
  variant,
  onClick,
  className,
}) => {
  return (
    <button
      className={clsx(
        "font-bold py-5 px-8 inline-flex items-center justify-center transition-all rounded-full text-xl backdrop-blur-[32px]",
        {
          "text-magic-white bg-magic-purple hover:opacity-90 shadow-[0px_3px_84px_-10px_rgba(63,107,175,0.5)]":
            variant === "primary",
          "text-magic-purple bg-magic-semi-deep-purple/15 shadow-[0px_3px_84px_-10px_rgba(63,107,175,0.5)]":
            variant === "secondary",
        },
        className
      )}
      onClick={onClick}
    >
      {children}
    </button>
  );
};


================================================
FILE: src/components/CommunityContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import CommunityContent from "@/content/shared/community-content.mdx";

export function CommunityContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <CommunityContent components={components} />;
}


================================================
FILE: src/components/CopyButton.tsx
================================================
"use client";

import { useState } from "react";

interface CopyButtonProps {
  text: string;
  className?: string;
}

export default function CopyButton({ text, className = "" }: CopyButtonProps) {
  const [copied, setCopied] = useState(false);

  const handleCopy = async () => {
    try {
      await navigator.clipboard.writeText(text);
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    } catch (err) {
      console.error("Failed to copy:", err);
    }
  };

  return (
    <button
      onClick={handleCopy}
      className={`ml-2 p-1 rounded transition-colors h-[24px] min-w-[24px] flex items-center justify-center text-xs ${
        copied
          ? "bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-100"
          : "bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-500 dark:text-gray-400"
      } ${className}`}
      aria-label={copied ? "Copied!" : "Copy to clipboard"}
    >
      {copied ? (
        <span className="px-1">Copied!</span>
      ) : (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          width="16"
          height="16"
          viewBox="0 0 24 24"
          fill="none"
          stroke="currentColor"
          strokeWidth="2"
          strokeLinecap="round"
          strokeLinejoin="round"
        >
          <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
          <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
        </svg>
      )}
    </button>
  );
}


================================================
FILE: src/components/CopyableCode.tsx
================================================
"use client";

import CopyButton from "./CopyButton";

interface CopyableCodeProps {
  code: string;
  display?: string;
  className?: string;
  href?: string;
}

export default function CopyableCode({
  code,
  display,
  className = "",
  href,
}: CopyableCodeProps) {
  const CodeContent = () => (
    <code className="bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-white text-sm rounded-md px-2 py-0.5">
      {display || code}
    </code>
  );

  return (
    <span className={`inline-flex items-center gap-1 ${className}`}>
      {href ? (
        <a
          href={href}
          target="_blank"
          rel="noopener noreferrer"
          className="inline-flex items-center"
        >
          <CodeContent />
        </a>
      ) : (
        <CodeContent />
      )}
      <CopyButton text={code} />
    </span>
  );
}


================================================
FILE: src/components/CrosschainContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import CrosschainContent from "@/content/shared/crosschain-content.mdx";

export function CrosschainContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <CrosschainContent components={components} />;
}


================================================
FILE: src/components/DownloadButton.tsx
================================================
import { PropsWithChildren } from "react";

import { DownloadIcon } from "@/icons/Download";

import { Button } from "./Button";

interface DownloadButtonProps {
  sourceFilePath: string;
  destinationFileName: string;
  label: string;
  size: string;
}

export const DownloadButton: React.FC<
  PropsWithChildren<DownloadButtonProps>
> = ({ sourceFilePath, destinationFileName, label, size }) => {
  return (
    <Button
      variant="primary"
      onClick={() => {
        const link = document.createElement("a");
        link.href = sourceFilePath;
        link.download = destinationFileName;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }}
    >
      <div className="flex items-center gap-2">
        <DownloadIcon />
        <span className="text-sm sm:text-xl">{label}</span>
        <span className="text-sm sm:text-xl text-magic-soft-pink">{size}</span>
      </div>
    </Button>
  );
};


================================================
FILE: src/components/FaucetsContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import FaucetsContent from "@/content/shared/faucets-content.mdx";

export function FaucetsContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <FaucetsContent components={components} />;
}


================================================
FILE: src/components/Footer.tsx
================================================
import { ThemeToggle } from "./ThemeToggle";

export const Footer = () => {
  return (
    <div className="flex flex-col items-center justify-center gap-1 py-16 border-t selection:bg-magic-white">
      <div className="px-6 mx-auto max-w-[90rem] w-full flex justify-between gap-2">
        <div className="text-sm text-gray-600">
          Made with 💜 by the Ink team
        </div>
        <div className="text-sm text-gray-600">
          <a href="https://inkonchain.com/en-US/privacy" target="_blank">
            Privacy Notice
          </a>
        </div>
        <div className="text-sm text-gray-600">
          <a href="https://inkonchain.com/en-US/terms" target="_blank">
            Terms of Service
          </a>
        </div>
        <ThemeToggle />
      </div>
    </div>
  );
};


================================================
FILE: src/components/Head.tsx
================================================
import { useRouter } from "next/router";
import { useConfig } from "nextra-theme-docs";

export const Head = () => {
  const { asPath, defaultLocale, locale } = useRouter();
  const { frontMatter } = useConfig();
  const baseUrl = "https://docs.inkonchain.com";
  const url =
    baseUrl + (defaultLocale === locale ? asPath : `/${locale}${asPath}`);
  const title =
    frontMatter.title || "Ink Docs - The Official Developer Guide for Ink";
  const description =
    frontMatter.description ||
    "Comprehensive documentation for Ink, a cutting-edge Layer 2 (L2) blockchain built on Optimism's Superchain. Learn how to build, integrate, and leverage Ink's DeFi capabilities.";
  const ogImage = frontMatter.image || `${baseUrl}/logo/build-the-future.png`;

  return (
    <>
      {/* Basic Meta Tags */}
      <meta name="title" content={title} />
      <meta name="description" content={description} />

      {/* Open Graph / Facebook */}
      <meta property="og:type" content="website" />
      <meta property="og:url" content={url} />
      <meta property="og:title" content={title} />
      <meta property="og:description" content={description} />
      <meta property="og:image" content={ogImage} />
      <meta property="og:image:width" content="1080" />
      <meta property="og:image:height" content="1080" />
      <meta property="og:site_name" content="Ink Documentation" />

      {/* Twitter */}
      <meta property="twitter:card" content="summary_large_image" />
      <meta property="twitter:url" content={url} />
      <meta property="twitter:title" content={title} />
      <meta property="twitter:description" content={description} />
      <meta property="twitter:image" content={ogImage} />
      <meta property="twitter:site" content="@inkonchain" />
      <meta property="twitter:creator" content="@inkonchain" />

      {/* Favicon */}
      <link rel="icon" href="/img/icons/favicon.ico" type="image/x-icon" />
    </>
  );
};


================================================
FILE: src/components/MultisigContentWrapper.tsx
================================================
import CopyableCode from "@/components/CopyableCode";
import MultisigContent from "@/content/shared/multisig-content.mdx";

export function MultisigContentWrapper() {
  const components = {
    CopyableCode,
  };

  return <MultisigContent components={components} />;
}


================================================
FILE: src/components/SidebarTitleComponent.tsx
================================================
import clsx from "clsx";
import { useRouter } from "next/router";

interface SidebarTitleComponentProps {
  title: string;
  type: string;
  route: string;
}

export const SidebarTitleComponent: React.FC<SidebarTitleComponentProps> = ({
  title,
  type,
  route,
}) => {
  const { asPath } = useRouter();
  const isActive = route === asPath;

  if (type === "separator") {
    return (
      <div className="font-bold text-black dark:text-magic-white">{title}</div>
    );
  }

  return (
    <div
      className={clsx(
        "ink-sidebar-item px-2 py-1.5 rounded-lg w-full transition-all",
        {
          "text-ink-grey-400 dark:text-magic-white dark:hover:text-ink-grey-700 hover:text-ink-grey-700 hover:bg-ink-grey-100":
            !isActive,
          "bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-soft-pink":
            isActive,
        }
      )}
    >
      {title}
    </div>
  );
};


================================================
FILE: src/components/TestnetDisclaimer.tsx
================================================
import { Callout } from "nextra/components";

export const TestnetDisclaimer = () => {
  return (
    <Callout type="info" emoji="ℹ️">
      This guide currently references Ink Sepolia (testnet) however, it can be
      used for Ink mainnet as well. Please be sure to change the necessary
      parameters based on your network of choice.
    </Callout>
  );
};


================================================
FILE: src/components/ThemeToggle.tsx
================================================
import { useEffect, useState } from "react";
import { useTheme } from "nextra-theme-docs";

import { MoonIcon } from "../icons/Moon";
import { SunIcon } from "../icons/Sun";

export const ThemeToggle = () => {
  const { resolvedTheme, setTheme } = useTheme();
  const [isMounted, setIsMounted] = useState(false);

  const onToggleTheme = () => {
    if (resolvedTheme == "dark") {
      setTheme("light");
    } else {
      setTheme("dark");
    }
  };

  /**
   * This is not ideal, but it's the best solution we have to avoid rendering the button
   * with the wrong color
   */
  useEffect(() => {
    setIsMounted(true);
  }, [setIsMounted]);

  if (!isMounted) {
    return null;
  }

  return (
    <button className="w-6 h-6 ml-2" type="button" onClick={onToggleTheme}>
      {resolvedTheme === "light" ? (
        <SunIcon className="w-6 h-6 text-magic-black" />
      ) : (
        <MoonIcon className="w-6 h-6 text-white" />
      )}
    </button>
  );
};


================================================
FILE: src/components/Toc.tsx
================================================
import Link from "next/link";

import { PencilIcon } from "@/icons/Pencil";
import { ThumbUpIcon } from "@/icons/ThumbUp";
import { URLS } from "@/utils/urls";

interface Heading {
  id: string;
  depth: number;
  value: string;
}

interface TocProps {
  headings: Heading[];
}

export const Toc: React.FC<TocProps> = ({ headings }) => {
  return (
    <div className="flex flex-col items-start justify-start py-5 sticky top-14">
      {headings.length > 0 && (
        <div className="flex flex-col gap-2 border-b pb-4 mb-6">
          <h5 className="font-bold text-magic-black dark:text-magic-white">
            On this page
          </h5>

          <ul>
            {headings.map(({ id, value }) => (
              <li key={id} className="group mb-2">
                <Link className="text-sm toc-link" href={`#${id}`}>
                  {value}
                </Link>
              </li>
            ))}
          </ul>
        </div>
      )}
      <div className="flex flex-col gap-2">
        <Link
          href={URLS.editDocsOnGithub}
          className="group text-xs flex items-center gap-1"
        >
          <PencilIcon className="size-4 toc-link" />
          <span className="toc-link">Edit this page on GitHub</span>
        </Link>
      </div>
    </div>
  );
};


================================================
FILE: src/content/shared/_badges.mdx
================================================
# Badges

## Welcome To Ink

> Awarded for bridging Ethereum to Ink.

To bridge Ethereum, you can use the `L1StandardBridge` on the sepolia network crafted for Ink.

There are two ways to do it:

### Gelato Bridge app

The app provides a very simple UI to deposit or withdraw SepoliaETH from and to Sepolia Ink.

Here is the app: [https://testnet-bridge.gelato.network/bridge/ink-sepolia](https://testnet-bridge.gelato.network/bridge/ink-sepolia)

Connect your wallet, select the amount to transfer, and that's it!

### Directly calling the contract

You can call the `bridgeETH` method in the contract here: [https://sepolia.etherscan.io/address/0xC0d337f71aD19a8f17a1b297cDb3a86c5EEf9Eec#writeProxyContract](https://sepolia.etherscan.io/address/0xC0d337f71aD19a8f17a1b297cDb3a86c5EEf9Eec#writeProxyContract)

For instance, if you want to bridge 1 Sepolia ETH into 1 Sepolia "Ink" ETH:

1. Connect your Wallet using the "Connect to Wallet" button
2. Expand the `bridgeETH` method and enter `bridgeETH: 1`
3. Enter `_minGasLimit: 1000` (or whatever suits you)
4. Enter `_extraData: 0x00`
5. Click "Write", then validate the transaction in MetaMask, then sign it to complete the transaction.

## Wrapped ETH

> Awarded for wrapping Ethereum into WETH.

To create Wrapped ETH tokens (WETH), you can interact with the `deposit` method in the contract here: [https://explorer-sepolia.inkonchain.com/token/0x47d1f931eaff721549cc0ad57da81729baa8b4b2?tab=write\_contract](https://explorer-sepolia.inkonchain.com/token/0x47d1f931eaff721549cc0ad57da81729baa8b4b2?tab=write_contract)

1. Connect your Wallet using the button
2. Expand the `deposit` method and enter `Send native ETH: 10 000 000 000 000 000`.

* This is equivalent to 0.01 ETH, adjust as needed

3. Click "Write", then validate the transaction in MetaMask, then sign it to complete the transaction.

If you want the token to appear in MetaMask, click on the MetaMask button at the top of the page

## ERC20 Interactions

> Awarded for minting, sending, and receiving ERC20 tokens.

*coming soon*

## NFT Interactions

> Awarded for minting, sending, and receiving NFTs.

*coming soon*

## Faucet User

> Awarded for using the Ink faucet.

Get here: [https://mystery-faucet.inkonchain.com/](https://mystery-faucet.inkonchain.com/)

Enter your address, enter the captcha, that's it!

## Smart Contract Deployer

> Awarded for deploying a smart contract.

*coming soon*


================================================
FILE: src/content/shared/block-explorers-content.mdx
================================================
## Blockscout

Blockscout is a universal block explorer providing detailed chain information and tools for debugging smart contracts and transactions. Visit the [Blockscout Docs](https://docs.blockscout.com/) for details.

###### Supported Networks

* Ink Sepolia: [https://explorer-sepolia.inkonchain.com/](https://explorer-sepolia.inkonchain.com/)
  * API: [https://explorer-sepolia.inkonchain.com/api](https://explorer-sepolia.inkonchain.com/api)

###### Verifying Smart Contract Code on Blockscout

* Please see [this tutorial](/build/tutorials/verify-smart-contract)

## Routescan

Routescan is a unified explorer for over 54 blockchains.

###### Supported Networks

* Ink Sepolia: [https://sepolia.inkonscan.xyz/](https://sepolia.inkonscan.xyz/)
  * API: [https://sepolia.inkonscan.xyz/documentation/api-swagger](https://sepolia.inkonscan.xyz/documentation/api-swagger)


================================================
FILE: src/content/shared/bridges-content.mdx
================================================
import { Callout } from 'nextra/components'

# Bridges
These bridges provide different interfaces to the canonical smart contracts that facilitate migrating ETH from one chain to another.

<Callout type="info" emoji="ℹ️">
Transaction times vary based on network congestion and gas fees. Please ensure you have enough ETH in your wallet to cover transaction fees.
</Callout>

##### How to use
1. Visit the bridge and connect your wallet.
2. Choose Sepolia as your source and Ink as the destination.
3. Input the amount of assets you want to bridge.
4. Confirm and sign the transaction with your wallet.
5. Once the bridging is complete, the assets will appear in your wallet on Ink.

## Gelato bridge
Bridge: [https://bridge-gel-sepolia.inkonchain.com/](https://bridge-gel-sepolia.inkonchain.com/)

## Ink Bridge
Bridge: [https://inkonchain.com/bridge](https://inkonchain.com/bridge)

## Brid.gg
Bridge: [https://testnet.brid.gg/](https://testnet.brid.gg/)

## Superbridge
Bridge: [https://superbridge.app/](https://superbridge.app/) (enable testnet in settings)


================================================
FILE: src/content/shared/community-content.mdx
================================================
import { URLS } from "@/utils/urls";

# Get Support

Join the Ink community, vibe with fellow developers and get support:

- Join the Ink Telegram for announcements: <a href="https://t.me/inkonchain" target="_blank" rel="noreferrer">Join Telegram</a>


================================================
FILE: src/content/shared/crosschain-content.mdx
================================================
# Crosschain Infrastructure

## Wormhole

Wormhole is an interoperability platform powering multichain apps and bridges.

* Wormhole currently supports Ink Sepolia.


================================================
FILE: src/content/shared/faucets-content.mdx
================================================
# Faucets

Get Sepolia ETH on Ink from these faucets below! Alternatively, you can [bridge](https://inkonchain.com/bridge) testnet funds to Ink.

## [Ink](https://inkonchain.com/faucet)

Our in-house faucet provides a quick and easy way to acquire testnet ETH.

## [Optimism Superchain Faucet](https://console.optimism.io/faucet)

The Superchain Faucet provides testnet ETH for Ink and all other OP chains. Sign in to claim 0.10 test ETH on 1 network every 24 hours or verify your onchain identity for more tokens.

## [QuickNode](https://faucet.quicknode.com/drip)

Use QuickNode Faucet to claim Ink Sepolia for testnet ETH for free - one drip per network every 12 hours.

## [Gelato](https://faucet-gel-sepolia.inkonchain.com)

Gelato's Faucet uses Cloudflare authentication and drops up to 0.3 Ink Sepolia ETH every 12 hours.

## [Tenderly](https://tenderly.co/?mtm_campaign=ext-docs&mtm_kwd=ink)

Tenderly's [Unlimited Faucet](https://docs.tenderly.co/virtual-testnets/unlimited-faucet?mtm_campaign=ext-docs&mtm_kwd=ink) allows you to mint native and ERC20 tokens for development and testing on Virtual TestNets. The unlimited faucet is part of the [Admin RPC](https://docs.tenderly.co/virtual-testnets/admin-rpc?mtm_campaign=ext-docs&mtm_kwd=ink), a collection of cheat-codes allowing full customization of the network.


================================================
FILE: src/content/shared/multisig-content.mdx
================================================
# Multisig

## Safe

Ink hosts [Safe](https://docs.safe.global/home/what-is-safe)'s technology to bring digital ownership of accounts to everyone by building universal and open contract standards for the custody of digital assets, data, and identity.

Using Safe you can:

* Manage customizable non-custodial wallets supporting multisignatures for individuals and teams
* Perform financial management of onchain assets incl. ERC20s, ERC721s and ETH
* Access your safe using Web, Mobile and Desktop apps.
* Safe also features access to DeFi, open source code, batch transactions, modular extensions, gasless signatures and more.

**Supported Networks**

* [Ink Mainnet](https://app.safe.global/new-safe/load?chain=ink)
* [Ink Sepolia](https://safe.optimism.io/welcome/accounts?chain=ink-sepolia)


================================================
FILE: src/fonts.ts
================================================
import { Inter, Plus_Jakarta_Sans } from "next/font/google";

export const inter = Inter({
  subsets: ["latin"],
  variable: "--font-inter",
  display: "swap",
});

export const plus_jakarta_sans = Plus_Jakarta_Sans({
  subsets: ["latin"],
  variable: "--font-plus-jakarta-sans",
  display: "swap",
});


================================================
FILE: src/globals.css
================================================
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer utilities {
  body {
    font-family:
      var(--font-plus-jakarta-sans),
      var(--font-inter),
      -apple-system,
      BlinkMacSystemFont,
      "Segoe UI",
      Helvetica,
      "Apple Color Emoji",
      Arial,
      sans-serif,
      "Segoe UI Emoji",
      "Segoe UI Symbol";
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }
}

@layer base {
  h1,
  h2,
  h3,
  h4 {
    @apply !text-magic-deep-purple dark:!text-magic-white;
  }

  a:not(.nextra-sidebar-container a):not(nav a):not(.toc-link) {
    @apply !text-magic-purple dark:!text-magic-soft-pink !underline hover:!text-magic-purple/80 dark:hover:!text-magic-soft-pink/80;
  }

  nav > a {
    @apply !text-ink-grey-400 dark:!text-magic-white dark:hover:!text-ink-grey-400 hover:!text-ink-grey-700 !no-underline;
  }

  nav > a > svg {
    @apply !fill-magic-black dark:!fill-magic-white;
  }

  nav {
    @apply bg-white dark:bg-magic-black;
  }

  pre {
    @apply !bg-magic-semi-deep-purple/15;
  }

  .toc-link {
    @apply cursor-pointer !text-ink-grey-400 dark:!text-magic-white group-hover:!text-ink-grey-700 dark:group-hover:!text-ink-grey-700;
  }

  /* We need to override the underline for nav links and sidebar items */
  nav > a,
  a:has(div.ink-sidebar-item),
  .toc-link {
    @apply no-underline;
  }
}

/* Some custom hacks to override some issues with Nextra */
.nextra-nav-container-blur {
  display: none !important ;
}

/* Remove the padding from the sidebar link, so that we can pply our own style */
a:has(div.ink-sidebar-item) {
  padding: 0 !important;
  background-color: transparent !important;
}

/* Target both the banner container and its text */
.nextra-banner-container {
  @apply text-white !important;
}

.nextra-banner-container a {
  @apply text-white hover:text-white/80 no-underline !important;
}

/* Override the purple link styles specifically for the banner */
.nextra-banner-container
  a:not(.nextra-sidebar-container a):not(nav a):not(.toc-link) {
  @apply text-white hover:text-white/80 underline !important;
}

/* Ensure all text in banner is white, not just links */
.nextra-banner-container {
  @apply text-white !important;
}


================================================
FILE: src/icons/Check.tsx
================================================
export const CheckIcon: React.FC<{ className?: string }> = ({
  className = "size-6",
}) => {
  return (
    <svg
      className={className}
      fill="none"
      stroke="currentColor"
      viewBox="0 0 24 24"
    >
      <path
        strokeLinecap="round"
        strokeLinejoin="round"
        strokeWidth={2}
        d="M5 13l4 4L19 7"
      />
    </svg>
  );
};


================================================
FILE: src/icons/ConnectedPulse.tsx
================================================
import clsx from "clsx";

export const ConnectedPulse: React.FC<{ className?: string }> = ({
  className,
}) => {
  return (
    <span className={clsx("relative flex h-3 w-3", className)}>
      <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"></span>
      <span className="relative inline-flex rounded-full h-3 w-3 bg-green-500"></span>
    </span>
  );
};


================================================
FILE: src/icons/Download.tsx
================================================
interface PencilProps {
  className?: string;
}

export const DownloadIcon: React.FC<PencilProps> = ({
  className = "size-6",
}) => {
  return (
    <svg
      className={className}
      width="24"
      height="25"
      viewBox="0 0 24 25"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
    >
      <path
        d="M11.25 15.354V3.354H12.75V15.354H11.25ZM12.5156 15.8931C12.375 16.0337 12.2031 16.104 12 16.104C11.7969 16.104 11.625 16.0337 11.4844 15.8931L6.46875 11.0884L7.5 9.98682L12 14.3228L16.5 9.98682L17.5312 11.0884L12.5156 15.8931ZM3.5625 14.1118V18.0728C3.5625 18.604 3.75 19.0571 4.125 19.4321C4.51562 19.8071 4.97656 19.9946 5.50781 19.9946H18.4922C19.0234 19.9946 19.4766 19.8071 19.8516 19.4321C20.2422 19.0571 20.4375 18.604 20.4375 18.0728V14.1118H21.9375V18.0728C21.9375 19.0103 21.6016 19.8149 20.9297 20.4868C20.2578 21.1587 19.4453 21.4946 18.4922 21.4946H5.50781C4.57031 21.4946 3.75781 21.1665 3.07031 20.5103C2.39844 19.8384 2.0625 19.0259 2.0625 18.0728V14.1118H3.5625Z"
        fill="white"
      />
    </svg>
  );
};


================================================
FILE: src/icons/InkLogo.tsx
================================================
import Image from "next/image";
import { useTheme } from "nextra-theme-docs";

interface InkLogoProps {
  className?: string;
}

export const InkLogo: React.FC<InkLogoProps> = ({
  className = "text-magic-purple",
}) => {
  const { resolvedTheme } = useTheme();
  const logoSrc =
    resolvedTheme === "dark"
      ? "/logo/ink-logo-dark.svg"
      : "/logo/ink-logo-light.svg";

  return (
    <Image
      className={className}
      src={logoSrc}
      alt="Ink logo"
      width={85}
      height={28}
      priority
    />
  );
};


================================================
FILE: src/icons/Moon.tsx
================================================
interface MoonIconProps {
  className?: string;
}

export const MoonIcon: React.FC<MoonIconProps> = ({
  className = "w-6 h-6",
}) => {
  return (
    <svg
      className={className}
      viewBox="0 0 24 24"
      fill="currentColor"
      xmlns="http://www.w3.org/2000/svg"
    >
      <path
        fillRule="evenodd"
        clipRule="evenodd"
        d="M11.8808 2.65571C12.0264 2.9066 12.0143 3.21898 11.8497 3.45784C11.1561 4.46433 10.75 5.6835 10.75 6.99976C10.75 10.4515 13.5482 13.2498 17 13.2498C18.3163 13.2498 19.5356 12.8437 20.5421 12.1499C20.781 11.9853 21.0933 11.9732 21.3442 12.1188C21.5951 12.2644 21.7395 12.5417 21.715 12.8308C21.292 17.825 17.1053 21.746 12.002 21.746C6.61829 21.746 2.25391 17.3816 2.25391 11.9979C2.25391 6.89471 6.17473 2.70808 11.1688 2.28491C11.4579 2.26042 11.7352 2.40482 11.8808 2.65571ZM9.8368 4.03676C6.33205 4.9876 3.75391 8.19197 3.75391 11.9979C3.75391 16.5532 7.44672 20.246 12.002 20.246C15.808 20.246 19.0125 17.6677 19.9632 14.1629C19.05 14.541 18.0489 14.7498 17 14.7498C12.7198 14.7498 9.25 11.28 9.25 6.99976C9.25 5.95095 9.45869 4.94994 9.8368 4.03676Z"
        fill="currentColor"
      />
    </svg>
  );
};


================================================
FILE: src/icons/Pencil.tsx
================================================
interface PencilProps {
  className?: string;
}

export const PencilIcon: React.FC<PencilProps> = ({ className = "size-6" }) => {
  return (
    <svg
      className={className}
      xmlns="http://www.w3.org/2000/svg"
      fill="none"
      viewBox="0 0 24 24"
      strokeWidth={1.5}
      stroke="currentColor"
    >
      <path
        strokeLinecap="round"
        strokeLinejoin="round"
        d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
      />
    </svg>
  );
};


================================================
FILE: src/icons/Sun.tsx
================================================
interface SunIconProps {
  className?: string;
}

export const SunIcon: React.FC<SunIconProps> = ({ className = "w-6 h-6" }) => {
  return (
    <svg
      className={className}
      viewBox="0 0 24 24"
      fill="currentColor"
      xmlns="http://www.w3.org/2000/svg"
    >
      <path
        fillRule="evenodd"
        clipRule="evenodd"
        d="M12 1.25C12.4142 1.25 12.75 1.58579 12.75 2V3C12.75 3.41421 12.4142 3.75 12 3.75C11.5858 3.75 11.25 3.41421 11.25 3V2C11.25 1.58579 11.5858 1.25 12 1.25ZM4.39983 4.39972C4.69272 4.10683 5.16759 4.10683 5.46049 4.39972L6.17049 5.10972C6.46338 5.40262 6.46338 5.87749 6.17049 6.17038C5.87759 6.46328 5.40272 6.46328 5.10983 6.17038L4.39983 5.46038C4.10693 5.16749 4.10693 4.69262 4.39983 4.39972ZM19.6002 4.39972C19.8931 4.69262 19.8931 5.16749 19.6002 5.46038L18.8902 6.17038C18.5973 6.46328 18.1224 6.46328 17.8295 6.17038C17.5366 5.87749 17.5366 5.40262 17.8295 5.10972L18.5395 4.39972C18.8324 4.10683 19.3073 4.10683 19.6002 4.39972ZM8.9948 8.9948C7.33507 10.6545 7.33507 13.3455 8.9948 15.0052C10.6545 16.6649 13.3455 16.6649 15.0052 15.0052C16.6649 13.3455 16.6649 10.6545 15.0052 8.9948C13.3455 7.33507 10.6545 7.33507 8.9948 8.9948ZM7.93413 7.93413C10.1796 5.68862 13.8204 5.68862 16.0659 7.93413C18.3114 10.1796 18.3114 13.8204 16.0659 16.0659C13.8204 18.3114 10.1796 18.3114 7.93413 16.0659C5.68862 13.8204 5.68862 10.1796 7.93413 7.93413ZM1.25 12C1.25 11.5858 1.58579 11.25 2 11.25H3C3.41421 11.25 3.75 11.5858 3.75 12C3.75 12.4142 3.41421 12.75 3 12.75H2C1.58579 12.75 1.25 12.4142 1.25 12ZM20.25 12C20.25 11.5858 20.5858 11.25 21 11.25H22C22.4142 11.25 22.75 11.5858 22.75 12C22.75 12.4142 22.4142 12.75 22 12.75H21C20.5858 12.75 20.25 12.4142 20.25 12ZM6.17049 17.8297C6.46338 18.1225 6.46338 18.5974 6.17049 18.8903L5.46049 19.6003C5.16759 19.8932 4.69272 19.8932 4.39983 19.6003C4.10693 19.3074 4.10693 18.8325 4.39983 18.5396L5.10983 17.8297C5.40272 17.5368 5.87759 17.5368 6.17049 17.8297ZM17.8295 17.8297C18.1224 17.5368 18.5973 17.5368 18.8902 17.8297L19.6002 18.5396C19.8931 18.8325 19.8931 19.3074 19.6002 19.6003C19.3073 19.8932 18.8324 19.8932 18.5395 19.6003L17.8295 18.8903C17.5366 18.5974 17.5366 18.1225 17.8295 17.8297ZM12 20.25C12.4142 20.25 12.75 20.5858 12.75 21V22C12.75 22.4142 12.4142 22.75 12 22.75C11.5858 22.75 11.25 22.4142 11.25 22V21C11.25 20.5858 11.5858 20.25 12 20.25Z"
        fill="currentColor"
      />
    </svg>
  );
};


================================================
FILE: src/icons/ThumbUp.tsx
================================================
interface ThumbUpProps {
  className?: string;
}

export const ThumbUpIcon: React.FC<ThumbUpProps> = ({
  className = "size-6",
}) => {
  return (
    <svg
      xmlns="http://www.w3.org/2000/svg"
      fill="none"
      viewBox="0 0 24 24"
      strokeWidth={1.5}
      stroke="currentColor"
      className={className}
    >
      <path
        strokeLinecap="round"
        strokeLinejoin="round"
        d="M6.633 10.25c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 0 1 2.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 0 0 .322-1.672V2.75a.75.75 0 0 1 .75-.75 2.25 2.25 0 0 1 2.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282m0 0h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 0 1-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 0 0-1.423-.23H5.904m10.598-9.75H14.25M5.904 18.5c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 0 1-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 9.953 4.167 9.5 5 9.5h1.053c.472 0 .745.556.5.96a8.958 8.958 0 0 0-1.302 4.665c0 1.194.232 2.333.654 3.375Z"
      />
    </svg>
  );
};


================================================
FILE: src/pages/404.mdx
================================================
# Page Not Found

#### Return [home](/).

#### Please help by [submitting an issue](https://github.com/inkonchain/docs/issues/new) for the broken link. 💜


================================================
FILE: src/pages/500.mdx
================================================
# Unexpected Error

![500 Error Warning.](/img/icons/500-page.svg)

## Something isn't quite right. Let's start again on the [homepage](index).

#### Please help by [submitting an issue](https://github.com/inkonchain/docs/issues/new) for the broken link. ❤️

# CHANGE

\n


================================================
FILE: src/pages/_app.mdx
================================================
import { ThemeProvider } from "next-themes";
import Script from "next/script";
import { inter, plus_jakarta_sans } from "../fonts";
import "../globals.css";

export default function App({ Component, pageProps }) {
  return (
    <ThemeProvider attribute="class">
      <Script
        id="schema-markup"
        type="application/ld+json"
        strategy="beforeInteractive"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify({
            "@context": "https://schema.org",
            "@type": "WebSite",
            name: "Ink Documentation",
            description:
              "Comprehensive documentation for Ink, a Layer 2 (L2) blockchain built on Optimism's Superchain",
            url: "https://docs.inkonchain.com",
            publisher: {
              "@type": "Organization",
              name: "Ink",
              url: "https://inkonchain.com",
              sameAs: [
                "https://x.com/inkonchain",
                "https://github.com/inkonchain",
                "https://t.me/inkonchain",
              ],
            },
          }),
        }}
      />
      <div
        className={`${inter.variable} ${plus_jakarta_sans.variable} font-sans`}
      >
        <div className="bg-white dark:bg-magic-black">
          <Component {...pageProps} />
        </div>
      </div>
    </ThemeProvider>
  );
}


================================================
FILE: src/pages/_meta.json
================================================
{
  "index": {
    "title": "Getting Started",
    "display": "hidden",
    "theme": {
      "breadcrumb": false,
      "footer": true,
      "sidebar": true,
      "toc": true,
      "pagination": false
    }
  },
  "404": {
    "title": "404",
    "display": "hidden",
    "theme": {
      "layout": "full",
      "breadcrumb": false,
      "footer": true,
      "sidebar": true,
      "toc": false,
      "pagination": false
    }
  },
  "500": {
    "title": "500",
    "display": "hidden",
    "theme": {
      "layout": "full",
      "breadcrumb": false,
      "footer": true,
      "sidebar": true,
      "toc": false,
      "pagination": false
    }
  },
  "header_status": {
    "title": "Status Page",
    "type": "page",
    "href": "https://status.inkonchain.com/",
    "newWindow": true
  },
  "header_faucet": {
    "title": "Faucets",
    "type": "page",
    "href": "/tools/faucets"
  },
  "--- GENERAL": {
    "title": "General",
    "type": "separator"
  },
  "general": {
    "title": "General",
    "display": "children"
  },
  "+++ Build on Ink": {
    "title": "",
    "type": "separator"
  },
  "--- Build On Ink": {
    "title": "Build On Ink",
    "type": "separator"
  },
  "build": {
    "title": "Build on Ink",
    "display": "children"
  },
  "+++ Ink Builder Program": {
    "title": "",
    "type": "separator"
  },
  "--- Ink Builder Program": {
    "title": "Ink Builder Program",
    "type": "separator"
  },
  "ink-builder-program": {
    "title": "Ink Builder Program",
    "display": "children"
  },
  "+++ Tools": {
    "title": "",
    "type": "separator"
  },
  "--- Tools": {
    "title": "Tools",
    "type": "separator"
  },
  "tools": {
    "title": "Tools",
    "display": "children"
  },
  "+++ Useful Information": {
    "title": "",
    "type": "separator"
  },
  "--- Useful Information": {
    "title": "Useful Information",
    "type": "separator"
  },
  "useful-information": {
    "title": "Useful Information",
    "display": "children"
  },
  "+++ Work with Ink": {
    "title": "",
    "type": "separator"
  },
  "--- Work with Ink": {
    "title": "Work with Ink",
    "type": "separator"
  },
  "work-with-ink": {
    "title": "Work with Ink",
    "display": "children",
    "theme": {
      "pagination": true
    }
  },
  "---": {
    "type": "separator"
  },
  "faq": {
    "title": "FAQ"
  },
  "status": {
    "title": "Status Page",
    "href": "https://status.inkonchain.com/",
    "newWindow": true,
    "theme": {
      "pagination": false
    }
  }
}

================================================
FILE: src/pages/build/_meta.json
================================================
{
  "getting-started": "Getting Started",
  "onchain-clients": "Onchain Clients",
  "run-an-ink-node": {
    "title": "Running Ink Nodes",
    "href": "https://github.com/inkonchain/node",
    "newWindow": true
  },
  "transaction-fees": "Transaction Fees",
  "ink-kit": "Ink Kit (archived)",
  "verify": "Kraken Verify",
  "tutorials": "Tutorials"
}


================================================
FILE: src/pages/build/getting-started.mdx
================================================
import { Callout, Checkbox } from "nextra/components";

# What do I Need to Start Developing on Ink?

To start developing on Ink, you'll need:

- [ ] An IDE (Integrated Development Environment) like [Visual Studio Code](https://code.visualstudio.com/), [Cursor](https://cursor.sh/), or [Remix](https://remix.ethereum.org/) to write smart contracts in solidity.

- [ ] A wallet that holds ETH such as [Kraken Wallet](https://www.kraken.com/wallet), [MetaMask](https://metamask.io/), or [Rainbow](https://rainbow.me/).

- We suggest having at least 0.01 ETH for standard deployments on Ink.
- You can request Ink Sepolia ETH using our [Faucets](/tools/faucets).

- [ ] We recommend using a development framework like [Foundry](https://github.com/foundry-rs/foundry) or [Hardhat](https://hardhat.org/)

- [Guide to deploy a contract using Foundry](/build/tutorials/deploying-a-smart-contract/foundry)
- [Guide to deploy a contract using Hardhat](/build/tutorials/deploying-a-smart-contract/hardhat)
- [Guide to deploy a contract using Remix](/build/tutorials/deploying-a-smart-contract/remix)

<Callout type="info" emoji="ℹ️">
  Try out InkGPT! Blaze through the docs and get deployed in no time with our
  new AI assistant.
</Callout>


================================================
FILE: src/pages/build/ink-kit.mdx
================================================
---
title: Ink Kit
description: A delightful onchain-focused SDK with ready-to-use components and themes
---

import Image from 'next/image'

<div className="w-full rounded-xl overflow-hidden my-8">
  <Image
    src="/images/banner.webp"
    alt="Ink Kit Banner"
    width={1200}
    height={400}
    priority
  />
</div>

# Welcome to Ink Kit

<div className="p-4 rounded-lg border-2 border-amber-500 bg-amber-50 dark:bg-amber-950 dark:border-amber-600 my-6">
  <div className="font-semibold text-amber-900 dark:text-amber-100 mb-2">⚠️ This project is archived and no longer maintained</div>
  <div className="text-amber-800 dark:text-amber-200">
    Ink Kit is no longer being actively developed or maintained. We recommend using the modern alternatives listed below for your projects.
  </div>
</div>

Ink Kit is an onchain-focused SDK that delivers a delightful developer experience with ready-to-use app layout templates, themes, and magical animated components.

## Install

```bash
npm install @inkonchain/ink-kit
# or
pnpm install @inkonchain/ink-kit
```

## Usage

```tsx
// Import styles first at the root of your project (required)
import "@inkonchain/ink-kit/style.css";
```

```tsx
// Import components as needed
import { Button } from "@inkonchain/ink-kit";

function App() {
  return (
    <div>
      <Button onClick={() => {}} size="md" variant="secondary">
        Ship It
      </Button>
    </div>
  );
}
```

Note: Ink Kit classes are prefixed with `ink:` and can be customized using CSS variables instead of Tailwind classes. They should be imported first so that your own custom classes are taking precedence.

## Key Features

- 🎨 **Customizable app layout templates**
- ✨ **Magical animated components**
- 🎭 **Vibrant themes**
- ⛓️ **Onchain-focused development**
- 🚀 **Efficient developer experience**
- 📱 **Polished, engaging interfaces**

## Theming

By default, Ink Kit provides a couple of themes already in the stylesheet:

- Light (`light-theme`)
- Dark (`dark-theme`)
- Contrast (`contrast-theme`)
- Neo (`neo-theme`)
- Morpheus (`morpheus-theme`)

To specify which theme to use, add the `ink:THEME_ID` to your document root:

```tsx
<html class="ink:dark-theme">
  ...
```

If you want to programmatically set this value, you can use the `useInkThemeClass`:

```tsx
const theme = getMyCurrentTheme();
useInkThemeClass(theme === "light" ? "ink:neo-theme" : "ink:dark-theme");
```

### Custom Theme

To create a custom theme, you can override CSS variables:

```css
:root {
  --ink-button-primary: rgb(10, 55, 10);
  ...
}
```

To see examples on specific colors that you can override, check the following [theme](https://github.com/inkonchain/ink-kit/tree/main/src/styles/theme) section of the Ink Kit repository (archived).

## Resources

- **Documentation**: Visit our [Storybook](https://ink-kit.inkonchain.com/) (archived)
- **GitHub repository**: [github.com/inkonchain/ink-kit](https://github.com/inkonchain/ink-kit) (archived)

## Recommended Modern Alternatives

Since Ink Kit is no longer maintained, we recommend the following actively maintained alternatives for your projects:

### UI Component Libraries

- **[shadcn/ui](https://ui.shadcn.com/)** - Beautifully designed components built with Radix UI and Tailwind CSS. Copy and paste components directly into your project.
- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible components for building high‑quality design systems and web apps.
- **[Chakra UI](https://chakra-ui.com/)** - Simple, modular and accessible component library that gives you the building blocks for your React applications.
- **[Mantine](https://mantine.dev/)** - A fully featured React components library with 100+ customizable components.

### Wallet Connectivity (Onchain-focused)

- **[RainbowKit](https://www.rainbowkit.com/)** - The best way to connect a wallet. Designed for everyone. Built for developers.
- **[ConnectKit](https://docs.family.co/connectkit)** - A powerful React component library for connecting wallets to your dapp, built on top of wagmi.

These alternatives are actively maintained, have strong communities, and offer excellent documentation and developer experiences.


================================================
FILE: src/pages/build/onchain-clients.mdx
================================================
# Onchain Clients

## Ethers.js - Instructions for Connecting to Ink

Ethers.js documentation: [https://docs.ethers.org/v6/](https://docs.ethers.org/v6/)

To connect to Ink by instantiating a new `ethers.js` `JsonRpcProvider` object with an RPC URL of Ink's testnet, follow the steps below:

1. **Install ethers.js**: Ensure you have `ethers.js` v6 installed in your project. If not, you can install it using npm or yarn.

   ```bash
   npm install ethers@6
   ```

   or

   ```bash
   yarn add ethers@6
   ```

2. **Instantiate a JsonRpcProvider**: Use the following code snippet to create a new `JsonRpcProvider` object with the RPC URL of Ink's testnet.

   ```javascript
   import { ethers } from 'ethers';

   const rpcUrl = 'https://rpc-gel-sepolia.inkonchain.com';
   const provider = new ethers.JsonRpcProvider(rpcUrl, 763373);
   ```

3. **Using the Provider**: You can now use the `provider` to interact with Ink's testnet. For example, you can fetch the current block number or interact with smart contracts deployed on the testnet.

   ```javascript
   // previous code
   const blockNumber = await provider.getBlockNumber();
   console.log(blockNumber);
   ```

### Example: Fetching the Current Block Number

The following code snippet demonstrates how to fetch and print the current block number from Ink's testnet:

## Viem - Instructions for Connecting to Ink

Viem documentation: [https://viem.sh/docs/introduction](https://viem.sh/docs/introduction)

1. **Install Viem**: Ensure you have `viem` installed in your project. If not, you can install it using npm or yarn.

   ```bash
   npm install viem
   ```

   or

   ```bash
   yarn add viem
   ```

2. **Instantiate a Public Client**: Use the following code snippet to create a new `Public Client` object with the Ink Sepolia testnet.
   ```javascript
   import { createPublicClient, http } from 'viem'
   import { inkSepolia } from 'viem/chains'

   const client = createPublicClient({
     chain: inkSepolia,
     transport: http(),
   })
   ```

3. **Consuming Actions**: You can now interact with Ink's chain! Here we are getting the current block number.

   ```javascript
   // previous code
   const blockNumber = await client.getBlockNumber();
   console.log(blockNumber);
   ```


================================================
FILE: src/pages/build/transaction-fees.mdx
================================================
import { Callout } from 'nextra/components'

# Fees on Ink 

As a Superchain L2, the fee you pay for each transaction on Ink has two components: 
1. An execution fee for the chain you're on (i.e. Ink L2)
2. A security fee that helps secure the L2 by publishing L2 transactions to Ethereum (the L1)

The security fee is generally higher than the execution fee because L1 transactions tend to be more expensive. The L1 can be subject to congestion and other situations that lead to high gas fees and longer confirmation times. 

This is an example of fees from an Ink transaction via our [Block Explorer](https://explorer-sepolia.inkonchain.com/tx/0xaea0e302ed3f89eef77475c1821df67b3713b80798298469ecc3dbd4d8e14e5f): 
![Fees](../../images/gas_fees.png)





================================================
FILE: src/pages/build/tutorials/_meta.json
================================================
{
  "deploying-a-smart-contract": "Deploying a Smart Contract",
  "verify-smart-contract": "Verifying a Smart Contract",
  "shipping-on-the-superchain": "Shipping on the Superchain",
  "deploying-a-superchainerc20": "Deploying a SuperchainERC20"
}


================================================
FILE: src/pages/build/tutorials/deploying-a-smart-contract/_meta.json
================================================
{
    "foundry": "Foundry",
    "hardhat": "Hardhat",
    "remix": "Remix"
}


================================================
FILE: src/pages/build/tutorials/deploying-a-smart-contract/foundry.mdx
================================================
import CopyableCode from "@/components/CopyableCode";
import { TestnetDisclaimer } from "@/components/TestnetDisclaimer";

# Deploying a Smart Contract with Foundry

This guide will walk you through setting up a new project using Foundry, a blazing fast toolkit for Ethereum application development written in Rust.

## Installing Foundry

First, you'll need to install Foundry. Run this command in your terminal:

```bash
curl -L https://foundry.paradigm.xyz | bash
```

Then run:

```bash
foundryup
```

This will install `forge`, `cast`, and `anvil` - the core tools of Foundry. You can also use `foundryup` to update the tools to the latest version.

## Creating a New Project

To create a new project, navigate to the directory where you want to create your project and use the `forge init` command:

```bash
forge init my_project
cd my_project
```

This will create a new directory with the following structure:

```
my_project/
├── lib/
├── src/
│   └── Counter.sol
├── test/
│   └── Counter.t.sol
├── script/
├── .gitignore
└── foundry.toml
```

## Writing Your First Contract

Remove the default Counter example contract:

```bash
rm -rf src/Counter.sol script/Counter.s.sol test/Counter.t.sol
```

Create a new contract and put it in the file <CopyableCode code="src/InkContract.sol" />:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract InkContract {
    string public greeting = "Hello, Ink!";

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}
```

Create the tests for this contract in the file <CopyableCode code="test/InkContract.t.sol" />:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {Test} from "forge-std/Test.sol";
import {InkContract} from "../src/InkContract.sol";

contract InkContractTest is Test {
    InkContract public ink;

    function setUp() public {
        ink = new InkContract();
    }

    function test_DefaultGreeting() public view {
        assertEq(ink.greeting(), "Hello, Ink!");
    }

    function test_SetGreeting() public {
        string memory newGreeting = "New greeting!";
        ink.setGreeting(newGreeting);
        assertEq(ink.greeting(), newGreeting);
    }

    function testFuzz_SetGreeting(string memory randomGreeting) public {
        ink.setGreeting(randomGreeting);
        assertEq(ink.greeting(), randomGreeting);
    }
}
```

## Building and Testing

Build your project:

```bash
forge build
```

Run tests:

```bash
forge test
```

## Deployment

1. First, create a <CopyableCode code=".env" /> file in your project root:

```env
PRIVATE_KEY=your_private_key_here
RPC_URL=https://rpc-gel-sepolia.inkonchain.com/
BLOCKSCOUT_API_KEY=your_blockscout_api_key_here
```

2. Create a deployment script in <CopyableCode code="script/Deploy.s.sol" />:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "forge-std/Script.sol";
import "../src/InkContract.sol";

contract DeployScript is Script {
    function run() external {
        uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");

        vm.startBroadcast(deployerPrivateKey);

        new InkContract();

        vm.stopBroadcast();
    }
}
```

3. Deploy your contract:

```bash
# Load environment variables
source .env

# Deploy to InkSepolia Testnet
forge script script/Deploy.s.sol:DeployScript --rpc-url $RPC_URL --broadcast --verify
```

## Verifying Your Contract

If you want to verify your contract on Etherscan:

```bash
forge verify-contract <DEPLOYED_CONTRACT_ADDRESS> src/InkContract.sol:InkContract \
    --chain-id 763373 \
    --etherscan-api-key $BLOCKSCOUT_API_KEY
```

## Additional Configuration

You can customize your Foundry setup in `foundry.toml`:

```toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc = "0.8.19"
optimizer = true
optimizer_runs = 200

[rpc_endpoints]
inksepolia = "${INKSEPOLIA_RPC_URL}"
```

## Next Steps

- Check out [Get Foundry Book](https://book.getfoundry.sh/) for more information on Foundry.

<TestnetDisclaimer />


================================================
FILE: src/pages/build/tutorials/deploying-a-smart-contract/hardhat.mdx
================================================
import { TestnetDisclaimer } from "@/components/TestnetDisclaimer";

# Deploying a Smart Contract with Hardhat

This guide will walk you through setting up a new project using Hardhat, a popular development environment for Ethereum software.

## Prerequisites

First, make sure you have Node.js installed (version 20 or later). You can check your Node version with:

```bash
node --version
```

## Setting Up a New Hardhat Project

1. Create a new directory for your project and initialize it:

```bash
mkdir my-hardhat-project
cd my-hardhat-project
npm init -y
```

2. Install Hardhat and necessary dependencies:

```bash
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
```

3. Create a new Hardhat project:

```bash
npx hardhat init
```

Choose "Create a JavaScript project" when prompted. This will create a project with this structure:

```
my-hardhat-project/
├── contracts/
├── scripts/
├── test/
├── hardhat.config.js
└── package.json
```

## Writing Your First Contract

Create a new file in the `contracts` directory:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract InkContract {
    string public greeting = "Hello, Ink!";

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}
```

## Configuring Hardhat

Create a `.env` file in your project root:

```env
PRIVATE_KEY=your_private_key_here
INK_SEPOLIA_URL=https://rpc-gel-sepolia.inkonchain.com/
BLOCKSCOUT_API_KEY=your_blockscout_api_key_here
```

Update your `hardhat.config.js`:

```javascript
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.19",
  networks: {
    inksepolia: {
      url: process.env.INK_SEPOLIA_URL || "",
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
    },
  },
  etherscan: {
    apiKey: {
      inksepolia: process.env.BLOCKSCOUT_API_KEY,
    },
    customChains: [
      {
        network: "inksepolia",
        chainId: 763373,
        urls: {
          apiURL: "https://explorer-sepolia.inkonchain.com/api",
          browserURL: "https://explorer-sepolia.inkonchain.com/",
        },
      },
    ],
  },
};
```

## Building and Testing

1. Compile your contracts:

```bash
npx hardhat compile
```

2. Create a test file in `test/InkContract.js`:

```javascript
const { expect } = require("chai");

describe("InkContract", function () {
  it("Should return the correct greeting", async function () {
    const InkContract = await ethers.getContractFactory("InkContract");
    const contract = await InkContract.deploy();
    await contract.deployed();

    expect(await contract.greeting()).to.equal("Hello, Ink!");
  });
});
```

3. Run the tests:

```bash
npx hardhat test
```

## Deployment

Create a deployment script in `scripts/deploy.js`:

```javascript
async function main() {
  const InkContract = await ethers.getContractFactory("InkContract");
  const contract = await InkContract.deploy();

  await contract.deployed();

  console.log("InkContract deployed to:", contract.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
```

Deploy to Ink Sepolia testnet:

```bash
npx hardhat run scripts/deploy.js --network inksepolia
```

## Verifying Your Contract

After deployment, verify your contract:

```bash
npx hardhat verify --network inksepolia <DEPLOYED_CONTRACT_ADDRESS>
```

## Interacting with Your Contract

You can use Hardhat Console to interact with your deployed contract:

```bash
npx hardhat console --network inksepolia
```

```javascript
const Contract = await ethers.getContractFactory("InkContract");
const contract = await Contract.attach("YOUR_CONTRACT_ADDRESS");
await contract.greeting();
await contract.setGreeting("New greeting!");
```

## Additional Tools

Hardhat comes with several built-in tools:

- Hardhat Network: Local Ethereum network for development
- Console: Interactive JavaScript environment
- Gas Reporter: Gas usage reporting
- Coverage: Code coverage for Solidity tests

To use the network for local development:

```bash
npx hardhat node
```

## Next Steps

- Explore [Hardhat Documentation](https://hardhat.org/docs) for more features

<TestnetDisclaimer />


================================================
FILE: src/pages/build/tutorials/deploying-a-smart-contract/remix.mdx
================================================
import { Callout } from "nextra/components";
import { TestnetDisclaimer } from "@/components/TestnetDisclaimer";

# Deploying a Smart Contract with Remix

This guide will walk you through deploying a smart contract on Ink using Remix IDE, a popular browser-based development environment for Ethereum smart contracts.

## What is Remix?

Remix IDE is a powerful, open-source tool that helps you write, compile, deploy, and debug Solidity smart contracts. It's particularly useful for beginners as it requires no setup and runs directly in your browser.

## Accessing Remix

1. Open your web browser and navigate to [Remix IDE](https://remix.ethereum.org)
2. You'll see the default workspace with some example contracts

## Creating Your First Contract

1. In the File Explorer (left sidebar), create a new file by clicking the "+" icon
2. Name it `InkContract.sol` and add the following code:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract InkContract {
    string public greeting = "Hello, Ink!";

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}
```

![inkContract.sol](src/images/remix_deploy_1.png)

## Compiling Your Contract

1. Click on the `Solidity Compiler` tab in the left sidebar (icon looks like an "S")
2. Make sure the compiler version matches your pragma statement (0.8.19)
3. Click `Compile InkContract.sol`
4. Look for a green checkmark indicating successful compilation

![inkContract.sol](src/images/remix_deploy_2.png)

## Connecting to Ink Network

1. On the left sidebar, click the `Deploy & run transactions` tab (represented by a deployment arrow icon ▶️)
2. In the `ENVIRONMENT` dropdown:
   - If you see `Injected Provider`, select it
   - If not visible, click `Customize this list...` in dropdown
   - In the opened "Environment Explorer" window, under "Deploy using a Browser Extension" section, select `Injected Provider - [WALLET_NAME]`, where [WALLET_NAME] is your connected Web3 wallet (e.g., MetaMask, Rabby)
3. Configure your preferred Web3 wallet with Ink Sepolia network details:
   - Network Name: Ink Sepolia
   - RPC URL: https://rpc-gel-sepolia.inkonchain.com/
   - Chain ID: 763373
   - Currency Symbol: Ink
   - Block Explorer URL: https://explorer-sepolia.inkonchain.com/

Most modern Web3 wallets will allow you to add custom networks through their settings. Look for options like `Add Network`, `Custom RPC`, or `Networks` in your wallet's interface.

![inkContract.sol](src/images/remix_deploy_3.png)

## Deploying Your Contract

1. Before deploying, ensure:

   - Your Web3 wallet is connected to Ink Sepolia network
   - You have sufficient ETH for deployment
   - Your wallet is connected to Remix IDE (accept the connection prompt if shown)

2. In the "Deploy & Run Transactions" tab:

   - Select `InkContract` from the `CONTRACT` dropdown
   - Click `Deploy`
   - A popup from your wallet will appear - review and confirm the transaction

3. Once deployed, you'll see your contract appear under `Deployed Contracts` in the left lower corner of the window.

![inkContract.sol](src/images/remix_deploy_4.png)

## Interacting with Your Contract

1. Under `Deployed Contracts`, expand your contract to see its functions
2. You can:
   - Read the current greeting by clicking `greeting`
   - Set a new greeting by:
     - Typing a new message in the `setGreeting` input field
     - Clicking `transact`
     - Confirming the transaction in your wallet

![inkContract.sol](src/images/remix_deploy_5.png)

## Verifying Your Contract

See also the respective [tutorial](/build/tutorials/verify-smart-contract).

1. Go to [Ink Blockscout](https://explorer-sepolia.inkonchain.com)
2. Find your contract by its address
3. Click `Verify & Publish`
4. Fill in the verification details:
   - Choose `Solidity (Single file)`
   - Select the same compiler version used in Remix
   - Set optimization to 200 runs
   - Paste your contract code
   - Click `Verify & Publish`

<Callout emoji="">
  Make sure to verify whether optimization is on or off in Remix Compiler's
  Advanced Configuration as this can affect verification success.
</Callout>

## Tips and Best Practices

- Always test your contracts in Remix's JavaScript VM before deploying to testnet
- Use the Remix debugger to troubleshoot failed transactions
- Save your contract's address after deployment
- Keep your wallet secure and never share your private keys

## Useful Features in Remix

- **Debugger**: Helps you understand why transactions fail
- **Static Analysis**: Checks your code for common issues
- **Gas Estimation**: Shows approximate deployment costs
- **Console**: Displays transaction logs and debugging information

## Next Steps

- Explore [Remix Documentation](https://remix-ide.readthedocs.io/) for advanced features
- Learn about [Solidity](https://docs.soliditylang.org/) programming

<TestnetDisclaimer />


================================================
FILE: src/pages/build/tutorials/deploying-a-superchainerc20.mdx
================================================
import { Callout } from "nextra/components";

# Deploying a SuperchainERC20

<Callout type="info">
  The SuperchainERC20 standard is ready for production deployments. Please note
  that the OP Stack interoperability upgrade, required for crosschain messaging,
  is currently in active development.
</Callout>

Welcome to the SuperchainERC20 quickstart guide! In this guide, we'll cover how the token works and the deployment process using the SuperchainERC20 starter kit. Whether you're a seasoned developer or just starting out, this guide has got you covered.

## What is SuperchainERC20?

SuperchainERC20 provides a standardized token implementation enabling seamless token transfers across the Superchain.

SuperchainERC20 extends the standard ERC-20 token with cross-chain mint and burn capabilities, enabling seamless interoperability across the [Superchain interop cluster](https://docs.optimism.io/stack/interop/explainer#superchain-interop-cluster). This token standard implements the [ERC-7802](https://eips.ethereum.org/EIPS/eip-7802) interface to enable 1-block latency cross-chain mint/burn functionality.

## How does SuperchainERC20 work?

[SuperchainERC20](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L2/SuperchainERC20.sol) and [SuperchainTokenBridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L2/SuperchainTokenBridge.sol) work together to allow ERC-20 tokens to be transferred from one chain to the other.

SuperchainERC20 cross-chain transfers require two transactions:

1. **Initiate Transaction**: On the source chain, tokens are burned and a cross-chain message is emitted
2. **Execute Transaction**: The message is relayed to the destination chain, triggering token minting

This flow ensures tokens maintain consistent total supply across the entire Superchain ecosystem and eliminates the need for liquidity pools or wrapped tokens.

## Why SuperchainERC20 matters for users, token issuers, and apps on Ink

Superchain interop provides Ink with essential cross-chain capabilities that enhance the network's interoperability. When token issuers use SuperchainERC20 over a typical ERС-20 deployment it gives token issuers access to the broader Superchain network effects, ensuring your tokens can seamlessly be used by apps and users across the Superchain.

SuperchainERC20 deployment creates opportunities for:

- **Enhanced Liquidity**: Unified token representation across chains improves capital efficiency
- **Simplified Developer Experience**: Consistent API for projects building on Ink
- **Reduced Fragmentation**: Improved capital efficiency for DeFi applications across the Superchain ecosystem - one chain to rule them all

## 🚀 Deploying SuperchainERC20 - Quickstart

### Prerequisites

First, you'll need to install Foundry, as the project requires `anvil`. Follow the [Foundry installation guide](https://book.getfoundry.sh/getting-started/installation).

### Setup Steps

1. **Clone the repository**

   ```sh
   git clone git@github.com:ethereum-optimism/superchainerc20-starter.git
   cd superchainerc20-starter
   ```

2. **Install dependencies**

   ```sh
   pnpm i
   ```

3. **Set up environment files**

   ```sh
   pnpm init:env
   ```

4. **Start the development environment**

   ```sh
   pnpm dev
   ```

5. **Update RPC URLs**

   ```sh
   pnpm contracts:update:rpcs
   ```

6. **Configure deployment settings**
   Create or update your deployment configuration file:

   ```toml
   [deploy_config]
   salt = "ethers phoenix"
   chains = ["sepolia/ink"]

   [token]
   owner_address = "<YOUR ADDRESS>"    # Your wallet address
   name = "<YOUR TOKEN NAME>"          # The name of your token
   symbol = "<YOUR TOKEN SYMBOL>"      # Your token's symbol (e.g., "OPT")
   decimals = 18                       # Number of decimal places (18 is standard)
   ```

   Save this to `packages/contracts/configs/deploy-config.toml`

7. **Set up your deployer private key**

   ```sh
   echo 'DEPLOYER_PRIVATE_KEY=<YOUR PRIVATE KEY>' > packages/contracts/.env
   ```

   ⚠️ Never share or commit your private key. Make sure your wallet has enough funds for deployment.

8. **Deploy your token**
   ```sh
   pnpm contracts:deploy:token
   ```

## Security considerations

<Callout type="info">
To ensure security, you must either design the deployer to allow only a specific trusted ERC-20 contract, such as SuperchainERC20, to be deployed through it, or call CREATE2 to deploy the contract directly from an EOA you control.

This precaution is critical because if an unauthorized ERC-20 contract is deployed at the same address on any Superchain network, it could allow malicious actors to mint unlimited tokens and bridge them to the network where the original ERC-20 contract resides.

</Callout>

For production deployments, ensure that:

1. Grant permissions to the `SuperchainTokenBridge`(address `0x4200000000000000000000000000000000000028`) to call `crosschainMint` and `crosschainBurn`.
2. Deploy the `SuperchainERC20` at the same address on every chain in the Superchain where you want your token to be available. If you do not deploy the contract to a specific destination chain, users will be unable to successfully move their tokens to that chain.

## What's Next?

SuperchainERC20 enables token issuers to seamlessly access Superchain network effects. By leveraging SuperchainERC20 and Superchain interop, developers can focus on building features rather than solving complex cross-chain challenges.

- Use Supersim, a local development tool, to [deploy a SuperchainERC20 or build an interop-enabled app](https://docs.optimism.io/app-developers/get-started)
- Learn more about the [technical architecture of Superchain interop](https://docs.optimism.io/stack/interop/explainer)
- Learn about how [other token standards can benefit from Superchain interop](https://docs.optimism.io/stack/interop/compatible-tokens)


================================================
FILE: src/pages/build/tutorials/shipping-on-the-superchain.mdx
================================================
# Shipping on the Superchain

You can use [Supersim](https://github.com/ethereum-optimism/supersim) to simulate the Superchain and develop apps that can be used across any chain!

Supersim enables builders to:

* Experiment with apps that can be accessed from any chain
* Create tokens with **SuperchainERC20**, a fungible token standard for tokens that can be used across the Superchain
* Simulate crosschain messaging


================================================
FILE: src/pages/build/tutorials/verify-smart-contract.mdx
================================================
import { Callout } from 'nextra/components'

## Verifying your Smart Contract 

In order for your deployed smart contract(s) to be human-readable on block explorers like Blockscout they must be verified. Verification is highly recommended to increase trust in your code and dapp.

Smart contracts can be verified through the Blockscout UI or a [host of other methods](https://docs.blockscout.com/devs/verification). 

## Verifying a Smart Contract using the Blockscout UI 

Verification is available for both Solidity and Vyper contracts. **Currently, there are 7 different types of inputs you can use for verification using the Blockscout UI**.

<Callout type="info" emoji="ℹ️">
👷🏻‍♂️ If preferred you can verify directly from your Hardhat or Foundry dev environment. 

[Hardhat Verification Plugin](https://docs.blockscout.com/devs/verification/hardhat-verification-plugin)

[Foundry Verification](https://docs.blockscout.com/devs/verification/foundry-verification)
</Callout>

### Smart Contract Verification with Blockscout
1) Go to the [Verify contract](https://explorer-sepolia.inkonchain.com/contract-verification) page (Other -> Verify contract)

![Blockscout verification 1](../../../images/blockscout_verif_1_ink.png)

2) Enter the contract address you received during deployment. The dropdown will show you several available verification options. Select the one you would like to use and continue.

![Blockscout verification 2](../../../images/blockscout_verif_2_ink.png)

### Input Types
Choose the format that applies to your files:

- Solidity ([Flattened source code](/build/tutorials/verify-smart-contract#solidity-flattened-source-code))

- Solidity ([Standard JSON input](/build/tutorials/verify-smart-contract#solidity-standard-json-input))

- Solidity ([Sourcify](/build/tutorials/verify-smart-contract#via-sourcify-sources-and-metadata-json-file))

- Solidity ([Multi-part files](/build/tutorials/verify-smart-contract#solidity-multi-part-files))

- Vyper ([Contract](/build/tutorials/verify-smart-contract#vyper-contract))

- Vyper ([Multi-part files](/build/tutorials/verify-smart-contract#vyper-multi-part-files-and-standard-json-input))

- Vyper ([Standard JSON input](/build/tutorials/verify-smart-contract#vyper-multi-part-files-and-standard-json-input))

#### Solidity (Flattened source code)
This verification method is recommended only for single-file smart contracts without any imports. For verification of contracts containing more than 1 file, it's recommended to use different verification method.

![Blockscout verification 3](../../../images/blockscout_verif_3_ink.png)

1. **Contract Address**: The `0x` address supplied on contract creation (added above)

2. **Is Yul contract**: Select if the contract is coded in Yul for efficiency.

3. **Include Nightly Builds**: Select if you want to show nightly builds.

4. **Compiler**: derived from the first line in the contract `pragma solidity X.X.X`. Use the corresponding compiler version rather than the nightly build.

5. **EVM Version**: Select the correct EVM version if known, otherwise use default.

6. **Optimization Enabled**: If you enabled optimization during compilation, select and enter the run value. 200 is the Solidity Compiler default value. Only change if you changed this value while compiling.

7. **Enter the Solidity Contract Code**: Copy-paste the source code of your smart contract as is.

8. **Add Contract Libraries**: Enter the name and 0x address for any required libraries called in the .sol file. You can add multiple contracts with the "+" button.

9. Click the `Verify and Publish` button.

10. If all goes well, you will see a checkmark ✅ next to Code in the code tab, and an additional tab called `Read Contract`. The contract name will now appear in BlockScout with any transactions related to your contract.

#### Solidity (Standard JSON input)
<Callout type="info" emoji="ℹ️">
More information on JSON input is available [here](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description). 
</Callout>

1. **Include nightly builds**. You can choose `Yes` or `No` depending on your compiler. 

2. **Compiler**. Choose the compiler version used to compile your smart contract. If you selected yes for nightly builds, use the compiler version rather than the build.

3. **Standard Input JSON**. Upload your Standard Input JSON file. File should follow the Solidity [format](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description) and all the sources must be in Literal Content format, not a URL.

Click the `Verify & publish` button and wait for the response.

#### Via Sourcify: Sources and metadata JSON file
See [Contract Verification via Sourcify](https://docs.blockscout.com/devs/verification/contracts-verification-via-sourcify) for details.

#### Solidity (Multi-part files)
See the above settings. You will upload all of the .sol or .yul files you used for your contract. This method requires at least 2 files - if you have a single file use the flattened source code method.

#### Vyper Contract
Contract Name: Name assigned to the contract.

1. **Compiler**: Select the compiler version used in the source code.

2. **EVM Version**: Select the correct EVM version if known, otherwise use default.

3. **Contract Code**: Copy and paste the contract code

4. Click the `Verify and Publish` button.

If all goes well, you will see a checkmark ✅ next to Code in the code tab, and an additional tab called `Read Contract`. The contract name will now appear in BlockScout with any transactions related to your contract.

#### Vyper Multi-part files and standard json input
See the information above.

### Troubleshooting
If you receive the dreaded `There was an error compiling your contract` message this means the bytecode doesn't match the supplied source code. Unfortunately, there are many reasons this may be the case. Here are a few things to try:

1) Double check the compiler version is correct.

<Callout type="info" emoji="ℹ️">
Check all version digits - for example 0.5.1 is different from 0.5.10
</Callout>

2) Check that an extra space has not been added to the end of the contract. When pasting in, an extra space may be added. Delete this and attempt to recompile.

3) Copy, paste, and verify your source code in Remix. You may find some exceptions here.

Verification in a dev environment
The [Hardhat verification plugin](https://docs.blockscout.com/devs/verification/hardhat-verification-plugin) supports BlockScout. You can also choose to use the [Sourcify plugin](https://docs.blockscout.com/devs/verification/hardhat-verification-plugin/sourcify-plugin-for-hardhat) to verify with Sourcify from your hardhat environment. [Foundry supports blockscout verification with Forge](https://book.getfoundry.sh/reference/forge/forge-verify-contract).

###### Source
[Blockscout](https://docs.blockscout.com/devs/verification/blockscout-ui)


================================================
FILE: src/pages/build/tutorials.mdx
================================================
# Tutorials

Welcome to the tutorials section! Here you'll find step-by-step guides to help you build on Ink.

## Available Tutorials

* [Deploying a Smart Contract with Foundry](/build/tutorials/deploying-a-smart-contract/foundry)
* [Deploying a Smart Contract with Hardhat](/build/tutorials/deploying-a-smart-contract/hardhat)
* [Deploying a Smart Contract with Remix](/build/tutorials/deploying-a-smart-contract/remix)
* [Verifying a Smart Contract](/build/tutorials/verify-smart-contract)
* [Shipping a Superchain App](/build/tutorials/shipping-on-the-superchain)
* [Deploying a SuperchainERC20](/build/tutorials/deploying-a-superchainerc20)


================================================
FILE: src/pages/build/verify.mdx
================================================
---
title: Kraken Verify
description: Solidity contracts for Kraken Verify - EAS attestation utilities enabling access control for verified Kraken users through onchain attestations.
---

# Kraken Verify

Kraken Verify is a service that allows users to create an onchain attestation linking their wallet address to their verified Kraken account. This creates a trusted connection between a user's Kraken identity and their blockchain activity, enabling access to exclusive features across the Ink ecosystem.

Kraken Verify uses the [Ethereum Attestation Service (EAS)](https://attest.org/) on Ink to issue onchain attestations. These attestations only store the wallet address and verification confirmation - no personal information is published onchain. Gas fees are covered by Kraken, making verification free for users.

Users can verify one address at a time, with the ability to revoke and re-verify with a new address as needed. To prevent abuse, users can perform up to 20 verifications per year. These verifications are non-transferable and provide a secure way to access verified-only features.

## Installation

```bash
  # Using npm
  npm install @krakenfx/verify

  # Using yarn
  yarn add @krakenfx/verify

  # Using pnpm
  pnpm add @krakenfx/verify
```

## Setup

### Remappings

Generate remappings for Foundry:

```bash
  forge remappings > remappings.txt
```

You might need to add this extra one manually if you're using pnpm:

```txt
  @ethereum-attestation-service/=node_modules/.pnpm/@ethereum-attestation-service+eas-contracts@1.8.0/node_modules/@ethereum-attestation-service
```

### IDE Configuration

Update your IDE to support remappings. For VS Code:

```json
// .vscode/settings.json
{
  "solidity.remappings": ["...=node_modules/..."]
}
```

## Usage

### Solidity

```solidity
  // SPDX-License-Identifier: MIT
  pragma solidity 0.8.24;

  import { KrakenVerifyAccessControl } from "@krakenfx/verify/src/abstracts/KrakenVerifyAccessControl.sol";

  contract MyContract is KrakenVerifyAccessControl {
      // Only users with valid Kraken Verify attestations can call this function
      function verifiedUserFunction() external onlyVerified {
          // Your implementation
      }
  }
```

### JavaScript / TypeScript Client

The package also provides a client for checking address verification status directly from JavaScript or TypeScript applications. This can be useful for frontend applications that need to verify user addresses before displaying certain features or content.

#### ESM / TypeScript

```typescript
// ES Modules / TypeScript
import { VerifyClient } from "@krakenfx/verify";

const verifyClient = new VerifyClient();
const yourAddress = "0x2193981f2d65149644C039c9071f2bE8b5938F0B";

// Check if an address is verified
const isVerified = await verifyClient.isAddressVerified(yourAddress);

console.log(`Result: ${isVerified ? "✅ Verified" : "❌ Not verified"}`);
```

#### CommonJS

```javascript
// CommonJS
const { VerifyClient } = require("@krakenfx/verify");

const verifyClient = new VerifyClient();
const yourAddress = "0x2193981f2d65149644C039c9071f2bE8b5938F0B";

// Check if an address is verified
async function checkVerification() {
  const isVerified = await verifyClient.isAddressVerified(yourAddress);
  console.log(`Result: ${isVerified ? "✅ Verified" : "❌ Not verified"}`);
}

checkVerification();
```

#### Configuration Options

You can customize the client by passing options to the constructor:

```typescript
const verifyClient = new VerifyClient({
  rpcUrl: "https://your-rpc-endpoint.com", // Custom RPC URL
  verbose: true, // Enable verbose logging
});
```

## What's Included

This package provides access control for verified Kraken users through EAS attestations:

- `KrakenVerifyAccessControl.sol`: Abstract contract with the `onlyVerified` modifier
- Supporting libraries and interfaces for attestation verification
- JavaScript/TypeScript client for checking address verification status

## Requirements

- Solidity 0.8.24
- Node.js 16+ (for client usage)

## License

MIT


================================================
FILE: src/pages/faq.mdx
================================================
import { URLS } from "@/utils/urls";

# Frequently Asked Questions

## Ink

### What makes Ink different?

Ink is an OP Stack Layer 2 launched with 1-second blocktimes. What sets us apart is our dedication to building a comprehensive DeFi ecosystem while staying true to our origins. Our mission is to simplify DeFi while bringing Kraken’s core principles—security, user experience, and privacy—onchain.

We embrace our cypherpunk roots by shipping rapidly and iteratively. Feedback from users, developers, and the broader onchain community is vital to us as we strive to create the ultimate platform for achieving individual financial sovereignty.

### What’s the difference between Ethereum and OP Stack chains?

OP Stack chains are designed to be EVM equivalent and introduces as few changes as possible to the Ethereum protocol.

For a full rundown on all differences please refer to [Optimism’s documentation](https://docs.optimism.io/stack/differences).

For convenience, a few notable points worth mentioning are:

- [Opcodes](https://docs.optimism.io/stack/differences#opcodes)
- [Bridging](https://docs.optimism.io/stack/differences#bridging)
- [Chain Finality](https://docs.optimism.io/stack/differences#chain-finality)

### How do I get started with developing on Ink?

Get started developing on Ink [here](/build/getting-started). We also have a full stack suite of [infra providers and tools](/tools/rpc) to help you ship.

### How to deploy a smart contract on Ink?

You can follow a tutorial from the Ink Docs here: https://docs.inkonchain.com/build/tutorials

### Where can I get funds to test Ink?

Check out our [faucets](/tools/faucets).

### Where can I find important contracts deployed on Ink?

For token contracts on Ink please refer to our [Ink Token Contracts](/useful-information/ink-token-contracts) page.

For L1, L2 and predeploy addresses, please see our [Contracts](/useful-information/contracts) page.

### Are there any native bridging options?

At the moment, Ink does not host its own bridging portal. Please review our recognized partner’s bridges here: https://inkonchain.com/dashboard

### Why are fees/bridging high?

Ink cannot control gas fees or platform fees which vary subject to chain congestion and platform discretion. Please feel free to DYOR and explore multiple options available at https://inkonchain.com/dashboard

Kraken also supports the Ink network with zero withdrawal fees. If you want to buy ETH and then send it to your wallet, this is another option.

### Is developing on and using Ink expensive?

Not at all! As an L2 built on the Optimism stack Ink benefits from extremely low fees. L2 users do pay an extra fee to settle L2 data on L1 (Ethereum mainnet). Please see [Fees](/build/transaction-fees) for more information.

### What can I deploy on Ink?

You can deploy anything! While we may be a DeFi chain, we encourage developers of all types to deploy. Check out our [tutorials](/build/tutorials) to get started.

### Why don’t you support XYZ dApp?

The Ink ecosystem is growing rapidly post launch! Every week new partner bridges, DEXes, Infra providers, and other dApps are onboarding with Ink. Keep an eye on our social accounts for announcements. We value your feedback and appreciate your loyalty to the community.

### Where can I learn more about OP Stack?

To learn more about OP Stack chains, please visit [Optimism’s documentation](https://docs.optimism.io/).

## Community

### Wen TGE?

There is no information to share at this moment regarding any token from Ink.

### Wen Airdrop

There is no information to share at this moment regarding any airdrop. There may have been social media posts from third party, crypto related accounts in X but please DYOR (Do Your Own Research) and consult with us in official channels to avoid misinformation and to maintain expectations of what to come.

Finally, if still unsuccessful, please open a ticket so we can investigate. Feel free to share their username so we can help better.

### How do I get access granted to Guild task?

Please complete the tasks as detailed. Expand the description section to see the full task list and instructions. Once done, click the re-check access button at the top so Guild.xyz can check again and update your status.

Also make sure to connect the right address to Guild and that you grant access to all connected networks in your wallet.


================================================
FILE: src/pages/general/_meta.json
================================================
{
  "about": "About Ink",
  "network-information": "Network Information",
  "connect-wallet": "Connect Wallet",
  "bridge": { "title": "Bridge", "href": "/tools/bridges" },
  "faucet": { "title": "Faucet", "href": "/tools/faucets" },
  "support": "Support"
}


================================================
FILE: src/pages/general/about.mdx
================================================
# About Ink

## What is Ink?

Ink is an Ethereum OP Stack layer 2 blockchain designed to be the house of DeFi for the Superchain; a powerful baselayer for deploying innovative DeFi protocols.

- **Sub-second block times**: 1s block times Day 1, sub-second blocks coming soon.
- **Smol Gas**: Ape more, pay less.
- **Security**: Sequencer-level security to protect users from malicious intents and exploits.
- **Interoperability**: A commitment to the seamless flow of capital across the Superchain and beyond.
- **Unleashed by Kraken**: Ink will leverage Kraken's security and crypto expertise to support builders and users alike as they move towards independent financial sovereignty.
- **Scaling Ethereum**: Ink is dedicated to scaling Ethereum with a powerful L2 that enhances performance and accessibility.

## Why use Ink?

Built on the Superchain and unleashed by Kraken, Ink will serve as a central point in your journey towards onchain financial sovereignty.

### Ink features:

- **Abstraction**: Ink integrates Kraken's infrastructure and enables users to enjoy a unified experience from converting fiat to the cutting edge of DeFi.
- **DeFi-first**: Ink aims to scale up DeFi's user base and evolve the quality and range of DeFi products.
- **UX**: Ink pursues a user experience that makes your onchain journey a breeze by leveraging aggregation, automation and abstraction. Check out our <a href="https://docs.inkonchain.com/build/ink-kit">Ink Kit</a> (archived) for historical reference.
- **Speed**: 1s block times on day one with subsecond block times coming soon.
- **Security**: Kraken's decade-long record of security and reliability will be reflected and pushed forward on Ink.
- **Support**: Builders can expect rich documentation, expert guidance, workshops, tailored onboarding, dedicated community channels and financial support to bring their ideas to life.
- **Low Fees**: Harnessing the scalability of Optimism and the security of Ethereum, gas fees on Ink are a fraction of mainnet.
- **Open Source, Scaling Ethereum**: At Ink, we build in the open, benefiting all.
- **EVM compatible**: Seamlessly deploy any Solidity contract written for Ethereum Mainnet or other L2s directly on Ink without modifications.

## What is Ink built on?

- Ink is a Layer 2 built on the [OP Stack](https://docs.optimism.io/stack/getting-started) and part of the Superchain. Aligning with the Optimism Superchain promotes interoperability and the seamless flow of funds from one chain to the next, allowing Ink to push the limits of DeFi.


================================================
FILE: src/pages/general/connect-wallet.mdx
================================================
import { Callout } from "nextra/components";
import CopyableCode from "@/components/CopyableCode";
import { AddNetworkButton } from "../../components/AddNetworkButton";

## Connect Wallet

<AddNetworkButton network="mainnet" heading="Mainnet" />

<AddNetworkButton network="sepolia" heading="Testnet (Sepolia)" />

## Kraken Wallet

Ink Mainnet is supported natively on Kraken Wallet. Don’t have it yet? Download it for [iOS](https://apps.apple.com/us/app/kraken-wallet-crypto-defi/id1626327149) or [Android](https://play.google.com/store/apps/details?id=com.kraken.superwallet&hl=en).

---

## Rainbow

Ink Mainnet is supported natively on Rainbow wallet. Don’t have it yet? Download it [here](https://rainbow.me/en/download)

---

## MetaMask

To manually add **Ink Mainnet** as a custom network, follow these steps:

1. Open your MetaMask browser extension.
2. Click the network selection dropdown at the top left of the extension.
3. Select the **"+ Add a custom network"** button at the bottom.
4. In the new window, click **"Add a network manually"** at the bottom of the list.
5. Enter the details provided in the dialog that appears.

| Field                          | Information                                             |
| ------------------------------ | ------------------------------------------------------- |
| Network Name                   | Ink                                                     |
| RPC Endpoint (HTTPS) (primary) | <CopyableCode code="https://rpc-gel.inkonchain.com" />  |
| Chain ID                       | 57073                                                   |
| Currency Symbol                | ETH                                                     |
| Block Explorer                 | <CopyableCode code="https://explorer.inkonchain.com" /> |

6. Click **"Save"**.
7. Ink Mainnet will now be available in the network selection dropdown.

---

_For a more detailed walkthrough, please refer to the [official MetaMask tutorial](https://support.metamask.io/networks-and-sidechains/managing-networks/how-to-add-a-custom-network-rpc/)._


================================================
FILE: src/pages/general/faucet.mdx
================================================
# Faucets

## TODO


================================================
FILE: src/pages/general/network-information.mdx
================================================
import CopyableCode from "@/components/CopyableCode";

# Network Information

## Mainnet

| Field                            | Information                                              |
| -------------------------------- | -------------------------------------------------------- |
| Network Name                     | Ink                                                      |
| Description                      | Ink's public mainnet                                     |
| RPC Endpoint (HTTPS) (primary)   | <CopyableCode code="https://rpc-gel.inkonchain.com" />   |
| RPC Endpoint (WSS) (primary)     | <CopyableCode code="wss://rpc-gel.inkonchain.com" />     |
| RPC Endpoint (HTTPS) (secondary) | <CopyableCode code="https://rpc-qnd.inkonchain.com" />   |
| RPC Endpoint (WSS) (secondary)   | <CopyableCode code="wss://rpc-qnd.inkonchain.com" />     |
| Chain ID                         | 57073                                                    |
| Currency Symbol                  | ETH                                                      |
| Block Explorer                   | <CopyableCode code="https://explorer.inkonchain.com" />  |

---

## Testnet

| Field                            | Information                                                     |
| -------------------------------- | --------------------------------------------------------------- |
| Network Name                     | Ink Sepolia                                                     |
| Description                      | Ink's public testnet                                            |
| RPC Endpoint (HTTPS) (primary)   | <CopyableCode code="https://rpc-gel-sepolia.inkonchain.com" />  |
| RPC Endpoint (WSS) (primary)     | <CopyableCode code="wss://rpc-gel-sepolia.inkonchain.com" />    |
| RPC Endpoint (HTTPS) (secondary) | <CopyableCode code="https://rpc-qnd-sepolia.inkonchain.com" />  |
| RPC Endpoint (WSS) (secondary)   | <CopyableCode code="wss://rpc-qnd-sepolia.inkonchain.com" />    |
| Chain ID                         | 763373                                                          |
| Currency Symbol                  | ETH                                                             |
| Block Explorer                   | <CopyableCode code="https://explorer-sepolia.inkonchain.com" /> |

Click [here](/tools/rpc) for a list of vendors offering private RPC endpoints.


================================================
FILE: src/pages/general/support/_meta.json
================================================
{
  "troubleshooting": "Troubleshooting"
}


================================================
FILE: src/pages/general/support/troubleshooting.mdx
================================================
import { Callout } from "nextra/components";
import CopyableCode from "@/components/CopyableCode";

# Troubleshooting Guide

This guide covers common issues developers and users might encounter when working with Ink, along with their solutions.

## Transaction Issues

### Nonce Out of Sync

If you encounter JSON-RPC internal errors or transactions getting stuck, your wallet's nonce may be out of sync with the network. Here's how to fix it:

#### For MetaMask Users:

1. Enable custom nonce in MetaMask:

   - Go to Settings > Advanced
   - Enable "Customize transaction nonce"

2. Find your next valid nonce using either method A or B:

   **Method A: Using Block Explorer**

   - Go to <CopyableCode code="https://explorer.inkonchain.com/address/YOUR_ADDRESS" /> (replace YOUR_ADDRESS with your address)
   - Find your most recent transaction where you were the sender (FROM address)
   - Click the transaction and then "View details"
   - Find the nonce value and add 1 to it - this is your next valid nonce

   **Method B: Using Command Line**

   ```bash
   curl -s -X POST -H "Content-Type: application/json" --data '{
     "jsonrpc":"2.0",
     "method":"eth_getTransactionCount",
     "params":["YOUR_ADDRESS", "latest"],
     "id":1
   }' https://rpc-gel.inkonchain.com | python3 -c "import sys, json; print(int(json.load(sys.stdin)['result'], 16))"
   ```

   Replace `YOUR_ADDRESS` with your wallet address. The number returned is your next valid nonce.

3. Send a recovery transaction:

   - Send a 0 ETH transaction to yourself
   - When prompted for the nonce, use the exact number you got from either method above
   - Increase the gas price slightly (tap + once in the Network Fee section)
   - The transaction should go through

4. Future transactions should now use the correct nonce

<Callout type="info">
  The recovery transaction typically costs around $0.05 in gas fees.
</Callout>

## Getting Help

If you're still experiencing issues:

1. Check the [Network Status Page](https://status.inkonchain.com/) for any ongoing incidents
2. Submit a detailed bug report on our [GitHub](https://github.com/inkonchain/docs/issues)


================================================
FILE: src/pages/general/support.mdx
================================================
import { URLS } from "@/utils/urls";

# Support

At Ink, we're here to help everyone, builders and users alike.

Please don't hesitate to reach out to us via any of our channels listed below.

- [Telegram](https://t.me/inkonchain)
- [Twitter](https://x.com/inkonchain)


================================================
FILE: src/pages/index.mdx
================================================
import { Callout } from "nextra/components";
import { URLS } from "@/utils/urls";

# Welcome to the Ink Docs

<video autoPlay loop muted playsInline className="w-full rounded-6xl">
  <source src="../images/ink-banner.mp4" type="video/mp4" />
</video>

Welcome to the documentation for Ink, Kraken's dedicated DeFi chain.

<Callout type="info" emoji="ℹ️">
  New to Ink? [Learn more about Ink](/general/about)
</Callout>

###### Get started with developing on Ink!

- [Get connected to Ink](/general/connect-wallet)
- [Get testnet funds](/tools/faucets) to send transactions and deploy contracts on Ink
- Check out the [tutorials](/build/tutorials) (WIP) to start building on Ink
  <Callout type="info" emoji="ℹ️">
    Try out [InkGPT](https://chatgpt.com/g/g-ef8AAM6s4-inkkit-assistant)! Blaze
    through the docs and get deployed in no time with our new AI assistant.
  </Callout>


================================================
FILE: src/pages/ink-builder-program/_meta.json
================================================
{
  "overview": "Overview",
  "spark-program": "Spark Program",
  "forge-program": "Forge Program",
  "echo-program": "Echo Program",
  "office-hours": "Office Hours"
}


================================================
FILE: src/pages/ink-builder-program/echo-program.mdx
================================================
# Echo Program

> **Retroactive Recognition for Ink's Early Builders**
> *Submissions Closed – March 4, 2026*

Echo was created as a one-time, retroactive initiative to recognize teams that shipped real product on Ink during its earliest phase.

Before formal grant programs were in place, teams were already deploying contracts, launching tools, and building usable infrastructure on the network. Echo was created to formally acknowledge those contributions.

## The Birth of Echo Program

Ecosystems don't appear overnight. They're built through shipping.

Echo was created to:

- Recognize projects that shipped and delivered on Ink before November 1, 2025
- Reward contributions that generated measurable ecosystem value
- Reconnect early builders with Ink's next phase

Echo was not about ideas, roadmaps, or community presence. It was about shipped work that moved the chain forward.

## Who Echo Recognized

Echo was designed for teams that:

- Shipped a live product, tool, or meaningful onchain integration on Ink before November 1, 2025
- Provided verifiable proof of shipping (contracts, repositories, releases, live links, usage metrics)
- Created measurable ecosystem value through product usage, transactions, adoption, or builder utility

**Out of scope:**

- Community-only contributions
- Advisory or support roles
- Moderation or marketing efforts
- Concept-stage ideas without a deployed product
- Commercial partnerships or paid service engagements
- Pure network coverage integrations without an Ink-native shipped product

## Program Status

Submissions closed on March 4, 2026.

Approved teams received:

- A one-time retroactive grant (Builder Points and USDC)
- Optional public recognition
- Access to private builder channels and early ecosystem initiatives

## How Echo Fits Into Ink's Builder Framework

Echo formally recognized early builders.

Ink's other builder tracks support ongoing development:

- **Spark** supports builders who are already shipping and pushing a live product toward meaningful usage.
- **Forge** backs teams with traction, strong product fundamentals, and a serious ambition to scale on Ink.


================================================
FILE: src/pages/ink-builder-program/forge-program.mdx
================================================
# Forge Program

The future isn't written. It's waiting to be inked.

## What is Forge?

Forge is Ink's flagship track for teams ready to scale real traction into real impact. Forge provides milestone-based funding, advisory support, and access to the broader ecosystem for builders shipping dApps, infrastructure, and the tools that expand what's possible on Ink. In select cases, we may also back exceptional founders with a clear path to breakout impact.

This is where traction turns into compounding growth.

## Why We Built Forge

Every serious builder hits a moment where the idea is real, the product is live, and users are showing up. The next phase isn't "can we build it," it's can we scale it and make it last.

Forge exists for that moment.

It's built for teams past the demo stage, ready to sharpen execution, expand distribution, and grow with intent, with Ink as the primary home.

We're selective so we can stay hands-on. If you're in Forge, you're not just getting funding, you're getting real support.

## Who Should Apply

Forge is a strong fit for teams with real momentum and a clear plan to scale on Ink.

You'll likely be a match if you have:

- A product that's live, or launching on mainnet imminently
- Meaningful traction, with clear usage signals (users, volume, TVL, integrations, or growth)
- A scoped 30–60 day plan with measurable outcomes
- A team that can execute independently, with strong ownership
- A credible plan to sustain delivery (runway, revenue strategy, or fundraising readiness)
- A clear reason why Ink is the best home for your next stage

In select cases, we may back exceptional founders with a clear vision and strong alignment with Ink, especially if we see breakout potential and a credible path to execution and impact.

If you're still exploring ideas or building your first MVP, **Spark** will be a better starting point.

## What You Receive

Forge is more than a grant. It's a scaling layer around your team.

**Support includes:**

- Milestone-based grants up to 200,000 USDC
- Strategic mentorship from Ink contributors and advisors
- Ink-native integrations and dev tooling support
- Official ecosystem spotlight and social amplification
- Warm intros to partners, collaborators, and investors
- Eligibility for follow-on investment via Kraken Ventures

## What We're Looking For

We select projects based on traction, product strength, execution maturity, ecosystem impact, and long-term durability.

### 1) Traction

We look for strong signals that real users want what you've built, such as:

- Active users or repeat usage
- Onchain transactions or volume
- TVL or assets under management
- Protocol/tooling integrations
- Sustained growth tied to product activity

We may also selectively support standout founders (e.g., viral project creators or exceptional alumni from top builder ecosystems) if we believe they can rapidly scale into high-impact Ink-native products.

### 2) Ecosystem Impact

We prioritize projects that materially push Ink forward through:

- Liquidity, volume, or capital efficiency
- User adoption and retention
- Infrastructure other teams depend on
- Developer tooling leverage or ecosystem distribution

### 3) Execution Readiness

Forge is designed for teams that can ship reliably, operate independently, and build to last.

We'll look for:

- Strong product/engineering track record
- Clear ownership and decision-making
- Ability to deliver without heavy incubation
- Financial readiness: a credible runway plan, and the ability to secure ongoing resources (revenue or fundraising) as the market evolves

> Strong signals include prior fundraising experience, warm investor relationships, or a clear path to extending runway as the market evolves.

### 4) Milestone Clarity

Forge grants are milestone-based, so your roadmap matters.

We look for:

- A 30–60 day plan
- Deliverables tied to outcomes (usage, adoption, integrations, liquidity)
- A realistic scope and timeline

## What You Can Build

Forge supports projects that make Ink more powerful, useful, and scalable.

Common categories include:

- DeFi protocols & liquidity infrastructure
- Developer tooling, infra, SDKs, APIs
- Wallet UX, onboarding improvements, account abstraction
- Consumer + social apps
- Games, prediction markets, coordination networks
- Public goods + open-source primitives

If it materially improves Ink's ecosystem, it belongs here.

## How the Forge Review Works

**Step 1: Apply (Biweekly Review)**

Apply anytime. The Ink Foundation team reviews applications in **biweekly batches**.

You can expect a feedback email within **~14 days** of submitting a complete application.

**Step 2: Interview + Deep Review**

If shortlisted, we'll invite your team to an interview to validate fit and readiness across:

- Product and traction
- Team structure and execution ability
- Ecosystem alignment
- Long-term goals

**Step 3: Milestone Planning + Grant Approval**

If you pass the interview round, we'll work together to finalize:

- Grant size and milestone structure
- Roadmap checkpoints and success metrics
- Integration needs and ecosystem support
- Co-marketing opportunities (when relevant)

Once milestones are agreed, we issue final approval and funding is released in stages based on delivery.

## Apply to Forge

Ready to scale something real on Ink?

**Apply here:** https://forms.inkonchain.com/forge-builder-program


================================================
FILE: src/pages/ink-builder-program/office-hours.mdx
================================================
# Office Hours

Ink Office Hours are short, focused 15-minute sessions for teams already building on Ink (or actively preparing to deploy).

Bring one clear question, leave with clear next steps.

> We prioritize requests that come with real context: a demo, repo, contract, logs, or a concrete integration plan.

## **What Office Hours Are For**

### **1. Integration + Deployment Blockers**

Use Office Hours when you're stuck and need help unblocking shipping.

- Contract/API/RPC issues
- Debugging errors, failed calls, unexpected behavior
- Deployment/config problems, infra wiring, integration friction

### **2. Architecture Review (for something you've already built)**

Use Office Hours to sanity-check technical direction and avoid expensive mistakes.

- Architecture validation for an existing MVP
- Integration approach review (how to connect to Ink-native infra)
- Security and production readiness checks (lightweight, not a full audit)

### **3. Product Feedback (for established products)**

Use Office Hours if you have a real product and want fast, practical feedback.

- UX/onboarding improvements
- MVP refinement and feature prioritization
- Activation/retention feedback based on your current users
- "What should we ship next?" based on your product today

### **4. Launch Readiness on Ink**

Use Office Hours when you're serious about deploying/expanding to Ink and want to pressure-test the plan.

- What you need to launch cleanly
- Dependencies, integration checklist, rollout sequencing
- Clear next steps to get to mainnet

## **What Office Hours Are Not For**

To keep sessions high-signal, we don't use Office Hours for:

- Grant status updates, decisions, or rejection discussions
- Token topics (tokenomics, listings, incentives negotiation)
- Legal or compliance advice for your project
- Fundraising requests or VC introductions.

## **How Requests Are Handled**

1. **Submit a request here: [Request Office Hours](https://tally.so/r/lbRVDW)**

> **Note:** Office hour **sessions are only 15 minutes**, please come prepared. If the request is too broad or has no context, we won't be able to accept it.

1. **We triage within ~72 hours**
2. **If it's a fit, you get a scheduling link** (15-min session)
3. **If not, you still get a reply** with the right next step/resources


================================================
FILE: src/pages/ink-builder-program/overview.mdx
================================================
# Ink Builder Program

The Ink Builder Program supports teams building on Ink with funding, guidance, and recognition across three tracks.

**Spark:** Microgrants for builders shipping tangible progress. Spark backs small, high-signal projects like tools, bots, mini dApps, and experiments that can deliver measurable value on Ink. It is also a path for teams that are promising but not yet at Forge's traction bar to prove impact and level up. Grants range from 500–5,000 USDC, with a lightweight application and fast review.

**Forge:** Our flagship track for teams scaling real products. Forge is built for projects with **live traction** and a clear plan to grow on Ink. Support includes **milestone-based grants up to 200,000 USDC**, hands-on ecosystem support, and exposure through Ink's channels. In select cases, we may back exceptional founders who are strongly aligned with Ink and have a credible path to breakout impact, but traction remains the primary bar.

**Echo:** A one-time retroactive track to recognize early projects that shipped on Ink **before November 1, 2025**. Echo rewards verifiable, shipped contributions with a one-time grant and public recognition.


================================================
FILE: src/pages/ink-builder-program/spark-program.mdx
================================================
# Spark Program

*Every big idea starts with a spark.*

## What Is Spark?

Spark is Ink's microgrant track for builders shipping small, high-signal work that creates measurable value for the ecosystem.

It's built for tools, bots, mini dApps, public goods, and experimental products that can prove real usage, unlock onchain activity, or make building on Ink easier. Spark is also the right lane for promising teams that are not yet at Forge's traction bar, but can prove impact with a smaller push.

No pitch decks. Low lift application. Fast decisions.

This is where projects earn their first traction on Ink.

## Why We Built Spark

Healthy ecosystems are built by a lot of small, useful things that compound.

Spark exists to:

- Reduce friction for builders who are ready to ship, not just talk
- Buy velocity for projects that can quickly produce proof (usage, integrations, onchain activity)
- Seed high-potential teams that need a smaller milestone to qualify for deeper support later
- Encourage ecosystem primitives and public goods that increase builder throughput

Spark is not "fund anything." It is "fund what can ship value and show signal."

## Who Should Apply

Spark is a strong fit if you are:

- An indie builder or small team shipping a real product or feature
- A team building something useful for other builders or users on Ink
- A project that can show a credible plan for measurable impact, even if early
- A team that may have aimed for Forge but needs to prove traction first

Spark is not a fit for deck-first ideas, marketing-only teams, or projects that cannot define what value they create for Ink and how it will be measured.

## What You Can Build

Spark supports lightweight projects that increase usage, liquidity, or builder leverage, including:

- Developer tools, SDKs, contract tooling, deployment helpers
- Bots and mini apps that drive repeat onchain actions
- Onchain UX improvements, onboarding helpers, account abstraction components
- Analytics dashboards that help users act (not just view), especially if linked to conversion
- Public goods and open-source primitives other teams can reuse
- Consumer experiments with clear retention loops and measurable usage

## How It Works

### 1) Submit

Builders share a short application with:

- What they're building and why it matters for Ink
- Proof of build (demo, repo, screenshots, Loom, contracts, etc.)
- What they want to ship or improve with a $500–$5K microgrant
- Any traction signals (even small) and distribution plan (if relevant)

### 2) Review (Scorecard-Based)

We evaluate every submission on five criteria:

- **Proof of Build**
    
    Has real work already started, code/UI/prototype/demo, visible effort.
    
- **Ecosystem Usefulness**
    
    Does it make Ink more usable, more visible, or more fun, and does it help users or other builders.
    
- **Feasibility for Microgrant**
    
    Can $500–$5K meaningfully move it forward, with a clear and realistic scope.
    
- **Builder Credibility**
    
    Can the builder ship, communicate clearly, and respond reliably.
    
- **Creative + Value Spark**
    
    Is it novel, memeable, surprising, or culturally sticky, while still creating real value.

### 3) Decision + Grant

Outcomes:

- **Approved** (grant size confirmed)
- **Revise & resubmit** (scope or proof needs tightening)
- **Not a fit** (doesn't match Spark goals)

## What You Receive

### Microgrants

- **500–5,000 USDC** per project
- Non-dilutive, simple terms
- Typically paid after approval and confirmation of a working build/demo (timing depends on program operations and compliance)

### Visibility and Ecosystem Support

Standout Spark projects may receive:

- Social amplification and ecosystem highlights
- Introductions to relevant ecosystem teams and partners
- A clear path to "level up" into deeper support when traction is proven

## Spark Success Looks Like

Within the next phase, the project delivers:

- A live deployment or usable feature on Ink
- A measurable impact signal, such as:
    - real users or repeat usage
    - meaningful onchain activity (transactions, volume)
    - adoption by other builders (integrations, reuse, tooling usage)
    - clear improvements to conversion or usability

If a project cannot explain the value it creates for Ink and how that value will be measured, it is not a fit.

## How To Join Spark

- Submit your project → [Spark Application Form](https://forms.inkonchain.com/spark-builder-program)
- Get reviewed → The team reviews applications in batches and follows up with results
- Ship and prove → Spark is designed to reward builders who deliver measurable value, not just announcements


================================================
FILE: src/pages/status.mdx
================================================
import { useEffect } from 'react'
import { useRouter } from 'next/router'

export default function StatusPage() {
  useEffect(() => {
    // Open in new tab and redirect current page back to previous page
    window.open('https://status.inkonchain.com/', '_blank')
    window.history.back()
  }, [])

  return (
    <div>
      Opening Status Page in new tab...
    </div>
  )
}


================================================
FILE: src/pages/tools/_meta.json
================================================
{
  "account-abstraction": "Account Abstraction",
  "block-explorers": "Block Explorers",
  "bridges": "Bridges",
  "crosschain": "Crosschain",
  "faucets": "Faucets",
  "indexers": "Indexers",
  "multisig": "Multisig",
  "oracles": "Oracles",
  "rpc": "RPC",
  "security": "Security",
  "vrf": "VRF"
}


================================================
FILE: src/pages/tools/account-abstraction.mdx
================================================
# Account Abstraction

## Alchemy

Leverage Alchemy's best in class account abstraction stack, [Account Kit](https://www.alchemy.com/account-kit) which lets you build embedded wallets powered by smart accounts.

**Supported Networks**:

* Ink Mainnet
* Ink Sepolia

## Safe

Access Safe’s full suite of tooling including modular smart account infrastructure and account abstraction SDK.

**Supported Networks**:

* [Ink Mainnet](https://app.safe.global/new-safe/create?chain=ink)
* [Ink Sepolia](https://safe.optimism.io/welcome/accounts?chain=ink-sepolia)

## ZeroDev

ZeroDev is a chain abstracted smart account for building user-friendly Web3 experiences. Leveraging ERC-4337, it offers you the ability to enable flexible authentication, sponsor gas and bundle transactions for users. Check out ZeroDevs [docs](https://docs.zerodev.app/) to learn more.

**Supported Networks**:

* Ink Mainnet
* Ink Sepolia


================================================
FILE: src/pages/tools/block-explorers.mdx
================================================
# Block Explorer

## Blockscout

Blockscout is a universal block explorer providing detailed chain information and tools for debugging smart contracts and transactions. Visit the [Blockscout Docs](https://docs.blockscout.com/) for details.

**Supported Networks**

* [Ink Mainnet](https://explorer.inkonchain.com/)
* [Ink Sepolia](https://explorer-sepolia.inkonchain.com/)

## OKX Explorer

OKX Explorer offers streamlined onchain data access, advanced tools, and unified bridge insights across integrated chains for developers.

**Supported Networks**

* [Ink Mainnet](https://web3.okx.com/explorer/inkchain)

## Routescan

The world’s first multichain explorer provides seamless access to +100 chains, offering a 48h Explorer setup with Full History APIs, Enhanced Charts, and powerful developer tools.

**Supported Networks**

* [Ink Mainnet](https://57073.routescan.io/)
* [Ink Sepolia](https://sepolia.inkonscan.xyz/)

## Tenderly

Tenderly's [Developer Explorer](https://docs.tenderly.co/developer-explorer?mtm_campaign=ext-docs&mtm_kwd=ink) is a multi-chain explorer offering view of your smart contract transactions, events, and logs.
Rely on Explorer's integrated [Debugger](https://docs.tenderly.co/debugger?mtm_campaign=ext-docs&mtm_kwd=ink) and [Simulator UI](https://docs.tenderly.co/simulator-ui/using-simulation-ui?mtm_campaign=ext-docs&mtm_kwd=ink) to spot and solve issues in transactions and contracts. Set up critical [alerts](https://docs.tenderly.co/alerts/intro-to-alertsmtm_campaign=ext-docs&mtm_kwd=ink) on contracts to proactively respond to issues and improve security practices.


================================================
FILE: src/pages/tools/bridges.mdx
================================================
import { Callout } from "nextra/components";

# Bridges

<Callout type="info" emoji="ℹ️">
  Use the below bridges at your own risk. Always DYOR!
</Callout>


<Callout type="info" emoji="ℹ️">
  Transaction times vary based on network congestion and gas fees. Please ensure
  you have enough ETH in your wallet to cover transaction fees.
</Callout>

## Across

Using a network of solvers, Across allows users to seamlessly bridge from L1 to L2 and back without the 7 day waiting period.

**Supported Networks**

- [Ink Mainnet](https://app.across.to/bridge?)

## Brid.gg

Brid.gg enables you to bridge assets from L1 to L2 across the Superchain.

**Supported Networks**

- [Ink Mainnet](https://brid.gg/ink)
- [Ink Sepolia](https://testnet.brid.gg/ink-sepolia)

## Bungee

Bungee aggregates multiple bridges and DEXs to find the most cost-effective routes for swapping across chains.

**Supported Networks**

- [Ink Mainnet](https://bungee.exchange)

## Gelato

Gelato's user friendly bridge UI allows users to bridge to Ink quickly and easily.

**Supported Networks**

- [Ink Mainnet](https://bridge.gelato.network/bridge/ink)
- [Ink Sepolia](https://testnet-bridge.gelato.network/bridge/ink-sepolia)

## Rhino.fi

Rhino.fi is a lightning fast secure bridge for seamless cross chain transactions.

**Supported Networks**

- [Ink Mainnet](https://app.rhino.fi/bridge?chain=ETHEREUM&token=ETH&chainOut=INK)

## Reservoir

Reservoir facilitates gas minimized fast bridging through their cross chain relayer network. Check out their [Instant Bridging](https://docs.reservoir.tools/docs/instant-bridging) solution to integrate into your application.


## Superbridge

Superbridge provides a seamless bridging allowing users to choose the route which best suits their bridging needs.

**Supported Networks**

- [Ink Mainnet](https://superbridge.app/)
- [Ink Sepolia](https://testnets.superbridge.app/)


## Ink's Sepolia Bridge

**Supported Networks**

- [Ink Sepolia](https://inkonchain.com/bridge)


================================================
FILE: src/pages/tools/crosschain.mdx
================================================
# Crosschain Infrastructure

## [LayerZero](https://docs.layerzero.network/v2/home/getting-started/what-is-layerzero)

**Supported Networks**

* Ink Mainnet
* Ink Sepolia

## [Wormhole](https://wormhole.com/docs/)

**Supported Networks**

* Ink Mainnet (coming soon)
* Ink Sepolia


================================================
FILE: src/pages/tools/faucets.mdx
================================================
import { FaucetsContentWrapper } from '@/components/FaucetsContentWrapper'

<FaucetsContentWrapper />


================================================
FILE: src/pages/tools/indexers.mdx
================================================
# Indexers

## [Goldsky](https://docs.goldsky.com/chains/ink)

Goldsky is a high-performance data indexing provider for Ink that makes it easy to extract, transform, and load on-chain data to power both application and analytics use cases. Goldsky offers two primary approaches to indexing and accessing blockchain data: Subgraphs (high-performance subgraphs) and Mirror (real-time data replication pipelines).

**Supported Networks**

* Ink Mainnet
* Ink Sepolia

## [Alchemy](https://www.alchemy.com/subgraphs)

Alchemy provides high performance data indexing and subgraphs for Ink alongside a full stack suite of tools to help you build.

**Supported Networks**

* Ink Mainnet


================================================
FILE: src/pages/tools/multisig.mdx
================================================
import { MultisigContentWrapper } from '@/components/MultisigContentWrapper'

<MultisigContentWrapper />

================================================
FILE: src/pages/tools/oracles.mdx
================================================
import CopyableCode from "@/components/CopyableCode";

# Oracles

## API3

API3 offers 190+ price feeds for Ink on the [API3 Market](https://market.api3.org/ink). All API3's price feeds are integrated with OEV Network to recapture protocol MEV due to oracle updates. See this [guide](https://docs.api3.org/dapps/) to learn how to integrate API3's data feeds.

| Network     | Contract Address                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Mainnet | <CopyableCode code="0x709944a48cAf83535e43471680fDA4905FB3920a" href="https://explorer.inkonchain.com/address/0x709944a48cAf83535e43471680fDA4905FB3920a?tab=contract" /> |

| Network     | Contract Address                                                                                                                                                                  |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Sepolia | <CopyableCode code="0x709944a48cAf83535e43471680fDA4905FB3920a" href="https://explorer-sepolia.inkonchain.com/address/0x709944a48cAf83535e43471680fDA4905FB3920a?tab=contract" /> |


## Chainlink

**Coming Soon**

## eOracle

eOracle provides decentralized price feeds through a cryptoeconomically secure oracle network, backed by staked ETH and a globally distributed network of validators.

| Network     | Feed     | Contract Address                                                                                                                                                          | Decimals |
| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| Ink Mainnet | BTC/USD  | <CopyableCode code="0xc1a823069a4439f9A5C5008eA38346d587028D37" href="https://explorer.inkonchain.com/address/0xc1a823069a4439f9A5C5008eA38346d587028D37?tab=contract" /> |    8     |
| Ink Mainnet | ETH/USD  | <CopyableCode code="0xdFc720E1ef024bfc768ed9E6F0e7Fc80E28f8CFA" href="https://explorer.inkonchain.com/address/0xdFc720E1ef024bfc768ed9E6F0e7Fc80E28f8CFA?tab=contract" /> |    8     |
| Ink Mainnet | USDC/USD | <CopyableCode code="0xF1d7c07d6DAA1200a137ea1146E1f8c5D6Fc0223" href="https://explorer.inkonchain.com/address/0xF1d7c07d6DAA1200a137ea1146E1f8c5D6Fc0223?tab=contract" /> |    8     |
| Ink Mainnet | USDT/USD | <CopyableCode code="0xd37D8878ed854027CB3a71907b95677BB0477baf" href="https://explorer.inkonchain.com/address/0xd37D8878ed854027CB3a71907b95677BB0477baf?tab=contract" /> |    8     |

| Network     | Feed     | Contract Address                                                                                                                                                                  | Decimals |
| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| Ink Sepolia | BTC/USD  | <CopyableCode code="0xD4bc859E0de1bAc03A5b9Ffaf71393328EB1B274" href="https://explorer-sepolia.inkonchain.com/address/0xD4bc859E0de1bAc03A5b9Ffaf71393328EB1B274?tab=contract" /> |    8     |
| Ink Sepolia | ETH/USD  | <CopyableCode code="0x71bafCA6F2181C16173Dc3FAeF49090e687238D6" href="https://explorer-sepolia.inkonchain.com/address/0x71bafCA6F2181C16173Dc3FAeF49090e687238D6?tab=contract" /> |    8     |
| Ink Sepolia | USDC/USD | <CopyableCode code="0x5e2C566F9B8859fF42E78F7A9540efAb9Ae71DE1" href="https://explorer-sepolia.inkonchain.com/address/0x5e2C566F9B8859fF42E78F7A9540efAb9Ae71DE1?tab=contract" /> |    8     |
| Ink Sepolia | USDT/USD | <CopyableCode code="0x23552E6Ca60D94a519F66D4CF4A958049f98c652" href="https://explorer-sepolia.inkonchain.com/address/0x23552E6Ca60D94a519F66D4CF4A958049f98c652?tab=contract" /> |    8     |



## Pyth

Pyth offers 250+ price feeds for Ink.
See their [guide](https://docs.pyth.network/price-feeds/getting-started) to learn how to use Pyth feeds.

| Network     | Contract Address                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Mainnet | <CopyableCode code="0x2880aB155794e7179c9eE2e38200202908C17B43" href="https://explorer.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?tab=contract" /> |

| Network     | Contract Address                                                                                                                                                                  |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Sepolia | <CopyableCode code="0x2880aB155794e7179c9eE2e38200202908C17B43" href="https://explorer-sepolia.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?tab=contract" /> |

## Redstone

Redstone provides both pull and push price feeds for Ink. See [this](https://docs.redstone.finance/docs/get-started/supported-chains/) guide to learn how to use Redstone feeds.

| Network     | Feed     | Contract Address                                                                                                                                                          |
| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Mainnet | BTC/USD  | <CopyableCode code="0x13433B1949d9141Be52Ae13Ad7e7E4911228414e" href="https://explorer.inkonchain.com/address/0x13433B1949d9141Be52Ae13Ad7e7E4911228414e?tab=contract" /> |
| Ink Mainnet | ETH/USD  | <CopyableCode code="0xe5867B1d421f0b52697F16e2ac437e87d66D5fbF" href="https://explorer.inkonchain.com/address/0xe5867B1d421f0b52697F16e2ac437e87d66D5fbF?tab=contract" /> |
| Ink Mainnet | USDT/USD | <CopyableCode code="0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C" href="https://explorer.inkonchain.com/address/0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C?tab=contract" /> |
| Ink Mainnet | USDC/USD | <CopyableCode code="0x58fa68A373956285dDfb340EDf755246f8DfCA16" href="https://explorer.inkonchain.com/address/0x58fa68A373956285dDfb340EDf755246f8DfCA16?tab=contract" /> |
| Ink Mainnet | SOL/USD  | <CopyableCode code="0xD15862FC3D5407A03B696548b6902D6464A69b8c" href="https://explorer.inkonchain.com/address/0xD15862FC3D5407A03B696548b6902D6464A69b8c?tab=contract" /> |

| Network     | Feed     | Contract Address                                                                                                                                                                  |
| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Sepolia | BTC/USD  | <CopyableCode code="0xf1454949C6dEdfb500ae63Aa6c784Aa1Dde08A6c" href="https://explorer-sepolia.inkonchain.com/address/0xf1454949C6dEdfb500ae63Aa6c784Aa1Dde08A6c?tab=contract" /> |
| Ink Sepolia | ETH/USD  | <CopyableCode code="0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C" href="https://explorer-sepolia.inkonchain.com/address/0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C?tab=contract" /> |
| Ink Sepolia | USDT/USD | <CopyableCode code="0xb9D0073aCb296719C26a8BF156e4b599174fe1d5" href="https://explorer-sepolia.inkonchain.com/address/0xb9D0073aCb296719C26a8BF156e4b599174fe1d5?tab=contract" /> |
| Ink Sepolia | USDC/USD | <CopyableCode code="0xb67047eDF6204F4C81333248dA71F8387050790C" href="https://explorer-sepolia.inkonchain.com/address/0xb67047eDF6204F4C81333248dA71F8387050790C?tab=contract" /> |
| Ink Sepolia | SOL/USD  | <CopyableCode code="0xE94c9f9A1893f23be38A5C0394E46Ac05e8a5f8C" href="https://explorer-sepolia.inkonchain.com/address/0xE94c9f9A1893f23be38A5C0394E46Ac05e8a5f8C?tab=contract" /> |

### SEDA

SEDA provides custom feeds for Ink. See their [guide](https://docs.seda.xyz/home/for-developers/building-an-oracle-program) to build data feeds with SEDA. Mainnet support coming soon.

| Network     | Contract Name | Contract Address                                                                                                                                                                  |
| ----------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ink Sepolia | SEDA prover   | <CopyableCode code="0x1A2FAd0f8613B588127810D066Fc43C5Bc89F927" href="https://explorer-sepolia.inkonchain.com/address/0x1A2FAd0f8613B588127810D066Fc43C5Bc89F927?tab=contract" /> |


================================================
FILE: src/pages/tools/rpc.mdx
================================================
import { Callout } from "nextra/components";
import CopyableCode from "@/components/CopyableCode";

# RPC

## [Alchemy](https://www.alchemy.com/)

Alchemy provides fast and reliable private RPC endpoints alongside a full suite of tools to help support your development needs.

**Supported Networks**
- Ink Mainnet
- Ink Sepolia

## [Gelato](https://gelato.network)

Gelato provides public and private RPC endpoints for Ink, along with websocket support.

**Supported Networks**

- Ink Mainnet
- Ink Sepolia

## [QuickNode](https://www.quicknode.com)

QuickNode provides public and private RPC endpoints for Ink, along with websocket support and a suite of tools to help you ship.

**Supported Networks**

- Ink Mainnet
- Ink Sepolia 

<Callout type="info">
  Need a managed node solution?
  [QuickNode](https://www.quicknode.com/chains/ink) offers Ink nodes with APIs,
  tools, and an easy-to-use control panel.
</Callout>

## [Tenderly](https://tenderly.co)

Tenderly provides robust RPC infrastructure with advanced debugging capabilities and comprehensive monitoring tools.

**Supported Networks**

- Ink Mainnet
- Ink Sepolia

<Callout type="info">
  Looking for advanced debugging tools?
  [Tenderly](https://tenderly.co/transaction-previews?mtm_campaign=ext-docs&mtm_kwd=ink) provides detailed transaction
  insights and monitoring capabilities for Ink.
</Callout>

## [dRPC](https://drpc.org)

dRPC provides enterprise-level RPC infrastructure with globally distributed nodes, decentralized architecture and focus on privacy.

**Supported Networks**

- Ink Mainnet
- Ink Sepolia

<Callout type="info">
  Searching for reliable RPC infrastructure?
  [dRPC](https://drpc.org/chainlist/ink) works seamlessly with Ink and all Superchain networks.
</Callout>


<br />
<br />
<br />

# Public Endpoints

To connect to Ink Sepolia or Ink Mainnet, you can select from multiple RPC providers, each offering reliable infrastructure with unique features and capabilities.

<Callout type="info" emoji="ℹ️">
  Interested in running your own node? Check out [our
  tutorial](https://github.com/inkonchain/node).
</Callout>

### 1. Gelato

Gelato provides high-performance, globally distributed RPC endpoints with automatic failover.

#### Ink Mainnet

- HTTPS: <CopyableCode code="https://rpc-gel.inkonchain.com" />
- Websocket: <CopyableCode code="wss://ws-gel.inkonchain.com" />

#### Ink Sepolia

- HTTPS: <CopyableCode code="https://rpc-gel-sepolia.inkonchain.com" />
- Websocket: <CopyableCode code="wss://ws-gel-sepolia.inkonchain.com" />

---

### 2. Tenderly

Tenderly provides robust RPC endpoints with detailed transaction debugging capabilities.

#### Ink Mainnet

- HTTPS: <CopyableCode code="https://rpc-ten.inkonchain.com" />
- Websocket: <CopyableCode code="wss://rpc-ten.inkonchain.com " />

#### Ink Sepolia

- HTTPS: <CopyableCode code="https://rpc-ten-sepolia.inkonchain.com" />
- Websocket: <CopyableCode code="wss://rpc-ten-sepolia.inkonchain.com" />

### 3. QuickNode

QuickNode provides public and private RPC endpoints for Ink, along with websocket support and a suite of tools to help you ship.

#### Ink Mainnet

- HTTPS: <CopyableCode code="https://rpc-qnd.inkonchain.com" />
- Websocket: <CopyableCode code="wss://rpc-qnd.inkonchain.com" />

#### Ink Sepolia

- HTTPS: <CopyableCode code="https://rpc-qnd-sepolia.inkonchain.com" />
- Websocket: <CopyableCode code="wss://rpc-qnd-sepolia.inkonchain.com" />

### 4. dRPC

dRPC provides globally distributed nodes for public and premium Ink RPC endpoints, including websocket support.

#### Ink Mainnet

- HTTPS: <CopyableCode code="https://ink.drpc.org" />
- Websocket: <CopyableCode code="wss://ink.drpc.org" />

#### Ink Sepolia

- HTTPS: <CopyableCode code="https://ink-sepolia.drpc.org" />
- Websocket: <CopyableCode code="wss://ink-sepolia.drpc.org" />



================================================
FILE: src/pages/tools/security.mdx
================================================
# Security

## Hypernative

[Hypernative](https://www.hypernative.io/) enhances security for developers building on Ink by providing real-time threat prevention, ecosystem-wide monitoring, and risk management tools. With advanced machine learning and detection models, Hypernative helps identify and mitigate risks across smart contracts, bridges, wallets, and more—giving developers the confidence to build securely. **All projects building on Ink** gain access to [Hypernative's platform](https://www.hypernative.io/solutions/protocols) for security flows, incident response, and risk analysis, ensuring resilience and reducing vulnerabilities.

**Supported Networks**

* Ink Mainnet
* Ink Sepolia

## Tenderly

[Tenderly](https://www.tenderly.co/) offers security tools to help developers build and maintain secure dapps and  smart contracts. 

* Configure [Tenderly Alerts](https://docs.tenderly.co/alerts/intro-to-alerts?mtm_campaign=ext-docs&mtm_kwd=ink) for notifications on transactions and contract events. Use [Alerts API](https://docs.tenderly.co/alerts/api) to set up custom alerts with highly granular triggering criteria.
* Use [Web3 Actions](https://docs.tenderly.co/web3-actions/intro-to-web3-actions?mtm_campaign=ext-docs&mtm_kwd=ink) to automate predefined responses, improving security and user experience.
* Leverage [Simulation RPC](https://docs.tenderly.co/simulations/single-simulations#simulate-via-rpc?mtm_campaign=ext-docs&mtm_kwd=ink) to predict transaction outcomes such as asset changes, precise gas usage, and emitted events.

**Supported Networks**

* Ink Mainnet
* Ink Sepolia


================================================
FILE: src/pages/tools/vrf.mdx
================================================
# VRF

## Gelato

[Gelato VRF](https://docs.gelato.network/web3-services/vrf/understanding-vrf) offers real randomness for blockchain applications by leveraging [Drand](https://drand.love/), a trusted decentralized source of random numbers. Get started [here](https://www.youtube.com/watch?v=2OzH8f3_Q9s)!

**Supported Networks**

* Ink Mainnet
* Ink Sepolia


================================================
FILE: src/pages/useful-information/_meta.json
================================================
{
  "contracts": "Contracts",
  "ink-contracts": "Ink Contracts",
  "ink-token-contracts": {
    "title": "Ink Token Contracts",
    "display": "hidden"
  },
  "the-superchain": "The Superchain"
}


================================================
FILE: src/pages/useful-information/contracts.mdx
================================================
import { Callout } from "nextra/components";
import CopyableCode from "@/components/CopyableCode";

# Ink Contract Addresses

### Ink L2 Contract Addresses

#### Ink Mainnet

| Contract Name                 | Contract Address                                                                                                                                             |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| BaseFeeVault                  | <CopyableCode code="0x4200000000000000000000000000000000000019" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000019" /> |
| EAS                           | <CopyableCode code="0x4200000000000000000000000000000000000021" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000021" /> |
| ERC5564Announcer              | <CopyableCode code="0x55649E01B5Df198D18D95b5cc5051630cfD45564" href="https://explorer.inkonchain.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564" /> |
| ERC6538Registry               | <CopyableCode code="0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" href="https://explorer.inkonchain.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" /> |
| GasPriceOracle                | <CopyableCode code="0x420000000000000000000000000000000000000F" href="https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000000F" /> |
| L1FeeVault                    | <CopyableCode code="0x420000000000000000000000000000000000001a" href="https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000001a" /> |
| L2CrossDomainMessenger        | <CopyableCode code="0x4200000000000000000000000000000000000007" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000007" /> |
| L2ERC721Bridge                | <CopyableCode code="0x4200000000000000000000000000000000000014" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000014" /> |
| L2StandardBridge              | <CopyableCode code="0x4200000000000000000000000000000000000010" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000010" /> |
| L2ToL1MessagePasser           | <CopyableCode code="0x4200000000000000000000000000000000000016" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000016" /> |
| OptimismMintableERC20Factory  | <CopyableCode code="0x4200000000000000000000000000000000000012" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000012" /> |
| OptimismMintableERC721Factory | <CopyableCode code="0x4200000000000000000000000000000000000017" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000017" /> |
| ProxyAdmin                    | <CopyableCode code="0x4200000000000000000000000000000000000018" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000018" /> |
| SchemaRegistry                | <CopyableCode code="0x4200000000000000000000000000000000000020" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000020" /> |
| SequencerFeeVault             | <CopyableCode code="0x4200000000000000000000000000000000000011" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000011" /> |
| SuperchainERC20Bridge         | <CopyableCode code="0x4200000000000000000000000000000000000028" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000028" /> |
| WETH9                         | <CopyableCode code="0x4200000000000000000000000000000000000006" href="https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000006" /> |

<Callout type="info" emoji="ℹ️">
  These addresses are predeterministic and the same on Ink Sepolia- see
  [documentation](https://specs.optimism.io/protocol/predeploys.html).
</Callout>

### L1 Contract Addresses

#### Ethereum Mainnet

| Contract Name                | Contract Address                                                                                                                                        |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| AddressManager               | <CopyableCode code="0x9b7c9bbd6d540a8a4dedd935819fc4408ba71153" href="https://eth.blockscout.com/address/0x9b7c9bbd6d540a8a4dedd935819fc4408ba71153" /> |
| AnchorStateRegistry          | <CopyableCode code="0xde744491bcf6b2dd2f32146364ea1487d75e2509" href="https://eth.blockscout.com/address/0xde744491bcf6b2dd2f32146364ea1487d75e2509" /> |
| DelayedWETHPermissionedGame  | <CopyableCode code="0x14773a8040ff22e3dcbb0c83ec8e33be7d920d38" href="https://eth.blockscout.com/address/0x14773a8040ff22e3dcbb0c83ec8e33be7d920d38" /> |
| DisputeGameFactory           | <CopyableCode code="0x10d7b35078d3baabb96dd45a9143b94be65b12cd" href="https://eth.blockscout.com/address/0x10d7b35078d3baabb96dd45a9143b94be65b12cd" /> |
| ERC5564Announcer             | <CopyableCode code="0x55649E01B5Df198D18D95b5cc5051630cfD45564" href="https://eth.blockscout.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564" /> |
| ERC6538Registry              | <CopyableCode code="0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" href="https://eth.blockscout.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" /> |
| L1CrossDomainMessenger       | <CopyableCode code="0x69d3cf86b2bf1a9e99875b7e2d9b6a84426c171f" href="https://eth.blockscout.com/address/0x69d3cf86b2bf1a9e99875b7e2d9b6a84426c171f" /> |
| L1ERC721Bridge               | <CopyableCode code="0x661235a238b11191211fa95d4dd9e423d521e0be" href="https://eth.blockscout.com/address/0x661235a238b11191211fa95d4dd9e423d521e0be" /> |
| L1StandardBridge             | <CopyableCode code="0x88ff1e5b602916615391f55854588efcbb7663f0" href="https://eth.blockscout.com/address/0x88ff1e5b602916615391f55854588efcbb7663f0" /> |
| OptimismMintableERC20Factory | <CopyableCode code="0xa8b389a82e088b164cd03230e900980cced34d29" href="https://eth.blockscout.com/address/0xa8b389a82e088b164cd03230e900980cced34d29" /> |
| OptimismPortal               | <CopyableCode code="0x5d66c1782664115999c47c9fa5cd031f495d3e4f" href="https://eth.blockscout.com/address/0x5d66c1782664115999c47c9fa5cd031f495d3e4f" /> |
| ProxyAdmin                   | <CopyableCode code="0xd56045E68956FCe2576E680c95a4750cf8241f79" href="https://eth.blockscout.com/address/0xd56045E68956FCe2576E680c95a4750cf8241f79" /> |
| SystemConfig                 | <CopyableCode code="0x62c0a111929fa32cec2f76adba54c16afb6e8364" href="https://eth.blockscout.com/address/0x62c0a111929fa32cec2f76adba54c16afb6e8364" /> |

#### Sepolia

| Contract Name                | Contract Address                                                                                                                                                |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| AddressManager               | <CopyableCode code="0x3454f9df5e750f1383e58c1cb001401e7a4f3197" href="https://eth-sepolia.blockscout.com/address/0x3454f9df5e750f1383e58c1cb001401e7a4f3197" /> |
| AnchorStateRegistry          | <CopyableCode code="0x89126a987717207d4e990ed2e8880fd170dcea1a" href="https://eth-sepolia.blockscout.com/address/0x89126a987717207d4e990ed2e8880fd170dcea1a" /> |
| DelayedWETHPermissionedGame  | <CopyableCode code="0x180ac451088b8f87006ab0ca98a01507e42ac456" href="https://eth-sepolia.blockscout.com/address/0x180ac451088b8f87006ab0ca98a01507e42ac456" /> |
| DisputeGameFactory           | <CopyableCode code="0x860e626c700af381133d9f4af31412a2d1db3d5d" href="https://eth-sepolia.blockscout.com/address/0x860e626c700af381133d9f4af31412a2d1db3d5d" /> |
| ERC5564Announcer             | <CopyableCode code="0x55649E01B5Df198D18D95b5cc5051630cfD45564" href="https://eth-sepolia.blockscout.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564" /> |
| ERC6538Registry              | <CopyableCode code="0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" href="https://eth-sepolia.blockscout.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538" /> |
| L1CrossDomainMessenger       | <CopyableCode code="0x9fe1d3523f5342535e6e7770ed09ed85dbc1acc2" href="https://eth-sepolia.blockscout.com/address/0x9fe1d3523f5342535e6e7770ed09ed85dbc1acc2" /> |
| L1ERC721Bridge               | <CopyableCode code="0xd1c901bbd7796546a7ba2492e0e199911fae68c7" href="https://eth-sepolia.blockscout.com/address/0xd1c901bbd7796546a7ba2492e0e199911fae68c7" /> |
| L1StandardBridge             | <CopyableCode code="0x33f60714bbd74d62b66d79213c348614de51901c" href="https://eth-sepolia.blockscout.com/address/0x33f60714bbd74d62b66d79213c348614de51901c" /> |
| OptimismMintableERC20Factory | <CopyableCode code="0x686f782a749d1854f6fa3f948450f4c65c6674f0" href="https://eth-sepolia.blockscout.com/address/0x686f782a749d1854f6fa3f948450f4c65c6674f0" /> |
| OptimismPortal               | <CopyableCode code="0x5c1d29c6c9c8b0800692acc95d700bcb4966a1d7" href="https://eth-sepolia.blockscout.com/address/0x5c1d29c6c9c8b0800692acc95d700bcb4966a1d7" /> |
| ProxyAdmin                   | <CopyableCode code="0xd7db319a49362b2328cf417a934300cccb442c8d" href="https://eth-sepolia.blockscout.com/address/0xd7db319a49362b2328cf417a934300cccb442c8d" /> |
| SystemConfig                 | <CopyableCode code="0x05c993e60179f28bf649a2bb5b00b5f4283bd525" href="https://eth-sepolia.blockscout.com/address/0x05c993e60179f28bf649a2bb5b00b5f4283bd525" /> |

### Pre Installs

#### Ink Mainnet

| Contract Name                             | Contract Address                                                                                                                                                     |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Arachnid's Deterministic Deployment Proxy | <CopyableCode code="0x4e59b44847b379578588920cA78FbF26c0B4956C" href="https://explorer.inkonchain.com/address/0x4e59b44847b379578588920cA78FbF26c0B4956C" /> |
| Create2Deployer                           | <CopyableCode code="0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" href="https://explorer.inkonchain.com/address/0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" /> |
| CreateX                                   | <CopyableCode code="0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed" href="https://explorer.inkonchain.com/address/0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed" /> |
| ERC-4337 v0.6.0 EntryPoint                | <CopyableCode code="0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" href="https://explorer.inkonchain.com/address/0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" /> |
| ERC-4337 v0.6.0 SenderCreator             | <CopyableCode code="0x7fc98430eaedbb6070b35b39d798725049088348" href="https://explorer.inkonchain.com/address/0x7fc98430eaedbb6070b35b39d798725049088348" /> |
| ERC-4337 v0.7.0 EntryPoint                | <CopyableCode code="0x0000000071727De22E5E9d8BAf0edAc6f37da032" href="https://explorer.inkonchain.com/address/0x0000000071727De22E5E9d8BAf0edAc6f37da032" /> |
| ERC-4337 v0.7.0 SenderCreator             | <CopyableCode code="0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C" href="https://explorer.inkonchain.com/address/0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C" /> |
| Multicall3                                | <CopyableCode code="0xcA11bde05977b3631167028862bE2a173976CA11" href="https://explorer.inkonchain.com/address/0xcA11bde05977b3631167028862bE2a173976CA11" /> |
| MultiSend                                 | <CopyableCode code="0x998739BFdAAdde7C933B942a68053933098f9EDa" href="https://explorer.inkonchain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa" /> |
| MultiSendCallOnly                         | <CopyableCode code="0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B" href="https://explorer.inkonchain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B" /> |
| Permit2                                   | <CopyableCode code="0x000000000022D473030F116dDEE9F6B43aC78BA3" href="https://explorer.inkonchain.com/address/0x000000000022D473030F116dDEE9F6B43aC78BA3" /> |
| Safe                                      | <CopyableCode code="0x69f4D1788e39c87893C980c06EdF4b7f686e2938" href="https://explorer.inkonchain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938" /> |
| SafeL2                                    | <CopyableCode code="0xfb1bffC9d739B8D520DaF37dF666da4C687191EA" href="https://explorer.inkonchain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA" /> |
| SafeSingletonFactory                      | <CopyableCode code="0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7" href="https://explorer.inkonchain.com/address/0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7" /> |

For more information on these preinstalls, take a look at the [Optimism Specs](https://specs.optimism.io/protocol/preinstalls.html).

#### Ink Sepolia

| Contract Name                             | Contract Address                                                                                                                                            |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Arachnid's Deterministic Deployment Proxy | <CopyableCode code="0x4e59b44847b379578588920cA78FbF26c0B4956C" href="https://explorer-sepolia.inkonchain.com/address/0x4e59b44847b379578588920cA78FbF26c0B4956C" /> |
| Create2Deployer                           | <CopyableCode code="0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" href="https://explorer-sepolia.inkonchain.com/address/0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" /> |
| CreateX                                   | <CopyableCode code="0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed" href="https://explorer-sepolia.inkonchain.com/address/0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed" /> |
| ERC-4337 v0.6.0 EntryPoint                | <CopyableCode code="0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" href="https://explorer-sepolia.inkonchain.com/address/0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" /> |
| ERC-4337 v0.6.0 SenderCreator             | <CopyableCode code="0x7fc98430eaedbb6070b35b39d798725049088348" href="https://explorer-sepolia.inkonchain.com/address/0x7fc98430eaedbb6070b35b39d798725049088348" /> |
| ERC-4337 v0.7.0 EntryPoint                | <CopyableCode code="0x0000000071727De22E5E9d8BAf0edAc6f37da032" href="https://explorer-sepolia.inkonchain.com/address/0x0000000071727De22E5E9d8BAf0edAc6f37da032" /> |
| ERC-4337 v0.7.0 SenderCreator             | <CopyableCode code="0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C" href="https://explorer-sepolia.inkonchain.com/address/0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C" /> |
| Multicall3                                | <CopyableCode code="0xcA11bde05977b3631167028862bE2a173976CA11" href="https://explorer-sepolia.inkonchain.com/address/0xcA11bde05977b3631167028862bE2a173976CA11" /> |
| MultiSend                                 | <CopyableCode code="0x998739BFdAAdde7C933B942a68053933098f9EDa" href="https://explorer-sepolia.inkonchain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa" /> |
| MultiSendCallOnly                         | <CopyableCode code="0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B" href="https://explorer-sepolia.inkonchain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B" /> |
| Permit2                                   | <CopyableCode code="0x000000000022D473030F116dDEE9F6B43aC78BA3" href="https://explorer-sepolia.inkonchain.com/address/0x000000000022D473030F116dDEE9F6B43aC78BA3" /> |
| Safe                                      | <CopyableCode code="0x69f4D1788e39c87893C980c06EdF4b7f686e2938" href="https://explorer-sepolia.inkonchain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938" /> |
| SafeL2                                    | <CopyableCode code="0xfb1bffC9d739B8D520DaF37dF666da4C687191EA" href="https://explorer-sepolia.inkonchain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA" /> |
| SafeSingletonFactory                      | <CopyableCode code="0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7" href="https://explorer-sepolia.inkonchain.com/address/0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7" /> |

## Contract Deployments - Instructions for Developers

###### Contract Verification

Please see [how to verify contracts](/build/tutorials/verify-smart-contract).


================================================
FILE: src/pages/useful-information/ink-contracts.mdx
================================================
import { Callout } from "nextra/components";
import CopyableCode from "@/components/CopyableCode";

# Ink Contracts

<Callout type="info" emoji="ℹ️">
  This page is a work in progress. If there are missing tokens, please feel free
  to edit this page by submitting a PR to our
  [Github](https://github.com/inkonchain).
</Callout>

| Name    | Contract Address                                                                                                                                           |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CRV     | <CopyableCode code="0xAC73671a1762FE835208Fb93b7aE7490d1c2cCb3" href="https://explorer.inkonchain.com/token/0xAC73671a1762FE835208Fb93b7aE7490d1c2cCb3" /> |
| crvUSD  | <CopyableCode code="0x39fec550CC6DDCEd810eCCfA9B2931b4B5f2344D" href="https://explorer.inkonchain.com/token/0x39fec550CC6DDCEd810eCCfA9B2931b4B5f2344D" /> |
| FPI     | <CopyableCode code="0x90581eCa9469D8D7F5D3B60f4715027aDFCf7927" href="https://explorer.inkonchain.com/address/0x90581eCa9469D8D7F5D3B60f4715027aDFCf7927" /> |
| frxETH  | <CopyableCode code="0x43eDD7f3831b08FE70B7555ddD373C8bF65a9050" href="https://explorer.inkonchain.com/address/0x43eDD7f3831b08FE70B7555ddD373C8bF65a9050" /> |
| frxUSD  | <CopyableCode code="0x80eede496655fb9047dd39d9f418d5483ed600df" href="https://explorer.inkonchain.com/token/0x80eede496655fb9047dd39d9f418d5483ed600df" /> |
| FXS     | <CopyableCode code="0x64445f0aecc51e94ad52d8ac56b7190e764e561a" href="https://explorer.inkonchain.com/address/0x64445f0aecc51e94ad52d8ac56b7190e764e561a" /> |
| sfrxETH | <CopyableCode code="0x3ec3849c33291a9ef4c5db86de593eb4a37fde45" href="https://explorer.inkonchain.com/address/0x3ec3849c33291a9ef4c5db86de593eb4a37fde45" /> |
| sfrxUSD | <CopyableCode code="0x5bff88ca1442c2496f7e475e9e7786383bc070c0" href="https://explorer.inkonchain.com/token/0x5bff88ca1442c2496f7e475e9e7786383bc070c0" /> |
| USDC.e  | <CopyableCode code="0xF1815bd50389c46847f0Bda824eC8da914045D14" href="https://explorer.inkonchain.com/token/0xF1815bd50389c46847f0Bda824eC8da914045D14" /> |
| USDT0    | <CopyableCode code="0x0200C29006150606B650577BBE7B6248F58470c1" href="https://explorer.inkonchain.com/token/0x0200C29006150606B650577BBE7B6248F58470c1" /> |
| WETH9   | <CopyableCode code="0x4200000000000000000000000000000000000006" href="https://explorer.inkonchain.com/token/0x4200000000000000000000000000000000000006" /> |


================================================
FILE: src/pages/useful-information/ink-token-contracts.mdx
================================================
import { useEffect } from 'react'
import { useRouter } from 'next/router'

export default function Redirect() {
  const router = useRouter()

  useEffect(() => {
    router.replace('/useful-information/ink-contracts')
  }, [])

  return null
}

================================================
FILE: src/pages/useful-information/the-superchain.mdx
================================================
import { Callout } from "nextra/components";

# The Superchain

## What is the Superchain?

- The Optimism [Superchain](https://docs.optimism.io/stack/explainer#superchain-overview) is a network that enables shared bridging, decentralized governance, upgrades, a communication layer and more between standardized chains.
- The Superchain is based on a vision of an internet that no longer requires trusted entities who have and will continue abusing that trust. However, this vision of a decentralized web requires a level of scalability that is not yet widely available.
- The Superchain's mission is to achieve revolutionary scalability for blockchains.

The Superchain puts forward a new architecture for multi-chain ecosystems.
- New chains, when introduced, frequently have divergent security models and significant expenses associated with their rollout.
- The solution is to use an L2 architecture that commoditizes new chains - enabling efficient crosschain applications without introducing systemic risk and significant setup costs. In the future, we should be able to treat many L2 chain instances as a single unit, realizing the vision of the Superchain.

<Callout type="info" emoji="ℹ️">
The end goal of the Superchain is for developers to be able to abstract away underlying chains when developing dapps.
</Callout>

### What defines the Superchain?

The Superchain is a network of interoperable blockchains, including Ink and Optimism. The Superchain satisfies the following properties:

| Property                                     | Purpose                                                                                    |
| :------------------------------------------- | :----------------------------------------------------------------------------------------- |
| Shared L1 blockchain                         | Provides a total ordering of transactions across all OP Chains.                            |
| Shared bridge for all OP Chains              | Enables OP Chains to have standardized security properties.                                |
| Cheap OP Chain deployment                    | Enables deploying and transacting on OP Chains without the high fees of transacting on L1. |
| Configuration options for OP Chains          | Enables OP Chains to configure their data availability provider, sequencer address, etc.   |
| Secure transactions and cross-chain messages | Enables users to safely migrate state between OP Chains.                                   |

<Callout type="info" emoji="ℹ️">
Check out the Optimism docs on architecture: [the OP Stack](https://docs.optimism.io/stack/explainer).
</Callout>

## Ink and the Superchain

Ink is an OP Chain (Ethereum Layer 2) which is part of the Superchain. Being part of the Superchain network means Ink can easily interface with other connected chains, promoting both interoperability and specialization while benefiting from shared security, crosschain upgrades and decentralized governance. Ink and Optimism strongly align on the ultimate mission of realizing greater freedom for all through blockchain technology.

## Developing on the Superchain

You can use [Supersim](https://github.com/ethereum-optimism/supersim) to simulate the Superchain and develop apps that can be used across any chain!

Supersim enables builders to:

* Experiment with apps that can be accessed from any chain
* Create tokens with **SuperchainERC20**, a fungible token standard for tokens that can be used across the Superchain
* Simulate crosschain messaging


================================================
FILE: src/pages/work-with-ink/_meta.json
================================================
{
    "community": {
        "title": "Community"
        },
    "contributing": {
        "title": "Contribution Guide"
        }
}

================================================
FILE: src/pages/work-with-ink/brand-kit.mdx
================================================
---
title: Brand Kit
description: The core essence of the Ink branding, featuring logos, colors, typefaces, illustrations, and best practices
---

import Image from "next/image";
import { DownloadButton } from "@/components/DownloadButton";
import { DownloadIcon } from "@/icons/Download";

# Brand Kit

<div className="w-full rounded-xl overflow-hidden my-8">
  <Image
    src="/images/brand-kit/docs-hero.png"
    alt="Ink Brand Kit Banner"
    width={1200}
    height={400}
    priority
  />
</div>

This brand kit includes the core essence of the Ink branding, featuring logos, colors, typefaces, illustrations, and best practices. It should help any and all creative work.

<div className="mt-6">
  <DownloadButton
    sourceFilePath="/downloads/ink-brand-kit.zip"
    destinationFileName="ink-brand-kit.zip"
    label="Download Brand Kit"
    size="1.5 MB"
  />
</div>

## Logo

The Ink logo consists of a symbol and a word mark.<br/>
Wherever possible, the horizontal full logo should be used.

<div className="mt-6">
  <DownloadButton
    sourceFilePath="/downloads/ink-logos.zip"
    destinationFileName="ink-logos.zip"
    label="Download Logos"
    size="493 KB"
  />
</div>

### Logo System

<div className="flex flex-col gap-8">
  <div className="flex gap-4 mt-7">
    <div className="flex-[2.0619] flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-wordmark.png"
        alt="Ink Full Logo"
        width={1099}
        height={528}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">Full Ink logo</span>
    </div>
    <div className="flex-1 flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-symbol.png"
        alt="Ink Chain Mark"
        width={533}
        height={528}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">Ink chain mark</span>
    </div>
  </div>
  <div className="flex gap-4">
    <div className="flex-[2.0619] flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-wordmark-margin.png"
        alt="Ink Full Logo with Safe Margin"
        width={1099}
        height={528}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">Safe margin</span>
    </div>
    <div className="flex-1 flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-symbol-margin.png"
        alt="Ink Chain Mark with Safe Margin"
        width={533}
        height={528}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">Safe margin</span>
    </div>
  </div>
</div>

### Logo Extensions

<div className="flex flex-col gap-8">
  <div className="flex gap-4 mt-7">
    <div className="flex-1 flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-extension-kraken.png"
        alt="Ink Logo with Kraken Extension"
        width={815}
        height={529}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">With Kraken</span>
    </div>
    <div className="flex-1 flex flex-col gap-3">
      <Image
        src="/images/brand-kit/docs-logo-stacked.png"
        alt="Ink Logo Stacked with Other Marks"
        width={815}
        height={529}
        priority
        className="w-full"
      />
      <span className="font-bold text-xs">With other marks</span>
    </div>
  </div>
  <div className="flex-1 flex flex-col gap-3">
    <Image
      src="/images/brand-kit/docs-logo-partnerships.png"
      alt="Ink Logo Partnership Examples"
      width={1668}
      height={529}
      priority
      className="w-full"
    />
    <span className="font-bold text-xs">Partnerships</span>
  </div>
</div>

## Color

Ink purple should be used whenever possible.<br/>
Backgrounds typically use gradients.

<div className="my-8">
  <Image
    src="/images/brand-kit/docs-color.png"
    alt="Ink Colors"
    width={1666}
    height={1417}
    priority
    className="w-full"
  />
</div>

## Typography

Ink uses the open source typeface Plus Jakarta Sans.<br/>
Lurus Alternatives are used in most cases.

<div className="flex flex-col gap-8 mt-6">
  <div>
    <DownloadButton
      sourceFilePath="/downloads/ink-typeface.zip"
      destinationFileName="ink-typeface.zip"
      label="Download Typeface"
      size="1 MB"
    />
  </div>

  <div>
    <Image
      src="/images/brand-kit/docs-type.png"
      alt="Ink Typography"
      width={1666}
      height={1417}
      priority
      className="w-full"
    />
  </div>
</div>


================================================
FILE: src/pages/work-with-ink/community.mdx
================================================
import { CommunityContentWrapper } from '@/components/CommunityContentWrapper'

<CommunityContentWrapper />


================================================
FILE: src/pages/work-with-ink/contributing.mdx
================================================
import { URLS } from "@/utils/urls";

export const config = {
  theme: {
    pagination: false,
  },
};

# Contributing to Ink

### Contributing to the Documentation

If you'd like to contribute to our documentation, please visit our [github](https://github.com/inkonchain) and submit your PRs!


================================================
FILE: src/types/mdx.d.ts
================================================
declare module "*.mdx" {
  import type { ComponentType } from "react";

  const component: ComponentType<{
    components?: {
      [key: string]: ComponentType<any>;
    };
  }>;
  export default component;
}


================================================
FILE: src/utils/networks.ts
================================================
import { useEffect, useState } from "react";

export type NetworkType = "mainnet" | "sepolia";

export const networkParams = {
  mainnet: {
    chainId: "0xdef1", // 57073 in hexadecimal
    chainName: "Ink Mainnet",
    nativeCurrency: {
      name: "Ether",
      symbol: "ETH",
      decimals: 18,
    },
    rpcUrls: ["https://rpc-gel.inkonchain.com"],
    blockExplorerUrls: ["https://explorer.inkonchain.com/"],
  },
  sepolia: {
    chainId: "0xba5ed", // 763373
    chainName: "Ink Sepolia",
    nativeCurrency: {
      name: "Ether",
      symbol: "ETH",
      decimals: 18,
    },
    rpcUrls: ["https://rpc-gel-sepolia.inkonchain.com"],
    blockExplorerUrls: ["https://explorer-sepolia.inkonchain.com"],
  },
};

export async function isNetworkAdded(network: NetworkType): Promise<boolean> {
  if (!(window as any).ethereum) return false;

  try {
    const chainId = await (window as any).ethereum.request({
      method: "eth_chainId",
    });
    return (
      chainId.toLowerCase() === networkParams[network].chainId.toLowerCase()
    );
  } catch (error) {
    console.error("Error checking network:", error);
    return false;
  }
}

export type UseNetworkResponse = {
  isWalletInstalled: boolean;
  isAdded: boolean;
  isSelected: boolean;
  addNetwork: () => Promise<void>;
  selectNetwork: () => Promise<void>;
};

export function useNetwork(network: NetworkType): UseNetworkResponse {
  const [isWalletInstalled, setIsWalletInstalled] = useState<boolean>(false);
  const [isAdded, setIsAdded] = useState<boolean>(false);
  const [isSelected, setIsSelected] = useState<boolean>(false);

  console.log(`${network} is added: ${isAdded}`);

  // Check if network is added and selected on mount and when network changes
  useEffect(() => {
    const checkNetwork = async () => {
      if (window.ethereum) {
        try {
          const chainId = await window.ethereum.request({
            method: "eth_chainId",
          });
          const isCurrentNetwork =
            chainId.toLowerCase() ===
            networkParams[network].chainId.toLowerCase();
          setIsSelected(isCurrentNetwork);
          setIsAdded(isCurrentNetwork || isAdded); // If we're on the network, it must be added
        } catch (error) {
          console.error("Error checking network:", error);
        }
      }
      setIsWalletInstalled(window.ethereum !== undefined);
    };

    checkNetwork();

    // Listen for chain changes
    if (window.ethereum) {
      window.ethereum.on("chainChanged", checkNetwork);
      return () => {
        window.ethereum.removeListener("chainChanged", checkNetwork);
      };
    }
  }, [network, isAdded]);

  async function addNetwork(): Promise<void> {
    if (!window.ethereum) return;

    try {
      await window.ethereum.request({
        method: "wallet_addEthereumChain",
        params: [networkParams[network]],
      });
      setIsAdded(true);
      await selectNetwork(); // Automatically switch to the network after adding
    } catch (error) {
      console.error("Error adding network:", error);
    }
  }

  async function selectNetwork(): Promise<void> {
    if (!window.ethereum) return;

    try {
      await window.ethereum.request({
        method: "wallet_switchEthereumChain",
        params: [{ chainId: networkParams[network].chainId }],
      });
      setIsSelected(true);
    } catch (error) {
      console.error("Error switching network:", error);
    }
  }

  return { isWalletInstalled, isAdded, isSelected, addNetwork, selectNetwork };
}


================================================
FILE: src/utils/urls.ts
================================================
export const URLS = {
  githubOrgUrl: "https://github.com/inkonchain",
  statusPageUrl: "https://status.inkonchain.com/",
  faucetUrl: "https://app.optimism.io/faucet",
  inkubatorUrl: "https://inkonchain.com/inkubator",
  repositoryUrl: "https://github.com/inkonchain/docs",
  developerWaitlistUrl: "https://inkonchain.com",
  feedbackUrl: "https://inkonchain.com",
  editDocsOnGithub: "https://github.com/inkonchain",
};


================================================
FILE: tailwind.config.js
================================================
/** @type {import('tailwindcss').Config} */
module.exports = {
  darkMode: 'class',
  content: [
    './src/**/*.{js,jsx,ts,tsx,md,mdx}',
    './theme.config.tsx'
  ],
  theme: {
    extend: {
      borderRadius: {
        '4xl': '2rem',
        '5xl': '2.5rem',
        '6xl': '3rem',  // This is a very large radius
      },
      colors: {
        magic: {
          purple: "#7132F5",
          'semi-deep-purple': '#855BFB',
          'deep-purple': "#2B1463",
          black: "#101114",
          white: "#F0EFFF",
          'soft-pink': "#F7D2FE",
          'link-purple': '#B794FF',
        },
        'ink-grey': {
          100: '#F3F4F6',
          400: '#6B7280',
          700: '#374151',
        },
      },
      fontFamily: {
        sans: ['var(--font-plus-jakarta-sans)', 'var(--font-inter)', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica', 'Apple Color Emoji', 'Arial', 'sans-serif', 'Segoe UI Emoji', 'Segoe UI Symbol'],
      },
    },
  },
  plugins: [],
}


================================================
FILE: theme.config.tsx
================================================
import { clsx } from "clsx";
import { useRouter } from "next/router";
import { DocsThemeConfig } from "nextra-theme-docs";

import { Footer } from "@/components/Footer";
import { Head } from "@/components/Head";
import { SidebarTitleComponent } from "@/components/SidebarTitleComponent";
import { ThemeToggle } from "@/components/ThemeToggle";
import { Toc } from "@/components/Toc";
import { InkLogo } from "@/icons/InkLogo";
import { URLS } from "@/utils/urls";

const config: DocsThemeConfig = {
  logo: <InkLogo />,
  darkMode: false,
  project: {
    link: URLS.githubOrgUrl,
  },
  docsRepositoryBase: URLS.repositoryUrl,
  head: Head,
  components: {
    a(props: { href?: string }) {
      const isExternal = props.href?.startsWith("http");
      return (
        <a
          {...props}
          {...(isExternal
            ? { target: "_blank", rel: "noopener noreferrer" }
            : {})}
          className="text-magic-purple underline decoration-1 transition-all hover:text-magic-purple/80 dark:text-magic-soft-pink dark:hover:text-magic-soft-pink/80"
        />
      );
    },
    code(props) {
      return (
        <code
          {...props}
          className={clsx(
            "bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-white text-sm rounded-md px-2 py-0.5"
          )}
        />
      );
    },
  },
  sidebar: {
    defaultMenuCollapseLevel: 1,
    autoCollapse: true,
    titleComponent: SidebarTitleComponent,
  },
  navbar: {
    extraContent: ThemeToggle,
  },
  footer: {
    component: Footer,
  },
  toc: {
    backToTop: true,
    component: Toc,
  },
  banner: {
    key: "docs-wip",
    text: (
      <a
        className="!text-white hover:!text-white/80"
        href="/"
        target="_blank"
        rel="noopener noreferrer"
        aria-label="Documentation Status"
      >
        🎉 Mainnet is LIVE! 🎉
      </a>
    ),
  },
  useNextSeoProps() {
    const { asPath } = useRouter();
    return {
      titleTemplate:
        asPath === "/"
          ? "Ink Docs - The Official Developer Guide for Ink"
          : "%s | Ink Docs",
    };
  },
};

export default config;


================================================
FILE: tsconfig.json
================================================
{
  "compilerOptions": {
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true,
    "plugins": [
      {
        "name": "next"
      }
    ],
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "target": "ES2017"
  },
  "include": [
    "next-env.d.ts",
    "global-env.d.ts",
    "src/types/**/*.ts",
    "**/*.ts",
    "**/*.tsx",
    ".next/types/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}
Download .txt
gitextract_zhocjkyg/

├── .dockerignore
├── .eslintrc.js
├── .github/
│   ├── CODEOWNERS
│   ├── actions/
│   │   └── base-setup/
│   │       └── action.yaml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── cicd.yaml
│       └── securesdlc.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierrc
├── .vscode/
│   └── settings.json
├── Dockerfile
├── README.md
├── amplify.yml
├── cspell/
│   └── project-words.txt
├── cspell.json
├── eslint.config.js
├── global-env.d.ts
├── next-env.d.ts
├── next-sitemap.config.js
├── next.config.mjs
├── package.json
├── postcss.config.js
├── src/
│   ├── components/
│   │   ├── AddNetworkButton.tsx
│   │   ├── BlockExplorersContentWrapper.tsx
│   │   ├── BridgesContentWrapper.tsx
│   │   ├── Button.tsx
│   │   ├── CommunityContentWrapper.tsx
│   │   ├── CopyButton.tsx
│   │   ├── CopyableCode.tsx
│   │   ├── CrosschainContentWrapper.tsx
│   │   ├── DownloadButton.tsx
│   │   ├── FaucetsContentWrapper.tsx
│   │   ├── Footer.tsx
│   │   ├── Head.tsx
│   │   ├── MultisigContentWrapper.tsx
│   │   ├── SidebarTitleComponent.tsx
│   │   ├── TestnetDisclaimer.tsx
│   │   ├── ThemeToggle.tsx
│   │   └── Toc.tsx
│   ├── content/
│   │   └── shared/
│   │       ├── _badges.mdx
│   │       ├── block-explorers-content.mdx
│   │       ├── bridges-content.mdx
│   │       ├── community-content.mdx
│   │       ├── crosschain-content.mdx
│   │       ├── faucets-content.mdx
│   │       └── multisig-content.mdx
│   ├── fonts.ts
│   ├── globals.css
│   ├── icons/
│   │   ├── Check.tsx
│   │   ├── ConnectedPulse.tsx
│   │   ├── Download.tsx
│   │   ├── InkLogo.tsx
│   │   ├── Moon.tsx
│   │   ├── Pencil.tsx
│   │   ├── Sun.tsx
│   │   └── ThumbUp.tsx
│   ├── pages/
│   │   ├── 404.mdx
│   │   ├── 500.mdx
│   │   ├── _app.mdx
│   │   ├── _meta.json
│   │   ├── build/
│   │   │   ├── _meta.json
│   │   │   ├── getting-started.mdx
│   │   │   ├── ink-kit.mdx
│   │   │   ├── onchain-clients.mdx
│   │   │   ├── transaction-fees.mdx
│   │   │   ├── tutorials/
│   │   │   │   ├── _meta.json
│   │   │   │   ├── deploying-a-smart-contract/
│   │   │   │   │   ├── _meta.json
│   │   │   │   │   ├── foundry.mdx
│   │   │   │   │   ├── hardhat.mdx
│   │   │   │   │   └── remix.mdx
│   │   │   │   ├── deploying-a-superchainerc20.mdx
│   │   │   │   ├── shipping-on-the-superchain.mdx
│   │   │   │   └── verify-smart-contract.mdx
│   │   │   ├── tutorials.mdx
│   │   │   └── verify.mdx
│   │   ├── faq.mdx
│   │   ├── general/
│   │   │   ├── _meta.json
│   │   │   ├── about.mdx
│   │   │   ├── connect-wallet.mdx
│   │   │   ├── faucet.mdx
│   │   │   ├── network-information.mdx
│   │   │   ├── support/
│   │   │   │   ├── _meta.json
│   │   │   │   └── troubleshooting.mdx
│   │   │   └── support.mdx
│   │   ├── index.mdx
│   │   ├── ink-builder-program/
│   │   │   ├── _meta.json
│   │   │   ├── echo-program.mdx
│   │   │   ├── forge-program.mdx
│   │   │   ├── office-hours.mdx
│   │   │   ├── overview.mdx
│   │   │   └── spark-program.mdx
│   │   ├── status.mdx
│   │   ├── tools/
│   │   │   ├── _meta.json
│   │   │   ├── account-abstraction.mdx
│   │   │   ├── block-explorers.mdx
│   │   │   ├── bridges.mdx
│   │   │   ├── crosschain.mdx
│   │   │   ├── faucets.mdx
│   │   │   ├── indexers.mdx
│   │   │   ├── multisig.mdx
│   │   │   ├── oracles.mdx
│   │   │   ├── rpc.mdx
│   │   │   ├── security.mdx
│   │   │   └── vrf.mdx
│   │   ├── useful-information/
│   │   │   ├── _meta.json
│   │   │   ├── contracts.mdx
│   │   │   ├── ink-contracts.mdx
│   │   │   ├── ink-token-contracts.mdx
│   │   │   └── the-superchain.mdx
│   │   └── work-with-ink/
│   │       ├── _meta.json
│   │       ├── brand-kit.mdx
│   │       ├── community.mdx
│   │       └── contributing.mdx
│   ├── types/
│   │   └── mdx.d.ts
│   └── utils/
│       ├── networks.ts
│       └── urls.ts
├── tailwind.config.js
├── theme.config.tsx
└── tsconfig.json
Download .txt
SYMBOL INDEX (31 symbols across 23 files)

FILE: global-env.d.ts
  type Window (line 1) | interface Window {

FILE: src/components/AddNetworkButton.tsx
  type AddNetworkButtonProps (line 12) | interface AddNetworkButtonProps {

FILE: src/components/BlockExplorersContentWrapper.tsx
  function BlockExplorersContentWrapper (line 4) | function BlockExplorersContentWrapper() {

FILE: src/components/BridgesContentWrapper.tsx
  function BridgesContentWrapper (line 4) | function BridgesContentWrapper() {

FILE: src/components/Button.tsx
  type ButtonProps (line 4) | interface ButtonProps {

FILE: src/components/CommunityContentWrapper.tsx
  function CommunityContentWrapper (line 4) | function CommunityContentWrapper() {

FILE: src/components/CopyButton.tsx
  type CopyButtonProps (line 5) | interface CopyButtonProps {
  function CopyButton (line 10) | function CopyButton({ text, className = "" }: CopyButtonProps) {

FILE: src/components/CopyableCode.tsx
  type CopyableCodeProps (line 5) | interface CopyableCodeProps {
  function CopyableCode (line 12) | function CopyableCode({

FILE: src/components/CrosschainContentWrapper.tsx
  function CrosschainContentWrapper (line 4) | function CrosschainContentWrapper() {

FILE: src/components/DownloadButton.tsx
  type DownloadButtonProps (line 7) | interface DownloadButtonProps {

FILE: src/components/FaucetsContentWrapper.tsx
  function FaucetsContentWrapper (line 4) | function FaucetsContentWrapper() {

FILE: src/components/MultisigContentWrapper.tsx
  function MultisigContentWrapper (line 4) | function MultisigContentWrapper() {

FILE: src/components/SidebarTitleComponent.tsx
  type SidebarTitleComponentProps (line 4) | interface SidebarTitleComponentProps {

FILE: src/components/Toc.tsx
  type Heading (line 7) | interface Heading {
  type TocProps (line 13) | interface TocProps {

FILE: src/icons/Download.tsx
  type PencilProps (line 1) | interface PencilProps {

FILE: src/icons/InkLogo.tsx
  type InkLogoProps (line 4) | interface InkLogoProps {

FILE: src/icons/Moon.tsx
  type MoonIconProps (line 1) | interface MoonIconProps {

FILE: src/icons/Pencil.tsx
  type PencilProps (line 1) | interface PencilProps {

FILE: src/icons/Sun.tsx
  type SunIconProps (line 1) | interface SunIconProps {

FILE: src/icons/ThumbUp.tsx
  type ThumbUpProps (line 1) | interface ThumbUpProps {

FILE: src/utils/networks.ts
  type NetworkType (line 3) | type NetworkType = "mainnet" | "sepolia";
  function isNetworkAdded (line 30) | async function isNetworkAdded(network: NetworkType): Promise<boolean> {
  type UseNetworkResponse (line 46) | type UseNetworkResponse = {
  function useNetwork (line 54) | function useNetwork(network: NetworkType): UseNetworkResponse {

FILE: src/utils/urls.ts
  constant URLS (line 1) | const URLS = {

FILE: theme.config.tsx
  method a (line 22) | a(props: { href?: string }) {
  method code (line 34) | code(props) {
  method useNextSeoProps (line 74) | useNextSeoProps() {
Condensed preview — 121 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (198K chars).
[
  {
    "path": ".dockerignore",
    "chars": 61,
    "preview": "node_modules\n.github\n.next\ndist\n.env*\n*.log \n.git\n.gitignore\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 959,
    "preview": "module.exports = {\n  extends: [\"next/core-web-vitals\", \"prettier\"],\n  plugins: [\"simple-import-sort\"],\n  rules: {\n    \"r"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 31,
    "preview": "* @inkonchain/developers-secret"
  },
  {
    "path": ".github/actions/base-setup/action.yaml",
    "chars": 785,
    "preview": "name: 'Basic Setup'\ndescription: 'Basic setup with pnpm and cache restore'\nruns:\n  using: \"composite\"\n  steps:\n    - nam"
  },
  {
    "path": ".github/dependabot.yaml",
    "chars": 106,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\""
  },
  {
    "path": ".github/workflows/cicd.yaml",
    "chars": 3206,
    "preview": "name: CI/CD Workflow\non:\n  pull_request:\n  push:\n    branches:\n      - main\n\njobs:\n  securesdlc:\n    uses: inkonchain/.g"
  },
  {
    "path": ".github/workflows/securesdlc.yml",
    "chars": 843,
    "preview": "name: Nautilus SecureSDLC Reusable\nrun-name: \"[Nautilus SecureSDLC Reusable] Ref:${{ github.ref_name }} Event:${{ github"
  },
  {
    "path": ".gitignore",
    "chars": 162,
    "preview": "# packages\nnode_modules\n\n# os specific files\n.DS_Store\n\n# build artifacts\n.next\npublic/robots.txt\npublic/sitemap-0.xml\np"
  },
  {
    "path": ".npmrc",
    "chars": 102,
    "preview": "# https://www.npmjs.com/package/next-sitemap#building-sitemaps-with-pnpm\nenable-pre-post-scripts=true\n"
  },
  {
    "path": ".nvmrc",
    "chars": 9,
    "preview": "v22.14.0\n"
  },
  {
    "path": ".prettierrc",
    "chars": 85,
    "preview": "{\n  \"trailingComma\": \"es5\",\n  \"tabWidth\": 2,\n  \"semi\": true,\n  \"singleQuote\": false\n}"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 517,
    "preview": "{\n  \"editor.formatOnSave\": true,\n  \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n  \"[typescriptreact, javascript]"
  },
  {
    "path": "Dockerfile",
    "chars": 286,
    "preview": "FROM node:22-alpine\nRUN corepack enable && corepack prepare pnpm@9.12.3 --activate\nWORKDIR /app\nCOPY package.json pnpm-l"
  },
  {
    "path": "README.md",
    "chars": 2759,
    "preview": "[![Twitter](https://img.shields.io/twitter/follow/inkonchain)](https://x.com/inkonchain)\n\n# InkChain Documentation App\n\n"
  },
  {
    "path": "amplify.yml",
    "chars": 294,
    "preview": "version: 1\nfrontend:\n  phases:\n    preBuild:\n      commands:\n        - npm install -g pnpm\n        - pnpm install --froz"
  },
  {
    "path": "cspell/project-words.txt",
    "chars": 1335,
    "preview": "Blockscout\ninkchain\nSuperchain’s\nblockscout\namet\nadipiscing\nelit\neiusmod\ntempor\nincididunt\nlabore\ndolore\naliqua\nenim\nven"
  },
  {
    "path": "cspell.json",
    "chars": 380,
    "preview": "{\n  \"$schema\": \"https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json\",\n  \"version\": \"0.2\""
  },
  {
    "path": "eslint.config.js",
    "chars": 1498,
    "preview": "const simpleImportSort = require(\"eslint-plugin-simple-import-sort\");\nconst path = require(\"node:path\");\nconst js = requ"
  },
  {
    "path": "global-env.d.ts",
    "chars": 38,
    "preview": "interface Window {\n  ethereum: any;\n}\n"
  },
  {
    "path": "next-env.d.ts",
    "chars": 264,
    "preview": "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n/// <reference path=\"./.next/types/rout"
  },
  {
    "path": "next-sitemap.config.js",
    "chars": 269,
    "preview": "/** @type {import('next-sitemap').IConfig} */\nmodule.exports = {\n  exclude: ['*/_meta'],\n  siteUrl: 'https://docs.inkonc"
  },
  {
    "path": "next.config.mjs",
    "chars": 736,
    "preview": "import nextra from \"nextra\";\nimport path from \"path\";\nimport remarkCodeImport from \"remark-code-import\";\nimport { fileUR"
  },
  {
    "path": "package.json",
    "chars": 3094,
    "preview": "{\n  \"name\": \"inkchain-docs\",\n  \"volta\": {\n    \"node\": \"22.14.0\",\n    \"pnpm\": \"9.12.3\"\n  },\n  \"packageManager\": \"pnpm@9.1"
  },
  {
    "path": "postcss.config.js",
    "chars": 82,
    "preview": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "src/components/AddNetworkButton.tsx",
    "chars": 2248,
    "preview": "import { CheckIcon } from \"@/icons/Check\";\nimport { ConnectedPulse } from \"@/icons/ConnectedPulse\";\nimport {\n  networkPa"
  },
  {
    "path": "src/components/BlockExplorersContentWrapper.tsx",
    "chars": 295,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport BlockExplorersContent from \"@/content/shared/block-explorer"
  },
  {
    "path": "src/components/BridgesContentWrapper.tsx",
    "chars": 266,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport BridgesContent from \"@/content/shared/bridges-content.mdx\";"
  },
  {
    "path": "src/components/Button.tsx",
    "chars": 884,
    "preview": "import { PropsWithChildren } from \"react\";\nimport clsx from \"clsx\";\n\ninterface ButtonProps {\n  variant: \"primary\" | \"sec"
  },
  {
    "path": "src/components/CommunityContentWrapper.tsx",
    "chars": 274,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport CommunityContent from \"@/content/shared/community-content.m"
  },
  {
    "path": "src/components/CopyButton.tsx",
    "chars": 1522,
    "preview": "\"use client\";\n\nimport { useState } from \"react\";\n\ninterface CopyButtonProps {\n  text: string;\n  className?: string;\n}\n\ne"
  },
  {
    "path": "src/components/CopyableCode.tsx",
    "chars": 850,
    "preview": "\"use client\";\n\nimport CopyButton from \"./CopyButton\";\n\ninterface CopyableCodeProps {\n  code: string;\n  display?: string;"
  },
  {
    "path": "src/components/CrosschainContentWrapper.tsx",
    "chars": 278,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport CrosschainContent from \"@/content/shared/crosschain-content"
  },
  {
    "path": "src/components/DownloadButton.tsx",
    "chars": 967,
    "preview": "import { PropsWithChildren } from \"react\";\n\nimport { DownloadIcon } from \"@/icons/Download\";\n\nimport { Button } from \"./"
  },
  {
    "path": "src/components/FaucetsContentWrapper.tsx",
    "chars": 266,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport FaucetsContent from \"@/content/shared/faucets-content.mdx\";"
  },
  {
    "path": "src/components/Footer.tsx",
    "chars": 797,
    "preview": "import { ThemeToggle } from \"./ThemeToggle\";\n\nexport const Footer = () => {\n  return (\n    <div className=\"flex flex-col"
  },
  {
    "path": "src/components/Head.tsx",
    "chars": 1957,
    "preview": "import { useRouter } from \"next/router\";\nimport { useConfig } from \"nextra-theme-docs\";\n\nexport const Head = () => {\n  c"
  },
  {
    "path": "src/components/MultisigContentWrapper.tsx",
    "chars": 270,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport MultisigContent from \"@/content/shared/multisig-content.mdx"
  },
  {
    "path": "src/components/SidebarTitleComponent.tsx",
    "chars": 921,
    "preview": "import clsx from \"clsx\";\nimport { useRouter } from \"next/router\";\n\ninterface SidebarTitleComponentProps {\n  title: strin"
  },
  {
    "path": "src/components/TestnetDisclaimer.tsx",
    "chars": 362,
    "preview": "import { Callout } from \"nextra/components\";\n\nexport const TestnetDisclaimer = () => {\n  return (\n    <Callout type=\"inf"
  },
  {
    "path": "src/components/ThemeToggle.tsx",
    "chars": 967,
    "preview": "import { useEffect, useState } from \"react\";\nimport { useTheme } from \"nextra-theme-docs\";\n\nimport { MoonIcon } from \".."
  },
  {
    "path": "src/components/Toc.tsx",
    "chars": 1289,
    "preview": "import Link from \"next/link\";\n\nimport { PencilIcon } from \"@/icons/Pencil\";\nimport { ThumbUpIcon } from \"@/icons/ThumbUp"
  },
  {
    "path": "src/content/shared/_badges.mdx",
    "chars": 2423,
    "preview": "# Badges\n\n## Welcome To Ink\n\n> Awarded for bridging Ethereum to Ink.\n\nTo bridge Ethereum, you can use the `L1StandardBri"
  },
  {
    "path": "src/content/shared/block-explorers-content.mdx",
    "chars": 876,
    "preview": "## Blockscout\n\nBlockscout is a universal block explorer providing detailed chain information and tools for debugging sma"
  },
  {
    "path": "src/content/shared/bridges-content.mdx",
    "chars": 1062,
    "preview": "import { Callout } from 'nextra/components'\n\n# Bridges\nThese bridges provide different interfaces to the canonical smart"
  },
  {
    "path": "src/content/shared/community-content.mdx",
    "chars": 251,
    "preview": "import { URLS } from \"@/utils/urls\";\n\n# Get Support\n\nJoin the Ink community, vibe with fellow developers and get support"
  },
  {
    "path": "src/content/shared/crosschain-content.mdx",
    "chars": 165,
    "preview": "# Crosschain Infrastructure\n\n## Wormhole\n\nWormhole is an interoperability platform powering multichain apps and bridges."
  },
  {
    "path": "src/content/shared/faucets-content.mdx",
    "chars": 1325,
    "preview": "# Faucets\n\nGet Sepolia ETH on Ink from these faucets below! Alternatively, you can [bridge](https://inkonchain.com/bridg"
  },
  {
    "path": "src/content/shared/multisig-content.mdx",
    "chars": 795,
    "preview": "# Multisig\n\n## Safe\n\nInk hosts [Safe](https://docs.safe.global/home/what-is-safe)'s technology to bring digital ownershi"
  },
  {
    "path": "src/fonts.ts",
    "chars": 303,
    "preview": "import { Inter, Plus_Jakarta_Sans } from \"next/font/google\";\n\nexport const inter = Inter({\n  subsets: [\"latin\"],\n  varia"
  },
  {
    "path": "src/globals.css",
    "chars": 2247,
    "preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer utilities {\n  body {\n    font-family:\n      var(--fon"
  },
  {
    "path": "src/icons/Check.tsx",
    "chars": 372,
    "preview": "export const CheckIcon: React.FC<{ className?: string }> = ({\n  className = \"size-6\",\n}) => {\n  return (\n    <svg\n      "
  },
  {
    "path": "src/icons/ConnectedPulse.tsx",
    "chars": 413,
    "preview": "import clsx from \"clsx\";\n\nexport const ConnectedPulse: React.FC<{ className?: string }> = ({\n  className,\n}) => {\n  retu"
  },
  {
    "path": "src/icons/Download.tsx",
    "chars": 1062,
    "preview": "interface PencilProps {\n  className?: string;\n}\n\nexport const DownloadIcon: React.FC<PencilProps> = ({\n  className = \"si"
  },
  {
    "path": "src/icons/InkLogo.tsx",
    "chars": 536,
    "preview": "import Image from \"next/image\";\nimport { useTheme } from \"nextra-theme-docs\";\n\ninterface InkLogoProps {\n  className?: st"
  },
  {
    "path": "src/icons/Moon.tsx",
    "chars": 1172,
    "preview": "interface MoonIconProps {\n  className?: string;\n}\n\nexport const MoonIcon: React.FC<MoonIconProps> = ({\n  className = \"w-"
  },
  {
    "path": "src/icons/Pencil.tsx",
    "chars": 598,
    "preview": "interface PencilProps {\n  className?: string;\n}\n\nexport const PencilIcon: React.FC<PencilProps> = ({ className = \"size-6"
  },
  {
    "path": "src/icons/Sun.tsx",
    "chars": 2422,
    "preview": "interface SunIconProps {\n  className?: string;\n}\n\nexport const SunIcon: React.FC<SunIconProps> = ({ className = \"w-6 h-6"
  },
  {
    "path": "src/icons/ThumbUp.tsx",
    "chars": 1164,
    "preview": "interface ThumbUpProps {\n  className?: string;\n}\n\nexport const ThumbUpIcon: React.FC<ThumbUpProps> = ({\n  className = \"s"
  },
  {
    "path": "src/pages/404.mdx",
    "chars": 154,
    "preview": "# Page Not Found\n\n#### Return [home](/).\n\n#### Please help by [submitting an issue](https://github.com/inkonchain/docs/i"
  },
  {
    "path": "src/pages/500.mdx",
    "chars": 272,
    "preview": "# Unexpected Error\n\n![500 Error Warning.](/img/icons/500-page.svg)\n\n## Something isn't quite right. Let's start again on"
  },
  {
    "path": "src/pages/_app.mdx",
    "chars": 1358,
    "preview": "import { ThemeProvider } from \"next-themes\";\nimport Script from \"next/script\";\nimport { inter, plus_jakarta_sans } from "
  },
  {
    "path": "src/pages/_meta.json",
    "chars": 2519,
    "preview": "{\n  \"index\": {\n    \"title\": \"Getting Started\",\n    \"display\": \"hidden\",\n    \"theme\": {\n      \"breadcrumb\": false,\n      "
  },
  {
    "path": "src/pages/build/_meta.json",
    "chars": 351,
    "preview": "{\n  \"getting-started\": \"Getting Started\",\n  \"onchain-clients\": \"Onchain Clients\",\n  \"run-an-ink-node\": {\n    \"title\": \"R"
  },
  {
    "path": "src/pages/build/getting-started.mdx",
    "chars": 1233,
    "preview": "import { Callout, Checkbox } from \"nextra/components\";\n\n# What do I Need to Start Developing on Ink?\n\nTo start developin"
  },
  {
    "path": "src/pages/build/ink-kit.mdx",
    "chars": 4181,
    "preview": "---\ntitle: Ink Kit\ndescription: A delightful onchain-focused SDK with ready-to-use components and themes\n---\n\nimport Ima"
  },
  {
    "path": "src/pages/build/onchain-clients.mdx",
    "chars": 2260,
    "preview": "# Onchain Clients\n\n## Ethers.js - Instructions for Connecting to Ink\n\nEthers.js documentation: [https://docs.ethers.org/"
  },
  {
    "path": "src/pages/build/transaction-fees.mdx",
    "chars": 754,
    "preview": "import { Callout } from 'nextra/components'\n\n# Fees on Ink \n\nAs a Superchain L2, the fee you pay for each transaction on"
  },
  {
    "path": "src/pages/build/tutorials/_meta.json",
    "chars": 248,
    "preview": "{\n  \"deploying-a-smart-contract\": \"Deploying a Smart Contract\",\n  \"verify-smart-contract\": \"Verifying a Smart Contract\","
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/_meta.json",
    "chars": 77,
    "preview": "{\n    \"foundry\": \"Foundry\",\n    \"hardhat\": \"Hardhat\",\n    \"remix\": \"Remix\"\n}\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/foundry.mdx",
    "chars": 4037,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\nimport { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\""
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/hardhat.mdx",
    "chars": 4314,
    "preview": "import { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\";\n\n# Deploying a Smart Contract with Hardhat\n\nThis gui"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/remix.mdx",
    "chars": 4911,
    "preview": "import { Callout } from \"nextra/components\";\nimport { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\";\n\n# Depl"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-superchainerc20.mdx",
    "chars": 5959,
    "preview": "import { Callout } from \"nextra/components\";\n\n# Deploying a SuperchainERC20\n\n<Callout type=\"info\">\n  The SuperchainERC20"
  },
  {
    "path": "src/pages/build/tutorials/shipping-on-the-superchain.mdx",
    "chars": 420,
    "preview": "# Shipping on the Superchain\n\nYou can use [Supersim](https://github.com/ethereum-optimism/supersim) to simulate the Supe"
  },
  {
    "path": "src/pages/build/tutorials/verify-smart-contract.mdx",
    "chars": 6926,
    "preview": "import { Callout } from 'nextra/components'\n\n## Verifying your Smart Contract \n\nIn order for your deployed smart contrac"
  },
  {
    "path": "src/pages/build/tutorials.mdx",
    "chars": 646,
    "preview": "# Tutorials\n\nWelcome to the tutorials section! Here you'll find step-by-step guides to help you build on Ink.\n\n## Availa"
  },
  {
    "path": "src/pages/build/verify.mdx",
    "chars": 4057,
    "preview": "---\ntitle: Kraken Verify\ndescription: Solidity contracts for Kraken Verify - EAS attestation utilities enabling access c"
  },
  {
    "path": "src/pages/faq.mdx",
    "chars": 4396,
    "preview": "import { URLS } from \"@/utils/urls\";\n\n# Frequently Asked Questions\n\n## Ink\n\n### What makes Ink different?\n\nInk is an OP "
  },
  {
    "path": "src/pages/general/_meta.json",
    "chars": 259,
    "preview": "{\n  \"about\": \"About Ink\",\n  \"network-information\": \"Network Information\",\n  \"connect-wallet\": \"Connect Wallet\",\n  \"bridg"
  },
  {
    "path": "src/pages/general/about.mdx",
    "chars": 2546,
    "preview": "# About Ink\n\n## What is Ink?\n\nInk is an Ethereum OP Stack layer 2 blockchain designed to be the house of DeFi for the Su"
  },
  {
    "path": "src/pages/general/connect-wallet.mdx",
    "chars": 2083,
    "preview": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\nimport { AddNetworkBu"
  },
  {
    "path": "src/pages/general/faucet.mdx",
    "chars": 19,
    "preview": "# Faucets\n\n## TODO\n"
  },
  {
    "path": "src/pages/general/network-information.mdx",
    "chars": 2377,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\n\n# Network Information\n\n## Mainnet\n\n| Field                       "
  },
  {
    "path": "src/pages/general/support/_meta.json",
    "chars": 43,
    "preview": "{\n  \"troubleshooting\": \"Troubleshooting\"\n}\n"
  },
  {
    "path": "src/pages/general/support/troubleshooting.mdx",
    "chars": 2148,
    "preview": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Troubleshooting Gu"
  },
  {
    "path": "src/pages/general/support.mdx",
    "chars": 269,
    "preview": "import { URLS } from \"@/utils/urls\";\n\n# Support\n\nAt Ink, we're here to help everyone, builders and users alike.\n\nPlease "
  },
  {
    "path": "src/pages/index.mdx",
    "chars": 882,
    "preview": "import { Callout } from \"nextra/components\";\nimport { URLS } from \"@/utils/urls\";\n\n# Welcome to the Ink Docs\n\n<video aut"
  },
  {
    "path": "src/pages/ink-builder-program/_meta.json",
    "chars": 169,
    "preview": "{\n  \"overview\": \"Overview\",\n  \"spark-program\": \"Spark Program\",\n  \"forge-program\": \"Forge Program\",\n  \"echo-program\": \"E"
  },
  {
    "path": "src/pages/ink-builder-program/echo-program.mdx",
    "chars": 2146,
    "preview": "# Echo Program\n\n> **Retroactive Recognition for Ink's Early Builders**\n> *Submissions Closed – March 4, 2026*\n\nEcho was "
  },
  {
    "path": "src/pages/ink-builder-program/forge-program.mdx",
    "chars": 5416,
    "preview": "# Forge Program\n\nThe future isn't written. It's waiting to be inked.\n\n## What is Forge?\n\nForge is Ink's flagship track f"
  },
  {
    "path": "src/pages/ink-builder-program/office-hours.mdx",
    "chars": 2311,
    "preview": "# Office Hours\n\nInk Office Hours are short, focused 15-minute sessions for teams already building on Ink (or actively pr"
  },
  {
    "path": "src/pages/ink-builder-program/overview.mdx",
    "chars": 1181,
    "preview": "# Ink Builder Program\n\nThe Ink Builder Program supports teams building on Ink with funding, guidance, and recognition ac"
  },
  {
    "path": "src/pages/ink-builder-program/spark-program.mdx",
    "chars": 4685,
    "preview": "# Spark Program\n\n*Every big idea starts with a spark.*\n\n## What Is Spark?\n\nSpark is Ink's microgrant track for builders "
  },
  {
    "path": "src/pages/status.mdx",
    "chars": 379,
    "preview": "import { useEffect } from 'react'\nimport { useRouter } from 'next/router'\n\nexport default function StatusPage() {\n  useE"
  },
  {
    "path": "src/pages/tools/_meta.json",
    "chars": 303,
    "preview": "{\n  \"account-abstraction\": \"Account Abstraction\",\n  \"block-explorers\": \"Block Explorers\",\n  \"bridges\": \"Bridges\",\n  \"cro"
  },
  {
    "path": "src/pages/tools/account-abstraction.mdx",
    "chars": 910,
    "preview": "# Account Abstraction\n\n## Alchemy\n\nLeverage Alchemy's best in class account abstraction stack, [Account Kit](https://www"
  },
  {
    "path": "src/pages/tools/block-explorers.mdx",
    "chars": 1606,
    "preview": "# Block Explorer\n\n## Blockscout\n\nBlockscout is a universal block explorer providing detailed chain information and tools"
  },
  {
    "path": "src/pages/tools/bridges.mdx",
    "chars": 1993,
    "preview": "import { Callout } from \"nextra/components\";\n\n# Bridges\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  Use the below bridges at you"
  },
  {
    "path": "src/pages/tools/crosschain.mdx",
    "chars": 281,
    "preview": "# Crosschain Infrastructure\n\n## [LayerZero](https://docs.layerzero.network/v2/home/getting-started/what-is-layerzero)\n\n*"
  },
  {
    "path": "src/pages/tools/faucets.mdx",
    "chars": 102,
    "preview": "import { FaucetsContentWrapper } from '@/components/FaucetsContentWrapper'\n\n<FaucetsContentWrapper />\n"
  },
  {
    "path": "src/pages/tools/indexers.mdx",
    "chars": 680,
    "preview": "# Indexers\n\n## [Goldsky](https://docs.goldsky.com/chains/ink)\n\nGoldsky is a high-performance data indexing provider for "
  },
  {
    "path": "src/pages/tools/multisig.mdx",
    "chars": 104,
    "preview": "import { MultisigContentWrapper } from '@/components/MultisigContentWrapper'\n\n<MultisigContentWrapper />"
  },
  {
    "path": "src/pages/tools/oracles.mdx",
    "chars": 9470,
    "preview": "import CopyableCode from \"@/components/CopyableCode\";\n\n# Oracles\n\n## API3\n\nAPI3 offers 190+ price feeds for Ink on the ["
  },
  {
    "path": "src/pages/tools/rpc.mdx",
    "chars": 3828,
    "preview": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# RPC\n\n## [Alchemy]("
  },
  {
    "path": "src/pages/tools/security.mdx",
    "chars": 1609,
    "preview": "# Security\n\n## Hypernative\n\n[Hypernative](https://www.hypernative.io/) enhances security for developers building on Ink "
  },
  {
    "path": "src/pages/tools/vrf.mdx",
    "chars": 359,
    "preview": "# VRF\n\n## Gelato\n\n[Gelato VRF](https://docs.gelato.network/web3-services/vrf/understanding-vrf) offers real randomness f"
  },
  {
    "path": "src/pages/useful-information/_meta.json",
    "chars": 197,
    "preview": "{\n  \"contracts\": \"Contracts\",\n  \"ink-contracts\": \"Ink Contracts\",\n  \"ink-token-contracts\": {\n    \"title\": \"Ink Token Con"
  },
  {
    "path": "src/pages/useful-information/contracts.mdx",
    "chars": 16866,
    "preview": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Ink Contract Addre"
  },
  {
    "path": "src/pages/useful-information/ink-contracts.mdx",
    "chars": 2538,
    "preview": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Ink Contracts\n\n<Ca"
  },
  {
    "path": "src/pages/useful-information/ink-token-contracts.mdx",
    "chars": 243,
    "preview": "import { useEffect } from 'react'\nimport { useRouter } from 'next/router'\n\nexport default function Redirect() {\n  const "
  },
  {
    "path": "src/pages/useful-information/the-superchain.mdx",
    "chars": 3528,
    "preview": "import { Callout } from \"nextra/components\";\n\n# The Superchain\n\n## What is the Superchain?\n\n- The Optimism [Superchain]("
  },
  {
    "path": "src/pages/work-with-ink/_meta.json",
    "chars": 132,
    "preview": "{\n    \"community\": {\n        \"title\": \"Community\"\n        },\n    \"contributing\": {\n        \"title\": \"Contribution Guide\""
  },
  {
    "path": "src/pages/work-with-ink/brand-kit.mdx",
    "chars": 4561,
    "preview": "---\ntitle: Brand Kit\ndescription: The core essence of the Ink branding, featuring logos, colors, typefaces, illustration"
  },
  {
    "path": "src/pages/work-with-ink/community.mdx",
    "chars": 108,
    "preview": "import { CommunityContentWrapper } from '@/components/CommunityContentWrapper'\n\n<CommunityContentWrapper />\n"
  },
  {
    "path": "src/pages/work-with-ink/contributing.mdx",
    "chars": 295,
    "preview": "import { URLS } from \"@/utils/urls\";\n\nexport const config = {\n  theme: {\n    pagination: false,\n  },\n};\n\n# Contributing "
  },
  {
    "path": "src/types/mdx.d.ts",
    "chars": 210,
    "preview": "declare module \"*.mdx\" {\n  import type { ComponentType } from \"react\";\n\n  const component: ComponentType<{\n    component"
  },
  {
    "path": "src/utils/networks.ts",
    "chars": 3523,
    "preview": "import { useEffect, useState } from \"react\";\n\nexport type NetworkType = \"mainnet\" | \"sepolia\";\n\nexport const networkPara"
  },
  {
    "path": "src/utils/urls.ts",
    "chars": 423,
    "preview": "export const URLS = {\n  githubOrgUrl: \"https://github.com/inkonchain\",\n  statusPageUrl: \"https://status.inkonchain.com/\""
  },
  {
    "path": "tailwind.config.js",
    "chars": 996,
    "preview": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  darkMode: 'class',\n  content: [\n    './src/**/*.{js,jsx"
  },
  {
    "path": "theme.config.tsx",
    "chars": 2141,
    "preview": "import { clsx } from \"clsx\";\nimport { useRouter } from \"next/router\";\nimport { DocsThemeConfig } from \"nextra-theme-docs"
  },
  {
    "path": "tsconfig.json",
    "chars": 736,
    "preview": "{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    "
  }
]

About this extraction

This page contains the full source code of the inkonchain/docs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 121 files (178.9 KB), approximately 52.5k tokens, and a symbol index with 31 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!