[
  {
    "path": ".dockerignore",
    "content": "node_modules\n.github\n.next\ndist\n.env*\n*.log \n.git\n.gitignore\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  extends: [\"next/core-web-vitals\", \"prettier\"],\n  plugins: [\"simple-import-sort\"],\n  rules: {\n    \"react-hooks/exhaustive-deps\": \"error\",\n    \"import/newline-after-import\": [\n      \"error\",\n      {\n        count: 1,\n      },\n    ],\n    // increase the severity of rules so they are auto-fixable\n    \"simple-import-sort/imports\": [\n      \"error\",\n      {\n        groups: [\n          // Packages `react` related packages come first.\n          [\"^react\", \"^@?\\\\w\"],\n          // Internal packages.\n          [\"^(@)(/.*|$)\"],\n          // Side effect imports.\n          [\"^\\\\u0000\"],\n          // Parent imports. Put `..` last.\n          [\"^\\\\.\\\\.(?!/?$)\", \"^\\\\.\\\\./?$\"],\n          // Other relative imports. Put same-folder imports and `.` last.\n          [\"^\\\\./(?=.*/)(?!/?$)\", \"^\\\\.(?!/?$)\", \"^\\\\./?$\"],\n          // Style imports.\n          [\"^.+\\\\.?(css)$\"],\n        ],\n      },\n    ],\n    \"simple-import-sort/exports\": \"error\",\n  },\n};\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "* @inkonchain/developers-secret"
  },
  {
    "path": ".github/actions/base-setup/action.yaml",
    "content": "name: 'Basic Setup'\ndescription: 'Basic setup with pnpm and cache restore'\nruns:\n  using: \"composite\"\n  steps:\n    - name: Setup pnpm\n      uses: pnpm/action-setup@v2\n      with:\n        run_install: false\n\n    - name: Setup Node 22\n      uses: actions/setup-node@v4\n      with:\n        node-version: \"22.x\"\n        cache: \"pnpm\"\n\n    - name: Add pnpm store path to env var\n      id: pnpm-cache\n      shell: bash\n      run: echo \"STORE_PATH=$(pnpm store path)\" >> $GITHUB_OUTPUT\n\n    - name: Restore Cache\n      uses: actions/cache@v4\n      with:\n        path: |\n          ${{ steps.pnpm-cache.outputs.STORE_PATH }}\n          **/node_modules\n        key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}\n        restore-keys: |\n          ${{ runner.os }}-pnpm-store-\n\n"
  },
  {
    "path": ".github/dependabot.yaml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\""
  },
  {
    "path": ".github/workflows/cicd.yaml",
    "content": "name: CI/CD Workflow\non:\n  pull_request:\n  push:\n    branches:\n      - main\n\njobs:\n  securesdlc:\n    uses: inkonchain/.github/.github/workflows/securesdlc.yml@main\n    secrets: inherit\n\n  install_modules:\n    needs: securesdlc\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: volta-cli/action@v4\n      - uses: pnpm/action-setup@v4\n        with:\n          run_install: false\n      - uses: actions/setup-node@v4\n        with:\n          node-version: \"22.x\"\n          cache: \"pnpm\"\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n      - name: Add pnpm store path to env var\n        id: pnpm-cache\n        shell: bash\n        run: echo \"STORE_PATH=$(pnpm store path)\" >> $GITHUB_OUTPUT\n      - name: Cache node modules\n        uses: actions/cache@v4\n        with:\n          path: |\n            ${{ steps.pnpm-cache.outputs.STORE_PATH }}\n            **/node_modules\n          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}\n          restore-keys: |\n            ${{ runner.os }}-pnpm-store-\n\n  js-lint:\n    needs: install_modules\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: ./.github/actions/base-setup\n        name: Base Setup\n      - name: JS linting\n        run: pnpm run lint:js\n\n  md-lint:\n    needs: install_modules\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: ./.github/actions/base-setup\n        name: Base Setup\n      - name: MDX linting\n        run: pnpm run lint:mdx\n\n  format:\n    needs: install_modules\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: ./.github/actions/base-setup\n        name: Base Setup\n      - name: Run formatting\n        run: pnpm run format:js\n\n  # spell-check:\n  #   needs: install_modules\n  #   runs-on: ubuntu-latest\n  #   steps:\n  #     - uses: actions/checkout@v4\n  #     - uses: ./.github/actions/base-setup\n  #       name: Base Setup\n  #     - name: Run Spellcheck\n  #       run: pnpm run spellcheck:lint\n\n  build:\n    needs: install_modules\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: ./.github/actions/base-setup\n        name: Base Setup\n      - name: Building app\n        run: pnpm run build\n      - name: Cache build\n        uses: actions/cache/save@v4\n        with:\n          path: .next\n          key: ${{ runner.os }}-build-store-${{ hashFiles('.next') }}\n\n  docker-publish:\n    if: github.ref == 'refs/heads/main'\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v2\n\n      - name: Log in to GitHub Container Registry\n        uses: docker/login-action@v2\n        with:\n          registry: ghcr.io\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v5\n        with:\n          context: .\n          push: true\n          tags: ghcr.io/inkonchain/docs:latest\n\n      - name: Log out from GitHub Container Registry\n        run: docker logout ghcr.io\n"
  },
  {
    "path": ".github/workflows/securesdlc.yml",
    "content": "name: Nautilus SecureSDLC Reusable\nrun-name: \"[Nautilus SecureSDLC Reusable] Ref:${{ github.ref_name }} Event:${{ github.event_name }}\"\n\non:\n  workflow_dispatch: {}\n  workflow_call: {}\n  push:\n    branches: [ main ]\n\njobs:\n  securesdlc-umbrella:\n    permissions:\n      contents: read # for actions/checkout to fetch code\n      security-events: write # for github/codeql-action/upload-sarif to upload SARIF results\n      actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status  \n    uses: nautilus-wraith/securesdlc-umbrella/.github/workflows/securesdlc-umbrella.yml@release-stable\n    secrets:\n      SEMGREP_APP_URL: ${{ secrets.SEMGREP_APP_URL }}\n      SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}\n      SDLC_SLACK_NOTIFICATIONS: ${{ secrets.SDLC_SLACK_NOTIFICATIONS }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# packages\nnode_modules\n\n# os specific files\n.DS_Store\n\n# build artifacts\n.next\npublic/robots.txt\npublic/sitemap-0.xml\npublic/sitemap.xml\n\n# log files\n*.log\n\nout\n"
  },
  {
    "path": ".npmrc",
    "content": "# https://www.npmjs.com/package/next-sitemap#building-sitemaps-with-pnpm\nenable-pre-post-scripts=true\n"
  },
  {
    "path": ".nvmrc",
    "content": "v22.14.0\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"trailingComma\": \"es5\",\n  \"tabWidth\": 2,\n  \"semi\": true,\n  \"singleQuote\": false\n}"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"editor.formatOnSave\": true,\n  \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n  \"[typescriptreact, javascript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.codeActionsOnSave\": {\n      \"source.fixAll.eslint\": \"explicit\"\n    }\n  },\n  \"[plaintext]\": {\n    \"editor.formatOnSave\": false\n  },\n  \"editor.formatOnPaste\": false,\n  \"prettier.useEditorConfig\": false,\n  \"prettier.useTabs\": false,\n  \"prettier.configPath\": \".prettierrc\",\n  \"prettier.prettierPath\": \"node_modules/prettier\"\n}\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM node:22-alpine\nRUN corepack enable && corepack prepare pnpm@9.12.3 --activate\nWORKDIR /app\nCOPY package.json pnpm-lock.yaml ./\nRUN pnpm install --frozen-lockfile\nCOPY . .\nRUN pnpm run build\nRUN adduser --system --uid 1001 docs-user\nUSER docs-user\nEXPOSE 3000\nCMD [\"pnpm\", \"start\"]\n"
  },
  {
    "path": "README.md",
    "content": "[![Twitter](https://img.shields.io/twitter/follow/inkonchain)](https://x.com/inkonchain)\n\n# InkChain Documentation App\n\nAn advanced, streamlined documentation platform built with Next.js and Nextra for InkChain.\n\n## 🚀 Build & Run\n\n1. **Build Docker image**:\n   ```bash\n   docker build -t docs .\n   ```\n\n2. **Run Docker container**:\n   ```bash\n   docker run -p 3000:3000 docs\n   ```\n\n## 📋 Requirements\n\n* **Node.js**: v20.11.0 or higher\n\n## 📖 Overview\n\nThis 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.\n\n## 🏁 Getting Started\n\nTo get started with local development:\n\n1. **Clone the repository**\n2. **Install dependencies**:\n   ```bash\n   pnpm install\n   ```\n3. **Start development server**:\n   ```bash\n   pnpm run dev\n   ```\n\n## 🛠 Tooling\n\nOur development setup includes multiple tools to maintain high-quality code and documentation:\n\n* **[CSpell](https://cspell.org/)**: Real-time spell checking to maintain documentation accuracy.\n* **[Remark](https://remark.js.org/)**: Processes and renders Markdown content with added plugins.\n* **[ESLint](https://eslint.org/)**: Ensures code quality by catching potential issues.\n* **[Prettier](https://prettier.io/)**: Enforces consistent code formatting.\n* **[Tailwind CSS](https://tailwindcss.com/)**: Utility-first CSS framework for fast, responsive UI development.\n\n## 🚦 CI/CD Pipeline\n\nOur CI/CD setup utilizes GitHub Actions to run automated checks on every pull request (PR):\n\n* **js-lint**: Ensures proper JavaScript code formatting with ESLint.\n* **md-lint**: Checks Markdown code formatting with Remark.\n* **format**: Enforces consistent code style with Prettier.\n* **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.\n\n## 🌐 Feature Branch Deployment\n\nFor 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.\n\n## 🚀 Production Deployment\n\nThe `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.\n"
  },
  {
    "path": "amplify.yml",
    "content": "version: 1\nfrontend:\n  phases:\n    preBuild:\n      commands:\n        - npm install -g pnpm\n        - pnpm install --frozen-lockfile\n    build:\n      commands:\n        - pnpm run build\n  artifacts:\n    baseDirectory: .next\n    files:\n      - '**/*'\n  cache:\n    paths:\n      - node_modules/**/*\n"
  },
  {
    "path": "cspell/project-words.txt",
    "content": "Blockscout\ninkchain\nSuperchain’s\nblockscout\namet\nadipiscing\nelit\neiusmod\ntempor\nincididunt\nlabore\ndolore\naliqua\nenim\nveniam\nquis\nnostrud\nullamco\nlaboris\naliquip\ncommodo\nconsequat\nDuis\naute\nirure\nreprehenderit\nvoluptate\nvelit\ncillum\nfugiat\nnulla\npariatur\nExcepteur\noccaecat\ncupidatat\nproident\nsunt\nofficia\ndeserunt\nmollit\nlaborum\nCSpell: Files checked: 11, Issues found: 42 in 4 files.\nadipiscing\naliqua\naliquip\namet\naute\nBlockscout\nblockscout\ncillum\ncommodo\nconsequat\ncupidatat\ndeserunt\ndolore\nDuis\neiusmod\nelit\nenim\nExcepteur\nfugiat\nincididunt\nirure\nlabore\nlaboris\nlaborum\nmollit\nnostrud\nnulla\noccaecat\nofficia\npariatur\nproident\nquis\nreprehenderit\nsunt\ntempor\nullamco\nvelit\nveniam\nvoluptate\nuntar\nNVME\nnextra\nGelato\nQuickNode\nSuperchain\nSepolia\nuserbase\nsynergizing\nvewy\nscawy\nBrid\nRabby\nProtofire\nZerodev\nPermissionless\nCrosschain\nSupersim\nverif\nSourcify\nsourcify\nsourcecode\nSuperbridge\ninkonchain\nDrand\nViem\nviem\nhackathons\nGoldsky\nMulticall\nMintable\nPermissioned\npreinstalls\nmultisignatures\nbaselayer\nSmol\nfoundryup\ninksepolia\nINKSEPOLIA\ncommoditizes\nmultichain\nRoutescan\nLurus\nwordmark\nSEDA\nshadcn\nChakra\nwagmi\nsuperchainerc\nkrakenfx\nRemappings\nremappings\nblocktimes\ncypherpunk\npredeploy\nDYOR\nsubsecond\nmicrogrants\nMicrogrants\nInkubator\nmicrogrant\nChainlink\ncryptoeconomically\ndrpc\nHypernative\nHypernative's\npredeterministic\nsfrx\n"
  },
  {
    "path": "cspell.json",
    "content": "{\n  \"$schema\": \"https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json\",\n  \"version\": \"0.2\",\n  \"dictionaryDefinitions\": [\n    {\n      \"name\": \"project-words\",\n      \"path\": \"./cspell/project-words.txt\",\n      \"addWords\": true\n    }\n  ],\n  \"dictionaries\": [\n    \"project-words\"\n  ],\n  \"ignorePaths\": [\n    \"node_modules\",\n    \"/project-words.txt\"\n  ]\n}"
  },
  {
    "path": "eslint.config.js",
    "content": "const simpleImportSort = require(\"eslint-plugin-simple-import-sort\");\nconst path = require(\"node:path\");\nconst js = require(\"@eslint/js\");\nconst { FlatCompat } = require(\"@eslint/eslintrc\");\n\nconst baseDirectory = __dirname;\nconst compat = new FlatCompat({\n  baseDirectory: baseDirectory,\n  recommendedConfig: js.configs.recommended,\n  allConfig: js.configs.all,\n});\n\nmodule.exports = [\n  // Default ignores - node_modules is ignored by default in recent ESLint, but good to be explicit.\n  // Add other ignores if needed (e.g., build output directories like .next)\n  {\n    ignores: [\"**/node_modules/**\", \"**/.next/**\", \"**/out/**\"],\n  },\n\n  // Spread the configurations from extended configs\n  ...compat.extends(\"next/core-web-vitals\", \"prettier\"),\n\n  // Configuration for JS/JSX/TS/TSX files\n  {\n    files: [\"**/*.js\", \"**/*.jsx\", \"**/*.ts\", \"**/*.tsx\"],\n    plugins: {\n      // Use the imported object directly as the key\n      simpleImportSort: simpleImportSort,\n    },\n    rules: {\n      \"react-hooks/exhaustive-deps\": \"error\",\n      \"import/newline-after-import\": [\"error\", { count: 1 }],\n      \"simpleImportSort/imports\": [\n        \"error\",\n        {\n          groups: [\n            [\"^react\", \"^@?\\\\w\"],\n            [\"^(@)(/.*|$)\"],\n            [\"^\\\\u0000\"],\n            [\"^\\\\.\\\\.(?!/?$)\", \"^\\\\.\\\\./?$\"],\n            [\"^\\\\./(?=.*/)(?!/?$)\", \"^\\\\.(?!/?$)\", \"^\\\\./?$\"],\n            [\"^.+\\\\.?(css)$\"],\n          ],\n        },\n      ],\n      \"simpleImportSort/exports\": \"error\",\n    },\n  },\n];\n"
  },
  {
    "path": "global-env.d.ts",
    "content": "interface Window {\n  ethereum: any;\n}\n"
  },
  {
    "path": "next-env.d.ts",
    "content": "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n/// <reference path=\"./.next/types/routes.d.ts\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.\n"
  },
  {
    "path": "next-sitemap.config.js",
    "content": "/** @type {import('next-sitemap').IConfig} */\nmodule.exports = {\n  exclude: ['*/_meta'],\n  siteUrl: 'https://docs.inkonchain.com',\n  generateRobotsTxt: true,\n  robotsTxtOptions: {\n    policies: [\n      {\n        userAgent: '*',\n        allow: '/',\n      },\n    ]\n  }\n}\n"
  },
  {
    "path": "next.config.mjs",
    "content": "import nextra from \"nextra\";\nimport path from \"path\";\nimport remarkCodeImport from \"remark-code-import\";\nimport { fileURLToPath } from \"url\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst withNextra = nextra({\n  theme: \"nextra-theme-docs\",\n  themeConfig: \"./theme.config.tsx\",\n  defaultShowCopyCode: true,\n  mdxOptions: {\n    remarkPlugins: [remarkCodeImport],\n  },\n});\n\nconst config = withNextra({\n  eslint: {\n    ignoreDuringBuilds: true,\n  },\n  images: {\n    unoptimized: true,\n  },\n  webpack: (config) => {\n    config.resolve.alias = {\n      ...config.resolve.alias,\n      \"@\": path.join(__dirname, \"src\"),\n    };\n    return config;\n  },\n  experimental: {\n    mdxRs: true,\n  },\n});\n\nexport default config;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"inkchain-docs\",\n  \"volta\": {\n    \"node\": \"22.14.0\",\n    \"pnpm\": \"9.12.3\"\n  },\n  \"packageManager\": \"pnpm@9.12.3\",\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"postbuild\": \"next-sitemap\",\n    \"start\": \"next start\",\n    \"lint\": \"pnpm run lint:js && pnpm run lint:mdx && pnpm run format:js:check && pnpm run spellcheck:lint\",\n    \"lint:fix\": \"pnpm run lint:js:fix && pnpm run lint:mdx:fix && pnpm run format:js && pnpm run spellcheck:fix\",\n    \"lint:js\": \"eslint ./src theme.config.tsx --ext js,jsx,ts,tsx\",\n    \"lint:js:fix\": \"eslint ./src theme.config.tsx --fix --ext js,jsx,ts,tsx\",\n    \"format:js\": \"prettier --write \\\"**/*.{ts,tsx,css,scss}\\\"\",\n    \"format:js:check\": \"prettier --check \\\"**/*.{ts,tsx,css,scss}\\\"\",\n    \"lint:mdx\": \"remark . --quiet --frail\",\n    \"lint:mdx:fix\": \"remark . -o --quiet\",\n    \"spellcheck:lint\": \"cspell lint \\\"**/*.mdx\\\"\",\n    \"spellcheck:fix\": \"cspell --words-only --unique \\\"**/*.mdx\\\" | sort --ignore-case | uniq\"\n  },\n  \"remarkConfig\": {\n    \"settings\": {\n      \"emphasis\": \"*\",\n      \"strong\": \"*\"\n    },\n    \"plugins\": [\n      \"remark-frontmatter\",\n      \"remark-preset-lint-consistent\",\n      \"remark-preset-lint-recommended\",\n      \"remark-gfm\",\n      [\n        \"remark-mdx\",\n        {\n          \"commonmark\": true,\n          \"extensions\": [\n            \".mdx\"\n          ],\n          \"jsx\": true\n        }\n      ],\n      \"remark-lint-frontmatter-schema\",\n      \"remark-lint-heading-style\",\n      \"remark-lint-list-item-indent\",\n      \"remark-lint-table-cell-padding\",\n      \"remark-lint-table-pipe-alignment\",\n      \"remark-lint-table-pipes\",\n      \"remark-lint-unordered-list-marker-style\"\n    ]\n  },\n  \"dependencies\": {\n    \"clsx\": \"2.1.1\",\n    \"next\": \"15.5.10\",\n    \"next-sitemap\": \"4.2.3\",\n    \"next-themes\": \"0.4.6\",\n    \"nextra\": \"2.13.4\",\n    \"nextra-theme-docs\": \"2.13.4\",\n    \"react\": \"18.3.1\",\n    \"react-dom\": \"18.3.1\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"3.3.1\",\n    \"@eslint/js\": \"9.32.0\",\n    \"@types/node\": \"24.1.0\",\n    \"@types/react\": \"18.3.12\",\n    \"@types/react-dom\": \"18.3.1\",\n    \"autoprefixer\": \"10.4.21\",\n    \"cspell\": \"9.2.0\",\n    \"eslint\": \"9.32.0\",\n    \"eslint-config-next\": \"15.5.10\",\n    \"eslint-config-prettier\": \"10.1.8\",\n    \"eslint-plugin-import\": \"2.32.0\",\n    \"eslint-plugin-mdx\": \"3.6.2\",\n    \"eslint-plugin-simple-import-sort\": \"12.1.1\",\n    \"mdx\": \"0.3.1\",\n    \"postcss\": \"8.5.6\",\n    \"prettier\": \"3.6.2\",\n    \"remark\": \"15.0.1\",\n    \"remark-cli\": \"12.0.1\",\n    \"remark-code-import\": \"1.2.0\",\n    \"remark-frontmatter\": \"5.0.0\",\n    \"remark-gfm\": \"4.0.1\",\n    \"remark-lint-frontmatter-schema\": \"3.15.4\",\n    \"remark-lint-heading-style\": \"4.0.1\",\n    \"remark-lint-list-item-indent\": \"4.0.1\",\n    \"remark-lint-table-cell-padding\": \"5.1.1\",\n    \"remark-lint-table-pipe-alignment\": \"4.1.1\",\n    \"remark-lint-table-pipes\": \"5.0.1\",\n    \"remark-lint-unordered-list-marker-style\": \"4.0.1\",\n    \"remark-mdx\": \"3.1.0\",\n    \"remark-preset-lint-consistent\": \"6.0.1\",\n    \"remark-preset-lint-recommended\": \"7.0.1\",\n    \"tailwindcss\": \"3.4.17\",\n    \"typescript\": \"5.8.3\"\n  }\n}\n"
  },
  {
    "path": "postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "src/components/AddNetworkButton.tsx",
    "content": "import { CheckIcon } from \"@/icons/Check\";\nimport { ConnectedPulse } from \"@/icons/ConnectedPulse\";\nimport {\n  networkParams,\n  NetworkType,\n  useNetwork,\n  UseNetworkResponse,\n} from \"@/utils/networks\";\n\nimport { Button } from \"./Button\";\n\ninterface AddNetworkButtonProps {\n  network: NetworkType;\n  heading: string;\n}\n\nexport const AddNetworkButton = ({\n  network,\n  heading,\n}: AddNetworkButtonProps) => {\n  const { isWalletInstalled, isAdded, isSelected, addNetwork, selectNetwork } =\n    useNetwork(network);\n\n  return (\n    <div className=\"h-36\">\n      <div className=\"flex flex-col gap-2\">\n        <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\">\n          <span>{heading}</span>\n          {isSelected && <ConnectedPulse className=\"size-6\" />}\n          <a\n            href=\"#mainnet\"\n            id=\"mainnet\"\n            className=\"subheading-anchor\"\n            aria-label=\"Permalink for this section\"\n          ></a>\n        </h3>\n        <AddNetworkButtonContent\n          isWalletInstalled={isWalletInstalled}\n          isAdded={isAdded}\n          isSelected={isSelected}\n          addNetwork={addNetwork}\n          selectNetwork={selectNetwork}\n          network={network}\n        />\n      </div>\n    </div>\n  );\n};\nconst AddNetworkButtonContent = ({\n  isWalletInstalled,\n  isAdded,\n  isSelected,\n  addNetwork,\n  selectNetwork,\n  network,\n}: UseNetworkResponse & { network: NetworkType }) => {\n  if (!isWalletInstalled) {\n    return <p>No wallet connected</p>;\n  }\n\n  if (isAdded && isSelected) {\n    return (\n      <span className=\"text-green-500 font-bold flex gap-1 items-center\">\n        <span>Network added & selected.</span>\n      </span>\n    );\n  }\n\n  if (isAdded) {\n    return (\n      <span className=\"text-green-500 font-bold flex flex-col gap-1\">\n        <p>Network added.</p>\n        <p\n          onClick={selectNetwork}\n          className=\"underline hover:cursor-pointer hover:opacity-90\"\n        >\n          Click here to select it.\n        </p>\n      </span>\n    );\n  }\n\n  return (\n    <Button variant=\"primary\" onClick={addNetwork} className=\"w-60 mt-2\">\n      Add {networkParams[network].chainName}\n    </Button>\n  );\n};\n"
  },
  {
    "path": "src/components/BlockExplorersContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport BlockExplorersContent from \"@/content/shared/block-explorers-content.mdx\";\n\nexport function BlockExplorersContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <BlockExplorersContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/BridgesContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport BridgesContent from \"@/content/shared/bridges-content.mdx\";\n\nexport function BridgesContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <BridgesContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/Button.tsx",
    "content": "import { PropsWithChildren } from \"react\";\nimport clsx from \"clsx\";\n\ninterface ButtonProps {\n  variant: \"primary\" | \"secondary\";\n  onClick?: () => void;\n  className?: string;\n}\n\nexport const Button: React.FC<PropsWithChildren<ButtonProps>> = ({\n  children,\n  variant,\n  onClick,\n  className,\n}) => {\n  return (\n    <button\n      className={clsx(\n        \"font-bold py-5 px-8 inline-flex items-center justify-center transition-all rounded-full text-xl backdrop-blur-[32px]\",\n        {\n          \"text-magic-white bg-magic-purple hover:opacity-90 shadow-[0px_3px_84px_-10px_rgba(63,107,175,0.5)]\":\n            variant === \"primary\",\n          \"text-magic-purple bg-magic-semi-deep-purple/15 shadow-[0px_3px_84px_-10px_rgba(63,107,175,0.5)]\":\n            variant === \"secondary\",\n        },\n        className\n      )}\n      onClick={onClick}\n    >\n      {children}\n    </button>\n  );\n};\n"
  },
  {
    "path": "src/components/CommunityContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport CommunityContent from \"@/content/shared/community-content.mdx\";\n\nexport function CommunityContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <CommunityContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/CopyButton.tsx",
    "content": "\"use client\";\n\nimport { useState } from \"react\";\n\ninterface CopyButtonProps {\n  text: string;\n  className?: string;\n}\n\nexport default function CopyButton({ text, className = \"\" }: CopyButtonProps) {\n  const [copied, setCopied] = useState(false);\n\n  const handleCopy = async () => {\n    try {\n      await navigator.clipboard.writeText(text);\n      setCopied(true);\n      setTimeout(() => setCopied(false), 2000);\n    } catch (err) {\n      console.error(\"Failed to copy:\", err);\n    }\n  };\n\n  return (\n    <button\n      onClick={handleCopy}\n      className={`ml-2 p-1 rounded transition-colors h-[24px] min-w-[24px] flex items-center justify-center text-xs ${\n        copied\n          ? \"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-100\"\n          : \"bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-500 dark:text-gray-400\"\n      } ${className}`}\n      aria-label={copied ? \"Copied!\" : \"Copy to clipboard\"}\n    >\n      {copied ? (\n        <span className=\"px-1\">Copied!</span>\n      ) : (\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"16\"\n          height=\"16\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        >\n          <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n          <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n        </svg>\n      )}\n    </button>\n  );\n}\n"
  },
  {
    "path": "src/components/CopyableCode.tsx",
    "content": "\"use client\";\n\nimport CopyButton from \"./CopyButton\";\n\ninterface CopyableCodeProps {\n  code: string;\n  display?: string;\n  className?: string;\n  href?: string;\n}\n\nexport default function CopyableCode({\n  code,\n  display,\n  className = \"\",\n  href,\n}: CopyableCodeProps) {\n  const CodeContent = () => (\n    <code className=\"bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-white text-sm rounded-md px-2 py-0.5\">\n      {display || code}\n    </code>\n  );\n\n  return (\n    <span className={`inline-flex items-center gap-1 ${className}`}>\n      {href ? (\n        <a\n          href={href}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"inline-flex items-center\"\n        >\n          <CodeContent />\n        </a>\n      ) : (\n        <CodeContent />\n      )}\n      <CopyButton text={code} />\n    </span>\n  );\n}\n"
  },
  {
    "path": "src/components/CrosschainContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport CrosschainContent from \"@/content/shared/crosschain-content.mdx\";\n\nexport function CrosschainContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <CrosschainContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/DownloadButton.tsx",
    "content": "import { PropsWithChildren } from \"react\";\n\nimport { DownloadIcon } from \"@/icons/Download\";\n\nimport { Button } from \"./Button\";\n\ninterface DownloadButtonProps {\n  sourceFilePath: string;\n  destinationFileName: string;\n  label: string;\n  size: string;\n}\n\nexport const DownloadButton: React.FC<\n  PropsWithChildren<DownloadButtonProps>\n> = ({ sourceFilePath, destinationFileName, label, size }) => {\n  return (\n    <Button\n      variant=\"primary\"\n      onClick={() => {\n        const link = document.createElement(\"a\");\n        link.href = sourceFilePath;\n        link.download = destinationFileName;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }}\n    >\n      <div className=\"flex items-center gap-2\">\n        <DownloadIcon />\n        <span className=\"text-sm sm:text-xl\">{label}</span>\n        <span className=\"text-sm sm:text-xl text-magic-soft-pink\">{size}</span>\n      </div>\n    </Button>\n  );\n};\n"
  },
  {
    "path": "src/components/FaucetsContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport FaucetsContent from \"@/content/shared/faucets-content.mdx\";\n\nexport function FaucetsContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <FaucetsContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/Footer.tsx",
    "content": "import { ThemeToggle } from \"./ThemeToggle\";\n\nexport const Footer = () => {\n  return (\n    <div className=\"flex flex-col items-center justify-center gap-1 py-16 border-t selection:bg-magic-white\">\n      <div className=\"px-6 mx-auto max-w-[90rem] w-full flex justify-between gap-2\">\n        <div className=\"text-sm text-gray-600\">\n          Made with 💜 by the Ink team\n        </div>\n        <div className=\"text-sm text-gray-600\">\n          <a href=\"https://inkonchain.com/en-US/privacy\" target=\"_blank\">\n            Privacy Notice\n          </a>\n        </div>\n        <div className=\"text-sm text-gray-600\">\n          <a href=\"https://inkonchain.com/en-US/terms\" target=\"_blank\">\n            Terms of Service\n          </a>\n        </div>\n        <ThemeToggle />\n      </div>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/components/Head.tsx",
    "content": "import { useRouter } from \"next/router\";\nimport { useConfig } from \"nextra-theme-docs\";\n\nexport const Head = () => {\n  const { asPath, defaultLocale, locale } = useRouter();\n  const { frontMatter } = useConfig();\n  const baseUrl = \"https://docs.inkonchain.com\";\n  const url =\n    baseUrl + (defaultLocale === locale ? asPath : `/${locale}${asPath}`);\n  const title =\n    frontMatter.title || \"Ink Docs - The Official Developer Guide for Ink\";\n  const description =\n    frontMatter.description ||\n    \"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.\";\n  const ogImage = frontMatter.image || `${baseUrl}/logo/build-the-future.png`;\n\n  return (\n    <>\n      {/* Basic Meta Tags */}\n      <meta name=\"title\" content={title} />\n      <meta name=\"description\" content={description} />\n\n      {/* Open Graph / Facebook */}\n      <meta property=\"og:type\" content=\"website\" />\n      <meta property=\"og:url\" content={url} />\n      <meta property=\"og:title\" content={title} />\n      <meta property=\"og:description\" content={description} />\n      <meta property=\"og:image\" content={ogImage} />\n      <meta property=\"og:image:width\" content=\"1080\" />\n      <meta property=\"og:image:height\" content=\"1080\" />\n      <meta property=\"og:site_name\" content=\"Ink Documentation\" />\n\n      {/* Twitter */}\n      <meta property=\"twitter:card\" content=\"summary_large_image\" />\n      <meta property=\"twitter:url\" content={url} />\n      <meta property=\"twitter:title\" content={title} />\n      <meta property=\"twitter:description\" content={description} />\n      <meta property=\"twitter:image\" content={ogImage} />\n      <meta property=\"twitter:site\" content=\"@inkonchain\" />\n      <meta property=\"twitter:creator\" content=\"@inkonchain\" />\n\n      {/* Favicon */}\n      <link rel=\"icon\" href=\"/img/icons/favicon.ico\" type=\"image/x-icon\" />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/MultisigContentWrapper.tsx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport MultisigContent from \"@/content/shared/multisig-content.mdx\";\n\nexport function MultisigContentWrapper() {\n  const components = {\n    CopyableCode,\n  };\n\n  return <MultisigContent components={components} />;\n}\n"
  },
  {
    "path": "src/components/SidebarTitleComponent.tsx",
    "content": "import clsx from \"clsx\";\nimport { useRouter } from \"next/router\";\n\ninterface SidebarTitleComponentProps {\n  title: string;\n  type: string;\n  route: string;\n}\n\nexport const SidebarTitleComponent: React.FC<SidebarTitleComponentProps> = ({\n  title,\n  type,\n  route,\n}) => {\n  const { asPath } = useRouter();\n  const isActive = route === asPath;\n\n  if (type === \"separator\") {\n    return (\n      <div className=\"font-bold text-black dark:text-magic-white\">{title}</div>\n    );\n  }\n\n  return (\n    <div\n      className={clsx(\n        \"ink-sidebar-item px-2 py-1.5 rounded-lg w-full transition-all\",\n        {\n          \"text-ink-grey-400 dark:text-magic-white dark:hover:text-ink-grey-700 hover:text-ink-grey-700 hover:bg-ink-grey-100\":\n            !isActive,\n          \"bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-soft-pink\":\n            isActive,\n        }\n      )}\n    >\n      {title}\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/components/TestnetDisclaimer.tsx",
    "content": "import { Callout } from \"nextra/components\";\n\nexport const TestnetDisclaimer = () => {\n  return (\n    <Callout type=\"info\" emoji=\"ℹ️\">\n      This guide currently references Ink Sepolia (testnet) however, it can be\n      used for Ink mainnet as well. Please be sure to change the necessary\n      parameters based on your network of choice.\n    </Callout>\n  );\n};\n"
  },
  {
    "path": "src/components/ThemeToggle.tsx",
    "content": "import { useEffect, useState } from \"react\";\nimport { useTheme } from \"nextra-theme-docs\";\n\nimport { MoonIcon } from \"../icons/Moon\";\nimport { SunIcon } from \"../icons/Sun\";\n\nexport const ThemeToggle = () => {\n  const { resolvedTheme, setTheme } = useTheme();\n  const [isMounted, setIsMounted] = useState(false);\n\n  const onToggleTheme = () => {\n    if (resolvedTheme == \"dark\") {\n      setTheme(\"light\");\n    } else {\n      setTheme(\"dark\");\n    }\n  };\n\n  /**\n   * This is not ideal, but it's the best solution we have to avoid rendering the button\n   * with the wrong color\n   */\n  useEffect(() => {\n    setIsMounted(true);\n  }, [setIsMounted]);\n\n  if (!isMounted) {\n    return null;\n  }\n\n  return (\n    <button className=\"w-6 h-6 ml-2\" type=\"button\" onClick={onToggleTheme}>\n      {resolvedTheme === \"light\" ? (\n        <SunIcon className=\"w-6 h-6 text-magic-black\" />\n      ) : (\n        <MoonIcon className=\"w-6 h-6 text-white\" />\n      )}\n    </button>\n  );\n};\n"
  },
  {
    "path": "src/components/Toc.tsx",
    "content": "import Link from \"next/link\";\n\nimport { PencilIcon } from \"@/icons/Pencil\";\nimport { ThumbUpIcon } from \"@/icons/ThumbUp\";\nimport { URLS } from \"@/utils/urls\";\n\ninterface Heading {\n  id: string;\n  depth: number;\n  value: string;\n}\n\ninterface TocProps {\n  headings: Heading[];\n}\n\nexport const Toc: React.FC<TocProps> = ({ headings }) => {\n  return (\n    <div className=\"flex flex-col items-start justify-start py-5 sticky top-14\">\n      {headings.length > 0 && (\n        <div className=\"flex flex-col gap-2 border-b pb-4 mb-6\">\n          <h5 className=\"font-bold text-magic-black dark:text-magic-white\">\n            On this page\n          </h5>\n\n          <ul>\n            {headings.map(({ id, value }) => (\n              <li key={id} className=\"group mb-2\">\n                <Link className=\"text-sm toc-link\" href={`#${id}`}>\n                  {value}\n                </Link>\n              </li>\n            ))}\n          </ul>\n        </div>\n      )}\n      <div className=\"flex flex-col gap-2\">\n        <Link\n          href={URLS.editDocsOnGithub}\n          className=\"group text-xs flex items-center gap-1\"\n        >\n          <PencilIcon className=\"size-4 toc-link\" />\n          <span className=\"toc-link\">Edit this page on GitHub</span>\n        </Link>\n      </div>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/content/shared/_badges.mdx",
    "content": "# Badges\n\n## Welcome To Ink\n\n> Awarded for bridging Ethereum to Ink.\n\nTo bridge Ethereum, you can use the `L1StandardBridge` on the sepolia network crafted for Ink.\n\nThere are two ways to do it:\n\n### Gelato Bridge app\n\nThe app provides a very simple UI to deposit or withdraw SepoliaETH from and to Sepolia Ink.\n\nHere is the app: [https://testnet-bridge.gelato.network/bridge/ink-sepolia](https://testnet-bridge.gelato.network/bridge/ink-sepolia)\n\nConnect your wallet, select the amount to transfer, and that's it!\n\n### Directly calling the contract\n\nYou can call the `bridgeETH` method in the contract here: [https://sepolia.etherscan.io/address/0xC0d337f71aD19a8f17a1b297cDb3a86c5EEf9Eec#writeProxyContract](https://sepolia.etherscan.io/address/0xC0d337f71aD19a8f17a1b297cDb3a86c5EEf9Eec#writeProxyContract)\n\nFor instance, if you want to bridge 1 Sepolia ETH into 1 Sepolia \"Ink\" ETH:\n\n1. Connect your Wallet using the \"Connect to Wallet\" button\n2. Expand the `bridgeETH` method and enter `bridgeETH: 1`\n3. Enter `_minGasLimit: 1000` (or whatever suits you)\n4. Enter `_extraData: 0x00`\n5. Click \"Write\", then validate the transaction in MetaMask, then sign it to complete the transaction.\n\n## Wrapped ETH\n\n> Awarded for wrapping Ethereum into WETH.\n\nTo 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)\n\n1. Connect your Wallet using the button\n2. Expand the `deposit` method and enter `Send native ETH: 10 000 000 000 000 000`.\n\n* This is equivalent to 0.01 ETH, adjust as needed\n\n3. Click \"Write\", then validate the transaction in MetaMask, then sign it to complete the transaction.\n\nIf you want the token to appear in MetaMask, click on the MetaMask button at the top of the page\n\n## ERC20 Interactions\n\n> Awarded for minting, sending, and receiving ERC20 tokens.\n\n*coming soon*\n\n## NFT Interactions\n\n> Awarded for minting, sending, and receiving NFTs.\n\n*coming soon*\n\n## Faucet User\n\n> Awarded for using the Ink faucet.\n\nGet here: [https://mystery-faucet.inkonchain.com/](https://mystery-faucet.inkonchain.com/)\n\nEnter your address, enter the captcha, that's it!\n\n## Smart Contract Deployer\n\n> Awarded for deploying a smart contract.\n\n*coming soon*\n"
  },
  {
    "path": "src/content/shared/block-explorers-content.mdx",
    "content": "## Blockscout\n\nBlockscout 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.\n\n###### Supported Networks\n\n* Ink Sepolia: [https://explorer-sepolia.inkonchain.com/](https://explorer-sepolia.inkonchain.com/)\n  * API: [https://explorer-sepolia.inkonchain.com/api](https://explorer-sepolia.inkonchain.com/api)\n\n###### Verifying Smart Contract Code on Blockscout\n\n* Please see [this tutorial](/build/tutorials/verify-smart-contract)\n\n## Routescan\n\nRoutescan is a unified explorer for over 54 blockchains.\n\n###### Supported Networks\n\n* Ink Sepolia: [https://sepolia.inkonscan.xyz/](https://sepolia.inkonscan.xyz/)\n  * API: [https://sepolia.inkonscan.xyz/documentation/api-swagger](https://sepolia.inkonscan.xyz/documentation/api-swagger)\n"
  },
  {
    "path": "src/content/shared/bridges-content.mdx",
    "content": "import { Callout } from 'nextra/components'\n\n# Bridges\nThese bridges provide different interfaces to the canonical smart contracts that facilitate migrating ETH from one chain to another.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\nTransaction times vary based on network congestion and gas fees. Please ensure you have enough ETH in your wallet to cover transaction fees.\n</Callout>\n\n##### How to use\n1. Visit the bridge and connect your wallet.\n2. Choose Sepolia as your source and Ink as the destination.\n3. Input the amount of assets you want to bridge.\n4. Confirm and sign the transaction with your wallet.\n5. Once the bridging is complete, the assets will appear in your wallet on Ink.\n\n## Gelato bridge\nBridge: [https://bridge-gel-sepolia.inkonchain.com/](https://bridge-gel-sepolia.inkonchain.com/)\n\n## Ink Bridge\nBridge: [https://inkonchain.com/bridge](https://inkonchain.com/bridge)\n\n## Brid.gg\nBridge: [https://testnet.brid.gg/](https://testnet.brid.gg/)\n\n## Superbridge\nBridge: [https://superbridge.app/](https://superbridge.app/) (enable testnet in settings)\n"
  },
  {
    "path": "src/content/shared/community-content.mdx",
    "content": "import { URLS } from \"@/utils/urls\";\n\n# Get Support\n\nJoin the Ink community, vibe with fellow developers and get support:\n\n- Join the Ink Telegram for announcements: <a href=\"https://t.me/inkonchain\" target=\"_blank\" rel=\"noreferrer\">Join Telegram</a>\n"
  },
  {
    "path": "src/content/shared/crosschain-content.mdx",
    "content": "# Crosschain Infrastructure\n\n## Wormhole\n\nWormhole is an interoperability platform powering multichain apps and bridges.\n\n* Wormhole currently supports Ink Sepolia.\n"
  },
  {
    "path": "src/content/shared/faucets-content.mdx",
    "content": "# Faucets\n\nGet Sepolia ETH on Ink from these faucets below! Alternatively, you can [bridge](https://inkonchain.com/bridge) testnet funds to Ink.\n\n## [Ink](https://inkonchain.com/faucet)\n\nOur in-house faucet provides a quick and easy way to acquire testnet ETH.\n\n## [Optimism Superchain Faucet](https://console.optimism.io/faucet)\n\nThe 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.\n\n## [QuickNode](https://faucet.quicknode.com/drip)\n\nUse QuickNode Faucet to claim Ink Sepolia for testnet ETH for free - one drip per network every 12 hours.\n\n## [Gelato](https://faucet-gel-sepolia.inkonchain.com)\n\nGelato's Faucet uses Cloudflare authentication and drops up to 0.3 Ink Sepolia ETH every 12 hours.\n\n## [Tenderly](https://tenderly.co/?mtm_campaign=ext-docs&mtm_kwd=ink)\n\nTenderly'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.\n"
  },
  {
    "path": "src/content/shared/multisig-content.mdx",
    "content": "# Multisig\n\n## Safe\n\nInk 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.\n\nUsing Safe you can:\n\n* Manage customizable non-custodial wallets supporting multisignatures for individuals and teams\n* Perform financial management of onchain assets incl. ERC20s, ERC721s and ETH\n* Access your safe using Web, Mobile and Desktop apps.\n* Safe also features access to DeFi, open source code, batch transactions, modular extensions, gasless signatures and more.\n\n**Supported Networks**\n\n* [Ink Mainnet](https://app.safe.global/new-safe/load?chain=ink)\n* [Ink Sepolia](https://safe.optimism.io/welcome/accounts?chain=ink-sepolia)\n"
  },
  {
    "path": "src/fonts.ts",
    "content": "import { Inter, Plus_Jakarta_Sans } from \"next/font/google\";\n\nexport const inter = Inter({\n  subsets: [\"latin\"],\n  variable: \"--font-inter\",\n  display: \"swap\",\n});\n\nexport const plus_jakarta_sans = Plus_Jakarta_Sans({\n  subsets: [\"latin\"],\n  variable: \"--font-plus-jakarta-sans\",\n  display: \"swap\",\n});\n"
  },
  {
    "path": "src/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer utilities {\n  body {\n    font-family:\n      var(--font-plus-jakarta-sans),\n      var(--font-inter),\n      -apple-system,\n      BlinkMacSystemFont,\n      \"Segoe UI\",\n      Helvetica,\n      \"Apple Color Emoji\",\n      Arial,\n      sans-serif,\n      \"Segoe UI Emoji\",\n      \"Segoe UI Symbol\";\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n}\n\n@layer base {\n  h1,\n  h2,\n  h3,\n  h4 {\n    @apply !text-magic-deep-purple dark:!text-magic-white;\n  }\n\n  a:not(.nextra-sidebar-container a):not(nav a):not(.toc-link) {\n    @apply !text-magic-purple dark:!text-magic-soft-pink !underline hover:!text-magic-purple/80 dark:hover:!text-magic-soft-pink/80;\n  }\n\n  nav > a {\n    @apply !text-ink-grey-400 dark:!text-magic-white dark:hover:!text-ink-grey-400 hover:!text-ink-grey-700 !no-underline;\n  }\n\n  nav > a > svg {\n    @apply !fill-magic-black dark:!fill-magic-white;\n  }\n\n  nav {\n    @apply bg-white dark:bg-magic-black;\n  }\n\n  pre {\n    @apply !bg-magic-semi-deep-purple/15;\n  }\n\n  .toc-link {\n    @apply cursor-pointer !text-ink-grey-400 dark:!text-magic-white group-hover:!text-ink-grey-700 dark:group-hover:!text-ink-grey-700;\n  }\n\n  /* We need to override the underline for nav links and sidebar items */\n  nav > a,\n  a:has(div.ink-sidebar-item),\n  .toc-link {\n    @apply no-underline;\n  }\n}\n\n/* Some custom hacks to override some issues with Nextra */\n.nextra-nav-container-blur {\n  display: none !important ;\n}\n\n/* Remove the padding from the sidebar link, so that we can pply our own style */\na:has(div.ink-sidebar-item) {\n  padding: 0 !important;\n  background-color: transparent !important;\n}\n\n/* Target both the banner container and its text */\n.nextra-banner-container {\n  @apply text-white !important;\n}\n\n.nextra-banner-container a {\n  @apply text-white hover:text-white/80 no-underline !important;\n}\n\n/* Override the purple link styles specifically for the banner */\n.nextra-banner-container\n  a:not(.nextra-sidebar-container a):not(nav a):not(.toc-link) {\n  @apply text-white hover:text-white/80 underline !important;\n}\n\n/* Ensure all text in banner is white, not just links */\n.nextra-banner-container {\n  @apply text-white !important;\n}\n"
  },
  {
    "path": "src/icons/Check.tsx",
    "content": "export const CheckIcon: React.FC<{ className?: string }> = ({\n  className = \"size-6\",\n}) => {\n  return (\n    <svg\n      className={className}\n      fill=\"none\"\n      stroke=\"currentColor\"\n      viewBox=\"0 0 24 24\"\n    >\n      <path\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth={2}\n        d=\"M5 13l4 4L19 7\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/icons/ConnectedPulse.tsx",
    "content": "import clsx from \"clsx\";\n\nexport const ConnectedPulse: React.FC<{ className?: string }> = ({\n  className,\n}) => {\n  return (\n    <span className={clsx(\"relative flex h-3 w-3\", className)}>\n      <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75\"></span>\n      <span className=\"relative inline-flex rounded-full h-3 w-3 bg-green-500\"></span>\n    </span>\n  );\n};\n"
  },
  {
    "path": "src/icons/Download.tsx",
    "content": "interface PencilProps {\n  className?: string;\n}\n\nexport const DownloadIcon: React.FC<PencilProps> = ({\n  className = \"size-6\",\n}) => {\n  return (\n    <svg\n      className={className}\n      width=\"24\"\n      height=\"25\"\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        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\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/icons/InkLogo.tsx",
    "content": "import Image from \"next/image\";\nimport { useTheme } from \"nextra-theme-docs\";\n\ninterface InkLogoProps {\n  className?: string;\n}\n\nexport const InkLogo: React.FC<InkLogoProps> = ({\n  className = \"text-magic-purple\",\n}) => {\n  const { resolvedTheme } = useTheme();\n  const logoSrc =\n    resolvedTheme === \"dark\"\n      ? \"/logo/ink-logo-dark.svg\"\n      : \"/logo/ink-logo-light.svg\";\n\n  return (\n    <Image\n      className={className}\n      src={logoSrc}\n      alt=\"Ink logo\"\n      width={85}\n      height={28}\n      priority\n    />\n  );\n};\n"
  },
  {
    "path": "src/icons/Moon.tsx",
    "content": "interface MoonIconProps {\n  className?: string;\n}\n\nexport const MoonIcon: React.FC<MoonIconProps> = ({\n  className = \"w-6 h-6\",\n}) => {\n  return (\n    <svg\n      className={className}\n      viewBox=\"0 0 24 24\"\n      fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        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\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/icons/Pencil.tsx",
    "content": "interface PencilProps {\n  className?: string;\n}\n\nexport const PencilIcon: React.FC<PencilProps> = ({ className = \"size-6\" }) => {\n  return (\n    <svg\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill=\"none\"\n      viewBox=\"0 0 24 24\"\n      strokeWidth={1.5}\n      stroke=\"currentColor\"\n    >\n      <path\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        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\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/icons/Sun.tsx",
    "content": "interface SunIconProps {\n  className?: string;\n}\n\nexport const SunIcon: React.FC<SunIconProps> = ({ className = \"w-6 h-6\" }) => {\n  return (\n    <svg\n      className={className}\n      viewBox=\"0 0 24 24\"\n      fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        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\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/icons/ThumbUp.tsx",
    "content": "interface ThumbUpProps {\n  className?: string;\n}\n\nexport const ThumbUpIcon: React.FC<ThumbUpProps> = ({\n  className = \"size-6\",\n}) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill=\"none\"\n      viewBox=\"0 0 24 24\"\n      strokeWidth={1.5}\n      stroke=\"currentColor\"\n      className={className}\n    >\n      <path\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        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\"\n      />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "src/pages/404.mdx",
    "content": "# Page Not Found\n\n#### Return [home](/).\n\n#### Please help by [submitting an issue](https://github.com/inkonchain/docs/issues/new) for the broken link. 💜\n"
  },
  {
    "path": "src/pages/500.mdx",
    "content": "# Unexpected Error\n\n![500 Error Warning.](/img/icons/500-page.svg)\n\n## Something isn't quite right. Let's start again on the [homepage](index).\n\n#### Please help by [submitting an issue](https://github.com/inkonchain/docs/issues/new) for the broken link. ❤️\n\n# CHANGE\n\n\\n\n"
  },
  {
    "path": "src/pages/_app.mdx",
    "content": "import { ThemeProvider } from \"next-themes\";\nimport Script from \"next/script\";\nimport { inter, plus_jakarta_sans } from \"../fonts\";\nimport \"../globals.css\";\n\nexport default function App({ Component, pageProps }) {\n  return (\n    <ThemeProvider attribute=\"class\">\n      <Script\n        id=\"schema-markup\"\n        type=\"application/ld+json\"\n        strategy=\"beforeInteractive\"\n        dangerouslySetInnerHTML={{\n          __html: JSON.stringify({\n            \"@context\": \"https://schema.org\",\n            \"@type\": \"WebSite\",\n            name: \"Ink Documentation\",\n            description:\n              \"Comprehensive documentation for Ink, a Layer 2 (L2) blockchain built on Optimism's Superchain\",\n            url: \"https://docs.inkonchain.com\",\n            publisher: {\n              \"@type\": \"Organization\",\n              name: \"Ink\",\n              url: \"https://inkonchain.com\",\n              sameAs: [\n                \"https://x.com/inkonchain\",\n                \"https://github.com/inkonchain\",\n                \"https://t.me/inkonchain\",\n              ],\n            },\n          }),\n        }}\n      />\n      <div\n        className={`${inter.variable} ${plus_jakarta_sans.variable} font-sans`}\n      >\n        <div className=\"bg-white dark:bg-magic-black\">\n          <Component {...pageProps} />\n        </div>\n      </div>\n    </ThemeProvider>\n  );\n}\n"
  },
  {
    "path": "src/pages/_meta.json",
    "content": "{\n  \"index\": {\n    \"title\": \"Getting Started\",\n    \"display\": \"hidden\",\n    \"theme\": {\n      \"breadcrumb\": false,\n      \"footer\": true,\n      \"sidebar\": true,\n      \"toc\": true,\n      \"pagination\": false\n    }\n  },\n  \"404\": {\n    \"title\": \"404\",\n    \"display\": \"hidden\",\n    \"theme\": {\n      \"layout\": \"full\",\n      \"breadcrumb\": false,\n      \"footer\": true,\n      \"sidebar\": true,\n      \"toc\": false,\n      \"pagination\": false\n    }\n  },\n  \"500\": {\n    \"title\": \"500\",\n    \"display\": \"hidden\",\n    \"theme\": {\n      \"layout\": \"full\",\n      \"breadcrumb\": false,\n      \"footer\": true,\n      \"sidebar\": true,\n      \"toc\": false,\n      \"pagination\": false\n    }\n  },\n  \"header_status\": {\n    \"title\": \"Status Page\",\n    \"type\": \"page\",\n    \"href\": \"https://status.inkonchain.com/\",\n    \"newWindow\": true\n  },\n  \"header_faucet\": {\n    \"title\": \"Faucets\",\n    \"type\": \"page\",\n    \"href\": \"/tools/faucets\"\n  },\n  \"--- GENERAL\": {\n    \"title\": \"General\",\n    \"type\": \"separator\"\n  },\n  \"general\": {\n    \"title\": \"General\",\n    \"display\": \"children\"\n  },\n  \"+++ Build on Ink\": {\n    \"title\": \"\",\n    \"type\": \"separator\"\n  },\n  \"--- Build On Ink\": {\n    \"title\": \"Build On Ink\",\n    \"type\": \"separator\"\n  },\n  \"build\": {\n    \"title\": \"Build on Ink\",\n    \"display\": \"children\"\n  },\n  \"+++ Ink Builder Program\": {\n    \"title\": \"\",\n    \"type\": \"separator\"\n  },\n  \"--- Ink Builder Program\": {\n    \"title\": \"Ink Builder Program\",\n    \"type\": \"separator\"\n  },\n  \"ink-builder-program\": {\n    \"title\": \"Ink Builder Program\",\n    \"display\": \"children\"\n  },\n  \"+++ Tools\": {\n    \"title\": \"\",\n    \"type\": \"separator\"\n  },\n  \"--- Tools\": {\n    \"title\": \"Tools\",\n    \"type\": \"separator\"\n  },\n  \"tools\": {\n    \"title\": \"Tools\",\n    \"display\": \"children\"\n  },\n  \"+++ Useful Information\": {\n    \"title\": \"\",\n    \"type\": \"separator\"\n  },\n  \"--- Useful Information\": {\n    \"title\": \"Useful Information\",\n    \"type\": \"separator\"\n  },\n  \"useful-information\": {\n    \"title\": \"Useful Information\",\n    \"display\": \"children\"\n  },\n  \"+++ Work with Ink\": {\n    \"title\": \"\",\n    \"type\": \"separator\"\n  },\n  \"--- Work with Ink\": {\n    \"title\": \"Work with Ink\",\n    \"type\": \"separator\"\n  },\n  \"work-with-ink\": {\n    \"title\": \"Work with Ink\",\n    \"display\": \"children\",\n    \"theme\": {\n      \"pagination\": true\n    }\n  },\n  \"---\": {\n    \"type\": \"separator\"\n  },\n  \"faq\": {\n    \"title\": \"FAQ\"\n  },\n  \"status\": {\n    \"title\": \"Status Page\",\n    \"href\": \"https://status.inkonchain.com/\",\n    \"newWindow\": true,\n    \"theme\": {\n      \"pagination\": false\n    }\n  }\n}"
  },
  {
    "path": "src/pages/build/_meta.json",
    "content": "{\n  \"getting-started\": \"Getting Started\",\n  \"onchain-clients\": \"Onchain Clients\",\n  \"run-an-ink-node\": {\n    \"title\": \"Running Ink Nodes\",\n    \"href\": \"https://github.com/inkonchain/node\",\n    \"newWindow\": true\n  },\n  \"transaction-fees\": \"Transaction Fees\",\n  \"ink-kit\": \"Ink Kit (archived)\",\n  \"verify\": \"Kraken Verify\",\n  \"tutorials\": \"Tutorials\"\n}\n"
  },
  {
    "path": "src/pages/build/getting-started.mdx",
    "content": "import { Callout, Checkbox } from \"nextra/components\";\n\n# What do I Need to Start Developing on Ink?\n\nTo start developing on Ink, you'll need:\n\n- [ ] 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.\n\n- [ ] A wallet that holds ETH such as [Kraken Wallet](https://www.kraken.com/wallet), [MetaMask](https://metamask.io/), or [Rainbow](https://rainbow.me/).\n\n- We suggest having at least 0.01 ETH for standard deployments on Ink.\n- You can request Ink Sepolia ETH using our [Faucets](/tools/faucets).\n\n- [ ] We recommend using a development framework like [Foundry](https://github.com/foundry-rs/foundry) or [Hardhat](https://hardhat.org/)\n\n- [Guide to deploy a contract using Foundry](/build/tutorials/deploying-a-smart-contract/foundry)\n- [Guide to deploy a contract using Hardhat](/build/tutorials/deploying-a-smart-contract/hardhat)\n- [Guide to deploy a contract using Remix](/build/tutorials/deploying-a-smart-contract/remix)\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  Try out InkGPT! Blaze through the docs and get deployed in no time with our\n  new AI assistant.\n</Callout>\n"
  },
  {
    "path": "src/pages/build/ink-kit.mdx",
    "content": "---\ntitle: Ink Kit\ndescription: A delightful onchain-focused SDK with ready-to-use components and themes\n---\n\nimport Image from 'next/image'\n\n<div className=\"w-full rounded-xl overflow-hidden my-8\">\n  <Image\n    src=\"/images/banner.webp\"\n    alt=\"Ink Kit Banner\"\n    width={1200}\n    height={400}\n    priority\n  />\n</div>\n\n# Welcome to Ink Kit\n\n<div className=\"p-4 rounded-lg border-2 border-amber-500 bg-amber-50 dark:bg-amber-950 dark:border-amber-600 my-6\">\n  <div className=\"font-semibold text-amber-900 dark:text-amber-100 mb-2\">⚠️ This project is archived and no longer maintained</div>\n  <div className=\"text-amber-800 dark:text-amber-200\">\n    Ink Kit is no longer being actively developed or maintained. We recommend using the modern alternatives listed below for your projects.\n  </div>\n</div>\n\nInk Kit is an onchain-focused SDK that delivers a delightful developer experience with ready-to-use app layout templates, themes, and magical animated components.\n\n## Install\n\n```bash\nnpm install @inkonchain/ink-kit\n# or\npnpm install @inkonchain/ink-kit\n```\n\n## Usage\n\n```tsx\n// Import styles first at the root of your project (required)\nimport \"@inkonchain/ink-kit/style.css\";\n```\n\n```tsx\n// Import components as needed\nimport { Button } from \"@inkonchain/ink-kit\";\n\nfunction App() {\n  return (\n    <div>\n      <Button onClick={() => {}} size=\"md\" variant=\"secondary\">\n        Ship It\n      </Button>\n    </div>\n  );\n}\n```\n\nNote: 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.\n\n## Key Features\n\n- 🎨 **Customizable app layout templates**\n- ✨ **Magical animated components**\n- 🎭 **Vibrant themes**\n- ⛓️ **Onchain-focused development**\n- 🚀 **Efficient developer experience**\n- 📱 **Polished, engaging interfaces**\n\n## Theming\n\nBy default, Ink Kit provides a couple of themes already in the stylesheet:\n\n- Light (`light-theme`)\n- Dark (`dark-theme`)\n- Contrast (`contrast-theme`)\n- Neo (`neo-theme`)\n- Morpheus (`morpheus-theme`)\n\nTo specify which theme to use, add the `ink:THEME_ID` to your document root:\n\n```tsx\n<html class=\"ink:dark-theme\">\n  ...\n```\n\nIf you want to programmatically set this value, you can use the `useInkThemeClass`:\n\n```tsx\nconst theme = getMyCurrentTheme();\nuseInkThemeClass(theme === \"light\" ? \"ink:neo-theme\" : \"ink:dark-theme\");\n```\n\n### Custom Theme\n\nTo create a custom theme, you can override CSS variables:\n\n```css\n:root {\n  --ink-button-primary: rgb(10, 55, 10);\n  ...\n}\n```\n\nTo 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).\n\n## Resources\n\n- **Documentation**: Visit our [Storybook](https://ink-kit.inkonchain.com/) (archived)\n- **GitHub repository**: [github.com/inkonchain/ink-kit](https://github.com/inkonchain/ink-kit) (archived)\n\n## Recommended Modern Alternatives\n\nSince Ink Kit is no longer maintained, we recommend the following actively maintained alternatives for your projects:\n\n### UI Component Libraries\n\n- **[shadcn/ui](https://ui.shadcn.com/)** - Beautifully designed components built with Radix UI and Tailwind CSS. Copy and paste components directly into your project.\n- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible components for building high‑quality design systems and web apps.\n- **[Chakra UI](https://chakra-ui.com/)** - Simple, modular and accessible component library that gives you the building blocks for your React applications.\n- **[Mantine](https://mantine.dev/)** - A fully featured React components library with 100+ customizable components.\n\n### Wallet Connectivity (Onchain-focused)\n\n- **[RainbowKit](https://www.rainbowkit.com/)** - The best way to connect a wallet. Designed for everyone. Built for developers.\n- **[ConnectKit](https://docs.family.co/connectkit)** - A powerful React component library for connecting wallets to your dapp, built on top of wagmi.\n\nThese alternatives are actively maintained, have strong communities, and offer excellent documentation and developer experiences.\n"
  },
  {
    "path": "src/pages/build/onchain-clients.mdx",
    "content": "# Onchain Clients\n\n## Ethers.js - Instructions for Connecting to Ink\n\nEthers.js documentation: [https://docs.ethers.org/v6/](https://docs.ethers.org/v6/)\n\nTo connect to Ink by instantiating a new `ethers.js` `JsonRpcProvider` object with an RPC URL of Ink's testnet, follow the steps below:\n\n1. **Install ethers.js**: Ensure you have `ethers.js` v6 installed in your project. If not, you can install it using npm or yarn.\n\n   ```bash\n   npm install ethers@6\n   ```\n\n   or\n\n   ```bash\n   yarn add ethers@6\n   ```\n\n2. **Instantiate a JsonRpcProvider**: Use the following code snippet to create a new `JsonRpcProvider` object with the RPC URL of Ink's testnet.\n\n   ```javascript\n   import { ethers } from 'ethers';\n\n   const rpcUrl = 'https://rpc-gel-sepolia.inkonchain.com';\n   const provider = new ethers.JsonRpcProvider(rpcUrl, 763373);\n   ```\n\n3. **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.\n\n   ```javascript\n   // previous code\n   const blockNumber = await provider.getBlockNumber();\n   console.log(blockNumber);\n   ```\n\n### Example: Fetching the Current Block Number\n\nThe following code snippet demonstrates how to fetch and print the current block number from Ink's testnet:\n\n## Viem - Instructions for Connecting to Ink\n\nViem documentation: [https://viem.sh/docs/introduction](https://viem.sh/docs/introduction)\n\n1. **Install Viem**: Ensure you have `viem` installed in your project. If not, you can install it using npm or yarn.\n\n   ```bash\n   npm install viem\n   ```\n\n   or\n\n   ```bash\n   yarn add viem\n   ```\n\n2. **Instantiate a Public Client**: Use the following code snippet to create a new `Public Client` object with the Ink Sepolia testnet.\n   ```javascript\n   import { createPublicClient, http } from 'viem'\n   import { inkSepolia } from 'viem/chains'\n\n   const client = createPublicClient({\n     chain: inkSepolia,\n     transport: http(),\n   })\n   ```\n\n3. **Consuming Actions**: You can now interact with Ink's chain! Here we are getting the current block number.\n\n   ```javascript\n   // previous code\n   const blockNumber = await client.getBlockNumber();\n   console.log(blockNumber);\n   ```\n"
  },
  {
    "path": "src/pages/build/transaction-fees.mdx",
    "content": "import { Callout } from 'nextra/components'\n\n# Fees on Ink \n\nAs a Superchain L2, the fee you pay for each transaction on Ink has two components: \n1. An execution fee for the chain you're on (i.e. Ink L2)\n2. A security fee that helps secure the L2 by publishing L2 transactions to Ethereum (the L1)\n\nThe 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. \n\nThis is an example of fees from an Ink transaction via our [Block Explorer](https://explorer-sepolia.inkonchain.com/tx/0xaea0e302ed3f89eef77475c1821df67b3713b80798298469ecc3dbd4d8e14e5f): \n![Fees](../../images/gas_fees.png)\n\n\n\n"
  },
  {
    "path": "src/pages/build/tutorials/_meta.json",
    "content": "{\n  \"deploying-a-smart-contract\": \"Deploying a Smart Contract\",\n  \"verify-smart-contract\": \"Verifying a Smart Contract\",\n  \"shipping-on-the-superchain\": \"Shipping on the Superchain\",\n  \"deploying-a-superchainerc20\": \"Deploying a SuperchainERC20\"\n}\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/_meta.json",
    "content": "{\n    \"foundry\": \"Foundry\",\n    \"hardhat\": \"Hardhat\",\n    \"remix\": \"Remix\"\n}\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/foundry.mdx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\nimport { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\";\n\n# Deploying a Smart Contract with Foundry\n\nThis guide will walk you through setting up a new project using Foundry, a blazing fast toolkit for Ethereum application development written in Rust.\n\n## Installing Foundry\n\nFirst, you'll need to install Foundry. Run this command in your terminal:\n\n```bash\ncurl -L https://foundry.paradigm.xyz | bash\n```\n\nThen run:\n\n```bash\nfoundryup\n```\n\nThis will install `forge`, `cast`, and `anvil` - the core tools of Foundry. You can also use `foundryup` to update the tools to the latest version.\n\n## Creating a New Project\n\nTo create a new project, navigate to the directory where you want to create your project and use the `forge init` command:\n\n```bash\nforge init my_project\ncd my_project\n```\n\nThis will create a new directory with the following structure:\n\n```\nmy_project/\n├── lib/\n├── src/\n│   └── Counter.sol\n├── test/\n│   └── Counter.t.sol\n├── script/\n├── .gitignore\n└── foundry.toml\n```\n\n## Writing Your First Contract\n\nRemove the default Counter example contract:\n\n```bash\nrm -rf src/Counter.sol script/Counter.s.sol test/Counter.t.sol\n```\n\nCreate a new contract and put it in the file <CopyableCode code=\"src/InkContract.sol\" />:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\ncontract InkContract {\n    string public greeting = \"Hello, Ink!\";\n\n    function setGreeting(string memory _greeting) public {\n        greeting = _greeting;\n    }\n}\n```\n\nCreate the tests for this contract in the file <CopyableCode code=\"test/InkContract.t.sol\" />:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {InkContract} from \"../src/InkContract.sol\";\n\ncontract InkContractTest is Test {\n    InkContract public ink;\n\n    function setUp() public {\n        ink = new InkContract();\n    }\n\n    function test_DefaultGreeting() public view {\n        assertEq(ink.greeting(), \"Hello, Ink!\");\n    }\n\n    function test_SetGreeting() public {\n        string memory newGreeting = \"New greeting!\";\n        ink.setGreeting(newGreeting);\n        assertEq(ink.greeting(), newGreeting);\n    }\n\n    function testFuzz_SetGreeting(string memory randomGreeting) public {\n        ink.setGreeting(randomGreeting);\n        assertEq(ink.greeting(), randomGreeting);\n    }\n}\n```\n\n## Building and Testing\n\nBuild your project:\n\n```bash\nforge build\n```\n\nRun tests:\n\n```bash\nforge test\n```\n\n## Deployment\n\n1. First, create a <CopyableCode code=\".env\" /> file in your project root:\n\n```env\nPRIVATE_KEY=your_private_key_here\nRPC_URL=https://rpc-gel-sepolia.inkonchain.com/\nBLOCKSCOUT_API_KEY=your_blockscout_api_key_here\n```\n\n2. Create a deployment script in <CopyableCode code=\"script/Deploy.s.sol\" />:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\nimport \"forge-std/Script.sol\";\nimport \"../src/InkContract.sol\";\n\ncontract DeployScript is Script {\n    function run() external {\n        uint256 deployerPrivateKey = vm.envUint(\"PRIVATE_KEY\");\n\n        vm.startBroadcast(deployerPrivateKey);\n\n        new InkContract();\n\n        vm.stopBroadcast();\n    }\n}\n```\n\n3. Deploy your contract:\n\n```bash\n# Load environment variables\nsource .env\n\n# Deploy to InkSepolia Testnet\nforge script script/Deploy.s.sol:DeployScript --rpc-url $RPC_URL --broadcast --verify\n```\n\n## Verifying Your Contract\n\nIf you want to verify your contract on Etherscan:\n\n```bash\nforge verify-contract <DEPLOYED_CONTRACT_ADDRESS> src/InkContract.sol:InkContract \\\n    --chain-id 763373 \\\n    --etherscan-api-key $BLOCKSCOUT_API_KEY\n```\n\n## Additional Configuration\n\nYou can customize your Foundry setup in `foundry.toml`:\n\n```toml\n[profile.default]\nsrc = \"src\"\nout = \"out\"\nlibs = [\"lib\"]\nsolc = \"0.8.19\"\noptimizer = true\noptimizer_runs = 200\n\n[rpc_endpoints]\ninksepolia = \"${INKSEPOLIA_RPC_URL}\"\n```\n\n## Next Steps\n\n- Check out [Get Foundry Book](https://book.getfoundry.sh/) for more information on Foundry.\n\n<TestnetDisclaimer />\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/hardhat.mdx",
    "content": "import { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\";\n\n# Deploying a Smart Contract with Hardhat\n\nThis guide will walk you through setting up a new project using Hardhat, a popular development environment for Ethereum software.\n\n## Prerequisites\n\nFirst, make sure you have Node.js installed (version 20 or later). You can check your Node version with:\n\n```bash\nnode --version\n```\n\n## Setting Up a New Hardhat Project\n\n1. Create a new directory for your project and initialize it:\n\n```bash\nmkdir my-hardhat-project\ncd my-hardhat-project\nnpm init -y\n```\n\n2. Install Hardhat and necessary dependencies:\n\n```bash\nnpm install --save-dev hardhat @nomicfoundation/hardhat-toolbox\n```\n\n3. Create a new Hardhat project:\n\n```bash\nnpx hardhat init\n```\n\nChoose \"Create a JavaScript project\" when prompted. This will create a project with this structure:\n\n```\nmy-hardhat-project/\n├── contracts/\n├── scripts/\n├── test/\n├── hardhat.config.js\n└── package.json\n```\n\n## Writing Your First Contract\n\nCreate a new file in the `contracts` directory:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\ncontract InkContract {\n    string public greeting = \"Hello, Ink!\";\n\n    function setGreeting(string memory _greeting) public {\n        greeting = _greeting;\n    }\n}\n```\n\n## Configuring Hardhat\n\nCreate a `.env` file in your project root:\n\n```env\nPRIVATE_KEY=your_private_key_here\nINK_SEPOLIA_URL=https://rpc-gel-sepolia.inkonchain.com/\nBLOCKSCOUT_API_KEY=your_blockscout_api_key_here\n```\n\nUpdate your `hardhat.config.js`:\n\n```javascript\nrequire(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUserConfig */\nmodule.exports = {\n  solidity: \"0.8.19\",\n  networks: {\n    inksepolia: {\n      url: process.env.INK_SEPOLIA_URL || \"\",\n      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],\n    },\n  },\n  etherscan: {\n    apiKey: {\n      inksepolia: process.env.BLOCKSCOUT_API_KEY,\n    },\n    customChains: [\n      {\n        network: \"inksepolia\",\n        chainId: 763373,\n        urls: {\n          apiURL: \"https://explorer-sepolia.inkonchain.com/api\",\n          browserURL: \"https://explorer-sepolia.inkonchain.com/\",\n        },\n      },\n    ],\n  },\n};\n```\n\n## Building and Testing\n\n1. Compile your contracts:\n\n```bash\nnpx hardhat compile\n```\n\n2. Create a test file in `test/InkContract.js`:\n\n```javascript\nconst { expect } = require(\"chai\");\n\ndescribe(\"InkContract\", function () {\n  it(\"Should return the correct greeting\", async function () {\n    const InkContract = await ethers.getContractFactory(\"InkContract\");\n    const contract = await InkContract.deploy();\n    await contract.deployed();\n\n    expect(await contract.greeting()).to.equal(\"Hello, Ink!\");\n  });\n});\n```\n\n3. Run the tests:\n\n```bash\nnpx hardhat test\n```\n\n## Deployment\n\nCreate a deployment script in `scripts/deploy.js`:\n\n```javascript\nasync function main() {\n  const InkContract = await ethers.getContractFactory(\"InkContract\");\n  const contract = await InkContract.deploy();\n\n  await contract.deployed();\n\n  console.log(\"InkContract deployed to:\", contract.address);\n}\n\nmain()\n  .then(() => process.exit(0))\n  .catch((error) => {\n    console.error(error);\n    process.exit(1);\n  });\n```\n\nDeploy to Ink Sepolia testnet:\n\n```bash\nnpx hardhat run scripts/deploy.js --network inksepolia\n```\n\n## Verifying Your Contract\n\nAfter deployment, verify your contract:\n\n```bash\nnpx hardhat verify --network inksepolia <DEPLOYED_CONTRACT_ADDRESS>\n```\n\n## Interacting with Your Contract\n\nYou can use Hardhat Console to interact with your deployed contract:\n\n```bash\nnpx hardhat console --network inksepolia\n```\n\n```javascript\nconst Contract = await ethers.getContractFactory(\"InkContract\");\nconst contract = await Contract.attach(\"YOUR_CONTRACT_ADDRESS\");\nawait contract.greeting();\nawait contract.setGreeting(\"New greeting!\");\n```\n\n## Additional Tools\n\nHardhat comes with several built-in tools:\n\n- Hardhat Network: Local Ethereum network for development\n- Console: Interactive JavaScript environment\n- Gas Reporter: Gas usage reporting\n- Coverage: Code coverage for Solidity tests\n\nTo use the network for local development:\n\n```bash\nnpx hardhat node\n```\n\n## Next Steps\n\n- Explore [Hardhat Documentation](https://hardhat.org/docs) for more features\n\n<TestnetDisclaimer />\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-smart-contract/remix.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport { TestnetDisclaimer } from \"@/components/TestnetDisclaimer\";\n\n# Deploying a Smart Contract with Remix\n\nThis guide will walk you through deploying a smart contract on Ink using Remix IDE, a popular browser-based development environment for Ethereum smart contracts.\n\n## What is Remix?\n\nRemix 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.\n\n## Accessing Remix\n\n1. Open your web browser and navigate to [Remix IDE](https://remix.ethereum.org)\n2. You'll see the default workspace with some example contracts\n\n## Creating Your First Contract\n\n1. In the File Explorer (left sidebar), create a new file by clicking the \"+\" icon\n2. Name it `InkContract.sol` and add the following code:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\ncontract InkContract {\n    string public greeting = \"Hello, Ink!\";\n\n    function setGreeting(string memory _greeting) public {\n        greeting = _greeting;\n    }\n}\n```\n\n![inkContract.sol](src/images/remix_deploy_1.png)\n\n## Compiling Your Contract\n\n1. Click on the `Solidity Compiler` tab in the left sidebar (icon looks like an \"S\")\n2. Make sure the compiler version matches your pragma statement (0.8.19)\n3. Click `Compile InkContract.sol`\n4. Look for a green checkmark indicating successful compilation\n\n![inkContract.sol](src/images/remix_deploy_2.png)\n\n## Connecting to Ink Network\n\n1. On the left sidebar, click the `Deploy & run transactions` tab (represented by a deployment arrow icon ▶️)\n2. In the `ENVIRONMENT` dropdown:\n   - If you see `Injected Provider`, select it\n   - If not visible, click `Customize this list...` in dropdown\n   - 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)\n3. Configure your preferred Web3 wallet with Ink Sepolia network details:\n   - Network Name: Ink Sepolia\n   - RPC URL: https://rpc-gel-sepolia.inkonchain.com/\n   - Chain ID: 763373\n   - Currency Symbol: Ink\n   - Block Explorer URL: https://explorer-sepolia.inkonchain.com/\n\nMost 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.\n\n![inkContract.sol](src/images/remix_deploy_3.png)\n\n## Deploying Your Contract\n\n1. Before deploying, ensure:\n\n   - Your Web3 wallet is connected to Ink Sepolia network\n   - You have sufficient ETH for deployment\n   - Your wallet is connected to Remix IDE (accept the connection prompt if shown)\n\n2. In the \"Deploy & Run Transactions\" tab:\n\n   - Select `InkContract` from the `CONTRACT` dropdown\n   - Click `Deploy`\n   - A popup from your wallet will appear - review and confirm the transaction\n\n3. Once deployed, you'll see your contract appear under `Deployed Contracts` in the left lower corner of the window.\n\n![inkContract.sol](src/images/remix_deploy_4.png)\n\n## Interacting with Your Contract\n\n1. Under `Deployed Contracts`, expand your contract to see its functions\n2. You can:\n   - Read the current greeting by clicking `greeting`\n   - Set a new greeting by:\n     - Typing a new message in the `setGreeting` input field\n     - Clicking `transact`\n     - Confirming the transaction in your wallet\n\n![inkContract.sol](src/images/remix_deploy_5.png)\n\n## Verifying Your Contract\n\nSee also the respective [tutorial](/build/tutorials/verify-smart-contract).\n\n1. Go to [Ink Blockscout](https://explorer-sepolia.inkonchain.com)\n2. Find your contract by its address\n3. Click `Verify & Publish`\n4. Fill in the verification details:\n   - Choose `Solidity (Single file)`\n   - Select the same compiler version used in Remix\n   - Set optimization to 200 runs\n   - Paste your contract code\n   - Click `Verify & Publish`\n\n<Callout emoji=\"\">\n  Make sure to verify whether optimization is on or off in Remix Compiler's\n  Advanced Configuration as this can affect verification success.\n</Callout>\n\n## Tips and Best Practices\n\n- Always test your contracts in Remix's JavaScript VM before deploying to testnet\n- Use the Remix debugger to troubleshoot failed transactions\n- Save your contract's address after deployment\n- Keep your wallet secure and never share your private keys\n\n## Useful Features in Remix\n\n- **Debugger**: Helps you understand why transactions fail\n- **Static Analysis**: Checks your code for common issues\n- **Gas Estimation**: Shows approximate deployment costs\n- **Console**: Displays transaction logs and debugging information\n\n## Next Steps\n\n- Explore [Remix Documentation](https://remix-ide.readthedocs.io/) for advanced features\n- Learn about [Solidity](https://docs.soliditylang.org/) programming\n\n<TestnetDisclaimer />\n"
  },
  {
    "path": "src/pages/build/tutorials/deploying-a-superchainerc20.mdx",
    "content": "import { Callout } from \"nextra/components\";\n\n# Deploying a SuperchainERC20\n\n<Callout type=\"info\">\n  The SuperchainERC20 standard is ready for production deployments. Please note\n  that the OP Stack interoperability upgrade, required for crosschain messaging,\n  is currently in active development.\n</Callout>\n\nWelcome 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.\n\n## What is SuperchainERC20?\n\nSuperchainERC20 provides a standardized token implementation enabling seamless token transfers across the Superchain.\n\nSuperchainERC20 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.\n\n## How does SuperchainERC20 work?\n\n[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.\n\nSuperchainERC20 cross-chain transfers require two transactions:\n\n1. **Initiate Transaction**: On the source chain, tokens are burned and a cross-chain message is emitted\n2. **Execute Transaction**: The message is relayed to the destination chain, triggering token minting\n\nThis flow ensures tokens maintain consistent total supply across the entire Superchain ecosystem and eliminates the need for liquidity pools or wrapped tokens.\n\n## Why SuperchainERC20 matters for users, token issuers, and apps on Ink\n\nSuperchain 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.\n\nSuperchainERC20 deployment creates opportunities for:\n\n- **Enhanced Liquidity**: Unified token representation across chains improves capital efficiency\n- **Simplified Developer Experience**: Consistent API for projects building on Ink\n- **Reduced Fragmentation**: Improved capital efficiency for DeFi applications across the Superchain ecosystem - one chain to rule them all\n\n## 🚀 Deploying SuperchainERC20 - Quickstart\n\n### Prerequisites\n\nFirst, you'll need to install Foundry, as the project requires `anvil`. Follow the [Foundry installation guide](https://book.getfoundry.sh/getting-started/installation).\n\n### Setup Steps\n\n1. **Clone the repository**\n\n   ```sh\n   git clone git@github.com:ethereum-optimism/superchainerc20-starter.git\n   cd superchainerc20-starter\n   ```\n\n2. **Install dependencies**\n\n   ```sh\n   pnpm i\n   ```\n\n3. **Set up environment files**\n\n   ```sh\n   pnpm init:env\n   ```\n\n4. **Start the development environment**\n\n   ```sh\n   pnpm dev\n   ```\n\n5. **Update RPC URLs**\n\n   ```sh\n   pnpm contracts:update:rpcs\n   ```\n\n6. **Configure deployment settings**\n   Create or update your deployment configuration file:\n\n   ```toml\n   [deploy_config]\n   salt = \"ethers phoenix\"\n   chains = [\"sepolia/ink\"]\n\n   [token]\n   owner_address = \"<YOUR ADDRESS>\"    # Your wallet address\n   name = \"<YOUR TOKEN NAME>\"          # The name of your token\n   symbol = \"<YOUR TOKEN SYMBOL>\"      # Your token's symbol (e.g., \"OPT\")\n   decimals = 18                       # Number of decimal places (18 is standard)\n   ```\n\n   Save this to `packages/contracts/configs/deploy-config.toml`\n\n7. **Set up your deployer private key**\n\n   ```sh\n   echo 'DEPLOYER_PRIVATE_KEY=<YOUR PRIVATE KEY>' > packages/contracts/.env\n   ```\n\n   ⚠️ Never share or commit your private key. Make sure your wallet has enough funds for deployment.\n\n8. **Deploy your token**\n   ```sh\n   pnpm contracts:deploy:token\n   ```\n\n## Security considerations\n\n<Callout type=\"info\">\nTo 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.\n\nThis 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.\n\n</Callout>\n\nFor production deployments, ensure that:\n\n1. Grant permissions to the `SuperchainTokenBridge`(address `0x4200000000000000000000000000000000000028`) to call `crosschainMint` and `crosschainBurn`.\n2. 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.\n\n## What's Next?\n\nSuperchainERC20 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.\n\n- Use Supersim, a local development tool, to [deploy a SuperchainERC20 or build an interop-enabled app](https://docs.optimism.io/app-developers/get-started)\n- Learn more about the [technical architecture of Superchain interop](https://docs.optimism.io/stack/interop/explainer)\n- Learn about how [other token standards can benefit from Superchain interop](https://docs.optimism.io/stack/interop/compatible-tokens)\n"
  },
  {
    "path": "src/pages/build/tutorials/shipping-on-the-superchain.mdx",
    "content": "# Shipping on the Superchain\n\nYou can use [Supersim](https://github.com/ethereum-optimism/supersim) to simulate the Superchain and develop apps that can be used across any chain!\n\nSupersim enables builders to:\n\n* Experiment with apps that can be accessed from any chain\n* Create tokens with **SuperchainERC20**, a fungible token standard for tokens that can be used across the Superchain\n* Simulate crosschain messaging\n"
  },
  {
    "path": "src/pages/build/tutorials/verify-smart-contract.mdx",
    "content": "import { Callout } from 'nextra/components'\n\n## Verifying your Smart Contract \n\nIn 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.\n\nSmart contracts can be verified through the Blockscout UI or a [host of other methods](https://docs.blockscout.com/devs/verification). \n\n## Verifying a Smart Contract using the Blockscout UI \n\nVerification 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**.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n👷🏻‍♂️ If preferred you can verify directly from your Hardhat or Foundry dev environment. \n\n[Hardhat Verification Plugin](https://docs.blockscout.com/devs/verification/hardhat-verification-plugin)\n\n[Foundry Verification](https://docs.blockscout.com/devs/verification/foundry-verification)\n</Callout>\n\n### Smart Contract Verification with Blockscout\n1) Go to the [Verify contract](https://explorer-sepolia.inkonchain.com/contract-verification) page (Other -> Verify contract)\n\n![Blockscout verification 1](../../../images/blockscout_verif_1_ink.png)\n\n2) 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.\n\n![Blockscout verification 2](../../../images/blockscout_verif_2_ink.png)\n\n### Input Types\nChoose the format that applies to your files:\n\n- Solidity ([Flattened source code](/build/tutorials/verify-smart-contract#solidity-flattened-source-code))\n\n- Solidity ([Standard JSON input](/build/tutorials/verify-smart-contract#solidity-standard-json-input))\n\n- Solidity ([Sourcify](/build/tutorials/verify-smart-contract#via-sourcify-sources-and-metadata-json-file))\n\n- Solidity ([Multi-part files](/build/tutorials/verify-smart-contract#solidity-multi-part-files))\n\n- Vyper ([Contract](/build/tutorials/verify-smart-contract#vyper-contract))\n\n- Vyper ([Multi-part files](/build/tutorials/verify-smart-contract#vyper-multi-part-files-and-standard-json-input))\n\n- Vyper ([Standard JSON input](/build/tutorials/verify-smart-contract#vyper-multi-part-files-and-standard-json-input))\n\n#### Solidity (Flattened source code)\nThis 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.\n\n![Blockscout verification 3](../../../images/blockscout_verif_3_ink.png)\n\n1. **Contract Address**: The `0x` address supplied on contract creation (added above)\n\n2. **Is Yul contract**: Select if the contract is coded in Yul for efficiency.\n\n3. **Include Nightly Builds**: Select if you want to show nightly builds.\n\n4. **Compiler**: derived from the first line in the contract `pragma solidity X.X.X`. Use the corresponding compiler version rather than the nightly build.\n\n5. **EVM Version**: Select the correct EVM version if known, otherwise use default.\n\n6. **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.\n\n7. **Enter the Solidity Contract Code**: Copy-paste the source code of your smart contract as is.\n\n8. **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.\n\n9. Click the `Verify and Publish` button.\n\n10. 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.\n\n#### Solidity (Standard JSON input)\n<Callout type=\"info\" emoji=\"ℹ️\">\nMore information on JSON input is available [here](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description). \n</Callout>\n\n1. **Include nightly builds**. You can choose `Yes` or `No` depending on your compiler. \n\n2. **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.\n\n3. **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.\n\nClick the `Verify & publish` button and wait for the response.\n\n#### Via Sourcify: Sources and metadata JSON file\nSee [Contract Verification via Sourcify](https://docs.blockscout.com/devs/verification/contracts-verification-via-sourcify) for details.\n\n#### Solidity (Multi-part files)\nSee 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.\n\n#### Vyper Contract\nContract Name: Name assigned to the contract.\n\n1. **Compiler**: Select the compiler version used in the source code.\n\n2. **EVM Version**: Select the correct EVM version if known, otherwise use default.\n\n3. **Contract Code**: Copy and paste the contract code\n\n4. Click the `Verify and Publish` button.\n\nIf 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.\n\n#### Vyper Multi-part files and standard json input\nSee the information above.\n\n### Troubleshooting\nIf 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:\n\n1) Double check the compiler version is correct.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\nCheck all version digits - for example 0.5.1 is different from 0.5.10\n</Callout>\n\n2) 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.\n\n3) Copy, paste, and verify your source code in Remix. You may find some exceptions here.\n\nVerification in a dev environment\nThe [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).\n\n###### Source\n[Blockscout](https://docs.blockscout.com/devs/verification/blockscout-ui)\n"
  },
  {
    "path": "src/pages/build/tutorials.mdx",
    "content": "# Tutorials\n\nWelcome to the tutorials section! Here you'll find step-by-step guides to help you build on Ink.\n\n## Available Tutorials\n\n* [Deploying a Smart Contract with Foundry](/build/tutorials/deploying-a-smart-contract/foundry)\n* [Deploying a Smart Contract with Hardhat](/build/tutorials/deploying-a-smart-contract/hardhat)\n* [Deploying a Smart Contract with Remix](/build/tutorials/deploying-a-smart-contract/remix)\n* [Verifying a Smart Contract](/build/tutorials/verify-smart-contract)\n* [Shipping a Superchain App](/build/tutorials/shipping-on-the-superchain)\n* [Deploying a SuperchainERC20](/build/tutorials/deploying-a-superchainerc20)\n"
  },
  {
    "path": "src/pages/build/verify.mdx",
    "content": "---\ntitle: Kraken Verify\ndescription: Solidity contracts for Kraken Verify - EAS attestation utilities enabling access control for verified Kraken users through onchain attestations.\n---\n\n# Kraken Verify\n\nKraken 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.\n\nKraken 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.\n\nUsers 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.\n\n## Installation\n\n```bash\n  # Using npm\n  npm install @krakenfx/verify\n\n  # Using yarn\n  yarn add @krakenfx/verify\n\n  # Using pnpm\n  pnpm add @krakenfx/verify\n```\n\n## Setup\n\n### Remappings\n\nGenerate remappings for Foundry:\n\n```bash\n  forge remappings > remappings.txt\n```\n\nYou might need to add this extra one manually if you're using pnpm:\n\n```txt\n  @ethereum-attestation-service/=node_modules/.pnpm/@ethereum-attestation-service+eas-contracts@1.8.0/node_modules/@ethereum-attestation-service\n```\n\n### IDE Configuration\n\nUpdate your IDE to support remappings. For VS Code:\n\n```json\n// .vscode/settings.json\n{\n  \"solidity.remappings\": [\"...=node_modules/...\"]\n}\n```\n\n## Usage\n\n### Solidity\n\n```solidity\n  // SPDX-License-Identifier: MIT\n  pragma solidity 0.8.24;\n\n  import { KrakenVerifyAccessControl } from \"@krakenfx/verify/src/abstracts/KrakenVerifyAccessControl.sol\";\n\n  contract MyContract is KrakenVerifyAccessControl {\n      // Only users with valid Kraken Verify attestations can call this function\n      function verifiedUserFunction() external onlyVerified {\n          // Your implementation\n      }\n  }\n```\n\n### JavaScript / TypeScript Client\n\nThe 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.\n\n#### ESM / TypeScript\n\n```typescript\n// ES Modules / TypeScript\nimport { VerifyClient } from \"@krakenfx/verify\";\n\nconst verifyClient = new VerifyClient();\nconst yourAddress = \"0x2193981f2d65149644C039c9071f2bE8b5938F0B\";\n\n// Check if an address is verified\nconst isVerified = await verifyClient.isAddressVerified(yourAddress);\n\nconsole.log(`Result: ${isVerified ? \"✅ Verified\" : \"❌ Not verified\"}`);\n```\n\n#### CommonJS\n\n```javascript\n// CommonJS\nconst { VerifyClient } = require(\"@krakenfx/verify\");\n\nconst verifyClient = new VerifyClient();\nconst yourAddress = \"0x2193981f2d65149644C039c9071f2bE8b5938F0B\";\n\n// Check if an address is verified\nasync function checkVerification() {\n  const isVerified = await verifyClient.isAddressVerified(yourAddress);\n  console.log(`Result: ${isVerified ? \"✅ Verified\" : \"❌ Not verified\"}`);\n}\n\ncheckVerification();\n```\n\n#### Configuration Options\n\nYou can customize the client by passing options to the constructor:\n\n```typescript\nconst verifyClient = new VerifyClient({\n  rpcUrl: \"https://your-rpc-endpoint.com\", // Custom RPC URL\n  verbose: true, // Enable verbose logging\n});\n```\n\n## What's Included\n\nThis package provides access control for verified Kraken users through EAS attestations:\n\n- `KrakenVerifyAccessControl.sol`: Abstract contract with the `onlyVerified` modifier\n- Supporting libraries and interfaces for attestation verification\n- JavaScript/TypeScript client for checking address verification status\n\n## Requirements\n\n- Solidity 0.8.24\n- Node.js 16+ (for client usage)\n\n## License\n\nMIT\n"
  },
  {
    "path": "src/pages/faq.mdx",
    "content": "import { URLS } from \"@/utils/urls\";\n\n# Frequently Asked Questions\n\n## Ink\n\n### What makes Ink different?\n\nInk 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.\n\nWe 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.\n\n### What’s the difference between Ethereum and OP Stack chains?\n\nOP Stack chains are designed to be EVM equivalent and introduces as few changes as possible to the Ethereum protocol.\n\nFor a full rundown on all differences please refer to [Optimism’s documentation](https://docs.optimism.io/stack/differences).\n\nFor convenience, a few notable points worth mentioning are:\n\n- [Opcodes](https://docs.optimism.io/stack/differences#opcodes)\n- [Bridging](https://docs.optimism.io/stack/differences#bridging)\n- [Chain Finality](https://docs.optimism.io/stack/differences#chain-finality)\n\n### How do I get started with developing on Ink?\n\nGet 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.\n\n### How to deploy a smart contract on Ink?\n\nYou can follow a tutorial from the Ink Docs here: https://docs.inkonchain.com/build/tutorials\n\n### Where can I get funds to test Ink?\n\nCheck out our [faucets](/tools/faucets).\n\n### Where can I find important contracts deployed on Ink?\n\nFor token contracts on Ink please refer to our [Ink Token Contracts](/useful-information/ink-token-contracts) page.\n\nFor L1, L2 and predeploy addresses, please see our [Contracts](/useful-information/contracts) page.\n\n### Are there any native bridging options?\n\nAt the moment, Ink does not host its own bridging portal. Please review our recognized partner’s bridges here: https://inkonchain.com/dashboard\n\n### Why are fees/bridging high?\n\nInk 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\n\nKraken 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.\n\n### Is developing on and using Ink expensive?\n\nNot 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.\n\n### What can I deploy on Ink?\n\nYou 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.\n\n### Why don’t you support XYZ dApp?\n\nThe 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.\n\n### Where can I learn more about OP Stack?\n\nTo learn more about OP Stack chains, please visit [Optimism’s documentation](https://docs.optimism.io/).\n\n## Community\n\n### Wen TGE?\n\nThere is no information to share at this moment regarding any token from Ink.\n\n### Wen Airdrop\n\nThere 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.\n\nFinally, if still unsuccessful, please open a ticket so we can investigate. Feel free to share their username so we can help better.\n\n### How do I get access granted to Guild task?\n\nPlease 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.\n\nAlso make sure to connect the right address to Guild and that you grant access to all connected networks in your wallet.\n"
  },
  {
    "path": "src/pages/general/_meta.json",
    "content": "{\n  \"about\": \"About Ink\",\n  \"network-information\": \"Network Information\",\n  \"connect-wallet\": \"Connect Wallet\",\n  \"bridge\": { \"title\": \"Bridge\", \"href\": \"/tools/bridges\" },\n  \"faucet\": { \"title\": \"Faucet\", \"href\": \"/tools/faucets\" },\n  \"support\": \"Support\"\n}\n"
  },
  {
    "path": "src/pages/general/about.mdx",
    "content": "# 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 Superchain; a powerful baselayer for deploying innovative DeFi protocols.\n\n- **Sub-second block times**: 1s block times Day 1, sub-second blocks coming soon.\n- **Smol Gas**: Ape more, pay less.\n- **Security**: Sequencer-level security to protect users from malicious intents and exploits.\n- **Interoperability**: A commitment to the seamless flow of capital across the Superchain and beyond.\n- **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.\n- **Scaling Ethereum**: Ink is dedicated to scaling Ethereum with a powerful L2 that enhances performance and accessibility.\n\n## Why use Ink?\n\nBuilt on the Superchain and unleashed by Kraken, Ink will serve as a central point in your journey towards onchain financial sovereignty.\n\n### Ink features:\n\n- **Abstraction**: Ink integrates Kraken's infrastructure and enables users to enjoy a unified experience from converting fiat to the cutting edge of DeFi.\n- **DeFi-first**: Ink aims to scale up DeFi's user base and evolve the quality and range of DeFi products.\n- **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.\n- **Speed**: 1s block times on day one with subsecond block times coming soon.\n- **Security**: Kraken's decade-long record of security and reliability will be reflected and pushed forward on Ink.\n- **Support**: Builders can expect rich documentation, expert guidance, workshops, tailored onboarding, dedicated community channels and financial support to bring their ideas to life.\n- **Low Fees**: Harnessing the scalability of Optimism and the security of Ethereum, gas fees on Ink are a fraction of mainnet.\n- **Open Source, Scaling Ethereum**: At Ink, we build in the open, benefiting all.\n- **EVM compatible**: Seamlessly deploy any Solidity contract written for Ethereum Mainnet or other L2s directly on Ink without modifications.\n\n## What is Ink built on?\n\n- 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.\n"
  },
  {
    "path": "src/pages/general/connect-wallet.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\nimport { AddNetworkButton } from \"../../components/AddNetworkButton\";\n\n## Connect Wallet\n\n<AddNetworkButton network=\"mainnet\" heading=\"Mainnet\" />\n\n<AddNetworkButton network=\"sepolia\" heading=\"Testnet (Sepolia)\" />\n\n## Kraken Wallet\n\nInk 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).\n\n---\n\n## Rainbow\n\nInk Mainnet is supported natively on Rainbow wallet. Don’t have it yet? Download it [here](https://rainbow.me/en/download)\n\n---\n\n## MetaMask\n\nTo manually add **Ink Mainnet** as a custom network, follow these steps:\n\n1. Open your MetaMask browser extension.\n2. Click the network selection dropdown at the top left of the extension.\n3. Select the **\"+ Add a custom network\"** button at the bottom.\n4. In the new window, click **\"Add a network manually\"** at the bottom of the list.\n5. Enter the details provided in the dialog that appears.\n\n| Field                          | Information                                             |\n| ------------------------------ | ------------------------------------------------------- |\n| Network Name                   | Ink                                                     |\n| RPC Endpoint (HTTPS) (primary) | <CopyableCode code=\"https://rpc-gel.inkonchain.com\" />  |\n| Chain ID                       | 57073                                                   |\n| Currency Symbol                | ETH                                                     |\n| Block Explorer                 | <CopyableCode code=\"https://explorer.inkonchain.com\" /> |\n\n6. Click **\"Save\"**.\n7. Ink Mainnet will now be available in the network selection dropdown.\n\n---\n\n_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/)._\n"
  },
  {
    "path": "src/pages/general/faucet.mdx",
    "content": "# Faucets\n\n## TODO\n"
  },
  {
    "path": "src/pages/general/network-information.mdx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\n\n# Network Information\n\n## Mainnet\n\n| Field                            | Information                                              |\n| -------------------------------- | -------------------------------------------------------- |\n| Network Name                     | Ink                                                      |\n| Description                      | Ink's public mainnet                                     |\n| RPC Endpoint (HTTPS) (primary)   | <CopyableCode code=\"https://rpc-gel.inkonchain.com\" />   |\n| RPC Endpoint (WSS) (primary)     | <CopyableCode code=\"wss://rpc-gel.inkonchain.com\" />     |\n| RPC Endpoint (HTTPS) (secondary) | <CopyableCode code=\"https://rpc-qnd.inkonchain.com\" />   |\n| RPC Endpoint (WSS) (secondary)   | <CopyableCode code=\"wss://rpc-qnd.inkonchain.com\" />     |\n| Chain ID                         | 57073                                                    |\n| Currency Symbol                  | ETH                                                      |\n| Block Explorer                   | <CopyableCode code=\"https://explorer.inkonchain.com\" />  |\n\n---\n\n## Testnet\n\n| Field                            | Information                                                     |\n| -------------------------------- | --------------------------------------------------------------- |\n| Network Name                     | Ink Sepolia                                                     |\n| Description                      | Ink's public testnet                                            |\n| RPC Endpoint (HTTPS) (primary)   | <CopyableCode code=\"https://rpc-gel-sepolia.inkonchain.com\" />  |\n| RPC Endpoint (WSS) (primary)     | <CopyableCode code=\"wss://rpc-gel-sepolia.inkonchain.com\" />    |\n| RPC Endpoint (HTTPS) (secondary) | <CopyableCode code=\"https://rpc-qnd-sepolia.inkonchain.com\" />  |\n| RPC Endpoint (WSS) (secondary)   | <CopyableCode code=\"wss://rpc-qnd-sepolia.inkonchain.com\" />    |\n| Chain ID                         | 763373                                                          |\n| Currency Symbol                  | ETH                                                             |\n| Block Explorer                   | <CopyableCode code=\"https://explorer-sepolia.inkonchain.com\" /> |\n\nClick [here](/tools/rpc) for a list of vendors offering private RPC endpoints.\n"
  },
  {
    "path": "src/pages/general/support/_meta.json",
    "content": "{\n  \"troubleshooting\": \"Troubleshooting\"\n}\n"
  },
  {
    "path": "src/pages/general/support/troubleshooting.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Troubleshooting Guide\n\nThis guide covers common issues developers and users might encounter when working with Ink, along with their solutions.\n\n## Transaction Issues\n\n### Nonce Out of Sync\n\nIf 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:\n\n#### For MetaMask Users:\n\n1. Enable custom nonce in MetaMask:\n\n   - Go to Settings > Advanced\n   - Enable \"Customize transaction nonce\"\n\n2. Find your next valid nonce using either method A or B:\n\n   **Method A: Using Block Explorer**\n\n   - Go to <CopyableCode code=\"https://explorer.inkonchain.com/address/YOUR_ADDRESS\" /> (replace YOUR_ADDRESS with your address)\n   - Find your most recent transaction where you were the sender (FROM address)\n   - Click the transaction and then \"View details\"\n   - Find the nonce value and add 1 to it - this is your next valid nonce\n\n   **Method B: Using Command Line**\n\n   ```bash\n   curl -s -X POST -H \"Content-Type: application/json\" --data '{\n     \"jsonrpc\":\"2.0\",\n     \"method\":\"eth_getTransactionCount\",\n     \"params\":[\"YOUR_ADDRESS\", \"latest\"],\n     \"id\":1\n   }' https://rpc-gel.inkonchain.com | python3 -c \"import sys, json; print(int(json.load(sys.stdin)['result'], 16))\"\n   ```\n\n   Replace `YOUR_ADDRESS` with your wallet address. The number returned is your next valid nonce.\n\n3. Send a recovery transaction:\n\n   - Send a 0 ETH transaction to yourself\n   - When prompted for the nonce, use the exact number you got from either method above\n   - Increase the gas price slightly (tap + once in the Network Fee section)\n   - The transaction should go through\n\n4. Future transactions should now use the correct nonce\n\n<Callout type=\"info\">\n  The recovery transaction typically costs around $0.05 in gas fees.\n</Callout>\n\n## Getting Help\n\nIf you're still experiencing issues:\n\n1. Check the [Network Status Page](https://status.inkonchain.com/) for any ongoing incidents\n2. Submit a detailed bug report on our [GitHub](https://github.com/inkonchain/docs/issues)\n"
  },
  {
    "path": "src/pages/general/support.mdx",
    "content": "import { URLS } from \"@/utils/urls\";\n\n# Support\n\nAt Ink, we're here to help everyone, builders and users alike.\n\nPlease don't hesitate to reach out to us via any of our channels listed below.\n\n- [Telegram](https://t.me/inkonchain)\n- [Twitter](https://x.com/inkonchain)\n"
  },
  {
    "path": "src/pages/index.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport { URLS } from \"@/utils/urls\";\n\n# Welcome to the Ink Docs\n\n<video autoPlay loop muted playsInline className=\"w-full rounded-6xl\">\n  <source src=\"../images/ink-banner.mp4\" type=\"video/mp4\" />\n</video>\n\nWelcome to the documentation for Ink, Kraken's dedicated DeFi chain.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  New to Ink? [Learn more about Ink](/general/about)\n</Callout>\n\n###### Get started with developing on Ink!\n\n- [Get connected to Ink](/general/connect-wallet)\n- [Get testnet funds](/tools/faucets) to send transactions and deploy contracts on Ink\n- Check out the [tutorials](/build/tutorials) (WIP) to start building on Ink\n  <Callout type=\"info\" emoji=\"ℹ️\">\n    Try out [InkGPT](https://chatgpt.com/g/g-ef8AAM6s4-inkkit-assistant)! Blaze\n    through the docs and get deployed in no time with our new AI assistant.\n  </Callout>\n"
  },
  {
    "path": "src/pages/ink-builder-program/_meta.json",
    "content": "{\n  \"overview\": \"Overview\",\n  \"spark-program\": \"Spark Program\",\n  \"forge-program\": \"Forge Program\",\n  \"echo-program\": \"Echo Program\",\n  \"office-hours\": \"Office Hours\"\n}\n"
  },
  {
    "path": "src/pages/ink-builder-program/echo-program.mdx",
    "content": "# Echo Program\n\n> **Retroactive Recognition for Ink's Early Builders**\n> *Submissions Closed – March 4, 2026*\n\nEcho was created as a one-time, retroactive initiative to recognize teams that shipped real product on Ink during its earliest phase.\n\nBefore 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.\n\n## The Birth of Echo Program\n\nEcosystems don't appear overnight. They're built through shipping.\n\nEcho was created to:\n\n- Recognize projects that shipped and delivered on Ink before November 1, 2025\n- Reward contributions that generated measurable ecosystem value\n- Reconnect early builders with Ink's next phase\n\nEcho was not about ideas, roadmaps, or community presence. It was about shipped work that moved the chain forward.\n\n## Who Echo Recognized\n\nEcho was designed for teams that:\n\n- Shipped a live product, tool, or meaningful onchain integration on Ink before November 1, 2025\n- Provided verifiable proof of shipping (contracts, repositories, releases, live links, usage metrics)\n- Created measurable ecosystem value through product usage, transactions, adoption, or builder utility\n\n**Out of scope:**\n\n- Community-only contributions\n- Advisory or support roles\n- Moderation or marketing efforts\n- Concept-stage ideas without a deployed product\n- Commercial partnerships or paid service engagements\n- Pure network coverage integrations without an Ink-native shipped product\n\n## Program Status\n\nSubmissions closed on March 4, 2026.\n\nApproved teams received:\n\n- A one-time retroactive grant (Builder Points and USDC)\n- Optional public recognition\n- Access to private builder channels and early ecosystem initiatives\n\n## How Echo Fits Into Ink's Builder Framework\n\nEcho formally recognized early builders.\n\nInk's other builder tracks support ongoing development:\n\n- **Spark** supports builders who are already shipping and pushing a live product toward meaningful usage.\n- **Forge** backs teams with traction, strong product fundamentals, and a serious ambition to scale on Ink.\n"
  },
  {
    "path": "src/pages/ink-builder-program/forge-program.mdx",
    "content": "# 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 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.\n\nThis is where traction turns into compounding growth.\n\n## Why We Built Forge\n\nEvery 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.\n\nForge exists for that moment.\n\nIt's built for teams past the demo stage, ready to sharpen execution, expand distribution, and grow with intent, with Ink as the primary home.\n\nWe're selective so we can stay hands-on. If you're in Forge, you're not just getting funding, you're getting real support.\n\n## Who Should Apply\n\nForge is a strong fit for teams with real momentum and a clear plan to scale on Ink.\n\nYou'll likely be a match if you have:\n\n- A product that's live, or launching on mainnet imminently\n- Meaningful traction, with clear usage signals (users, volume, TVL, integrations, or growth)\n- A scoped 30–60 day plan with measurable outcomes\n- A team that can execute independently, with strong ownership\n- A credible plan to sustain delivery (runway, revenue strategy, or fundraising readiness)\n- A clear reason why Ink is the best home for your next stage\n\nIn 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.\n\nIf you're still exploring ideas or building your first MVP, **Spark** will be a better starting point.\n\n## What You Receive\n\nForge is more than a grant. It's a scaling layer around your team.\n\n**Support includes:**\n\n- Milestone-based grants up to 200,000 USDC\n- Strategic mentorship from Ink contributors and advisors\n- Ink-native integrations and dev tooling support\n- Official ecosystem spotlight and social amplification\n- Warm intros to partners, collaborators, and investors\n- Eligibility for follow-on investment via Kraken Ventures\n\n## What We're Looking For\n\nWe select projects based on traction, product strength, execution maturity, ecosystem impact, and long-term durability.\n\n### 1) Traction\n\nWe look for strong signals that real users want what you've built, such as:\n\n- Active users or repeat usage\n- Onchain transactions or volume\n- TVL or assets under management\n- Protocol/tooling integrations\n- Sustained growth tied to product activity\n\nWe 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.\n\n### 2) Ecosystem Impact\n\nWe prioritize projects that materially push Ink forward through:\n\n- Liquidity, volume, or capital efficiency\n- User adoption and retention\n- Infrastructure other teams depend on\n- Developer tooling leverage or ecosystem distribution\n\n### 3) Execution Readiness\n\nForge is designed for teams that can ship reliably, operate independently, and build to last.\n\nWe'll look for:\n\n- Strong product/engineering track record\n- Clear ownership and decision-making\n- Ability to deliver without heavy incubation\n- Financial readiness: a credible runway plan, and the ability to secure ongoing resources (revenue or fundraising) as the market evolves\n\n> Strong signals include prior fundraising experience, warm investor relationships, or a clear path to extending runway as the market evolves.\n\n### 4) Milestone Clarity\n\nForge grants are milestone-based, so your roadmap matters.\n\nWe look for:\n\n- A 30–60 day plan\n- Deliverables tied to outcomes (usage, adoption, integrations, liquidity)\n- A realistic scope and timeline\n\n## What You Can Build\n\nForge supports projects that make Ink more powerful, useful, and scalable.\n\nCommon categories include:\n\n- DeFi protocols & liquidity infrastructure\n- Developer tooling, infra, SDKs, APIs\n- Wallet UX, onboarding improvements, account abstraction\n- Consumer + social apps\n- Games, prediction markets, coordination networks\n- Public goods + open-source primitives\n\nIf it materially improves Ink's ecosystem, it belongs here.\n\n## How the Forge Review Works\n\n**Step 1: Apply (Biweekly Review)**\n\nApply anytime. The Ink Foundation team reviews applications in **biweekly batches**.\n\nYou can expect a feedback email within **~14 days** of submitting a complete application.\n\n**Step 2: Interview + Deep Review**\n\nIf shortlisted, we'll invite your team to an interview to validate fit and readiness across:\n\n- Product and traction\n- Team structure and execution ability\n- Ecosystem alignment\n- Long-term goals\n\n**Step 3: Milestone Planning + Grant Approval**\n\nIf you pass the interview round, we'll work together to finalize:\n\n- Grant size and milestone structure\n- Roadmap checkpoints and success metrics\n- Integration needs and ecosystem support\n- Co-marketing opportunities (when relevant)\n\nOnce milestones are agreed, we issue final approval and funding is released in stages based on delivery.\n\n## Apply to Forge\n\nReady to scale something real on Ink?\n\n**Apply here:** https://forms.inkonchain.com/forge-builder-program\n"
  },
  {
    "path": "src/pages/ink-builder-program/office-hours.mdx",
    "content": "# Office Hours\n\nInk Office Hours are short, focused 15-minute sessions for teams already building on Ink (or actively preparing to deploy).\n\nBring one clear question, leave with clear next steps.\n\n> We prioritize requests that come with real context: a demo, repo, contract, logs, or a concrete integration plan.\n\n## **What Office Hours Are For**\n\n### **1. Integration + Deployment Blockers**\n\nUse Office Hours when you're stuck and need help unblocking shipping.\n\n- Contract/API/RPC issues\n- Debugging errors, failed calls, unexpected behavior\n- Deployment/config problems, infra wiring, integration friction\n\n### **2. Architecture Review (for something you've already built)**\n\nUse Office Hours to sanity-check technical direction and avoid expensive mistakes.\n\n- Architecture validation for an existing MVP\n- Integration approach review (how to connect to Ink-native infra)\n- Security and production readiness checks (lightweight, not a full audit)\n\n### **3. Product Feedback (for established products)**\n\nUse Office Hours if you have a real product and want fast, practical feedback.\n\n- UX/onboarding improvements\n- MVP refinement and feature prioritization\n- Activation/retention feedback based on your current users\n- \"What should we ship next?\" based on your product today\n\n### **4. Launch Readiness on Ink**\n\nUse Office Hours when you're serious about deploying/expanding to Ink and want to pressure-test the plan.\n\n- What you need to launch cleanly\n- Dependencies, integration checklist, rollout sequencing\n- Clear next steps to get to mainnet\n\n## **What Office Hours Are Not For**\n\nTo keep sessions high-signal, we don't use Office Hours for:\n\n- Grant status updates, decisions, or rejection discussions\n- Token topics (tokenomics, listings, incentives negotiation)\n- Legal or compliance advice for your project\n- Fundraising requests or VC introductions.\n\n## **How Requests Are Handled**\n\n1. **Submit a request here: [Request Office Hours](https://tally.so/r/lbRVDW)**\n\n> **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.\n\n1. **We triage within ~72 hours**\n2. **If it's a fit, you get a scheduling link** (15-min session)\n3. **If not, you still get a reply** with the right next step/resources\n"
  },
  {
    "path": "src/pages/ink-builder-program/overview.mdx",
    "content": "# Ink Builder Program\n\nThe Ink Builder Program supports teams building on Ink with funding, guidance, and recognition across three tracks.\n\n**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.\n\n**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.\n\n**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.\n"
  },
  {
    "path": "src/pages/ink-builder-program/spark-program.mdx",
    "content": "# 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 shipping small, high-signal work that creates measurable value for the ecosystem.\n\nIt'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.\n\nNo pitch decks. Low lift application. Fast decisions.\n\nThis is where projects earn their first traction on Ink.\n\n## Why We Built Spark\n\nHealthy ecosystems are built by a lot of small, useful things that compound.\n\nSpark exists to:\n\n- Reduce friction for builders who are ready to ship, not just talk\n- Buy velocity for projects that can quickly produce proof (usage, integrations, onchain activity)\n- Seed high-potential teams that need a smaller milestone to qualify for deeper support later\n- Encourage ecosystem primitives and public goods that increase builder throughput\n\nSpark is not \"fund anything.\" It is \"fund what can ship value and show signal.\"\n\n## Who Should Apply\n\nSpark is a strong fit if you are:\n\n- An indie builder or small team shipping a real product or feature\n- A team building something useful for other builders or users on Ink\n- A project that can show a credible plan for measurable impact, even if early\n- A team that may have aimed for Forge but needs to prove traction first\n\nSpark 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.\n\n## What You Can Build\n\nSpark supports lightweight projects that increase usage, liquidity, or builder leverage, including:\n\n- Developer tools, SDKs, contract tooling, deployment helpers\n- Bots and mini apps that drive repeat onchain actions\n- Onchain UX improvements, onboarding helpers, account abstraction components\n- Analytics dashboards that help users act (not just view), especially if linked to conversion\n- Public goods and open-source primitives other teams can reuse\n- Consumer experiments with clear retention loops and measurable usage\n\n## How It Works\n\n### 1) Submit\n\nBuilders share a short application with:\n\n- What they're building and why it matters for Ink\n- Proof of build (demo, repo, screenshots, Loom, contracts, etc.)\n- What they want to ship or improve with a $500–$5K microgrant\n- Any traction signals (even small) and distribution plan (if relevant)\n\n### 2) Review (Scorecard-Based)\n\nWe evaluate every submission on five criteria:\n\n- **Proof of Build**\n    \n    Has real work already started, code/UI/prototype/demo, visible effort.\n    \n- **Ecosystem Usefulness**\n    \n    Does it make Ink more usable, more visible, or more fun, and does it help users or other builders.\n    \n- **Feasibility for Microgrant**\n    \n    Can $500–$5K meaningfully move it forward, with a clear and realistic scope.\n    \n- **Builder Credibility**\n    \n    Can the builder ship, communicate clearly, and respond reliably.\n    \n- **Creative + Value Spark**\n    \n    Is it novel, memeable, surprising, or culturally sticky, while still creating real value.\n\n### 3) Decision + Grant\n\nOutcomes:\n\n- **Approved** (grant size confirmed)\n- **Revise & resubmit** (scope or proof needs tightening)\n- **Not a fit** (doesn't match Spark goals)\n\n## What You Receive\n\n### Microgrants\n\n- **500–5,000 USDC** per project\n- Non-dilutive, simple terms\n- Typically paid after approval and confirmation of a working build/demo (timing depends on program operations and compliance)\n\n### Visibility and Ecosystem Support\n\nStandout Spark projects may receive:\n\n- Social amplification and ecosystem highlights\n- Introductions to relevant ecosystem teams and partners\n- A clear path to \"level up\" into deeper support when traction is proven\n\n## Spark Success Looks Like\n\nWithin the next phase, the project delivers:\n\n- A live deployment or usable feature on Ink\n- A measurable impact signal, such as:\n    - real users or repeat usage\n    - meaningful onchain activity (transactions, volume)\n    - adoption by other builders (integrations, reuse, tooling usage)\n    - clear improvements to conversion or usability\n\nIf a project cannot explain the value it creates for Ink and how that value will be measured, it is not a fit.\n\n## How To Join Spark\n\n- Submit your project → [Spark Application Form](https://forms.inkonchain.com/spark-builder-program)\n- Get reviewed → The team reviews applications in batches and follows up with results\n- Ship and prove → Spark is designed to reward builders who deliver measurable value, not just announcements\n"
  },
  {
    "path": "src/pages/status.mdx",
    "content": "import { useEffect } from 'react'\nimport { useRouter } from 'next/router'\n\nexport default function StatusPage() {\n  useEffect(() => {\n    // Open in new tab and redirect current page back to previous page\n    window.open('https://status.inkonchain.com/', '_blank')\n    window.history.back()\n  }, [])\n\n  return (\n    <div>\n      Opening Status Page in new tab...\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/tools/_meta.json",
    "content": "{\n  \"account-abstraction\": \"Account Abstraction\",\n  \"block-explorers\": \"Block Explorers\",\n  \"bridges\": \"Bridges\",\n  \"crosschain\": \"Crosschain\",\n  \"faucets\": \"Faucets\",\n  \"indexers\": \"Indexers\",\n  \"multisig\": \"Multisig\",\n  \"oracles\": \"Oracles\",\n  \"rpc\": \"RPC\",\n  \"security\": \"Security\",\n  \"vrf\": \"VRF\"\n}\n"
  },
  {
    "path": "src/pages/tools/account-abstraction.mdx",
    "content": "# Account Abstraction\n\n## Alchemy\n\nLeverage 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.\n\n**Supported Networks**:\n\n* Ink Mainnet\n* Ink Sepolia\n\n## Safe\n\nAccess Safe’s full suite of tooling including modular smart account infrastructure and account abstraction SDK.\n\n**Supported Networks**:\n\n* [Ink Mainnet](https://app.safe.global/new-safe/create?chain=ink)\n* [Ink Sepolia](https://safe.optimism.io/welcome/accounts?chain=ink-sepolia)\n\n## ZeroDev\n\nZeroDev 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.\n\n**Supported Networks**:\n\n* Ink Mainnet\n* Ink Sepolia\n"
  },
  {
    "path": "src/pages/tools/block-explorers.mdx",
    "content": "# Block Explorer\n\n## Blockscout\n\nBlockscout 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.\n\n**Supported Networks**\n\n* [Ink Mainnet](https://explorer.inkonchain.com/)\n* [Ink Sepolia](https://explorer-sepolia.inkonchain.com/)\n\n## OKX Explorer\n\nOKX Explorer offers streamlined onchain data access, advanced tools, and unified bridge insights across integrated chains for developers.\n\n**Supported Networks**\n\n* [Ink Mainnet](https://web3.okx.com/explorer/inkchain)\n\n## Routescan\n\nThe 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.\n\n**Supported Networks**\n\n* [Ink Mainnet](https://57073.routescan.io/)\n* [Ink Sepolia](https://sepolia.inkonscan.xyz/)\n\n## Tenderly\n\nTenderly'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.\nRely 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.\n"
  },
  {
    "path": "src/pages/tools/bridges.mdx",
    "content": "import { Callout } from \"nextra/components\";\n\n# Bridges\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  Use the below bridges at your own risk. Always DYOR!\n</Callout>\n\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  Transaction times vary based on network congestion and gas fees. Please ensure\n  you have enough ETH in your wallet to cover transaction fees.\n</Callout>\n\n## Across\n\nUsing a network of solvers, Across allows users to seamlessly bridge from L1 to L2 and back without the 7 day waiting period.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://app.across.to/bridge?)\n\n## Brid.gg\n\nBrid.gg enables you to bridge assets from L1 to L2 across the Superchain.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://brid.gg/ink)\n- [Ink Sepolia](https://testnet.brid.gg/ink-sepolia)\n\n## Bungee\n\nBungee aggregates multiple bridges and DEXs to find the most cost-effective routes for swapping across chains.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://bungee.exchange)\n\n## Gelato\n\nGelato's user friendly bridge UI allows users to bridge to Ink quickly and easily.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://bridge.gelato.network/bridge/ink)\n- [Ink Sepolia](https://testnet-bridge.gelato.network/bridge/ink-sepolia)\n\n## Rhino.fi\n\nRhino.fi is a lightning fast secure bridge for seamless cross chain transactions.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://app.rhino.fi/bridge?chain=ETHEREUM&token=ETH&chainOut=INK)\n\n## Reservoir\n\nReservoir 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.\n\n\n## Superbridge\n\nSuperbridge provides a seamless bridging allowing users to choose the route which best suits their bridging needs.\n\n**Supported Networks**\n\n- [Ink Mainnet](https://superbridge.app/)\n- [Ink Sepolia](https://testnets.superbridge.app/)\n\n\n## Ink's Sepolia Bridge\n\n**Supported Networks**\n\n- [Ink Sepolia](https://inkonchain.com/bridge)\n"
  },
  {
    "path": "src/pages/tools/crosschain.mdx",
    "content": "# Crosschain Infrastructure\n\n## [LayerZero](https://docs.layerzero.network/v2/home/getting-started/what-is-layerzero)\n\n**Supported Networks**\n\n* Ink Mainnet\n* Ink Sepolia\n\n## [Wormhole](https://wormhole.com/docs/)\n\n**Supported Networks**\n\n* Ink Mainnet (coming soon)\n* Ink Sepolia\n"
  },
  {
    "path": "src/pages/tools/faucets.mdx",
    "content": "import { FaucetsContentWrapper } from '@/components/FaucetsContentWrapper'\n\n<FaucetsContentWrapper />\n"
  },
  {
    "path": "src/pages/tools/indexers.mdx",
    "content": "# Indexers\n\n## [Goldsky](https://docs.goldsky.com/chains/ink)\n\nGoldsky 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).\n\n**Supported Networks**\n\n* Ink Mainnet\n* Ink Sepolia\n\n## [Alchemy](https://www.alchemy.com/subgraphs)\n\nAlchemy provides high performance data indexing and subgraphs for Ink alongside a full stack suite of tools to help you build.\n\n**Supported Networks**\n\n* Ink Mainnet\n"
  },
  {
    "path": "src/pages/tools/multisig.mdx",
    "content": "import { MultisigContentWrapper } from '@/components/MultisigContentWrapper'\n\n<MultisigContentWrapper />"
  },
  {
    "path": "src/pages/tools/oracles.mdx",
    "content": "import CopyableCode from \"@/components/CopyableCode\";\n\n# Oracles\n\n## API3\n\nAPI3 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.\n\n| Network     | Contract Address                                                                                                                                                          |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Mainnet | <CopyableCode code=\"0x709944a48cAf83535e43471680fDA4905FB3920a\" href=\"https://explorer.inkonchain.com/address/0x709944a48cAf83535e43471680fDA4905FB3920a?tab=contract\" /> |\n\n| Network     | Contract Address                                                                                                                                                                  |\n| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Sepolia | <CopyableCode code=\"0x709944a48cAf83535e43471680fDA4905FB3920a\" href=\"https://explorer-sepolia.inkonchain.com/address/0x709944a48cAf83535e43471680fDA4905FB3920a?tab=contract\" /> |\n\n\n## Chainlink\n\n**Coming Soon**\n\n## eOracle\n\neOracle provides decentralized price feeds through a cryptoeconomically secure oracle network, backed by staked ETH and a globally distributed network of validators.\n\n| Network     | Feed     | Contract Address                                                                                                                                                          | Decimals |\n| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |\n| Ink Mainnet | BTC/USD  | <CopyableCode code=\"0xc1a823069a4439f9A5C5008eA38346d587028D37\" href=\"https://explorer.inkonchain.com/address/0xc1a823069a4439f9A5C5008eA38346d587028D37?tab=contract\" /> |    8     |\n| Ink Mainnet | ETH/USD  | <CopyableCode code=\"0xdFc720E1ef024bfc768ed9E6F0e7Fc80E28f8CFA\" href=\"https://explorer.inkonchain.com/address/0xdFc720E1ef024bfc768ed9E6F0e7Fc80E28f8CFA?tab=contract\" /> |    8     |\n| Ink Mainnet | USDC/USD | <CopyableCode code=\"0xF1d7c07d6DAA1200a137ea1146E1f8c5D6Fc0223\" href=\"https://explorer.inkonchain.com/address/0xF1d7c07d6DAA1200a137ea1146E1f8c5D6Fc0223?tab=contract\" /> |    8     |\n| Ink Mainnet | USDT/USD | <CopyableCode code=\"0xd37D8878ed854027CB3a71907b95677BB0477baf\" href=\"https://explorer.inkonchain.com/address/0xd37D8878ed854027CB3a71907b95677BB0477baf?tab=contract\" /> |    8     |\n\n| Network     | Feed     | Contract Address                                                                                                                                                                  | Decimals |\n| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |\n| Ink Sepolia | BTC/USD  | <CopyableCode code=\"0xD4bc859E0de1bAc03A5b9Ffaf71393328EB1B274\" href=\"https://explorer-sepolia.inkonchain.com/address/0xD4bc859E0de1bAc03A5b9Ffaf71393328EB1B274?tab=contract\" /> |    8     |\n| Ink Sepolia | ETH/USD  | <CopyableCode code=\"0x71bafCA6F2181C16173Dc3FAeF49090e687238D6\" href=\"https://explorer-sepolia.inkonchain.com/address/0x71bafCA6F2181C16173Dc3FAeF49090e687238D6?tab=contract\" /> |    8     |\n| Ink Sepolia | USDC/USD | <CopyableCode code=\"0x5e2C566F9B8859fF42E78F7A9540efAb9Ae71DE1\" href=\"https://explorer-sepolia.inkonchain.com/address/0x5e2C566F9B8859fF42E78F7A9540efAb9Ae71DE1?tab=contract\" /> |    8     |\n| Ink Sepolia | USDT/USD | <CopyableCode code=\"0x23552E6Ca60D94a519F66D4CF4A958049f98c652\" href=\"https://explorer-sepolia.inkonchain.com/address/0x23552E6Ca60D94a519F66D4CF4A958049f98c652?tab=contract\" /> |    8     |\n\n\n\n## Pyth\n\nPyth offers 250+ price feeds for Ink.\nSee their [guide](https://docs.pyth.network/price-feeds/getting-started) to learn how to use Pyth feeds.\n\n| Network     | Contract Address                                                                                                                                                          |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Mainnet | <CopyableCode code=\"0x2880aB155794e7179c9eE2e38200202908C17B43\" href=\"https://explorer.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?tab=contract\" /> |\n\n| Network     | Contract Address                                                                                                                                                                  |\n| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Sepolia | <CopyableCode code=\"0x2880aB155794e7179c9eE2e38200202908C17B43\" href=\"https://explorer-sepolia.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?tab=contract\" /> |\n\n## Redstone\n\nRedstone 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.\n\n| Network     | Feed     | Contract Address                                                                                                                                                          |\n| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Mainnet | BTC/USD  | <CopyableCode code=\"0x13433B1949d9141Be52Ae13Ad7e7E4911228414e\" href=\"https://explorer.inkonchain.com/address/0x13433B1949d9141Be52Ae13Ad7e7E4911228414e?tab=contract\" /> |\n| Ink Mainnet | ETH/USD  | <CopyableCode code=\"0xe5867B1d421f0b52697F16e2ac437e87d66D5fbF\" href=\"https://explorer.inkonchain.com/address/0xe5867B1d421f0b52697F16e2ac437e87d66D5fbF?tab=contract\" /> |\n| Ink Mainnet | USDT/USD | <CopyableCode code=\"0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C\" href=\"https://explorer.inkonchain.com/address/0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C?tab=contract\" /> |\n| Ink Mainnet | USDC/USD | <CopyableCode code=\"0x58fa68A373956285dDfb340EDf755246f8DfCA16\" href=\"https://explorer.inkonchain.com/address/0x58fa68A373956285dDfb340EDf755246f8DfCA16?tab=contract\" /> |\n| Ink Mainnet | SOL/USD  | <CopyableCode code=\"0xD15862FC3D5407A03B696548b6902D6464A69b8c\" href=\"https://explorer.inkonchain.com/address/0xD15862FC3D5407A03B696548b6902D6464A69b8c?tab=contract\" /> |\n\n| Network     | Feed     | Contract Address                                                                                                                                                                  |\n| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Sepolia | BTC/USD  | <CopyableCode code=\"0xf1454949C6dEdfb500ae63Aa6c784Aa1Dde08A6c\" href=\"https://explorer-sepolia.inkonchain.com/address/0xf1454949C6dEdfb500ae63Aa6c784Aa1Dde08A6c?tab=contract\" /> |\n| Ink Sepolia | ETH/USD  | <CopyableCode code=\"0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C\" href=\"https://explorer-sepolia.inkonchain.com/address/0xb4fe9028A4D4D8B3d00e52341F2BB0798860532C?tab=contract\" /> |\n| Ink Sepolia | USDT/USD | <CopyableCode code=\"0xb9D0073aCb296719C26a8BF156e4b599174fe1d5\" href=\"https://explorer-sepolia.inkonchain.com/address/0xb9D0073aCb296719C26a8BF156e4b599174fe1d5?tab=contract\" /> |\n| Ink Sepolia | USDC/USD | <CopyableCode code=\"0xb67047eDF6204F4C81333248dA71F8387050790C\" href=\"https://explorer-sepolia.inkonchain.com/address/0xb67047eDF6204F4C81333248dA71F8387050790C?tab=contract\" /> |\n| Ink Sepolia | SOL/USD  | <CopyableCode code=\"0xE94c9f9A1893f23be38A5C0394E46Ac05e8a5f8C\" href=\"https://explorer-sepolia.inkonchain.com/address/0xE94c9f9A1893f23be38A5C0394E46Ac05e8a5f8C?tab=contract\" /> |\n\n### SEDA\n\nSEDA 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.\n\n| Network     | Contract Name | Contract Address                                                                                                                                                                  |\n| ----------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Ink Sepolia | SEDA prover   | <CopyableCode code=\"0x1A2FAd0f8613B588127810D066Fc43C5Bc89F927\" href=\"https://explorer-sepolia.inkonchain.com/address/0x1A2FAd0f8613B588127810D066Fc43C5Bc89F927?tab=contract\" /> |\n"
  },
  {
    "path": "src/pages/tools/rpc.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# RPC\n\n## [Alchemy](https://www.alchemy.com/)\n\nAlchemy provides fast and reliable private RPC endpoints alongside a full suite of tools to help support your development needs.\n\n**Supported Networks**\n- Ink Mainnet\n- Ink Sepolia\n\n## [Gelato](https://gelato.network)\n\nGelato provides public and private RPC endpoints for Ink, along with websocket support.\n\n**Supported Networks**\n\n- Ink Mainnet\n- Ink Sepolia\n\n## [QuickNode](https://www.quicknode.com)\n\nQuickNode provides public and private RPC endpoints for Ink, along with websocket support and a suite of tools to help you ship.\n\n**Supported Networks**\n\n- Ink Mainnet\n- Ink Sepolia \n\n<Callout type=\"info\">\n  Need a managed node solution?\n  [QuickNode](https://www.quicknode.com/chains/ink) offers Ink nodes with APIs,\n  tools, and an easy-to-use control panel.\n</Callout>\n\n## [Tenderly](https://tenderly.co)\n\nTenderly provides robust RPC infrastructure with advanced debugging capabilities and comprehensive monitoring tools.\n\n**Supported Networks**\n\n- Ink Mainnet\n- Ink Sepolia\n\n<Callout type=\"info\">\n  Looking for advanced debugging tools?\n  [Tenderly](https://tenderly.co/transaction-previews?mtm_campaign=ext-docs&mtm_kwd=ink) provides detailed transaction\n  insights and monitoring capabilities for Ink.\n</Callout>\n\n## [dRPC](https://drpc.org)\n\ndRPC provides enterprise-level RPC infrastructure with globally distributed nodes, decentralized architecture and focus on privacy.\n\n**Supported Networks**\n\n- Ink Mainnet\n- Ink Sepolia\n\n<Callout type=\"info\">\n  Searching for reliable RPC infrastructure?\n  [dRPC](https://drpc.org/chainlist/ink) works seamlessly with Ink and all Superchain networks.\n</Callout>\n\n\n<br />\n<br />\n<br />\n\n# Public Endpoints\n\nTo connect to Ink Sepolia or Ink Mainnet, you can select from multiple RPC providers, each offering reliable infrastructure with unique features and capabilities.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  Interested in running your own node? Check out [our\n  tutorial](https://github.com/inkonchain/node).\n</Callout>\n\n### 1. Gelato\n\nGelato provides high-performance, globally distributed RPC endpoints with automatic failover.\n\n#### Ink Mainnet\n\n- HTTPS: <CopyableCode code=\"https://rpc-gel.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://ws-gel.inkonchain.com\" />\n\n#### Ink Sepolia\n\n- HTTPS: <CopyableCode code=\"https://rpc-gel-sepolia.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://ws-gel-sepolia.inkonchain.com\" />\n\n---\n\n### 2. Tenderly\n\nTenderly provides robust RPC endpoints with detailed transaction debugging capabilities.\n\n#### Ink Mainnet\n\n- HTTPS: <CopyableCode code=\"https://rpc-ten.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://rpc-ten.inkonchain.com \" />\n\n#### Ink Sepolia\n\n- HTTPS: <CopyableCode code=\"https://rpc-ten-sepolia.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://rpc-ten-sepolia.inkonchain.com\" />\n\n### 3. QuickNode\n\nQuickNode provides public and private RPC endpoints for Ink, along with websocket support and a suite of tools to help you ship.\n\n#### Ink Mainnet\n\n- HTTPS: <CopyableCode code=\"https://rpc-qnd.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://rpc-qnd.inkonchain.com\" />\n\n#### Ink Sepolia\n\n- HTTPS: <CopyableCode code=\"https://rpc-qnd-sepolia.inkonchain.com\" />\n- Websocket: <CopyableCode code=\"wss://rpc-qnd-sepolia.inkonchain.com\" />\n\n### 4. dRPC\n\ndRPC provides globally distributed nodes for public and premium Ink RPC endpoints, including websocket support.\n\n#### Ink Mainnet\n\n- HTTPS: <CopyableCode code=\"https://ink.drpc.org\" />\n- Websocket: <CopyableCode code=\"wss://ink.drpc.org\" />\n\n#### Ink Sepolia\n\n- HTTPS: <CopyableCode code=\"https://ink-sepolia.drpc.org\" />\n- Websocket: <CopyableCode code=\"wss://ink-sepolia.drpc.org\" />\n\n"
  },
  {
    "path": "src/pages/tools/security.mdx",
    "content": "# Security\n\n## Hypernative\n\n[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.\n\n**Supported Networks**\n\n* Ink Mainnet\n* Ink Sepolia\n\n## Tenderly\n\n[Tenderly](https://www.tenderly.co/) offers security tools to help developers build and maintain secure dapps and  smart contracts. \n\n* 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.\n* 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.\n* 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.\n\n**Supported Networks**\n\n* Ink Mainnet\n* Ink Sepolia\n"
  },
  {
    "path": "src/pages/tools/vrf.mdx",
    "content": "# VRF\n\n## Gelato\n\n[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)!\n\n**Supported Networks**\n\n* Ink Mainnet\n* Ink Sepolia\n"
  },
  {
    "path": "src/pages/useful-information/_meta.json",
    "content": "{\n  \"contracts\": \"Contracts\",\n  \"ink-contracts\": \"Ink Contracts\",\n  \"ink-token-contracts\": {\n    \"title\": \"Ink Token Contracts\",\n    \"display\": \"hidden\"\n  },\n  \"the-superchain\": \"The Superchain\"\n}\n"
  },
  {
    "path": "src/pages/useful-information/contracts.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Ink Contract Addresses\n\n### Ink L2 Contract Addresses\n\n#### Ink Mainnet\n\n| Contract Name                 | Contract Address                                                                                                                                             |\n| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| BaseFeeVault                  | <CopyableCode code=\"0x4200000000000000000000000000000000000019\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000019\" /> |\n| EAS                           | <CopyableCode code=\"0x4200000000000000000000000000000000000021\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000021\" /> |\n| ERC5564Announcer              | <CopyableCode code=\"0x55649E01B5Df198D18D95b5cc5051630cfD45564\" href=\"https://explorer.inkonchain.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564\" /> |\n| ERC6538Registry               | <CopyableCode code=\"0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" href=\"https://explorer.inkonchain.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" /> |\n| GasPriceOracle                | <CopyableCode code=\"0x420000000000000000000000000000000000000F\" href=\"https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000000F\" /> |\n| L1FeeVault                    | <CopyableCode code=\"0x420000000000000000000000000000000000001a\" href=\"https://explorer.inkonchain.com/address/0x420000000000000000000000000000000000001a\" /> |\n| L2CrossDomainMessenger        | <CopyableCode code=\"0x4200000000000000000000000000000000000007\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000007\" /> |\n| L2ERC721Bridge                | <CopyableCode code=\"0x4200000000000000000000000000000000000014\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000014\" /> |\n| L2StandardBridge              | <CopyableCode code=\"0x4200000000000000000000000000000000000010\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000010\" /> |\n| L2ToL1MessagePasser           | <CopyableCode code=\"0x4200000000000000000000000000000000000016\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000016\" /> |\n| OptimismMintableERC20Factory  | <CopyableCode code=\"0x4200000000000000000000000000000000000012\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000012\" /> |\n| OptimismMintableERC721Factory | <CopyableCode code=\"0x4200000000000000000000000000000000000017\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000017\" /> |\n| ProxyAdmin                    | <CopyableCode code=\"0x4200000000000000000000000000000000000018\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000018\" /> |\n| SchemaRegistry                | <CopyableCode code=\"0x4200000000000000000000000000000000000020\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000020\" /> |\n| SequencerFeeVault             | <CopyableCode code=\"0x4200000000000000000000000000000000000011\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000011\" /> |\n| SuperchainERC20Bridge         | <CopyableCode code=\"0x4200000000000000000000000000000000000028\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000028\" /> |\n| WETH9                         | <CopyableCode code=\"0x4200000000000000000000000000000000000006\" href=\"https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000006\" /> |\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  These addresses are predeterministic and the same on Ink Sepolia- see\n  [documentation](https://specs.optimism.io/protocol/predeploys.html).\n</Callout>\n\n### L1 Contract Addresses\n\n#### Ethereum Mainnet\n\n| Contract Name                | Contract Address                                                                                                                                        |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| AddressManager               | <CopyableCode code=\"0x9b7c9bbd6d540a8a4dedd935819fc4408ba71153\" href=\"https://eth.blockscout.com/address/0x9b7c9bbd6d540a8a4dedd935819fc4408ba71153\" /> |\n| AnchorStateRegistry          | <CopyableCode code=\"0xde744491bcf6b2dd2f32146364ea1487d75e2509\" href=\"https://eth.blockscout.com/address/0xde744491bcf6b2dd2f32146364ea1487d75e2509\" /> |\n| DelayedWETHPermissionedGame  | <CopyableCode code=\"0x14773a8040ff22e3dcbb0c83ec8e33be7d920d38\" href=\"https://eth.blockscout.com/address/0x14773a8040ff22e3dcbb0c83ec8e33be7d920d38\" /> |\n| DisputeGameFactory           | <CopyableCode code=\"0x10d7b35078d3baabb96dd45a9143b94be65b12cd\" href=\"https://eth.blockscout.com/address/0x10d7b35078d3baabb96dd45a9143b94be65b12cd\" /> |\n| ERC5564Announcer             | <CopyableCode code=\"0x55649E01B5Df198D18D95b5cc5051630cfD45564\" href=\"https://eth.blockscout.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564\" /> |\n| ERC6538Registry              | <CopyableCode code=\"0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" href=\"https://eth.blockscout.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" /> |\n| L1CrossDomainMessenger       | <CopyableCode code=\"0x69d3cf86b2bf1a9e99875b7e2d9b6a84426c171f\" href=\"https://eth.blockscout.com/address/0x69d3cf86b2bf1a9e99875b7e2d9b6a84426c171f\" /> |\n| L1ERC721Bridge               | <CopyableCode code=\"0x661235a238b11191211fa95d4dd9e423d521e0be\" href=\"https://eth.blockscout.com/address/0x661235a238b11191211fa95d4dd9e423d521e0be\" /> |\n| L1StandardBridge             | <CopyableCode code=\"0x88ff1e5b602916615391f55854588efcbb7663f0\" href=\"https://eth.blockscout.com/address/0x88ff1e5b602916615391f55854588efcbb7663f0\" /> |\n| OptimismMintableERC20Factory | <CopyableCode code=\"0xa8b389a82e088b164cd03230e900980cced34d29\" href=\"https://eth.blockscout.com/address/0xa8b389a82e088b164cd03230e900980cced34d29\" /> |\n| OptimismPortal               | <CopyableCode code=\"0x5d66c1782664115999c47c9fa5cd031f495d3e4f\" href=\"https://eth.blockscout.com/address/0x5d66c1782664115999c47c9fa5cd031f495d3e4f\" /> |\n| ProxyAdmin                   | <CopyableCode code=\"0xd56045E68956FCe2576E680c95a4750cf8241f79\" href=\"https://eth.blockscout.com/address/0xd56045E68956FCe2576E680c95a4750cf8241f79\" /> |\n| SystemConfig                 | <CopyableCode code=\"0x62c0a111929fa32cec2f76adba54c16afb6e8364\" href=\"https://eth.blockscout.com/address/0x62c0a111929fa32cec2f76adba54c16afb6e8364\" /> |\n\n#### Sepolia\n\n| Contract Name                | Contract Address                                                                                                                                                |\n| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| AddressManager               | <CopyableCode code=\"0x3454f9df5e750f1383e58c1cb001401e7a4f3197\" href=\"https://eth-sepolia.blockscout.com/address/0x3454f9df5e750f1383e58c1cb001401e7a4f3197\" /> |\n| AnchorStateRegistry          | <CopyableCode code=\"0x89126a987717207d4e990ed2e8880fd170dcea1a\" href=\"https://eth-sepolia.blockscout.com/address/0x89126a987717207d4e990ed2e8880fd170dcea1a\" /> |\n| DelayedWETHPermissionedGame  | <CopyableCode code=\"0x180ac451088b8f87006ab0ca98a01507e42ac456\" href=\"https://eth-sepolia.blockscout.com/address/0x180ac451088b8f87006ab0ca98a01507e42ac456\" /> |\n| DisputeGameFactory           | <CopyableCode code=\"0x860e626c700af381133d9f4af31412a2d1db3d5d\" href=\"https://eth-sepolia.blockscout.com/address/0x860e626c700af381133d9f4af31412a2d1db3d5d\" /> |\n| ERC5564Announcer             | <CopyableCode code=\"0x55649E01B5Df198D18D95b5cc5051630cfD45564\" href=\"https://eth-sepolia.blockscout.com/address/0x55649E01B5Df198D18D95b5cc5051630cfD45564\" /> |\n| ERC6538Registry              | <CopyableCode code=\"0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" href=\"https://eth-sepolia.blockscout.com/address/0x6538E6bf4B0eBd30A8Ea093027Ac2422ce5d6538\" /> |\n| L1CrossDomainMessenger       | <CopyableCode code=\"0x9fe1d3523f5342535e6e7770ed09ed85dbc1acc2\" href=\"https://eth-sepolia.blockscout.com/address/0x9fe1d3523f5342535e6e7770ed09ed85dbc1acc2\" /> |\n| L1ERC721Bridge               | <CopyableCode code=\"0xd1c901bbd7796546a7ba2492e0e199911fae68c7\" href=\"https://eth-sepolia.blockscout.com/address/0xd1c901bbd7796546a7ba2492e0e199911fae68c7\" /> |\n| L1StandardBridge             | <CopyableCode code=\"0x33f60714bbd74d62b66d79213c348614de51901c\" href=\"https://eth-sepolia.blockscout.com/address/0x33f60714bbd74d62b66d79213c348614de51901c\" /> |\n| OptimismMintableERC20Factory | <CopyableCode code=\"0x686f782a749d1854f6fa3f948450f4c65c6674f0\" href=\"https://eth-sepolia.blockscout.com/address/0x686f782a749d1854f6fa3f948450f4c65c6674f0\" /> |\n| OptimismPortal               | <CopyableCode code=\"0x5c1d29c6c9c8b0800692acc95d700bcb4966a1d7\" href=\"https://eth-sepolia.blockscout.com/address/0x5c1d29c6c9c8b0800692acc95d700bcb4966a1d7\" /> |\n| ProxyAdmin                   | <CopyableCode code=\"0xd7db319a49362b2328cf417a934300cccb442c8d\" href=\"https://eth-sepolia.blockscout.com/address/0xd7db319a49362b2328cf417a934300cccb442c8d\" /> |\n| SystemConfig                 | <CopyableCode code=\"0x05c993e60179f28bf649a2bb5b00b5f4283bd525\" href=\"https://eth-sepolia.blockscout.com/address/0x05c993e60179f28bf649a2bb5b00b5f4283bd525\" /> |\n\n### Pre Installs\n\n#### Ink Mainnet\n\n| Contract Name                             | Contract Address                                                                                                                                                     |\n| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Arachnid's Deterministic Deployment Proxy | <CopyableCode code=\"0x4e59b44847b379578588920cA78FbF26c0B4956C\" href=\"https://explorer.inkonchain.com/address/0x4e59b44847b379578588920cA78FbF26c0B4956C\" /> |\n| Create2Deployer                           | <CopyableCode code=\"0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2\" href=\"https://explorer.inkonchain.com/address/0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2\" /> |\n| CreateX                                   | <CopyableCode code=\"0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed\" href=\"https://explorer.inkonchain.com/address/0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed\" /> |\n| ERC-4337 v0.6.0 EntryPoint                | <CopyableCode code=\"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\" href=\"https://explorer.inkonchain.com/address/0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\" /> |\n| ERC-4337 v0.6.0 SenderCreator             | <CopyableCode code=\"0x7fc98430eaedbb6070b35b39d798725049088348\" href=\"https://explorer.inkonchain.com/address/0x7fc98430eaedbb6070b35b39d798725049088348\" /> |\n| ERC-4337 v0.7.0 EntryPoint                | <CopyableCode code=\"0x0000000071727De22E5E9d8BAf0edAc6f37da032\" href=\"https://explorer.inkonchain.com/address/0x0000000071727De22E5E9d8BAf0edAc6f37da032\" /> |\n| ERC-4337 v0.7.0 SenderCreator             | <CopyableCode code=\"0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C\" href=\"https://explorer.inkonchain.com/address/0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C\" /> |\n| Multicall3                                | <CopyableCode code=\"0xcA11bde05977b3631167028862bE2a173976CA11\" href=\"https://explorer.inkonchain.com/address/0xcA11bde05977b3631167028862bE2a173976CA11\" /> |\n| MultiSend                                 | <CopyableCode code=\"0x998739BFdAAdde7C933B942a68053933098f9EDa\" href=\"https://explorer.inkonchain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa\" /> |\n| MultiSendCallOnly                         | <CopyableCode code=\"0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B\" href=\"https://explorer.inkonchain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B\" /> |\n| Permit2                                   | <CopyableCode code=\"0x000000000022D473030F116dDEE9F6B43aC78BA3\" href=\"https://explorer.inkonchain.com/address/0x000000000022D473030F116dDEE9F6B43aC78BA3\" /> |\n| Safe                                      | <CopyableCode code=\"0x69f4D1788e39c87893C980c06EdF4b7f686e2938\" href=\"https://explorer.inkonchain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938\" /> |\n| SafeL2                                    | <CopyableCode code=\"0xfb1bffC9d739B8D520DaF37dF666da4C687191EA\" href=\"https://explorer.inkonchain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA\" /> |\n| SafeSingletonFactory                      | <CopyableCode code=\"0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7\" href=\"https://explorer.inkonchain.com/address/0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7\" /> |\n\nFor more information on these preinstalls, take a look at the [Optimism Specs](https://specs.optimism.io/protocol/preinstalls.html).\n\n#### Ink Sepolia\n\n| Contract Name                             | Contract Address                                                                                                                                            |\n| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Arachnid's Deterministic Deployment Proxy | <CopyableCode code=\"0x4e59b44847b379578588920cA78FbF26c0B4956C\" href=\"https://explorer-sepolia.inkonchain.com/address/0x4e59b44847b379578588920cA78FbF26c0B4956C\" /> |\n| Create2Deployer                           | <CopyableCode code=\"0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2\" href=\"https://explorer-sepolia.inkonchain.com/address/0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2\" /> |\n| CreateX                                   | <CopyableCode code=\"0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed\" href=\"https://explorer-sepolia.inkonchain.com/address/0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed\" /> |\n| ERC-4337 v0.6.0 EntryPoint                | <CopyableCode code=\"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\" href=\"https://explorer-sepolia.inkonchain.com/address/0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\" /> |\n| ERC-4337 v0.6.0 SenderCreator             | <CopyableCode code=\"0x7fc98430eaedbb6070b35b39d798725049088348\" href=\"https://explorer-sepolia.inkonchain.com/address/0x7fc98430eaedbb6070b35b39d798725049088348\" /> |\n| ERC-4337 v0.7.0 EntryPoint                | <CopyableCode code=\"0x0000000071727De22E5E9d8BAf0edAc6f37da032\" href=\"https://explorer-sepolia.inkonchain.com/address/0x0000000071727De22E5E9d8BAf0edAc6f37da032\" /> |\n| ERC-4337 v0.7.0 SenderCreator             | <CopyableCode code=\"0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C\" href=\"https://explorer-sepolia.inkonchain.com/address/0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C\" /> |\n| Multicall3                                | <CopyableCode code=\"0xcA11bde05977b3631167028862bE2a173976CA11\" href=\"https://explorer-sepolia.inkonchain.com/address/0xcA11bde05977b3631167028862bE2a173976CA11\" /> |\n| MultiSend                                 | <CopyableCode code=\"0x998739BFdAAdde7C933B942a68053933098f9EDa\" href=\"https://explorer-sepolia.inkonchain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa\" /> |\n| MultiSendCallOnly                         | <CopyableCode code=\"0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B\" href=\"https://explorer-sepolia.inkonchain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B\" /> |\n| Permit2                                   | <CopyableCode code=\"0x000000000022D473030F116dDEE9F6B43aC78BA3\" href=\"https://explorer-sepolia.inkonchain.com/address/0x000000000022D473030F116dDEE9F6B43aC78BA3\" /> |\n| Safe                                      | <CopyableCode code=\"0x69f4D1788e39c87893C980c06EdF4b7f686e2938\" href=\"https://explorer-sepolia.inkonchain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938\" /> |\n| SafeL2                                    | <CopyableCode code=\"0xfb1bffC9d739B8D520DaF37dF666da4C687191EA\" href=\"https://explorer-sepolia.inkonchain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA\" /> |\n| SafeSingletonFactory                      | <CopyableCode code=\"0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7\" href=\"https://explorer-sepolia.inkonchain.com/address/0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7\" /> |\n\n## Contract Deployments - Instructions for Developers\n\n###### Contract Verification\n\nPlease see [how to verify contracts](/build/tutorials/verify-smart-contract).\n"
  },
  {
    "path": "src/pages/useful-information/ink-contracts.mdx",
    "content": "import { Callout } from \"nextra/components\";\nimport CopyableCode from \"@/components/CopyableCode\";\n\n# Ink Contracts\n\n<Callout type=\"info\" emoji=\"ℹ️\">\n  This page is a work in progress. If there are missing tokens, please feel free\n  to edit this page by submitting a PR to our\n  [Github](https://github.com/inkonchain).\n</Callout>\n\n| Name    | Contract Address                                                                                                                                           |\n| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| CRV     | <CopyableCode code=\"0xAC73671a1762FE835208Fb93b7aE7490d1c2cCb3\" href=\"https://explorer.inkonchain.com/token/0xAC73671a1762FE835208Fb93b7aE7490d1c2cCb3\" /> |\n| crvUSD  | <CopyableCode code=\"0x39fec550CC6DDCEd810eCCfA9B2931b4B5f2344D\" href=\"https://explorer.inkonchain.com/token/0x39fec550CC6DDCEd810eCCfA9B2931b4B5f2344D\" /> |\n| FPI     | <CopyableCode code=\"0x90581eCa9469D8D7F5D3B60f4715027aDFCf7927\" href=\"https://explorer.inkonchain.com/address/0x90581eCa9469D8D7F5D3B60f4715027aDFCf7927\" /> |\n| frxETH  | <CopyableCode code=\"0x43eDD7f3831b08FE70B7555ddD373C8bF65a9050\" href=\"https://explorer.inkonchain.com/address/0x43eDD7f3831b08FE70B7555ddD373C8bF65a9050\" /> |\n| frxUSD  | <CopyableCode code=\"0x80eede496655fb9047dd39d9f418d5483ed600df\" href=\"https://explorer.inkonchain.com/token/0x80eede496655fb9047dd39d9f418d5483ed600df\" /> |\n| FXS     | <CopyableCode code=\"0x64445f0aecc51e94ad52d8ac56b7190e764e561a\" href=\"https://explorer.inkonchain.com/address/0x64445f0aecc51e94ad52d8ac56b7190e764e561a\" /> |\n| sfrxETH | <CopyableCode code=\"0x3ec3849c33291a9ef4c5db86de593eb4a37fde45\" href=\"https://explorer.inkonchain.com/address/0x3ec3849c33291a9ef4c5db86de593eb4a37fde45\" /> |\n| sfrxUSD | <CopyableCode code=\"0x5bff88ca1442c2496f7e475e9e7786383bc070c0\" href=\"https://explorer.inkonchain.com/token/0x5bff88ca1442c2496f7e475e9e7786383bc070c0\" /> |\n| USDC.e  | <CopyableCode code=\"0xF1815bd50389c46847f0Bda824eC8da914045D14\" href=\"https://explorer.inkonchain.com/token/0xF1815bd50389c46847f0Bda824eC8da914045D14\" /> |\n| USDT0    | <CopyableCode code=\"0x0200C29006150606B650577BBE7B6248F58470c1\" href=\"https://explorer.inkonchain.com/token/0x0200C29006150606B650577BBE7B6248F58470c1\" /> |\n| WETH9   | <CopyableCode code=\"0x4200000000000000000000000000000000000006\" href=\"https://explorer.inkonchain.com/token/0x4200000000000000000000000000000000000006\" /> |\n"
  },
  {
    "path": "src/pages/useful-information/ink-token-contracts.mdx",
    "content": "import { useEffect } from 'react'\nimport { useRouter } from 'next/router'\n\nexport default function Redirect() {\n  const router = useRouter()\n\n  useEffect(() => {\n    router.replace('/useful-information/ink-contracts')\n  }, [])\n\n  return null\n}"
  },
  {
    "path": "src/pages/useful-information/the-superchain.mdx",
    "content": "import { Callout } from \"nextra/components\";\n\n# The Superchain\n\n## What is the Superchain?\n\n- 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.\n- 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.\n- The Superchain's mission is to achieve revolutionary scalability for blockchains.\n\nThe Superchain puts forward a new architecture for multi-chain ecosystems.\n- New chains, when introduced, frequently have divergent security models and significant expenses associated with their rollout.\n- 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.\n\n<Callout type=\"info\" emoji=\"ℹ️\">\nThe end goal of the Superchain is for developers to be able to abstract away underlying chains when developing dapps.\n</Callout>\n\n### What defines the Superchain?\n\nThe Superchain is a network of interoperable blockchains, including Ink and Optimism. The Superchain satisfies the following properties:\n\n| Property                                     | Purpose                                                                                    |\n| :------------------------------------------- | :----------------------------------------------------------------------------------------- |\n| Shared L1 blockchain                         | Provides a total ordering of transactions across all OP Chains.                            |\n| Shared bridge for all OP Chains              | Enables OP Chains to have standardized security properties.                                |\n| Cheap OP Chain deployment                    | Enables deploying and transacting on OP Chains without the high fees of transacting on L1. |\n| Configuration options for OP Chains          | Enables OP Chains to configure their data availability provider, sequencer address, etc.   |\n| Secure transactions and cross-chain messages | Enables users to safely migrate state between OP Chains.                                   |\n\n<Callout type=\"info\" emoji=\"ℹ️\">\nCheck out the Optimism docs on architecture: [the OP Stack](https://docs.optimism.io/stack/explainer).\n</Callout>\n\n## Ink and the Superchain\n\nInk 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.\n\n## Developing on the Superchain\n\nYou can use [Supersim](https://github.com/ethereum-optimism/supersim) to simulate the Superchain and develop apps that can be used across any chain!\n\nSupersim enables builders to:\n\n* Experiment with apps that can be accessed from any chain\n* Create tokens with **SuperchainERC20**, a fungible token standard for tokens that can be used across the Superchain\n* Simulate crosschain messaging\n"
  },
  {
    "path": "src/pages/work-with-ink/_meta.json",
    "content": "{\n    \"community\": {\n        \"title\": \"Community\"\n        },\n    \"contributing\": {\n        \"title\": \"Contribution Guide\"\n        }\n}"
  },
  {
    "path": "src/pages/work-with-ink/brand-kit.mdx",
    "content": "---\ntitle: Brand Kit\ndescription: The core essence of the Ink branding, featuring logos, colors, typefaces, illustrations, and best practices\n---\n\nimport Image from \"next/image\";\nimport { DownloadButton } from \"@/components/DownloadButton\";\nimport { DownloadIcon } from \"@/icons/Download\";\n\n# Brand Kit\n\n<div className=\"w-full rounded-xl overflow-hidden my-8\">\n  <Image\n    src=\"/images/brand-kit/docs-hero.png\"\n    alt=\"Ink Brand Kit Banner\"\n    width={1200}\n    height={400}\n    priority\n  />\n</div>\n\nThis 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.\n\n<div className=\"mt-6\">\n  <DownloadButton\n    sourceFilePath=\"/downloads/ink-brand-kit.zip\"\n    destinationFileName=\"ink-brand-kit.zip\"\n    label=\"Download Brand Kit\"\n    size=\"1.5 MB\"\n  />\n</div>\n\n## Logo\n\nThe Ink logo consists of a symbol and a word mark.<br/>\nWherever possible, the horizontal full logo should be used.\n\n<div className=\"mt-6\">\n  <DownloadButton\n    sourceFilePath=\"/downloads/ink-logos.zip\"\n    destinationFileName=\"ink-logos.zip\"\n    label=\"Download Logos\"\n    size=\"493 KB\"\n  />\n</div>\n\n### Logo System\n\n<div className=\"flex flex-col gap-8\">\n  <div className=\"flex gap-4 mt-7\">\n    <div className=\"flex-[2.0619] flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-wordmark.png\"\n        alt=\"Ink Full Logo\"\n        width={1099}\n        height={528}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">Full Ink logo</span>\n    </div>\n    <div className=\"flex-1 flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-symbol.png\"\n        alt=\"Ink Chain Mark\"\n        width={533}\n        height={528}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">Ink chain mark</span>\n    </div>\n  </div>\n  <div className=\"flex gap-4\">\n    <div className=\"flex-[2.0619] flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-wordmark-margin.png\"\n        alt=\"Ink Full Logo with Safe Margin\"\n        width={1099}\n        height={528}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">Safe margin</span>\n    </div>\n    <div className=\"flex-1 flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-symbol-margin.png\"\n        alt=\"Ink Chain Mark with Safe Margin\"\n        width={533}\n        height={528}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">Safe margin</span>\n    </div>\n  </div>\n</div>\n\n### Logo Extensions\n\n<div className=\"flex flex-col gap-8\">\n  <div className=\"flex gap-4 mt-7\">\n    <div className=\"flex-1 flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-extension-kraken.png\"\n        alt=\"Ink Logo with Kraken Extension\"\n        width={815}\n        height={529}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">With Kraken</span>\n    </div>\n    <div className=\"flex-1 flex flex-col gap-3\">\n      <Image\n        src=\"/images/brand-kit/docs-logo-stacked.png\"\n        alt=\"Ink Logo Stacked with Other Marks\"\n        width={815}\n        height={529}\n        priority\n        className=\"w-full\"\n      />\n      <span className=\"font-bold text-xs\">With other marks</span>\n    </div>\n  </div>\n  <div className=\"flex-1 flex flex-col gap-3\">\n    <Image\n      src=\"/images/brand-kit/docs-logo-partnerships.png\"\n      alt=\"Ink Logo Partnership Examples\"\n      width={1668}\n      height={529}\n      priority\n      className=\"w-full\"\n    />\n    <span className=\"font-bold text-xs\">Partnerships</span>\n  </div>\n</div>\n\n## Color\n\nInk purple should be used whenever possible.<br/>\nBackgrounds typically use gradients.\n\n<div className=\"my-8\">\n  <Image\n    src=\"/images/brand-kit/docs-color.png\"\n    alt=\"Ink Colors\"\n    width={1666}\n    height={1417}\n    priority\n    className=\"w-full\"\n  />\n</div>\n\n## Typography\n\nInk uses the open source typeface Plus Jakarta Sans.<br/>\nLurus Alternatives are used in most cases.\n\n<div className=\"flex flex-col gap-8 mt-6\">\n  <div>\n    <DownloadButton\n      sourceFilePath=\"/downloads/ink-typeface.zip\"\n      destinationFileName=\"ink-typeface.zip\"\n      label=\"Download Typeface\"\n      size=\"1 MB\"\n    />\n  </div>\n\n  <div>\n    <Image\n      src=\"/images/brand-kit/docs-type.png\"\n      alt=\"Ink Typography\"\n      width={1666}\n      height={1417}\n      priority\n      className=\"w-full\"\n    />\n  </div>\n</div>\n"
  },
  {
    "path": "src/pages/work-with-ink/community.mdx",
    "content": "import { CommunityContentWrapper } from '@/components/CommunityContentWrapper'\n\n<CommunityContentWrapper />\n"
  },
  {
    "path": "src/pages/work-with-ink/contributing.mdx",
    "content": "import { URLS } from \"@/utils/urls\";\n\nexport const config = {\n  theme: {\n    pagination: false,\n  },\n};\n\n# Contributing to Ink\n\n### Contributing to the Documentation\n\nIf you'd like to contribute to our documentation, please visit our [github](https://github.com/inkonchain) and submit your PRs!\n"
  },
  {
    "path": "src/types/mdx.d.ts",
    "content": "declare module \"*.mdx\" {\n  import type { ComponentType } from \"react\";\n\n  const component: ComponentType<{\n    components?: {\n      [key: string]: ComponentType<any>;\n    };\n  }>;\n  export default component;\n}\n"
  },
  {
    "path": "src/utils/networks.ts",
    "content": "import { useEffect, useState } from \"react\";\n\nexport type NetworkType = \"mainnet\" | \"sepolia\";\n\nexport const networkParams = {\n  mainnet: {\n    chainId: \"0xdef1\", // 57073 in hexadecimal\n    chainName: \"Ink Mainnet\",\n    nativeCurrency: {\n      name: \"Ether\",\n      symbol: \"ETH\",\n      decimals: 18,\n    },\n    rpcUrls: [\"https://rpc-gel.inkonchain.com\"],\n    blockExplorerUrls: [\"https://explorer.inkonchain.com/\"],\n  },\n  sepolia: {\n    chainId: \"0xba5ed\", // 763373\n    chainName: \"Ink Sepolia\",\n    nativeCurrency: {\n      name: \"Ether\",\n      symbol: \"ETH\",\n      decimals: 18,\n    },\n    rpcUrls: [\"https://rpc-gel-sepolia.inkonchain.com\"],\n    blockExplorerUrls: [\"https://explorer-sepolia.inkonchain.com\"],\n  },\n};\n\nexport async function isNetworkAdded(network: NetworkType): Promise<boolean> {\n  if (!(window as any).ethereum) return false;\n\n  try {\n    const chainId = await (window as any).ethereum.request({\n      method: \"eth_chainId\",\n    });\n    return (\n      chainId.toLowerCase() === networkParams[network].chainId.toLowerCase()\n    );\n  } catch (error) {\n    console.error(\"Error checking network:\", error);\n    return false;\n  }\n}\n\nexport type UseNetworkResponse = {\n  isWalletInstalled: boolean;\n  isAdded: boolean;\n  isSelected: boolean;\n  addNetwork: () => Promise<void>;\n  selectNetwork: () => Promise<void>;\n};\n\nexport function useNetwork(network: NetworkType): UseNetworkResponse {\n  const [isWalletInstalled, setIsWalletInstalled] = useState<boolean>(false);\n  const [isAdded, setIsAdded] = useState<boolean>(false);\n  const [isSelected, setIsSelected] = useState<boolean>(false);\n\n  console.log(`${network} is added: ${isAdded}`);\n\n  // Check if network is added and selected on mount and when network changes\n  useEffect(() => {\n    const checkNetwork = async () => {\n      if (window.ethereum) {\n        try {\n          const chainId = await window.ethereum.request({\n            method: \"eth_chainId\",\n          });\n          const isCurrentNetwork =\n            chainId.toLowerCase() ===\n            networkParams[network].chainId.toLowerCase();\n          setIsSelected(isCurrentNetwork);\n          setIsAdded(isCurrentNetwork || isAdded); // If we're on the network, it must be added\n        } catch (error) {\n          console.error(\"Error checking network:\", error);\n        }\n      }\n      setIsWalletInstalled(window.ethereum !== undefined);\n    };\n\n    checkNetwork();\n\n    // Listen for chain changes\n    if (window.ethereum) {\n      window.ethereum.on(\"chainChanged\", checkNetwork);\n      return () => {\n        window.ethereum.removeListener(\"chainChanged\", checkNetwork);\n      };\n    }\n  }, [network, isAdded]);\n\n  async function addNetwork(): Promise<void> {\n    if (!window.ethereum) return;\n\n    try {\n      await window.ethereum.request({\n        method: \"wallet_addEthereumChain\",\n        params: [networkParams[network]],\n      });\n      setIsAdded(true);\n      await selectNetwork(); // Automatically switch to the network after adding\n    } catch (error) {\n      console.error(\"Error adding network:\", error);\n    }\n  }\n\n  async function selectNetwork(): Promise<void> {\n    if (!window.ethereum) return;\n\n    try {\n      await window.ethereum.request({\n        method: \"wallet_switchEthereumChain\",\n        params: [{ chainId: networkParams[network].chainId }],\n      });\n      setIsSelected(true);\n    } catch (error) {\n      console.error(\"Error switching network:\", error);\n    }\n  }\n\n  return { isWalletInstalled, isAdded, isSelected, addNetwork, selectNetwork };\n}\n"
  },
  {
    "path": "src/utils/urls.ts",
    "content": "export const URLS = {\n  githubOrgUrl: \"https://github.com/inkonchain\",\n  statusPageUrl: \"https://status.inkonchain.com/\",\n  faucetUrl: \"https://app.optimism.io/faucet\",\n  inkubatorUrl: \"https://inkonchain.com/inkubator\",\n  repositoryUrl: \"https://github.com/inkonchain/docs\",\n  developerWaitlistUrl: \"https://inkonchain.com\",\n  feedbackUrl: \"https://inkonchain.com\",\n  editDocsOnGithub: \"https://github.com/inkonchain\",\n};\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  darkMode: 'class',\n  content: [\n    './src/**/*.{js,jsx,ts,tsx,md,mdx}',\n    './theme.config.tsx'\n  ],\n  theme: {\n    extend: {\n      borderRadius: {\n        '4xl': '2rem',\n        '5xl': '2.5rem',\n        '6xl': '3rem',  // This is a very large radius\n      },\n      colors: {\n        magic: {\n          purple: \"#7132F5\",\n          'semi-deep-purple': '#855BFB',\n          'deep-purple': \"#2B1463\",\n          black: \"#101114\",\n          white: \"#F0EFFF\",\n          'soft-pink': \"#F7D2FE\",\n          'link-purple': '#B794FF',\n        },\n        'ink-grey': {\n          100: '#F3F4F6',\n          400: '#6B7280',\n          700: '#374151',\n        },\n      },\n      fontFamily: {\n        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'],\n      },\n    },\n  },\n  plugins: [],\n}\n"
  },
  {
    "path": "theme.config.tsx",
    "content": "import { clsx } from \"clsx\";\nimport { useRouter } from \"next/router\";\nimport { DocsThemeConfig } from \"nextra-theme-docs\";\n\nimport { Footer } from \"@/components/Footer\";\nimport { Head } from \"@/components/Head\";\nimport { SidebarTitleComponent } from \"@/components/SidebarTitleComponent\";\nimport { ThemeToggle } from \"@/components/ThemeToggle\";\nimport { Toc } from \"@/components/Toc\";\nimport { InkLogo } from \"@/icons/InkLogo\";\nimport { URLS } from \"@/utils/urls\";\n\nconst config: DocsThemeConfig = {\n  logo: <InkLogo />,\n  darkMode: false,\n  project: {\n    link: URLS.githubOrgUrl,\n  },\n  docsRepositoryBase: URLS.repositoryUrl,\n  head: Head,\n  components: {\n    a(props: { href?: string }) {\n      const isExternal = props.href?.startsWith(\"http\");\n      return (\n        <a\n          {...props}\n          {...(isExternal\n            ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n            : {})}\n          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\"\n        />\n      );\n    },\n    code(props) {\n      return (\n        <code\n          {...props}\n          className={clsx(\n            \"bg-magic-semi-deep-purple/15 text-magic-purple dark:text-magic-white text-sm rounded-md px-2 py-0.5\"\n          )}\n        />\n      );\n    },\n  },\n  sidebar: {\n    defaultMenuCollapseLevel: 1,\n    autoCollapse: true,\n    titleComponent: SidebarTitleComponent,\n  },\n  navbar: {\n    extraContent: ThemeToggle,\n  },\n  footer: {\n    component: Footer,\n  },\n  toc: {\n    backToTop: true,\n    component: Toc,\n  },\n  banner: {\n    key: \"docs-wip\",\n    text: (\n      <a\n        className=\"!text-white hover:!text-white/80\"\n        href=\"/\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        aria-label=\"Documentation Status\"\n      >\n        🎉 Mainnet is LIVE! 🎉\n      </a>\n    ),\n  },\n  useNextSeoProps() {\n    const { asPath } = useRouter();\n    return {\n      titleTemplate:\n        asPath === \"/\"\n          ? \"Ink Docs - The Official Developer Guide for Ink\"\n          : \"%s | Ink Docs\",\n    };\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"incremental\": true,\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\n        \"src/*\"\n      ]\n    },\n    \"target\": \"ES2017\"\n  },\n  \"include\": [\n    \"next-env.d.ts\",\n    \"global-env.d.ts\",\n    \"src/types/**/*.ts\",\n    \"**/*.ts\",\n    \"**/*.tsx\",\n    \".next/types/**/*.ts\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  }
]