From 882a5188082c59bccd5024eecd5ab62c9db16494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 13:26:07 -0700 Subject: [PATCH 01/50] feat: add arbitrum-orbit-sdk as submodule --- .gitmodules | 4 ++++ arbitrum-orbit-sdk | 1 + 2 files changed, 5 insertions(+) create mode 160000 arbitrum-orbit-sdk diff --git a/.gitmodules b/.gitmodules index a8fd8fa56..48a5ba913 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,3 +3,7 @@ url = https://github.com/OffchainLabs/arbitrum-sdk branch = main +[submodule "/Users/allup/dev/OCL/docs.arbitrum/arbitrum-orbit-sdk"] + path = arbitrum-orbit-sdk + url = https://github.com/offchainlabs/arbitrum-orbit-sdk.git + branch = main diff --git a/arbitrum-orbit-sdk b/arbitrum-orbit-sdk new file mode 160000 index 000000000..fa20b8d23 --- /dev/null +++ b/arbitrum-orbit-sdk @@ -0,0 +1 @@ +Subproject commit fa20b8d23170b5196c4c9cdb5fc2dfefa349f1c8 From 94f6f4d924c2cb79ef03331946d8fe072fedaca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:11:20 -0700 Subject: [PATCH 02/50] fix: gitignore generated docs --- .gitignore | 1 + website/docusaurus.config.js | 38 ++++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index e04009164..5793be84a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .vscode arbitrum-docs/sdk-docs +arbitrum-docs/orbit-sdk-docs diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 4972e3410..2ae9ebc0d 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -4,6 +4,7 @@ const variableInjector = require('./src/remark/variable-injector'); const sdkSidebarGenerator = require('./src/scripts/sdk-sidebar-generator'); const sdkCodebasePath = '../arbitrum-sdk'; +const orbitSdkCodebasePath = '../arbitrum-orbit-sdk'; /** @type {import('@docusaurus/types').Config} */ const config = { @@ -16,6 +17,7 @@ const config = { favicon: 'img/logo.svg', markdown: { mermaid: true, + format: 'detect', }, themes: ['@docusaurus/theme-mermaid', '@docusaurus/theme-live-codeblock'], // GitHub pages deployment config. @@ -72,7 +74,7 @@ const config = { tsconfig: `${sdkCodebasePath}/tsconfig.json`, entryPoints: [`${sdkCodebasePath}/src/lib`], entryPointStrategy: 'expand', - exclude: [`abi`, `node_modules`, `tests`, `scripts`], + exclude: [`abi`, `node_modules`, `tests`, `scripts`, `dist`], excludeNotDocumented: true, excludeInternal: true, excludeExternals: true, @@ -94,23 +96,29 @@ const config = { plugin: [ 'typedoc-plugin-markdown', `typedoc-plugin-frontmatter`, - './src/scripts/sdkDocsHandler.ts', + './src/scripts/arbitrumSdkDocsHandler.ts', ], - + }, + ], + [ + 'docusaurus-plugin-typedoc', + { + id: 'arbitrum-orbit-sdk', + tsconfig: `${orbitSdkCodebasePath}/tsconfig.json`, + entryPoints: [`${orbitSdkCodebasePath}/src`], + out: '../arbitrum-docs/orbit-sdk-docs', + entryPointStrategy: 'expand', + exclude: ['**/*test.ts', '**/abi/*.ts', 'node_modules', 'tests', 'scripts', 'dist'], + excludeNotDocumented: false, + excludeInternal: true, + logLevel: 'Error', + excludeExternals: true, + outputFileStrategy: 'modules', + readme: 'none', + skipErrorChecking: true, + plugin: ['typedoc-plugin-markdown', `typedoc-plugin-frontmatter`], // typedoc-plugin-markdown options // Reference: https://github.com/tgreyuk/typedoc-plugin-markdown/blob/next/packages/typedoc-plugin-markdown/docs/usage/options.md - outputFileStrategy: 'modules', - excludeGroups: false, - hidePageHeader: true, - hidePageTitle: true, - hideBreadcrumbs: true, - useCodeBlocks: true, - expandParameters: true, - parametersFormat: 'table', - propertiesFormat: 'table', - enumMembersFormat: 'table', - typeDeclarationFormat: 'table', - sanitizeComments: true, frontmatterGlobals: { layout: 'docs', sidebar: true, From 6bba993802521086e44cad3fca5b6a5d534c3870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:14:27 -0700 Subject: [PATCH 03/50] fix: re-configuration docusaurus --- website/docusaurus.config.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 2ae9ebc0d..d178ce3bc 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -81,22 +81,22 @@ const config = { readme: 'none', // Output options - out: '../arbitrum-docs/sdk-docs', + out: './arbitrum-docs/sdk-docs', hideGenerator: true, validation: { notExported: false, invalidLink: true, notDocumented: true, }, - logLevel: 'Verbose', + logLevel: 'Error', sidebar: { autoConfiguration: false, }, plugin: [ 'typedoc-plugin-markdown', - `typedoc-plugin-frontmatter`, - './src/scripts/arbitrumSdkDocsHandler.ts', + 'typedoc-plugin-frontmatter', + './src/scripts/sdkDocsHandler.ts', ], }, ], @@ -106,17 +106,21 @@ const config = { id: 'arbitrum-orbit-sdk', tsconfig: `${orbitSdkCodebasePath}/tsconfig.json`, entryPoints: [`${orbitSdkCodebasePath}/src`], - out: '../arbitrum-docs/orbit-sdk-docs', + out: './arbitrum-docs/orbit-sdk-docs', entryPointStrategy: 'expand', exclude: ['**/*test.ts', '**/abi/*.ts', 'node_modules', 'tests', 'scripts', 'dist'], excludeNotDocumented: false, + logLevel: 'Verbose', excludeInternal: true, - logLevel: 'Error', excludeExternals: true, outputFileStrategy: 'modules', readme: 'none', skipErrorChecking: true, - plugin: ['typedoc-plugin-markdown', `typedoc-plugin-frontmatter`], + plugin: [ + 'typedoc-plugin-markdown', + 'typedoc-plugin-frontmatter', + './src/scripts/orbitSdkDocsHandler.ts', + ], // typedoc-plugin-markdown options // Reference: https://github.com/tgreyuk/typedoc-plugin-markdown/blob/next/packages/typedoc-plugin-markdown/docs/usage/options.md frontmatterGlobals: { From 21ee952c02c7eb6df59bfd8cbdd9a3ce780a5c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:15:02 -0700 Subject: [PATCH 04/50] fix: update submodule --- arbitrum-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrum-sdk b/arbitrum-sdk index c8aa61ee1..3b47455a6 160000 --- a/arbitrum-sdk +++ b/arbitrum-sdk @@ -1 +1 @@ -Subproject commit c8aa61ee10c7bb2f622c2603f3d2a81287390d4b +Subproject commit 3b47455a68b9ec02b682fb07d3381ac1d2126929 From 593b2412df13ccf8a55e2929efc7ef5c112b5cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:15:21 -0700 Subject: [PATCH 05/50] fix: corrected file path --- website/src/scripts/sdkDocsHandler.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/scripts/sdkDocsHandler.ts b/website/src/scripts/sdkDocsHandler.ts index 4b70859fa..dce60213b 100644 --- a/website/src/scripts/sdkDocsHandler.ts +++ b/website/src/scripts/sdkDocsHandler.ts @@ -16,13 +16,13 @@ const { Application, RendererEvent } = require('typedoc'); */ function load(app) { const outputDir = app.options.getValue('out'); - const sourceDir = path.join(outputDir, '../../arbitrum-sdk/docs'); + const sourceDir = path.join(outputDir, '../../../arbitrum-docs/sdk-docs'); const targetDir = path.join(outputDir); app.renderer.on(RendererEvent.START, async () => { cleanDirectory(targetDir); }); - + app.renderer.on(RendererEvent.END, async () => { copyFiles(sourceDir, targetDir); @@ -63,7 +63,7 @@ function copyFiles(source, target) { console.error(`Source path does not exist: ${source}`); return; } - + if (!fs.lstatSync(source).isDirectory()) { console.error(`Source path is not a directory: ${source}`); return; From e6bfbf6277c848934a1fdf936467529cf6a79852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:19:15 -0700 Subject: [PATCH 06/50] fix: tmp add orbit-sdk ref to sidebars --- website/sidebars.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/website/sidebars.js b/website/sidebars.js index 141bf5d31..567dbc390 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -409,6 +409,11 @@ const sidebars = { id: 'launch-orbit-chain/how-tos/orbit-sdk-configuring-orbit-chain', label: `Orbit Chain Configuration`, }, + { + type: 'doc', + id: 'orbit-sdk-docs/index', + label: `Orbit SDK Reference`, + }, ], }, ], From 20c06251a7db6ef022d65c387afaf04ece913e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:28:15 -0700 Subject: [PATCH 07/50] feat: add orbitSdkDocsHandler.ts for orbit docgen post-processing --- website/src/scripts/orbitSdkDocsHandler.ts | 159 +++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 website/src/scripts/orbitSdkDocsHandler.ts diff --git a/website/src/scripts/orbitSdkDocsHandler.ts b/website/src/scripts/orbitSdkDocsHandler.ts new file mode 100644 index 000000000..7c4da551d --- /dev/null +++ b/website/src/scripts/orbitSdkDocsHandler.ts @@ -0,0 +1,159 @@ +const fs = require('fs'); +const path = require('path'); +const { Application, RendererEvent } = require('typedoc'); + +/** + * Plugin to move docs files from a target folder to the same folder as used by Docusaurus site. + * + * It also generates a `sidebar.js` file to be used by Docusaurus to display the sidebar. + * + * The plugin automatically runs when the Typedoc renderer finishes. It copies the doc files from + * the target docs folder to the Docusaurus docs folder. Uses those files, plus the generated files, + * to generate the sidebar. It should handle these options automatically. + * + * Sidebar generation is based on the folder structure of the target docs folder, where it sorts + * files by leading numbers first then alphabetically. + */ +function load(app) { + const outputDir = app.options.getValue('out'); + const sourceDir = path.join(outputDir, '../../../arbitrum-docs/orbit-sdk-docs'); + const targetDir = path.join(outputDir); + + app.renderer.on(RendererEvent.START, async () => { + cleanDirectory(targetDir); + }); + + app.renderer.on(RendererEvent.END, async () => { + copyFiles(sourceDir, targetDir); + + const sidebarItems = generateSidebar(targetDir); + const sidebarConfig = { items: sidebarItems }; + const sidebarPath = path.join(targetDir, 'sidebar.js'); + + fs.writeFileSync( + sidebarPath, + `// @ts-check\n/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\nconst typedocSidebar = ${JSON.stringify( + sidebarConfig, + null, + 2, + )};\nmodule.exports = typedocSidebar.items;`, + 'utf8', + ); + }); +} + +// Cleans all files from the target directory +function cleanDirectory(directory) { + if (fs.existsSync(directory)) { + fs.readdirSync(directory).forEach((file) => { + const curPath = path.join(directory, file); + + console.log('processed by orbitSdkHandler'); + if (fs.lstatSync(curPath).isDirectory()) { + cleanDirectory(curPath); + fs.rmdirSync(curPath); + } else { + fs.unlinkSync(curPath); + } + }); + } +} + +// Recursively copy all files and folders from source to target +function copyFiles(source, target) { + if (!fs.existsSync(source)) { + console.error(`Source path does not exist: ${source}`); + return; + } + + if (!fs.lstatSync(source).isDirectory()) { + console.error(`Source path is not a directory: ${source}`); + return; + } + + fs.mkdirSync(target, { recursive: true }); + fs.readdirSync(source, { withFileTypes: true }).forEach((entry) => { + const sourcePath = path.join(source, entry.name); + const targetPath = path.join(target, entry.name); + if (entry.isDirectory()) { + copyFiles(sourcePath, targetPath); + } else { + try { + fs.copyFileSync(sourcePath, targetPath); + } catch (err) { + console.error(`Failed to copy file from ${sourcePath} to ${targetPath}:`, err); + } + } + }); +} + +// Sort entries by leading numbers, then alphabetically, with 'index.md' first +function sortEntries(a, b) { + if (a === 'index.md') return -1; + if (b === 'index.md') return 1; + + const numA = a.match(/^\d+/); + const numB = b.match(/^\d+/); + if (numA && numB) { + return parseInt(numA[0], 10) - parseInt(numB[0], 10); + } else if (numA) { + return -1; + } else if (numB) { + return 1; + } else { + // Alphabetical order + return a.localeCompare(b); + } +} + +// Generate an in-folder sidebar with sorting +function generateSidebar(dir, basePath = '') { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + // Sort entries before processing + entries.sort((a, b) => sortEntries(a.name, b.name)); + + const items = entries + .map((entry) => { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + const subItems = generateSidebar( + fullPath, + `${basePath}/${entry.name.replace(/^\d+-/, '')}`, + ); + return { + type: 'category', + label: generateLabel(entry.name), + items: subItems, + }; + } else if (entry.isFile() && entry.name.endsWith('.md')) { + const docId = generateId(entry.name, basePath); + return { + type: 'doc', + id: docId, + label: generateLabel(entry.name), + }; + } + }) + .filter((item) => !!item); + + return items; +} + +function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} + +function generateId(name, basePath) { + let label = name.replace(/^\d+-/, ''); // + label = label.replace(/\.md$/, ''); + const slashIfNeeded = basePath.startsWith('/') ? '' : '/'; + return 'orbit-sdk-docs' + slashIfNeeded + path.join(basePath, label); +} + +function generateLabel(name) { + let label = name.replace(/^\d+-/, ''); + label = label.replace(/\.md$/, ''); + return capitalizeFirstLetter(label); +} + +exports.load = load; From f60c151b893691c5f8fa8b9d3a16065181501fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:54:14 -0700 Subject: [PATCH 08/50] fix: corrected gendocs tmp path --- website/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index d178ce3bc..bffaef919 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -106,7 +106,7 @@ const config = { id: 'arbitrum-orbit-sdk', tsconfig: `${orbitSdkCodebasePath}/tsconfig.json`, entryPoints: [`${orbitSdkCodebasePath}/src`], - out: './arbitrum-docs/orbit-sdk-docs', + out: './generated-docs/orbit-sdk-docs', entryPointStrategy: 'expand', exclude: ['**/*test.ts', '**/abi/*.ts', 'node_modules', 'tests', 'scripts', 'dist'], excludeNotDocumented: false, From 9f18c4f7f947e81539da9e75942c206ff229878c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:54:51 -0700 Subject: [PATCH 09/50] fix: re-correct gendocs path --- website/docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index bffaef919..8c832945d 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -81,14 +81,14 @@ const config = { readme: 'none', // Output options - out: './arbitrum-docs/sdk-docs', + out: './generated-docs/sdk-docs', hideGenerator: true, validation: { notExported: false, invalidLink: true, notDocumented: true, }, - logLevel: 'Error', + logLevel: 'Verbose', sidebar: { autoConfiguration: false, }, From 59d86b97a8c06a0059e01157d3ef12376ee9a7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 15:57:26 -0700 Subject: [PATCH 10/50] fix: non-verbose log print --- website/docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 8c832945d..b2582f9d0 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -88,7 +88,7 @@ const config = { invalidLink: true, notDocumented: true, }, - logLevel: 'Verbose', + logLevel: 'Error', sidebar: { autoConfiguration: false, }, @@ -110,7 +110,7 @@ const config = { entryPointStrategy: 'expand', exclude: ['**/*test.ts', '**/abi/*.ts', 'node_modules', 'tests', 'scripts', 'dist'], excludeNotDocumented: false, - logLevel: 'Verbose', + logLevel: 'Error', excludeInternal: true, excludeExternals: true, outputFileStrategy: 'modules', From a92fef737a0547b7e44fe9a961b3a9a6be489c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:12:35 -0700 Subject: [PATCH 11/50] fix: correct gitmodule's url --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 48a5ba913..14896b6c5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,7 @@ url = https://github.com/OffchainLabs/arbitrum-sdk branch = main -[submodule "/Users/allup/dev/OCL/docs.arbitrum/arbitrum-orbit-sdk"] +[submodule "arbitrum-orbit-sdk"] path = arbitrum-orbit-sdk - url = https://github.com/offchainlabs/arbitrum-orbit-sdk.git + url = https://github.com/offchainlabs/arbitrum-orbit-sdk branch = main From b42a25deeb7e78afb6c3d8f74e74fa0bdd390503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:14:10 -0700 Subject: [PATCH 12/50] fix: added orbit-sdk submodule install to `yarn start` --- website/package.json | 139 ++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 73 deletions(-) diff --git a/website/package.json b/website/package.json index 92c3797a7..b54e3ba77 100644 --- a/website/package.json +++ b/website/package.json @@ -1,75 +1,68 @@ { - "name": "nitro-docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "install_sdk_dependencies": "cd ../arbitrum-sdk && yarn install && cd ../website", - "generate_precompiles_ref_tables": "ts-node src/scripts/precompile-reference-generator.ts", - "start": "docusaurus start", - "build_translation": "yarn ts-node ./src/scripts/move-untranslated-files.ts", - "build": "yarn install_sdk_dependencies && docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "find-orphan-pages": "ts-node src/scripts/find-orphan-pages.ts", - "format": "yarn format:docs && yarn format:app", - "format:app": "prettier --write --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\"", - "format:docs": "prettier --write --config \"./.prettierrc.js\" -- \"../arbitrum-docs/**/*.{md,mdx}\"", - "format:check": "prettier --check --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\" \"../arbitrum-docs/**/*.{md,mdx}\"", - "typecheck": "tsc" - }, - "dependencies": { - "@arbitrum/sdk": "^3.0.0", - "@cmfcmf/docusaurus-search-local": "^0.11.0", - "@docusaurus/core": "^3.3.2", - "@docusaurus/preset-classic": "^3.3.2", - "@docusaurus/theme-live-codeblock": "^3.3.2", - "@docusaurus/theme-mermaid": "^3.3.2", - "classnames": "^2.5.1", - "clsx": "^1.2.1", - "docusaurus-lunr-search": "^3.3.2", - "docusaurus-plugin-fathom": "^1.2.0", - "docusaurus-plugin-sass": "^0.2.5", - "ethers": "5.7.2", - "got": "11.8.5", - "posthog-docusaurus": "^2.0.0", - "prism-react-renderer": "^1.3.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.66.1", - "tippy.js": "^6.3.7", - "trim": "0.0.3" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@offchainlabs/prettier-config": "0.2.1", - "@tsconfig/docusaurus": "^2.0.3", - "markdown-link-extractor": "^3.1.0", - "prettier": "^2.8.3", - "ts-node": "^10.9.1", - "typedoc": "^0.25.13", - "docusaurus-plugin-typedoc": "^1.0.1", - "typedoc-plugin-frontmatter": "^1.0.0", - "typedoc-plugin-markdown": "4.0.1", - "typescript": "^4.7.4" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=16.14" - } + "name": "nitro-docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "install_sdk_dependencies": "cd ../arbitrum-sdk && yarn install && cd ../website", + "install_orbit_sdk_dependencies": "cd ../arbitrum-orbit-sdk && yarn install && cd ../website", + "generate_precompiles_ref_tables": "ts-node src/scripts/precompile-reference-generator.ts", + "start": "docusaurus start", + "build_translation": "yarn ts-node ./src/scripts/move-untranslated-files.ts", + "build": "yarn install_sdk_dependencies && install_orbit_sdk_dependencies && docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "find-orphan-pages": "ts-node src/scripts/find-orphan-pages.ts", + "format": "yarn format:docs && yarn format:app", + "format:app": "prettier --write --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\"", + "format:docs": "prettier --write --config \"./.prettierrc.js\" -- \"../arbitrum-docs/**/*.{md,mdx}\"", + "format:check": "prettier --check --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\" \"../arbitrum-docs/**/*.{md,mdx}\"", + "typecheck": "tsc" + }, + "dependencies": { + "@arbitrum/sdk": "^3.0.0", + "@cmfcmf/docusaurus-search-local": "^0.11.0", + "@docusaurus/core": "^3.3.2", + "@docusaurus/preset-classic": "^3.3.2", + "@docusaurus/theme-live-codeblock": "^3.3.2", + "@docusaurus/theme-mermaid": "^3.3.2", + "classnames": "^2.5.1", + "clsx": "^1.2.1", + "docusaurus-lunr-search": "^3.3.2", + "docusaurus-plugin-fathom": "^1.2.0", + "docusaurus-plugin-sass": "^0.2.5", + "ethers": "5.7.2", + "got": "11.8.5", + "posthog-docusaurus": "^2.0.0", + "prism-react-renderer": "^1.3.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.66.1", + "tippy.js": "^6.3.7", + "trim": "0.0.3" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^3.3.2", + "@offchainlabs/prettier-config": "0.2.1", + "@tsconfig/docusaurus": "^2.0.3", + "markdown-link-extractor": "^3.1.0", + "prettier": "^2.8.3", + "ts-node": "^10.9.1", + "typedoc": "^0.25.13", + "docusaurus-plugin-typedoc": "^1.0.1", + "typedoc-plugin-frontmatter": "^1.0.0", + "typedoc-plugin-markdown": "4.0.1", + "typescript": "^4.7.4" + }, + "browserslist": { + "production": [">0.5%", "not dead", "not op_mini all"], + "development": ["last 1 chrome version", "last 1 firefox version", "last 1 safari version"] + }, + "engines": { + "node": ">=16.14" + } } From f34dc67f9bc7553cde3395a07a4f3bb548ed29f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:16:13 -0700 Subject: [PATCH 13/50] fix: error in yarn invokation --- website/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/package.json b/website/package.json index b54e3ba77..018735dc9 100644 --- a/website/package.json +++ b/website/package.json @@ -9,7 +9,7 @@ "generate_precompiles_ref_tables": "ts-node src/scripts/precompile-reference-generator.ts", "start": "docusaurus start", "build_translation": "yarn ts-node ./src/scripts/move-untranslated-files.ts", - "build": "yarn install_sdk_dependencies && install_orbit_sdk_dependencies && docusaurus build", + "build": "yarn install_sdk_dependencies && yarn install_orbit_sdk_dependencies && docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", From 72a15ca9b9652a20d04bf3ad42b672e1c5afdbcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:22:08 -0700 Subject: [PATCH 14/50] fix: modif submodule's url --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 14896b6c5..d022145ba 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "arbitrum-sdk"] path = arbitrum-sdk - url = https://github.com/OffchainLabs/arbitrum-sdk + url = https://github.com/OffchainLabs/arbitrum-sdk.git branch = main [submodule "arbitrum-orbit-sdk"] path = arbitrum-orbit-sdk - url = https://github.com/offchainlabs/arbitrum-orbit-sdk + url = https://github.com/offchainlabs/arbitrum-orbit-sdk.git branch = main From 0c5188cda1328d3bfde7933cbfb188f8fb14ab6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:27:35 -0700 Subject: [PATCH 15/50] fix: change submodule's visibility to public to solve vercel deployment --- arbitrum-orbit-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrum-orbit-sdk b/arbitrum-orbit-sdk index fa20b8d23..4b933e136 160000 --- a/arbitrum-orbit-sdk +++ b/arbitrum-orbit-sdk @@ -1 +1 @@ -Subproject commit fa20b8d23170b5196c4c9cdb5fc2dfefa349f1c8 +Subproject commit 4b933e136293351cf6b765b72ec501f025f0329f From 923f752f8f5d28fc40908aa5d41d94cfdd3a8118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 16:40:21 -0700 Subject: [PATCH 16/50] fix: submodules url --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index d022145ba..14896b6c5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "arbitrum-sdk"] path = arbitrum-sdk - url = https://github.com/OffchainLabs/arbitrum-sdk.git + url = https://github.com/OffchainLabs/arbitrum-sdk branch = main [submodule "arbitrum-orbit-sdk"] path = arbitrum-orbit-sdk - url = https://github.com/offchainlabs/arbitrum-orbit-sdk.git + url = https://github.com/offchainlabs/arbitrum-orbit-sdk branch = main From 385592328ecd8acfcc5a847d0e207c3c2aea259e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 17:27:05 -0700 Subject: [PATCH 17/50] fix: edited submodule package.json for vercel deployment --- arbitrum-orbit-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrum-orbit-sdk b/arbitrum-orbit-sdk index 4b933e136..6885cc97d 160000 --- a/arbitrum-orbit-sdk +++ b/arbitrum-orbit-sdk @@ -1 +1 @@ -Subproject commit 4b933e136293351cf6b765b72ec501f025f0329f +Subproject commit 6885cc97d1827df96012b4e9e42e4a587b2e91c1 From 100252647c3b60609bf9527b915d8b5b41b13861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Blanchemain?= Date: Wed, 12 Jun 2024 18:04:43 -0700 Subject: [PATCH 18/50] fix: git rm cache --- .gitmodules | 5 - arbitrum-orbit-sdk | 1 - website/.gitignore | 28 - website/.prettierignore | 9 - website/.prettierrc.js | 12 - website/archive/README.md | 3 - website/archive/dapp_migration.mdx | 81 - website/archive/e.png | Bin 934 -> 0 bytes website/archive/retryable_flowchart.png | Bin 139145 -> 0 bytes website/babel.config.js | 3 - website/docs/intro.md | 47 - website/docs/tutorial-basics/_category_.json | 8 - .../docs/tutorial-basics/congratulations.md | 21 - .../tutorial-basics/create-a-blog-post.md | 34 - .../docs/tutorial-basics/create-a-document.md | 55 - website/docs/tutorial-basics/create-a-page.md | 43 - .../docs/tutorial-basics/deploy-your-site.md | 31 - .../tutorial-basics/markdown-features.mdx | 146 - website/docs/tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes .../tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes .../tutorial-extras/manage-docs-versions.md | 55 - .../tutorial-extras/translate-your-site.md | 88 - website/docusaurus.config.js | 318 - website/i18n/ja/code.json | 281 - .../options.json | 14 - .../current.json | 26 - .../current.json | 330 - .../current/.gitkeep | 0 .../translated/.gitkeep | 0 .../ja/docusaurus-theme-classic/footer.json | 78 - .../ja/docusaurus-theme-classic/navbar.json | 22 - website/i18n/zh/code.json | 281 - .../options.json | 14 - .../current.json | 26 - .../current.json | 326 - .../current/.gitkeep | 0 .../translated/.gitkeep | 0 .../zh/docusaurus-theme-classic/footer.json | 78 - .../zh/docusaurus-theme-classic/navbar.json | 22 - website/package.json | 68 - website/sdk/intro2.md | 5 - website/sidebars.js | 924 -- website/src/components/AddressAliasHelper.tsx | 53 - .../src/components/AddressExplorerLink.tsx | 37 - .../src/components/FAQStructuredData/index.js | 73 - .../components/FAQStructuredData/types.d.ts | 33 - .../GenerateTroubleshootingReportWidget.js | 97 - website/src/components/HeaderBadges/index.tsx | 26 - .../src/components/HomepageFeatures/index.tsx | 80 - .../HomepageFeatures/styles.module.css | 86 - .../MermaidWithHtml/MermaidWithHtml.css | 74 - .../MermaidWithHtml/MermaidWithHtml.jsx | 151 - .../MermaidWithHtml/MermaidWithHtml.less | 97 - .../MultiDimensionalContentWidget.js | 109 - .../PlaceholderForm/PlaceholderForm.css | 23 - .../PlaceholderForm/PlaceholderForm.jsx | 22 - .../PlaceholderForm/PlaceholderForm.less | 24 - website/src/components/Quicklooks/index.tsx | 40 - .../VendingMachine.sol/VendingMachine.json | 49 - .../VendingMachine/VendingMachine.tsx | 251 - website/src/css/custom.scss | 13 - website/src/css/partials/_banner.scss | 18 - website/src/css/partials/_content-body.scss | 113 - website/src/css/partials/_darkmode.scss | 75 - .../css/partials/_dynamic-content-tabs.scss | 112 - website/src/css/partials/_fonts.scss | 5 - website/src/css/partials/_footer.scss | 11 - website/src/css/partials/_header-badges.scss | 74 - website/src/css/partials/_misc-classes.scss | 35 - website/src/css/partials/_mixins.scss | 47 - website/src/css/partials/_navbar.scss | 26 - .../css/partials/_page-specific-styles.scss | 132 - website/src/css/partials/_responsive.scss | 18 - website/src/css/partials/_sidebar.scss | 93 - .../css/partials/_troubleshooting-report.scss | 162 - website/src/css/partials/_variables.scss | 34 - website/src/pages/index.js | 38 - website/src/pages/index.module.css | 66 - website/src/pages/markdown-page.md | 7 - website/src/pages/mermaid-with-html.md | 25 - website/src/remark/variable-injector.js | 74 - website/src/resources/globalVars.js | 113 - .../src/resources/precompilesInformation.js | 234 - website/src/scripts/find-orphan-pages.ts | 270 - .../src/scripts/move-untranslated-files.ts | 76 - website/src/scripts/orbitSdkDocsHandler.ts | 159 - .../scripts/precompile-reference-generator.ts | 307 - website/src/scripts/sdk-sidebar-generator.js | 68 - website/src/scripts/sdkDocsHandler.ts | 157 - website/src/theme/DocItem/Content/index.js | 17 - website/src/theme/Footer/index.tsx | 12 - website/src/theme/Layout.tsx | 33 - website/src/theme/NotFound.js | 10 - website/static/.nojekyll | 0 website/static/bridging-faqs.json | 8 - website/static/building-faqs.json | 30 - website/static/building-orbit-faqs.json | 17 - website/static/building-stylus-faqs.json | 13 - website/static/get-started-faqs.json | 24 - website/static/glossary.json | 104 - website/static/img/bridge_token.svg | 13 - website/static/img/builder.svg | 92 - website/static/img/bulb.svg | 84 - website/static/img/cupcake.svg | 41 - website/static/img/cupcake_icon.svg | 15 - website/static/img/devdocs.png | Bin 64551 -> 0 bytes website/static/img/docusaurus.png | Bin 5142 -> 0 bytes website/static/img/favicon.ico | Bin 108212 -> 0 bytes website/static/img/group.svg | 93 - website/static/img/layer-up.svg | 6 - website/static/img/logo.svg | 29 - website/static/img/logo_black.svg | 15 - website/static/img/node.svg | 15 - website/static/img/orbit-galaxy.svg | 194 - website/static/img/paper.svg | 43 - website/static/img/quickstart.svg | 4 - website/static/img/stylus-logo.svg | 27 - .../static/img/undraw_docusaurus_mountain.svg | 171 - .../static/img/undraw_docusaurus_react.svg | 170 - website/static/img/undraw_docusaurus_tree.svg | 40 - website/static/img/welcome.svg | 1 - website/static/node-running-faqs.json | 16 - website/tsconfig.json | 8 - website/yarn.lock | 10616 ---------------- 125 files changed, 19338 deletions(-) delete mode 160000 arbitrum-orbit-sdk delete mode 100644 website/.gitignore delete mode 100644 website/.prettierignore delete mode 100644 website/.prettierrc.js delete mode 100644 website/archive/README.md delete mode 100644 website/archive/dapp_migration.mdx delete mode 100644 website/archive/e.png delete mode 100644 website/archive/retryable_flowchart.png delete mode 100644 website/babel.config.js delete mode 100644 website/docs/intro.md delete mode 100644 website/docs/tutorial-basics/_category_.json delete mode 100644 website/docs/tutorial-basics/congratulations.md delete mode 100644 website/docs/tutorial-basics/create-a-blog-post.md delete mode 100644 website/docs/tutorial-basics/create-a-document.md delete mode 100644 website/docs/tutorial-basics/create-a-page.md delete mode 100644 website/docs/tutorial-basics/deploy-your-site.md delete mode 100644 website/docs/tutorial-basics/markdown-features.mdx delete mode 100644 website/docs/tutorial-extras/_category_.json delete mode 100644 website/docs/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 website/docs/tutorial-extras/img/localeDropdown.png delete mode 100644 website/docs/tutorial-extras/manage-docs-versions.md delete mode 100644 website/docs/tutorial-extras/translate-your-site.md delete mode 100644 website/docusaurus.config.js delete mode 100644 website/i18n/ja/code.json delete mode 100644 website/i18n/ja/docusaurus-plugin-content-blog/options.json delete mode 100644 website/i18n/ja/docusaurus-plugin-content-docs-arbitrum-sdk/current.json delete mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/current.json delete mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/current/.gitkeep delete mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/translated/.gitkeep delete mode 100644 website/i18n/ja/docusaurus-theme-classic/footer.json delete mode 100644 website/i18n/ja/docusaurus-theme-classic/navbar.json delete mode 100644 website/i18n/zh/code.json delete mode 100644 website/i18n/zh/docusaurus-plugin-content-blog/options.json delete mode 100644 website/i18n/zh/docusaurus-plugin-content-docs-arbitrum-sdk/current.json delete mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current.json delete mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current/.gitkeep delete mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/translated/.gitkeep delete mode 100644 website/i18n/zh/docusaurus-theme-classic/footer.json delete mode 100644 website/i18n/zh/docusaurus-theme-classic/navbar.json delete mode 100644 website/package.json delete mode 100644 website/sdk/intro2.md delete mode 100644 website/sidebars.js delete mode 100644 website/src/components/AddressAliasHelper.tsx delete mode 100644 website/src/components/AddressExplorerLink.tsx delete mode 100644 website/src/components/FAQStructuredData/index.js delete mode 100644 website/src/components/FAQStructuredData/types.d.ts delete mode 100644 website/src/components/GenerateTroubleshootingReportWidget.js delete mode 100644 website/src/components/HeaderBadges/index.tsx delete mode 100644 website/src/components/HomepageFeatures/index.tsx delete mode 100644 website/src/components/HomepageFeatures/styles.module.css delete mode 100644 website/src/components/MermaidWithHtml/MermaidWithHtml.css delete mode 100644 website/src/components/MermaidWithHtml/MermaidWithHtml.jsx delete mode 100644 website/src/components/MermaidWithHtml/MermaidWithHtml.less delete mode 100644 website/src/components/MultiDimensionalContentWidget.js delete mode 100644 website/src/components/PlaceholderForm/PlaceholderForm.css delete mode 100644 website/src/components/PlaceholderForm/PlaceholderForm.jsx delete mode 100644 website/src/components/PlaceholderForm/PlaceholderForm.less delete mode 100644 website/src/components/Quicklooks/index.tsx delete mode 100644 website/src/components/VendingMachine/VendingMachine.sol/VendingMachine.json delete mode 100644 website/src/components/VendingMachine/VendingMachine.tsx delete mode 100644 website/src/css/custom.scss delete mode 100644 website/src/css/partials/_banner.scss delete mode 100644 website/src/css/partials/_content-body.scss delete mode 100644 website/src/css/partials/_darkmode.scss delete mode 100644 website/src/css/partials/_dynamic-content-tabs.scss delete mode 100644 website/src/css/partials/_fonts.scss delete mode 100644 website/src/css/partials/_footer.scss delete mode 100644 website/src/css/partials/_header-badges.scss delete mode 100644 website/src/css/partials/_misc-classes.scss delete mode 100644 website/src/css/partials/_mixins.scss delete mode 100644 website/src/css/partials/_navbar.scss delete mode 100644 website/src/css/partials/_page-specific-styles.scss delete mode 100644 website/src/css/partials/_responsive.scss delete mode 100644 website/src/css/partials/_sidebar.scss delete mode 100644 website/src/css/partials/_troubleshooting-report.scss delete mode 100644 website/src/css/partials/_variables.scss delete mode 100644 website/src/pages/index.js delete mode 100644 website/src/pages/index.module.css delete mode 100644 website/src/pages/markdown-page.md delete mode 100644 website/src/pages/mermaid-with-html.md delete mode 100644 website/src/remark/variable-injector.js delete mode 100644 website/src/resources/globalVars.js delete mode 100644 website/src/resources/precompilesInformation.js delete mode 100644 website/src/scripts/find-orphan-pages.ts delete mode 100644 website/src/scripts/move-untranslated-files.ts delete mode 100644 website/src/scripts/orbitSdkDocsHandler.ts delete mode 100644 website/src/scripts/precompile-reference-generator.ts delete mode 100644 website/src/scripts/sdk-sidebar-generator.js delete mode 100644 website/src/scripts/sdkDocsHandler.ts delete mode 100644 website/src/theme/DocItem/Content/index.js delete mode 100644 website/src/theme/Footer/index.tsx delete mode 100644 website/src/theme/Layout.tsx delete mode 100644 website/src/theme/NotFound.js delete mode 100644 website/static/.nojekyll delete mode 100644 website/static/bridging-faqs.json delete mode 100644 website/static/building-faqs.json delete mode 100644 website/static/building-orbit-faqs.json delete mode 100644 website/static/building-stylus-faqs.json delete mode 100644 website/static/get-started-faqs.json delete mode 100644 website/static/glossary.json delete mode 100644 website/static/img/bridge_token.svg delete mode 100644 website/static/img/builder.svg delete mode 100644 website/static/img/bulb.svg delete mode 100644 website/static/img/cupcake.svg delete mode 100644 website/static/img/cupcake_icon.svg delete mode 100644 website/static/img/devdocs.png delete mode 100644 website/static/img/docusaurus.png delete mode 100644 website/static/img/favicon.ico delete mode 100644 website/static/img/group.svg delete mode 100644 website/static/img/layer-up.svg delete mode 100644 website/static/img/logo.svg delete mode 100644 website/static/img/logo_black.svg delete mode 100644 website/static/img/node.svg delete mode 100644 website/static/img/orbit-galaxy.svg delete mode 100644 website/static/img/paper.svg delete mode 100644 website/static/img/quickstart.svg delete mode 100644 website/static/img/stylus-logo.svg delete mode 100644 website/static/img/undraw_docusaurus_mountain.svg delete mode 100644 website/static/img/undraw_docusaurus_react.svg delete mode 100644 website/static/img/undraw_docusaurus_tree.svg delete mode 100644 website/static/img/welcome.svg delete mode 100644 website/static/node-running-faqs.json delete mode 100644 website/tsconfig.json delete mode 100644 website/yarn.lock diff --git a/.gitmodules b/.gitmodules index 14896b6c5..2d550d048 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,8 +2,3 @@ path = arbitrum-sdk url = https://github.com/OffchainLabs/arbitrum-sdk branch = main - -[submodule "arbitrum-orbit-sdk"] - path = arbitrum-orbit-sdk - url = https://github.com/offchainlabs/arbitrum-orbit-sdk - branch = main diff --git a/arbitrum-orbit-sdk b/arbitrum-orbit-sdk deleted file mode 160000 index 6885cc97d..000000000 --- a/arbitrum-orbit-sdk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6885cc97d1827df96012b4e9e42e4a587b2e91c1 diff --git a/website/.gitignore b/website/.gitignore deleted file mode 100644 index 37f2e373b..000000000 --- a/website/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Generated docs -sdk-docs - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# yarn cache -.yarn - -/i18n/*/docusaurus-plugin-content-docs/current/* diff --git a/website/.prettierignore b/website/.prettierignore deleted file mode 100644 index 1144055a8..000000000 --- a/website/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -# Generated files from notion tables -../arbitrum-docs/partials/_glossary-partial.md -../arbitrum-docs/partials/_troubleshooting-bridging-partial.md -../arbitrum-docs/partials/_troubleshooting-building-partial.md -../arbitrum-docs/partials/_troubleshooting-nodes-partial.md -../arbitrum-docs/partials/_troubleshooting-orbit-partial.md -../arbitrum-docs/partials/_troubleshooting-stylus-partial.md -../arbitrum-docs/partials/_troubleshooting-users-partial.md -../arbitrum-docs/CODEOWNERS.md diff --git a/website/.prettierrc.js b/website/.prettierrc.js deleted file mode 100644 index 5b48798bd..000000000 --- a/website/.prettierrc.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - ...require('@offchainlabs/prettier-config'), - // override here - overrides: [ - { - files: '*.{md,mdx}', - options: { - parser: 'mdx', - }, - }, - ], -}; diff --git a/website/archive/README.md b/website/archive/README.md deleted file mode 100644 index 12fbbe358..000000000 --- a/website/archive/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Archive - -The goal of this folder is to store unused images and files that might be useful in the future, in order to keep a clean arbitrum-docs directory tree. \ No newline at end of file diff --git a/website/archive/dapp_migration.mdx b/website/archive/dapp_migration.mdx deleted file mode 100644 index e9adb7b49..000000000 --- a/website/archive/dapp_migration.mdx +++ /dev/null @@ -1,81 +0,0 @@ -# Nitro Migration Notes for Solidity Devs: Living Document - -The following is a summary of changes in the Arbitrum One chain's 8/31/22 Nitro upgrade that dapp devs should be aware of. - -## Cool New Stuff - -For starters, here's a sampling of exciting perks dapps get with the Nitro upgrade: - -- **Ethereum L1 Gas Compatibility 🥳**: Gas pricing and accounting for EVM operations is be perfectly in line with L1; no more ArbGas. - - - Although in Nitro L2 opcodes are now priced the exact same as Eth L1 - you still have to pay for the L1 calldata (which gets represented as L2 gas units). Your transactions' gas used won't be the same as Eth L1 but during contract execution the opcode cost and `gasleft` interactions are now better aligned with Eth L1. Read more [here](https://medium.com/offchainlabs/understanding-arbitrum-2-dimensional-fees-fd1d582596c9). - -- **Safer Retryable tickets 🥳**: Retryable tickets' submission cost is collected in the L1 Inbox contract; if the submission cost is too low, the transaction will simply revert on the L1 side, eliminating the [failure mode](https://developer.offchainlabs.com/docs/l1_l2_messages#important-note-about-base-submission-fee) in which a retryable ticket fails to get created. - -- **Calldata compression 🥳**: Compression takes place protocol level; dapps don't need to change anything, data will just get cheaper! (You are charged even less if your calldata is highly compressible with brotli.) - -- **Support for All Ethereum L1 precompiles 🥳**: (`blake2f`, `ripemd160`, etc) - -- **Tighter Synchronization with L1 Block Numbers 🥳**: L1 block numbers (accessed via `block.number` on L2) are updated more frequently in Nitro than in Arbitrum classic; expect them to be nearly real-time/ in sync with L1. - -- **Frequent Timestamps 🥳**: Timestamps (accessed via `block.timestamp` on L2) are updated every block based on the sequencer’s clock; i.e., it is no longer linked to the timestamp of the last L1 block. - -- **L2 Block hash EVM Consistency 🥳**: L2 block hashes take the same format as on Ethereum (if you query it from the ArbSys precompile, not the one in `block.hash(uint256)`). - -- **Geth tracing 🥳**: `debug_traceTransaction` RPC endpoint is supported; this includes tracing of ArbOS internal bookkeeping actions. - -## Breaking changes - -#### Dapps - -- **Gas Accounting**: It's now consistent with the L1 EVM; L2 gas usage will change due to different accounting from ArbGas. Any hard-coded gas values should be changed accordingly (the same applies to any gas amount used in conjunction with `gasleft`). That said, you shouldn't be hard-coding any gas values anyway, just like you shouldn't in L1 Ethereum, since both the L1 and L2 gas schedule may change in the future. - - - Although in Nitro L2 opcodes are now priced the exact same as Eth L1 - you still have to pay for the L1 calldata (which gets represented as L2 gas units). Your transactions' gas used won't be the same as Eth L1 but during contract execution the opcode cost and `gasleft` interactions are now better aligned with Eth L1. Read more [here](https://medium.com/offchainlabs/understanding-arbitrum-2-dimensional-fees-fd1d582596c9). - -- **No more storage gas**: there is no more concept of a separate pool of storage gas, and opcodes are priced identically to the L1 EVM. - -- **New L2 to L1 event signature**: The function signature for the L2 to L1 event emitted by [ArbSys](/build-decentralized-apps/precompiles/02-reference.md#arbsys) has now changed. - -- **Lower contract code size limit**: Contracts of up to 48KB were deployable, but now only up to 24KB are deployable (as specified in [EIP 170](https://eips.ethereum.org/EIPS/eip-170)). Previously deployed contracts above the limit will be maintained (but contracts deployed by these legacy contracts are capped by the new size). - -- **Retryable Tickets**: - - The submission cost is now enforced in the L1 inbox and checked against the L1 transaction's `msg.value`; contracts shouldn't rely on funds pooled in the L2 destination to cover this cost. - - The current submission price is now not available in the L2 ArbRetryableTx precompile, instead it can be queried in the L1 Delayed Inbox [`calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee)`](https://github.com/OffchainLabs/nitro/blob/01412b3cd0fca28bf9931407ca1ccfeb8714d478/contracts/src/bridge/Inbox.sol#L262) - - For the redemption of retryable tickets, the calculation of the L2 transaction ID changed and differs between different redeem attempts (i.e. after failed attempts). See [arbitrum-sdk](https://github.com/offchainlabs/arbitrum-sdk/tree/c-nitro-stable) for a reference implementation on the new client-side flow. - - A retryable ticket now isn't redeemed in the same transaction as when the `redeem` function was called. The user's transaction causes the retryable to be scheduled to be executed after the current transaction is complete. More information on this available in [here](/how-arbitrum-works/arbos/introduction.md#redeeming-a-retryable). - - Auto-redeem will not be created if the user does not have enough balance to pay for `gasFeeCap * gasLimit` (meaning you can no longer set a max gas fee cap). - - Deposited gas will be refunded to `excessFeeRefundAddress` if it cannot create an auto-redeem. - - The user will be refunded the submission cost of their retryable if it is auto-redeemed. - - The lifecycle of retryable tickets are now tracked differently. Previously there was a retryable ticket ID, which could be used to deterministically generate the expected transaction hash. In Nitro, you instead have a retryable creation transaction hash (which can be retrieved by the SDK's `L1ToL2Message.retryableCreationId` or calculated by calling [L1ToL2Message.calculateSubmitRetryableId](https://github.com/OffchainLabs/arbitrum-sdk/blob/105bf73cb788231b6e63c510713f460b36699fcd/src/lib/message/L1ToL2Message.ts#L109-L155)). This value does not directly map into an expected transaction hash where it was redeemed. You need to instead listen to the [RedeemScheduled](https://github.com/OffchainLabs/nitro/blob/ec70ed7527597e7e1e8380a59c07e8449885e408/contracts/src/precompiles/ArbRetryableTx.sol#L85-L93) event, which tells you the expected `retryTxHash` of that attempt. - - The retryTxHash is no longer deterministic solely based on the retryable ticket id; it is now a hash of the transaction input like a normal transaction (following the [Typed Tx Envelope standard](https://eips.ethereum.org/EIPS/eip-2718)) - - If the retryable `to` address is set to the zero address, it will now function as a contract deployment. -- **Arbitrum blockhash**: `blockhash(x)` returns a cryptographically insecure, pseudo-random hash for `x` within the range `block.number - 256 <= x < block.number`. If `x` is outside of this range, `blockhash(x)` will return `0`. This includes `blockhash(block.number)`, which always returns `0` just like on Ethereum. The hashes returned do not come from L1. -- **ArbSys precompile**: `ArbSys.getTransactionCount` and `ArbSys.getStorageAt` are removed in nitro - -#### Protocol Contracts - -- **New Contract Deployments**: For the Nitro upgrade, these contracts were redeployed on L1 to new addresses: - - SequencerInbox - - RollupCore - - Outbox - - Bridge - - bridge.sol contract will be redeployed and not the whole Bridge. - - The [bridge contract address](https://etherscan.io/address/0x011B6E24FfB0B5f5fCc564cf4183C5BBBc96D515) was be changed. - -For addresses of protocol contracts, see [Smart contract addresses](/build-decentralized-apps/reference/02-useful-addresses.md). - -Also, worth mentioning that the address of the Delayed Inbox contract and Token Bridge contracts (Router and Gateways) weren't changed after the migration. - -- **Sequencer Inbox changes**: The Sequencer inbox has a new interface and requires a new approach to determining a transaction's inclusion on L1 (see "Batch Info In Receipts" below). - -- **Outbox Changes**: The Outbox has a new (simplified!) architecture; in short, all outgoing messages will be included in a single Merkle tree (opposed to Arbitrum classic, in which many outbox entries, each with its own Merkle root). See [arbitrum-sdk](https://github.com/offchainlabs/arbitrum-sdk/tree/c-nitro) for a reference implementation on how to handle the new flow of interacting with the outbox. - -#### RPCs - -- **No Parity tracing**: Initially `trace_filter` RPCs won't be available; they will be in the coming months. (Note that the Geth tracing APIs _are_ available). - -- **Gas Info in Transaction Receipts**: Arbitrum transaction receipts return data about gas in a new format; receipts will have `gasUsed` (total) and `gasUsedForL1` fields (instead of the `feeStats` field in Arbitrum classic). - -- **Batch Info In Receipts**: Arbitrum transaction receipts no longer include the `l1SequenceNumber` field; the `findBatchContainingBlock` or `getL1Confirmations` methods in the [NodeInterface precompile](/how-arbitrum-works/gas-fees.md#nodeinterfacesol) can be used to determine a transaction's inclusion in L1. - -- **Estimate Retryable Ticket**: Use `eth_estimateGas` on `NodeInterface.estimateRetryableTicket` to estimate the gas limit of a retryable; the function itself no longer return the gas used and gas price. The gas price can be estimated using `eth_gasPrice`. diff --git a/website/archive/e.png b/website/archive/e.png deleted file mode 100644 index c109cb37b7e6967ec99a6a73da1fe3476c066b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 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

GP%ID&`^ghWcRX{e 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 diff --git a/website/babel.config.js b/website/babel.config.js deleted file mode 100644 index e00595dae..000000000 --- a/website/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/website/docs/intro.md b/website/docs/intro.md deleted file mode 100644 index 8a2e69d95..000000000 --- a/website/docs/intro.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tutorial Intro - -Let's discover **Docusaurus in less than 5 minutes**. - -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/website/docs/tutorial-basics/_category_.json b/website/docs/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55b1..000000000 --- a/website/docs/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/website/docs/tutorial-basics/congratulations.md b/website/docs/tutorial-basics/congratulations.md deleted file mode 100644 index e6279bb21..000000000 --- a/website/docs/tutorial-basics/congratulations.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.mdx)** and **[i18n](../tutorial-extras/translate-your-site.mdx)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/). -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/website/docs/tutorial-basics/create-a-blog-post.md b/website/docs/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index ea472bbaf..000000000 --- a/website/docs/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/website/docs/tutorial-basics/create-a-document.md b/website/docs/tutorial-basics/create-a-document.md deleted file mode 100644 index 3c92695c5..000000000 --- a/website/docs/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -module.exports = { - tutorialSidebar: [ - { - type: 'category', - label: 'Tutorial', - // highlight-next-line - items: ['hello'], - }, - ], -}; -``` diff --git a/website/docs/tutorial-basics/create-a-page.md b/website/docs/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac300..000000000 --- a/website/docs/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

- - ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/website/docs/tutorial-basics/deploy-your-site.md b/website/docs/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee063..000000000 --- a/website/docs/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/website/docs/tutorial-basics/markdown-features.mdx b/website/docs/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 8c88704bc..000000000 --- a/website/docs/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.mdx) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.mdx). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.mdx). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well, as shown in [the extra guides](../tutorial-extras/manage-docs-versions.mdx). - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - - ```jsx title="src/components/HelloDocusaurus.js" - function HelloDocusaurus() { - return ( -

Hello, Docusaurus!

- ) - } - ``` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - - :::tip My tip - - Use this awesome feature option - - ::: - - :::danger Take care - - This action is dangerous - - ::: - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/website/docs/tutorial-extras/_category_.json b/website/docs/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc193..000000000 --- a/website/docs/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/website/docs/tutorial-extras/img/docsVersionDropdown.png b/website/docs/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/website/docs/tutorial-extras/img/localeDropdown.png b/website/docs/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/website/docs/tutorial-extras/manage-docs-versions.md b/website/docs/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index e12c3f344..000000000 --- a/website/docs/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/website/docs/tutorial-extras/translate-your-site.md b/website/docs/tutorial-extras/translate-your-site.md deleted file mode 100644 index caeaffb05..000000000 --- a/website/docs/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a same time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js deleted file mode 100644 index b2582f9d0..000000000 --- a/website/docusaurus.config.js +++ /dev/null @@ -1,318 +0,0 @@ -// @ts-nocheck -// Note: type annotations allow type checking and IDEs autocompletion - -const variableInjector = require('./src/remark/variable-injector'); -const sdkSidebarGenerator = require('./src/scripts/sdk-sidebar-generator'); -const sdkCodebasePath = '../arbitrum-sdk'; -const orbitSdkCodebasePath = '../arbitrum-orbit-sdk'; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: 'Arbitrum Docs', - tagline: 'Arbitrum Docs', - url: 'https://docs.arbitrum.io/', - baseUrl: '/', - onBrokenLinks: 'ignore', // TODO: FIX ARBITRUM-SDK LINKS - onBrokenMarkdownLinks: 'throw', - favicon: 'img/logo.svg', - markdown: { - mermaid: true, - format: 'detect', - }, - themes: ['@docusaurus/theme-mermaid', '@docusaurus/theme-live-codeblock'], - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: 'OffchainLabs', // Usually your GitHub org/user name. - projectName: 'docusaurus', // Usually your repo name. - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: 'en', - // locales: ['en', 'ja', 'zh'], - locales: ['en'], - }, - presets: [ - [ - '@docusaurus/preset-classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: '../arbitrum-docs', - sidebarPath: require.resolve('./sidebars.js'), - routeBasePath: '/', - breadcrumbs: false, - editUrl: function (s) { - // troubleshooting docs content has external source-of-truth; node-providers uses form-submission - if (s.docPath.includes('troubleshooting') || s.docPath.includes('node-providers')) - return undefined; - return ( - 'https://github.com/OffchainLabs/arbitrum-docs/edit/master/arbitrum-docs/' + s.docPath - ); - }, - showLastUpdateTime: true, - remarkPlugins: [ - [ - variableInjector, - { - replacements: require('./src/resources/globalVars.js'), - }, - ], - ], - }, - theme: { - customCss: require.resolve('./src/css/custom.scss'), - }, - }), - ], - ], - plugins: [ - [ - 'docusaurus-plugin-typedoc', - { - id: 'arbitrum-sdk', - tsconfig: `${sdkCodebasePath}/tsconfig.json`, - entryPoints: [`${sdkCodebasePath}/src/lib`], - entryPointStrategy: 'expand', - exclude: [`abi`, `node_modules`, `tests`, `scripts`, `dist`], - excludeNotDocumented: true, - excludeInternal: true, - excludeExternals: true, - readme: 'none', - - // Output options - out: './generated-docs/sdk-docs', - hideGenerator: true, - validation: { - notExported: false, - invalidLink: true, - notDocumented: true, - }, - logLevel: 'Error', - sidebar: { - autoConfiguration: false, - }, - - plugin: [ - 'typedoc-plugin-markdown', - 'typedoc-plugin-frontmatter', - './src/scripts/sdkDocsHandler.ts', - ], - }, - ], - [ - 'docusaurus-plugin-typedoc', - { - id: 'arbitrum-orbit-sdk', - tsconfig: `${orbitSdkCodebasePath}/tsconfig.json`, - entryPoints: [`${orbitSdkCodebasePath}/src`], - out: './generated-docs/orbit-sdk-docs', - entryPointStrategy: 'expand', - exclude: ['**/*test.ts', '**/abi/*.ts', 'node_modules', 'tests', 'scripts', 'dist'], - excludeNotDocumented: false, - logLevel: 'Error', - excludeInternal: true, - excludeExternals: true, - outputFileStrategy: 'modules', - readme: 'none', - skipErrorChecking: true, - plugin: [ - 'typedoc-plugin-markdown', - 'typedoc-plugin-frontmatter', - './src/scripts/orbitSdkDocsHandler.ts', - ], - // typedoc-plugin-markdown options - // Reference: https://github.com/tgreyuk/typedoc-plugin-markdown/blob/next/packages/typedoc-plugin-markdown/docs/usage/options.md - frontmatterGlobals: { - layout: 'docs', - sidebar: true, - toc_max_heading_level: 5, - }, - }, - ], - [ - 'posthog-docusaurus', - { - apiKey: 'phc_AscFTQ876SsPAVMgxMmLn0EIpxdcRRq0XmJWnpG1SHL', - appUrl: 'https://app.posthog.com', - enableInDevelopment: false, - persistence: 'memory', - disable_session_recording: true, - }, - ], - require.resolve('docusaurus-plugin-fathom'), - require.resolve('docusaurus-lunr-search'), - require.resolve('docusaurus-plugin-sass'), - ], - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - fathomAnalytics: { - siteId: 'DOHOZGJO', - }, - navbar: { - title: 'Arbitrum Docs', - logo: { - alt: 'My Site Logo', - src: 'img/logo.svg', - href: '/welcome/arbitrum-gentle-introduction', - }, - items: [ - // note: we can uncomment this when we want to display the locale dropdown in the top navbar - // if we enable this now, the dropdown will appear above every document; if `ja` is selected for a document that isn't yet translated, it will 404 - // there may be a way to show the dropdown only on pages that have been translated, but that's out of scope for the initial version - // { - // type: 'localeDropdown', - // position: 'right', - // } - ], - }, - footer: { - style: 'dark', - links: [ - {}, - { - items: [ - { - label: 'Arbitrum.io', - to: 'https://arbitrum.io/', - }, - { - label: 'Arbitrum Rollup', - to: 'https://arbitrum.io/rollup', - }, - { - label: 'Arbitrum AnyTrust', - to: 'https://arbitrum.io/anytrust', - }, - { - label: 'Arbitrum Orbit', - to: 'https://arbitrum.io/orbit', - }, - { - label: 'Arbitrum Stylus', - to: 'https://arbitrum.io/stylus', - }, - { - label: 'Arbitrum Foundation', - to: 'https://arbitrum.foundation/', - }, - { - label: 'Nitro whitepaper', - to: 'https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf', - }, - ], - }, - { - items: [ - { - label: 'Network status', - to: 'https://status.arbitrum.io/', - }, - { - label: 'Portal', - to: 'https://portal.arbitrum.io/', - }, - { - label: 'Bridge', - to: 'https://bridge.arbitrum.io/', - }, - { - label: 'Governance docs', - to: 'https://docs.arbitrum.foundation/', - }, - { - label: 'Careers', - to: 'https://offchainlabs.com/careers/', - }, - { - label: 'Support', - to: 'https://support.arbitrum.io/', - }, - { - label: 'Bug Bounties', - to: 'https://immunefi.com/bounty/arbitrum/', - }, - ], - }, - { - items: [ - { - label: 'Discord', - to: 'https://discord.gg/ZpZuw7p', - }, - { - label: 'Twitter', - to: 'https://twitter.com/OffchainLabs', - }, - { - label: 'Youtube', - to: 'https://www.youtube.com/@Arbitrum', - }, - { - label: 'Medium Blog', - to: 'https://medium.com/offchainlabs', - }, - { - label: 'Research forum', - to: 'https://research.arbitrum.io/', - }, - { - label: 'Privacy Policy', - to: 'https://arbitrum.io/privacy', - }, - { - label: 'Terms of Service', - to: 'https://arbitrum.io/tos', - }, - ], - }, - ], - copyright: `© ${new Date().getFullYear()} Offchain Labs`, - }, - prism: { - additionalLanguages: ['solidity', 'rust'], - }, - liveCodeBlock: { - /** - * The position of the live playground, above or under the editor - * Possible values: "top" | "bottom" - */ - playgroundPosition: 'top', - }, - mermaid: { - options: { - securityLevel: 'loose', - flowchart: { - curve: 'basis', - }, - }, - }, - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - }), -}; - -// HACK -// this was originally included above -// it broke local builds on Windows, not sure why yet. Works fine on Mac -// `generate_sdk_docs` runs fine, no difference in outputs between environments, so it's not easy to debug - low pri -const isRunningLocally = process.env.NODE_ENV === 'development'; -const isRunningOnWindows = process.platform === 'win32'; -if (isRunningLocally && isRunningOnWindows) { - config.plugins = config.plugins.filter((plugin) => { - if (Array.isArray(plugin) && plugin[0] === '@docusaurus/plugin-content-docs') { - return false; // remove the offending plugin config - } - return true; // keep everything else - }); -} else { - // another hack for another strange windows-specific issue, reproduceable through clean clone of repo - config.themeConfig.prism.theme = require('prism-react-renderer/themes/github'); - config.themeConfig.prism.darkTheme = require('prism-react-renderer/themes/dracula'); -} - -module.exports = config; diff --git a/website/i18n/ja/code.json b/website/i18n/ja/code.json deleted file mode 100644 index ba8911b34..000000000 --- a/website/i18n/ja/code.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "エラーが発生しました", - "description": "The title of the fallback page when the page crashed" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "もう一度試してください", - "description": "The label of the button to try again when the page crashed" - }, - "theme.NotFound.title": { - "message": "ページが見つかりません", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "お探しのページが見つかりませんでした", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "このページにリンクしているサイトの所有者にリンクが壊れていることを伝えてください", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "先頭へ戻る", - "description": "The ARIA label for the back to top button" - }, - "theme.admonition.note": { - "message": "注記", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "ヒント", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "危険", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "備考", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "注意", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.blog.archive.title": { - "message": "アーカイブ", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "アーカイブ", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "ブログ記事一覧のナビゲーション", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "新しい記事", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "過去の記事", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.plurals": { - "message": "{count}件", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "「{tagName}」タグの記事が{nPosts}件あります", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "全てのタグを見る", - "description": "The label of the link targeting the tag list page" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "ブログ記事のナビゲーション", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "新しい記事", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "過去の記事", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.colorToggle.ariaLabel": { - "message": "ダークモードを切り替える(現在は{mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "ダークモード", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "ライトモード", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "パンくずリストのナビゲーション", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count}項目", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "ドキュメントのナビゲーション", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "前へ", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "次へ", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.versionBadge.label": { - "message": "バージョン: {versionLabel}" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count}記事", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "「{tagName}」タグのついた{nDocsTagged}", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "これはリリース前のバージョン{versionLabel}の{siteTitle}のドキュメントです。", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "これはバージョン{versionLabel}の{siteTitle}のドキュメントで現在はメンテナンスされていません", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "最新のドキュメントは{latestVersionLink} ({versionLabel}) を見てください", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "最新バージョン", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "このページを編集", - "description": "The link label to edit the current page" - }, - "theme.lastUpdated.atDate": { - "message": "{date}に", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": "{user}が", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "{atDate}{byUser}最終更新", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.common.headingLinkTitle": { - "message": "{heading} への直接リンク", - "description": "Title for link to heading" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "他のバージョン", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "タグ:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "閉じる", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.CodeBlock.copied": { - "message": "コピーしました", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "クリップボードにコードをコピー", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "コピー", - "description": "The copy button label on code blocks" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "最近のブログ記事のナビゲーション", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "折り返し", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "サイドバーのカテゴリー「{label}」を開く・閉じる", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "他の言語", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "このページの見出し", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "もっと見る", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "{title}についてもっと見る", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.docs.breadcrumbs.home": { - "message": "ホームページ", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "サイドバーを隠す", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "サイドバーを隠す", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.blog.post.readingTime.plurals": { - "message": "約{readingTime}分", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← メインメニューに戻る", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "サイドバーを開く", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "サイドバーを開く", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.Playground.result": { - "message": "結果", - "description": "The result label of the live codeblocks" - }, - "theme.Playground.liveEditor": { - "message": "ライブエディター", - "description": "The live editor label of the live codeblocks" - }, - "theme.common.skipToMainContent": { - "message": "メインコンテンツまでスキップ", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "タグ", - "description": "The title of the tag list page" - } -} diff --git a/website/i18n/ja/docusaurus-plugin-content-blog/options.json b/website/i18n/ja/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff706..000000000 --- a/website/i18n/ja/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/website/i18n/ja/docusaurus-plugin-content-docs-arbitrum-sdk/current.json b/website/i18n/ja/docusaurus-plugin-content-docs-arbitrum-sdk/current.json deleted file mode 100644 index b6681971d..000000000 --- a/website/i18n/ja/docusaurus-plugin-content-docs-arbitrum-sdk/current.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Module: assetBridger": { - "message": "Module: assetBridger", - "description": "The label for category Module: assetBridger in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: dataEntities": { - "message": "Module: dataEntities", - "description": "The label for category Module: dataEntities in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: inbox": { - "message": "Module: inbox", - "description": "The label for category Module: inbox in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: message": { - "message": "Module: message", - "description": "The label for category Module: message in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: utils": { - "message": "Module: utils", - "description": "The label for category Module: utils in sidebar defaultSidebar" - } -} diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current.json b/website/i18n/ja/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index e905b8065..000000000 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,330 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Build dApps (Solidity)": { - "message": "Build dApps (Solidity)", - "description": "The label for category Build dApps (Solidity) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.How-tos": { - "message": "How-tos", - "description": "The label for category How-tos in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Concepts": { - "message": "Concepts", - "description": "The label for category Concepts in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Differences between Arbitrum and Ethereum": { - "message": "Differences between Arbitrum and Ethereum", - "description": "The label for category Differences between Arbitrum and Ethereum in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Build dApps (Rust) (TESTNET)": { - "message": "Build dApps (Rust) (TESTNET)", - "description": "The label for category Build dApps (Rust) (TESTNET) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Developer reference": { - "message": "Developer reference", - "description": "The label for category Developer reference in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Launch your own chain (Orbit)": { - "message": "Launch your own chain (Orbit)", - "description": "The label for category Launch your own chain (Orbit) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Reference": { - "message": "Reference", - "description": "The label for category Reference in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Bridge tokens between chains": { - "message": "Bridge tokens between chains", - "description": "The label for category Bridge tokens between chains in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Third-party docs": { - "message": "Third-party docs", - "description": "The label for category Third-party docs in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Supra": { - "message": "Supra", - "description": "The label for category Supra in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Rust crate docs": { - "message": "Rust crate docs", - "description": "The label for link Rust crate docs in sidebar buildDecentralizedAppsSidebar, linking to https://docs.rs/stylus-sdk/latest/stylus_sdk/index.html" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Source code repository": { - "message": "Source code repository", - "description": "The label for link Source code repository in sidebar buildDecentralizedAppsSidebar, linking to https://github.com/OffchainLabs/stylus" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Arbitrum SDK": { - "message": "Arbitrum SDK", - "description": "The label for link Arbitrum SDK in sidebar buildDecentralizedAppsSidebar, linking to /sdk" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Tutorials": { - "message": "Tutorials", - "description": "The label for link Tutorials in sidebar buildDecentralizedAppsSidebar, linking to https://github.com/OffchainLabs/arbitrum-tutorials" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar buildDecentralizedAppsSidebar, linking to the doc for-devs/gentle-introduction-dapps" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Estimate gas": { - "message": "Estimate gas", - "description": "The label for the doc item Estimate gas in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/how-to-estimate-gas" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Use oracles": { - "message": "Use oracles", - "description": "The label for the doc item Use oracles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/oracles/how-to-use-oracles" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Arbitrum chains": { - "message": "Arbitrum chains", - "description": "The label for the doc item Arbitrum chains in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/public-chains" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Cross-chain messaging": { - "message": "Cross-chain messaging", - "description": "The label for the doc item Cross-chain messaging in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/cross-chain-messaging" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Precompiles": { - "message": "Precompiles", - "description": "The label for the doc item Precompiles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/precompiles/reference" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Oracles": { - "message": "Oracles", - "description": "The label for the doc item Oracles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/oracles/reference" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar buildDecentralizedAppsSidebar, linking to the doc for-devs/troubleshooting-building" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Overview": { - "message": "Overview", - "description": "The label for the doc item Overview in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/get-started" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Standard gateway": { - "message": "Standard gateway", - "description": "The label for the doc item Standard gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-standard" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Generic-custom gateway": { - "message": "Generic-custom gateway", - "description": "The label for the doc item Generic-custom gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-generic-custom" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Custom gateway": { - "message": "Custom gateway", - "description": "The label for the doc item Custom gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-custom-gateway" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.RPC endpoints and providers": { - "message": "RPC endpoints and providers", - "description": "The label for the doc item RPC endpoints and providers in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/node-providers" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Smart contract addresses": { - "message": "Smart contract addresses", - "description": "The label for the doc item Smart contract addresses in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/useful-addresses" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Chain Params": { - "message": "Chain Params", - "description": "The label for the doc item Chain Params in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/chain-params" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Development frameworks": { - "message": "Development frameworks", - "description": "The label for the doc item Development frameworks in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/development-frameworks" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Web3 libraries and tools": { - "message": "Web3 libraries and tools", - "description": "The label for the doc item Web3 libraries and tools in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/web3-libraries-tools" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Monitoring tools and block explorers": { - "message": "Monitoring tools and block explorers", - "description": "The label for the doc item Monitoring tools and block explorers in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/monitoring-tools-block-explorers" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Debugging tools": { - "message": "Debugging tools", - "description": "The label for the doc item Debugging tools in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/debugging-tools" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Mainnet risks": { - "message": "Mainnet risks", - "description": "The label for the doc item Mainnet risks in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/mainnet-risks" - }, - "sidebar.bridgeTokensSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.category.Concepts": { - "message": "Concepts", - "description": "The label for category Concepts in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar bridgeTokensSidebar, linking to the doc bridge-tokens/gentle-introduction-bridge" - }, - "sidebar.bridgeTokensSidebar.doc.Quickstart": { - "message": "Quickstart", - "description": "The label for the doc item Quickstart in sidebar bridgeTokensSidebar, linking to the doc arbitrum-bridge/quickstart" - }, - "sidebar.bridgeTokensSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar bridgeTokensSidebar, linking to the doc arbitrum-bridge/troubleshooting" - }, - "sidebar.runNodesSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.category.How-tos": { - "message": "How-tos", - "description": "The label for category How-tos in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/overview" - }, - "sidebar.runNodesSidebar.doc.Quickstart": { - "message": "Quickstart", - "description": "The label for the doc item Quickstart in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/quickstart" - }, - "sidebar.runNodesSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/troubleshooting" - }, - "sidebar.runNodesSidebar.doc.Frequently asked questions": { - "message": "Frequently asked questions", - "description": "The label for the doc item Frequently asked questions in sidebar runNodesSidebar, linking to the doc node-running/faq" - }, - "sidebar.runNodesSidebar.doc.Command-line options": { - "message": "Command-line options", - "description": "The label for the doc item Command-line options in sidebar runNodesSidebar, linking to the doc node-running/command-line-options" - }, - "sidebar.learnMoreSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Introductory concepts": { - "message": "Introductory concepts", - "description": "The label for category Introductory concepts in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Gas / fees": { - "message": "Gas / fees", - "description": "The label for category Gas / fees in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Advanced concepts": { - "message": "Advanced concepts", - "description": "The label for category Advanced concepts in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Cross-chain messaging": { - "message": "Cross-chain messaging", - "description": "The label for category Cross-chain messaging in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.ArbOS": { - "message": "ArbOS", - "description": "The label for category ArbOS in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Fraud proofs": { - "message": "Fraud proofs", - "description": "The label for category Fraud proofs in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.link.Deeper dive: Whitepaper": { - "message": "Deeper dive: Whitepaper", - "description": "The label for link Deeper dive: Whitepaper in sidebar learnMoreSidebar, linking to https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf" - }, - "sidebar.learnMoreSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar learnMoreSidebar, linking to the doc intro/intro" - }, - "sidebar.learnMoreSidebar.doc.Frequently asked questions": { - "message": "Frequently asked questions", - "description": "The label for the doc item Frequently asked questions in sidebar learnMoreSidebar, linking to the doc learn-more/faq" - }, - "sidebar.learnMoreSidebar.doc.Glossary": { - "message": "Glossary", - "description": "The label for the doc item Glossary in sidebar learnMoreSidebar, linking to the doc intro/glossary" - }, - "sidebar.learnMoreSidebar.doc.Why Nitro?": { - "message": "Why Nitro?", - "description": "The label for the doc item Why Nitro? in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/why-nitro" - }, - "sidebar.learnMoreSidebar.doc.Transaction lifecycle": { - "message": "Transaction lifecycle", - "description": "The label for the doc item Transaction lifecycle in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/tx-lifecycle" - }, - "sidebar.learnMoreSidebar.doc.Sequencer": { - "message": "Sequencer", - "description": "The label for the doc item Sequencer in sidebar learnMoreSidebar, linking to the doc sequencer" - }, - "sidebar.learnMoreSidebar.doc.AnyTrust protocol": { - "message": "AnyTrust protocol", - "description": "The label for the doc item AnyTrust protocol in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/inside-anytrust" - }, - "sidebar.learnMoreSidebar.doc.L2 gas": { - "message": "L2 gas", - "description": "The label for the doc item L2 gas in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/gas-fees" - }, - "sidebar.learnMoreSidebar.doc.L1 pricing": { - "message": "L1 pricing", - "description": "The label for the doc item L1 pricing in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/l1-gas-pricing" - }, - "sidebar.learnMoreSidebar.doc.Deep dive: Inside Arbitrum": { - "message": "Deep dive: Inside Arbitrum", - "description": "The label for the doc item Deep dive: Inside Arbitrum in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/inside-arbitrum-nitro" - }, - "sidebar.learnMoreSidebar.doc.Assertion tree": { - "message": "Assertion tree", - "description": "The label for the doc item Assertion tree in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/assertion-tree" - }, - "sidebar.learnMoreSidebar.doc.L1-to-L2 messaging": { - "message": "L1-to-L2 messaging", - "description": "The label for the doc item L1-to-L2 messaging in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/l1-l2-messaging" - }, - "sidebar.learnMoreSidebar.doc.L2-to-L1 messaging": { - "message": "L2-to-L1 messaging", - "description": "The label for the doc item L2-to-L1 messaging in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/l2-l1-messaging" - }, - "sidebar.learnMoreSidebar.doc.ArbOS": { - "message": "ArbOS", - "description": "The label for the doc item ArbOS in sidebar learnMoreSidebar, linking to the doc arbos/arbos" - }, - "sidebar.learnMoreSidebar.doc.Geth": { - "message": "Geth", - "description": "The label for the doc item Geth in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/geth" - }, - "sidebar.learnMoreSidebar.doc.Interactive challenges": { - "message": "Interactive challenges", - "description": "The label for the doc item Interactive challenges in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/challenge-manager" - }, - "sidebar.learnMoreSidebar.doc.One step proof assumptions": { - "message": "One step proof assumptions", - "description": "The label for the doc item One step proof assumptions in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/osp-assumptions" - }, - "sidebar.learnMoreSidebar.doc.Wasm To WAVM": { - "message": "Wasm To WAVM", - "description": "The label for the doc item Wasm To WAVM in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wasm-wavm" - }, - "sidebar.learnMoreSidebar.doc.Custom WAVM opcodes": { - "message": "Custom WAVM opcodes", - "description": "The label for the doc item Custom WAVM opcodes in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-custom-opcodes" - }, - "sidebar.learnMoreSidebar.doc.WAVM floats": { - "message": "WAVM floats", - "description": "The label for the doc item WAVM floats in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-floats" - }, - "sidebar.learnMoreSidebar.doc.WAVM modules": { - "message": "WAVM modules", - "description": "The label for the doc item WAVM modules in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-modules" - }, - "sidebar.learnMoreSidebar.doc.Audit reports": { - "message": "Audit reports", - "description": "The label for the doc item Audit reports in sidebar learnMoreSidebar, linking to the doc audit-reports" - } -} diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/.gitkeep b/website/i18n/ja/docusaurus-plugin-content-docs/current/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/translated/.gitkeep b/website/i18n/ja/docusaurus-plugin-content-docs/translated/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/website/i18n/ja/docusaurus-theme-classic/footer.json b/website/i18n/ja/docusaurus-theme-classic/footer.json deleted file mode 100644 index 372c56179..000000000 --- a/website/i18n/ja/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "link.item.label.Arbitrum.io": { - "message": "Arbitrum.io", - "description": "The label of footer link with label=Arbitrum.io linking to https://arbitrum.io/" - }, - "link.item.label.Arbitrum Rollup": { - "message": "Arbitrum Rollup", - "description": "The label of footer link with label=Arbitrum Rollup linking to https://arbitrum.io/rollup" - }, - "link.item.label.Arbitrum AnyTrust": { - "message": "Arbitrum AnyTrust", - "description": "The label of footer link with label=Arbitrum AnyTrust linking to https://arbitrum.io/anytrust" - }, - "link.item.label.Arbitrum Orbit": { - "message": "Arbitrum Orbit", - "description": "The label of footer link with label=Arbitrum Orbit linking to https://arbitrum.io/orbit" - }, - "link.item.label.Arbitrum Stylus": { - "message": "Arbitrum Stylus", - "description": "The label of footer link with label=Arbitrum Stylus linking to https://arbitrum.io/stylus" - }, - "link.item.label.Nitro whitepaper": { - "message": "Nitro whitepaper", - "description": "The label of footer link with label=Nitro whitepaper linking to https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf" - }, - "link.item.label.Network status": { - "message": "Network status", - "description": "The label of footer link with label=Network status linking to https://status.arbitrum.io/" - }, - "link.item.label.Portal": { - "message": "Portal", - "description": "The label of footer link with label=Portal linking to https://portal.arbitrum.io/" - }, - "link.item.label.Bridge": { - "message": "Bridge", - "description": "The label of footer link with label=Bridge linking to https://bridge.arbitrum.io/" - }, - "link.item.label.Community": { - "message": "Community", - "description": "The label of footer link with label=Community linking to https://arbitrum.io/community" - }, - "link.item.label.Careers": { - "message": "Careers", - "description": "The label of footer link with label=Careers linking to https://offchainlabs.com/careers/" - }, - "link.item.label.Support": { - "message": "Support", - "description": "The label of footer link with label=Support linking to https://support.arbitrum.io/" - }, - "link.item.label.Discord": { - "message": "Discord", - "description": "The label of footer link with label=Discord linking to https://discord.gg/ZpZuw7p" - }, - "link.item.label.Twitter": { - "message": "Twitter", - "description": "The label of footer link with label=Twitter linking to https://twitter.com/ArbitrumDevs" - }, - "link.item.label.Youtube": { - "message": "Youtube", - "description": "The label of footer link with label=Youtube linking to https://www.youtube.com/@Arbitrum" - }, - "link.item.label.Research forum": { - "message": "Research forum", - "description": "The label of footer link with label=Research forum linking to https://research.arbitrum.io/" - }, - "link.item.label.Medium Blog": { - "message": "Medium Blog", - "description": "The label of footer link with label=Medium Blog linking to https://medium.com/offchainlabs" - }, - "link.item.label.Governance docs": { - "message": "Governance docs", - "description": "The label of footer link with label=Governance docs linking to https://medium.com/offchainlabs" - }, - "copyright": { - "message": "© 2023 Offchain Labs", - "description": "The footer copyright" - } -} diff --git a/website/i18n/ja/docusaurus-theme-classic/navbar.json b/website/i18n/ja/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 3c0d9ed17..000000000 --- a/website/i18n/ja/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Arbitrum Docs", - "description": "The title in the navbar" - }, - "item.label.Developers": { - "message": "Developers", - "description": "Navbar item with label Developers" - }, - "item.label.Users (Bridge)": { - "message": "Users (Bridge)", - "description": "Navbar item with label Users (Bridge)" - }, - "item.label.Node runners": { - "message": "Node runners", - "description": "Navbar item with label Node runners" - }, - "item.label.How it works": { - "message": "How it works", - "description": "Navbar item with label How it works" - } -} diff --git a/website/i18n/zh/code.json b/website/i18n/zh/code.json deleted file mode 100644 index 66149a8a8..000000000 --- a/website/i18n/zh/code.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "页面已崩溃。", - "description": "The title of the fallback page when the page crashed" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "重试", - "description": "The label of the button to try again when the page crashed" - }, - "theme.NotFound.title": { - "message": "找不到页面", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "我们找不到您要找的页面。", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "备注", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "提示", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "危险", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "信息", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "警告", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "回到顶部", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "历史博文", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "历史博文", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "博文列表分页导航", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "较新的博文", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "较旧的博文", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "博文分页导航", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "较新一篇", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "较旧一篇", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "{count} 篇博文", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} 含有标签「{tagName}」", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "查看所有标签", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "切换浅色/暗黑模式(当前为{mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "暗黑模式", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "浅色模式", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "页面路径", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} 个项目", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "文档分页导航", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "上一页", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "下一页", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count} 篇文档带有标签", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged}「{tagName}」", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "版本:{versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "最新的文档请参阅 {latestVersionLink} ({versionLabel})。", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "最新版本", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "编辑此页", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "{heading}的直接链接", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": "于 {date} ", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": "由 {user} ", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "最后{byUser}{atDate}更新", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "选择版本", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "标签:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "关闭", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "最近博文导航", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "复制成功", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "复制代码到剪贴板", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "复制", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "切换自动换行", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "打开/收起侧边栏菜单「{label}」", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "主导航", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "选择语言", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "本页总览", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "阅读更多", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "阅读 {title} 的全文", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "阅读需 {readingTime} 分钟", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "主页面", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "收起侧边栏", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "收起侧边栏", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "文档侧边栏", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "关闭导航栏", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← 回到主菜单", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "切换导航栏", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "展开侧边栏", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "展开侧边栏", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.Playground.result": { - "message": "结果", - "description": "The result label of the live codeblocks" - }, - "theme.Playground.liveEditor": { - "message": "实时编辑器", - "description": "The live editor label of the live codeblocks" - }, - "theme.common.skipToMainContent": { - "message": "跳到主要内容", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "标签", - "description": "The title of the tag list page" - } -} diff --git a/website/i18n/zh/docusaurus-plugin-content-blog/options.json b/website/i18n/zh/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff706..000000000 --- a/website/i18n/zh/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/website/i18n/zh/docusaurus-plugin-content-docs-arbitrum-sdk/current.json b/website/i18n/zh/docusaurus-plugin-content-docs-arbitrum-sdk/current.json deleted file mode 100644 index b6681971d..000000000 --- a/website/i18n/zh/docusaurus-plugin-content-docs-arbitrum-sdk/current.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Module: assetBridger": { - "message": "Module: assetBridger", - "description": "The label for category Module: assetBridger in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: dataEntities": { - "message": "Module: dataEntities", - "description": "The label for category Module: dataEntities in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: inbox": { - "message": "Module: inbox", - "description": "The label for category Module: inbox in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: message": { - "message": "Module: message", - "description": "The label for category Module: message in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Module: utils": { - "message": "Module: utils", - "description": "The label for category Module: utils in sidebar defaultSidebar" - } -} diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current.json b/website/i18n/zh/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index d61bacbef..000000000 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,326 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Build dApps (Solidity)": { - "message": "Build dApps (Solidity)", - "description": "The label for category Build dApps (Solidity) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.How-tos": { - "message": "How-tos", - "description": "The label for category How-tos in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Concepts": { - "message": "Concepts", - "description": "The label for category Concepts in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Differences between Arbitrum and Ethereum": { - "message": "Differences between Arbitrum and Ethereum", - "description": "The label for category Differences between Arbitrum and Ethereum in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Build dApps (Rust) (TESTNET)": { - "message": "Build dApps (Rust) (TESTNET)", - "description": "The label for category Build dApps (Rust) (TESTNET) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Developer reference": { - "message": "Developer reference", - "description": "The label for category Developer reference in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Launch your own chain (Orbit)": { - "message": "Launch your own chain (Orbit)", - "description": "The label for category Launch your own chain (Orbit) in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Reference": { - "message": "Reference", - "description": "The label for category Reference in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Bridge tokens between chains": { - "message": "Bridge tokens between chains", - "description": "The label for category Bridge tokens between chains in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Third-party docs": { - "message": "Third-party docs", - "description": "The label for category Third-party docs in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.category.Supra": { - "message": "Supra", - "description": "The label for category Supra in sidebar buildDecentralizedAppsSidebar" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Rust crate docs": { - "message": "Rust crate docs", - "description": "The label for link Rust crate docs in sidebar buildDecentralizedAppsSidebar, linking to https://docs.rs/stylus-sdk/latest/stylus_sdk/index.html" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Source code repository": { - "message": "Source code repository", - "description": "The label for link Source code repository in sidebar buildDecentralizedAppsSidebar, linking to https://github.com/OffchainLabs/stylus" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Arbitrum SDK": { - "message": "Arbitrum SDK", - "description": "The label for link Arbitrum SDK in sidebar buildDecentralizedAppsSidebar, linking to /sdk" - }, - "sidebar.buildDecentralizedAppsSidebar.link.Tutorials": { - "message": "Tutorials", - "description": "The label for link Tutorials in sidebar buildDecentralizedAppsSidebar, linking to https://github.com/OffchainLabs/arbitrum-tutorials" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar buildDecentralizedAppsSidebar, linking to the doc for-devs/gentle-introduction-dapps" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Estimate gas": { - "message": "Estimate gas", - "description": "The label for the doc item Estimate gas in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/how-to-estimate-gas" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Use oracles": { - "message": "Use oracles", - "description": "The label for the doc item Use oracles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/oracles/how-to-use-oracles" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Arbitrum chains": { - "message": "Arbitrum chains", - "description": "The label for the doc item Arbitrum chains in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/public-chains" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Cross-chain messaging": { - "message": "Cross-chain messaging", - "description": "The label for the doc item Cross-chain messaging in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/cross-chain-messaging" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Precompiles": { - "message": "Precompiles", - "description": "The label for the doc item Precompiles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/precompiles/reference" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Oracles": { - "message": "Oracles", - "description": "The label for the doc item Oracles in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/oracles/reference" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar buildDecentralizedAppsSidebar, linking to the doc for-devs/troubleshooting-building" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Overview": { - "message": "Overview", - "description": "The label for the doc item Overview in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/get-started" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Standard gateway": { - "message": "Standard gateway", - "description": "The label for the doc item Standard gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-standard" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Generic-custom gateway": { - "message": "Generic-custom gateway", - "description": "The label for the doc item Generic-custom gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-generic-custom" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Custom gateway": { - "message": "Custom gateway", - "description": "The label for the doc item Custom gateway in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/token-bridging/how-to-bridge-tokens-custom-gateway" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.RPC endpoints and providers": { - "message": "RPC endpoints and providers", - "description": "The label for the doc item RPC endpoints and providers in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/node-providers" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Smart contract addresses": { - "message": "Smart contract addresses", - "description": "The label for the doc item Smart contract addresses in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/useful-addresses" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Chain Params": { - "message": "Chain Params", - "description": "The label for the doc item Chain Params in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/chain-params" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Development frameworks": { - "message": "Development frameworks", - "description": "The label for the doc item Development frameworks in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/development-frameworks" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Web3 libraries and tools": { - "message": "Web3 libraries and tools", - "description": "The label for the doc item Web3 libraries and tools in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/web3-libraries-tools" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Monitoring tools and block explorers": { - "message": "Monitoring tools and block explorers", - "description": "The label for the doc item Monitoring tools and block explorers in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/monitoring-tools-block-explorers" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Debugging tools": { - "message": "Debugging tools", - "description": "The label for the doc item Debugging tools in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/debugging-tools" - }, - "sidebar.buildDecentralizedAppsSidebar.doc.Mainnet risks": { - "message": "Mainnet risks", - "description": "The label for the doc item Mainnet risks in sidebar buildDecentralizedAppsSidebar, linking to the doc build-decentralized-apps/reference/mainnet-risks" - }, - "sidebar.bridgeTokensSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.category.Concepts": { - "message": "Concepts", - "description": "The label for category Concepts in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar bridgeTokensSidebar" - }, - "sidebar.bridgeTokensSidebar.doc.Quickstart": { - "message": "Quickstart", - "description": "The label for the doc item Quickstart in sidebar bridgeTokensSidebar, linking to the doc arbitrum-bridge/quickstart" - }, - "sidebar.bridgeTokensSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar bridgeTokensSidebar, linking to the doc arbitrum-bridge/troubleshooting" - }, - "sidebar.runNodesSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.category.How-tos": { - "message": "How-tos", - "description": "The label for category How-tos in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar runNodesSidebar" - }, - "sidebar.runNodesSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/overview" - }, - "sidebar.runNodesSidebar.doc.Quickstart": { - "message": "Quickstart", - "description": "The label for the doc item Quickstart in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/quickstart" - }, - "sidebar.runNodesSidebar.doc.Troubleshooting": { - "message": "Troubleshooting", - "description": "The label for the doc item Troubleshooting in sidebar runNodesSidebar, linking to the doc run-arbitrum-node/troubleshooting" - }, - "sidebar.runNodesSidebar.doc.Frequently asked questions": { - "message": "Frequently asked questions", - "description": "The label for the doc item Frequently asked questions in sidebar runNodesSidebar, linking to the doc node-running/faq" - }, - "sidebar.runNodesSidebar.doc.Command-line options": { - "message": "Command-line options", - "description": "The label for the doc item Command-line options in sidebar runNodesSidebar, linking to the doc node-running/command-line-options" - }, - "sidebar.learnMoreSidebar.category.Get started": { - "message": "Get started", - "description": "The label for category Get started in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Introductory concepts": { - "message": "Introductory concepts", - "description": "The label for category Introductory concepts in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Gas / fees": { - "message": "Gas / fees", - "description": "The label for category Gas / fees in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Advanced concepts": { - "message": "Advanced concepts", - "description": "The label for category Advanced concepts in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Cross-chain messaging": { - "message": "Cross-chain messaging", - "description": "The label for category Cross-chain messaging in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.ArbOS": { - "message": "ArbOS", - "description": "The label for category ArbOS in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.Fraud proofs": { - "message": "Fraud proofs", - "description": "The label for category Fraud proofs in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar learnMoreSidebar" - }, - "sidebar.learnMoreSidebar.link.Deeper dive: Whitepaper": { - "message": "Deeper dive: Whitepaper", - "description": "The label for link Deeper dive: Whitepaper in sidebar learnMoreSidebar, linking to https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf" - }, - "sidebar.learnMoreSidebar.doc.A gentle introduction": { - "message": "A gentle introduction", - "description": "The label for the doc item A gentle introduction in sidebar learnMoreSidebar, linking to the doc intro/intro" - }, - "sidebar.learnMoreSidebar.doc.Frequently asked questions": { - "message": "Frequently asked questions", - "description": "The label for the doc item Frequently asked questions in sidebar learnMoreSidebar, linking to the doc learn-more/faq" - }, - "sidebar.learnMoreSidebar.doc.Glossary": { - "message": "Glossary", - "description": "The label for the doc item Glossary in sidebar learnMoreSidebar, linking to the doc intro/glossary" - }, - "sidebar.learnMoreSidebar.doc.Why Nitro?": { - "message": "Why Nitro?", - "description": "The label for the doc item Why Nitro? in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/why-nitro" - }, - "sidebar.learnMoreSidebar.doc.Transaction lifecycle": { - "message": "Transaction lifecycle", - "description": "The label for the doc item Transaction lifecycle in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/tx-lifecycle" - }, - "sidebar.learnMoreSidebar.doc.Sequencer": { - "message": "Sequencer", - "description": "The label for the doc item Sequencer in sidebar learnMoreSidebar, linking to the doc sequencer" - }, - "sidebar.learnMoreSidebar.doc.AnyTrust protocol": { - "message": "AnyTrust protocol", - "description": "The label for the doc item AnyTrust protocol in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/inside-anytrust" - }, - "sidebar.learnMoreSidebar.doc.L2 gas": { - "message": "L2 gas", - "description": "The label for the doc item L2 gas in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/gas-fees" - }, - "sidebar.learnMoreSidebar.doc.L1 pricing": { - "message": "L1 pricing", - "description": "The label for the doc item L1 pricing in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/l1-gas-pricing" - }, - "sidebar.learnMoreSidebar.doc.Deep dive: Inside Arbitrum": { - "message": "Deep dive: Inside Arbitrum", - "description": "The label for the doc item Deep dive: Inside Arbitrum in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/inside-arbitrum-nitro" - }, - "sidebar.learnMoreSidebar.doc.Assertion tree": { - "message": "Assertion tree", - "description": "The label for the doc item Assertion tree in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/assertion-tree" - }, - "sidebar.learnMoreSidebar.doc.L1-to-L2 messaging": { - "message": "L1-to-L2 messaging", - "description": "The label for the doc item L1-to-L2 messaging in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/l1-l2-messaging" - }, - "sidebar.learnMoreSidebar.doc.L2-to-L1 messaging": { - "message": "L2-to-L1 messaging", - "description": "The label for the doc item L2-to-L1 messaging in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/l2-l1-messaging" - }, - "sidebar.learnMoreSidebar.doc.ArbOS": { - "message": "ArbOS", - "description": "The label for the doc item ArbOS in sidebar learnMoreSidebar, linking to the doc arbos/arbos" - }, - "sidebar.learnMoreSidebar.doc.Geth": { - "message": "Geth", - "description": "The label for the doc item Geth in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/arbos/geth" - }, - "sidebar.learnMoreSidebar.doc.Interactive challenges": { - "message": "Interactive challenges", - "description": "The label for the doc item Interactive challenges in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/challenge-manager" - }, - "sidebar.learnMoreSidebar.doc.One step proof assumptions": { - "message": "One step proof assumptions", - "description": "The label for the doc item One step proof assumptions in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/osp-assumptions" - }, - "sidebar.learnMoreSidebar.doc.Wasm To WAVM": { - "message": "Wasm To WAVM", - "description": "The label for the doc item Wasm To WAVM in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wasm-wavm" - }, - "sidebar.learnMoreSidebar.doc.Custom WAVM opcodes": { - "message": "Custom WAVM opcodes", - "description": "The label for the doc item Custom WAVM opcodes in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-custom-opcodes" - }, - "sidebar.learnMoreSidebar.doc.WAVM floats": { - "message": "WAVM floats", - "description": "The label for the doc item WAVM floats in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-floats" - }, - "sidebar.learnMoreSidebar.doc.WAVM modules": { - "message": "WAVM modules", - "description": "The label for the doc item WAVM modules in sidebar learnMoreSidebar, linking to the doc how-arbitrum-works/fraud-proofs/wavm-modules" - }, - "sidebar.learnMoreSidebar.doc.Audit reports": { - "message": "Audit reports", - "description": "The label for the doc item Audit reports in sidebar learnMoreSidebar, linking to the doc audit-reports" - } -} diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/.gitkeep b/website/i18n/zh/docusaurus-plugin-content-docs/current/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/translated/.gitkeep b/website/i18n/zh/docusaurus-plugin-content-docs/translated/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/website/i18n/zh/docusaurus-theme-classic/footer.json b/website/i18n/zh/docusaurus-theme-classic/footer.json deleted file mode 100644 index 372c56179..000000000 --- a/website/i18n/zh/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "link.item.label.Arbitrum.io": { - "message": "Arbitrum.io", - "description": "The label of footer link with label=Arbitrum.io linking to https://arbitrum.io/" - }, - "link.item.label.Arbitrum Rollup": { - "message": "Arbitrum Rollup", - "description": "The label of footer link with label=Arbitrum Rollup linking to https://arbitrum.io/rollup" - }, - "link.item.label.Arbitrum AnyTrust": { - "message": "Arbitrum AnyTrust", - "description": "The label of footer link with label=Arbitrum AnyTrust linking to https://arbitrum.io/anytrust" - }, - "link.item.label.Arbitrum Orbit": { - "message": "Arbitrum Orbit", - "description": "The label of footer link with label=Arbitrum Orbit linking to https://arbitrum.io/orbit" - }, - "link.item.label.Arbitrum Stylus": { - "message": "Arbitrum Stylus", - "description": "The label of footer link with label=Arbitrum Stylus linking to https://arbitrum.io/stylus" - }, - "link.item.label.Nitro whitepaper": { - "message": "Nitro whitepaper", - "description": "The label of footer link with label=Nitro whitepaper linking to https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf" - }, - "link.item.label.Network status": { - "message": "Network status", - "description": "The label of footer link with label=Network status linking to https://status.arbitrum.io/" - }, - "link.item.label.Portal": { - "message": "Portal", - "description": "The label of footer link with label=Portal linking to https://portal.arbitrum.io/" - }, - "link.item.label.Bridge": { - "message": "Bridge", - "description": "The label of footer link with label=Bridge linking to https://bridge.arbitrum.io/" - }, - "link.item.label.Community": { - "message": "Community", - "description": "The label of footer link with label=Community linking to https://arbitrum.io/community" - }, - "link.item.label.Careers": { - "message": "Careers", - "description": "The label of footer link with label=Careers linking to https://offchainlabs.com/careers/" - }, - "link.item.label.Support": { - "message": "Support", - "description": "The label of footer link with label=Support linking to https://support.arbitrum.io/" - }, - "link.item.label.Discord": { - "message": "Discord", - "description": "The label of footer link with label=Discord linking to https://discord.gg/ZpZuw7p" - }, - "link.item.label.Twitter": { - "message": "Twitter", - "description": "The label of footer link with label=Twitter linking to https://twitter.com/ArbitrumDevs" - }, - "link.item.label.Youtube": { - "message": "Youtube", - "description": "The label of footer link with label=Youtube linking to https://www.youtube.com/@Arbitrum" - }, - "link.item.label.Research forum": { - "message": "Research forum", - "description": "The label of footer link with label=Research forum linking to https://research.arbitrum.io/" - }, - "link.item.label.Medium Blog": { - "message": "Medium Blog", - "description": "The label of footer link with label=Medium Blog linking to https://medium.com/offchainlabs" - }, - "link.item.label.Governance docs": { - "message": "Governance docs", - "description": "The label of footer link with label=Governance docs linking to https://medium.com/offchainlabs" - }, - "copyright": { - "message": "© 2023 Offchain Labs", - "description": "The footer copyright" - } -} diff --git a/website/i18n/zh/docusaurus-theme-classic/navbar.json b/website/i18n/zh/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 3c0d9ed17..000000000 --- a/website/i18n/zh/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Arbitrum Docs", - "description": "The title in the navbar" - }, - "item.label.Developers": { - "message": "Developers", - "description": "Navbar item with label Developers" - }, - "item.label.Users (Bridge)": { - "message": "Users (Bridge)", - "description": "Navbar item with label Users (Bridge)" - }, - "item.label.Node runners": { - "message": "Node runners", - "description": "Navbar item with label Node runners" - }, - "item.label.How it works": { - "message": "How it works", - "description": "Navbar item with label How it works" - } -} diff --git a/website/package.json b/website/package.json deleted file mode 100644 index 018735dc9..000000000 --- a/website/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "nitro-docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "install_sdk_dependencies": "cd ../arbitrum-sdk && yarn install && cd ../website", - "install_orbit_sdk_dependencies": "cd ../arbitrum-orbit-sdk && yarn install && cd ../website", - "generate_precompiles_ref_tables": "ts-node src/scripts/precompile-reference-generator.ts", - "start": "docusaurus start", - "build_translation": "yarn ts-node ./src/scripts/move-untranslated-files.ts", - "build": "yarn install_sdk_dependencies && yarn install_orbit_sdk_dependencies && docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "find-orphan-pages": "ts-node src/scripts/find-orphan-pages.ts", - "format": "yarn format:docs && yarn format:app", - "format:app": "prettier --write --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\"", - "format:docs": "prettier --write --config \"./.prettierrc.js\" -- \"../arbitrum-docs/**/*.{md,mdx}\"", - "format:check": "prettier --check --config \"./.prettierrc.js\" -- \"./*.{js,json}\" \"src/**/*.{tsx,ts,scss,json,js}\" \"../arbitrum-docs/**/*.{md,mdx}\"", - "typecheck": "tsc" - }, - "dependencies": { - "@arbitrum/sdk": "^3.0.0", - "@cmfcmf/docusaurus-search-local": "^0.11.0", - "@docusaurus/core": "^3.3.2", - "@docusaurus/preset-classic": "^3.3.2", - "@docusaurus/theme-live-codeblock": "^3.3.2", - "@docusaurus/theme-mermaid": "^3.3.2", - "classnames": "^2.5.1", - "clsx": "^1.2.1", - "docusaurus-lunr-search": "^3.3.2", - "docusaurus-plugin-fathom": "^1.2.0", - "docusaurus-plugin-sass": "^0.2.5", - "ethers": "5.7.2", - "got": "11.8.5", - "posthog-docusaurus": "^2.0.0", - "prism-react-renderer": "^1.3.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.66.1", - "tippy.js": "^6.3.7", - "trim": "0.0.3" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@offchainlabs/prettier-config": "0.2.1", - "@tsconfig/docusaurus": "^2.0.3", - "markdown-link-extractor": "^3.1.0", - "prettier": "^2.8.3", - "ts-node": "^10.9.1", - "typedoc": "^0.25.13", - "docusaurus-plugin-typedoc": "^1.0.1", - "typedoc-plugin-frontmatter": "^1.0.0", - "typedoc-plugin-markdown": "4.0.1", - "typescript": "^4.7.4" - }, - "browserslist": { - "production": [">0.5%", "not dead", "not op_mini all"], - "development": ["last 1 chrome version", "last 1 firefox version", "last 1 safari version"] - }, - "engines": { - "node": ">=16.14" - } -} diff --git a/website/sdk/intro2.md b/website/sdk/intro2.md deleted file mode 100644 index 98d077782..000000000 --- a/website/sdk/intro2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -sidebar_position: 1 ---- - -multi-docs test \ No newline at end of file diff --git a/website/sidebars.js b/website/sidebars.js deleted file mode 100644 index 567dbc390..000000000 --- a/website/sidebars.js +++ /dev/null @@ -1,924 +0,0 @@ -// @ts-check - -const sdkDocsSidebar = require('../arbitrum-docs/sdk-docs/sidebar.js'); - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - buildDecentralizedAppsSidebar: [ - { - type: 'category', - label: 'Welcome', - collapsed: false, - items: [ - { - type: 'doc', - id: 'welcome/arbitrum-gentle-introduction', - label: 'A gentle introduction', - }, - { - type: 'doc', - id: 'welcome/get-started', - label: 'Get started', - }, - ], - }, - { - type: 'category', - label: 'Build decentralized apps', - collapsed: true, - items: [ - { - type: 'doc', - id: 'build-decentralized-apps/quickstart-solidity-hardhat', - label: 'Quickstart (Solidity)', - }, - { - type: 'doc', - label: 'Estimate gas', - id: 'build-decentralized-apps/how-to-estimate-gas', - }, - { - type: 'doc', - label: 'Chains and testnets', - id: 'build-decentralized-apps/public-chains', - }, - { - type: 'doc', - label: 'Cross-chain messaging', - id: 'build-decentralized-apps/cross-chain-messaging', - }, - { - type: 'category', - label: 'Arbitrum vs Ethereum', - items: [ - { - type: 'doc', - label: 'Comparison overview', - id: 'build-decentralized-apps/arbitrum-vs-ethereum/comparison-overview', - }, - { - type: 'doc', - label: 'Block numbers and time', - id: 'build-decentralized-apps/arbitrum-vs-ethereum/block-numbers-and-time', - }, - { - type: 'doc', - label: 'RPC methods', - id: 'build-decentralized-apps/arbitrum-vs-ethereum/rpc-methods', - }, - { - type: 'doc', - label: 'Solidity support', - id: 'build-decentralized-apps/arbitrum-vs-ethereum/solidity-support', - }, - ], - }, - { - type: 'category', - label: 'Oracles', - collapsed: true, - items: [ - { - type: 'doc', - label: 'Overview', - id: 'build-decentralized-apps/oracles/overview', - }, - { - type: 'doc', - label: 'Use oracles in your app', - id: 'build-decentralized-apps/oracles/how-to-use-oracles', - }, - { - type: 'doc', - label: 'Reference', - id: 'build-decentralized-apps/oracles/reference', - }, - ], - }, - { - type: 'category', - label: 'Precompiles', - collapsed: true, - items: [ - { - type: 'doc', - label: 'Overview', - id: 'build-decentralized-apps/precompiles/overview', - }, - { - type: 'doc', - label: 'Reference', - id: 'build-decentralized-apps/precompiles/reference', - }, - ], - }, - { - type: 'category', - label: 'NodeInterface', - collapsed: true, - items: [ - { - type: 'doc', - label: 'Overview', - id: 'build-decentralized-apps/nodeinterface/overview', - }, - { - type: 'doc', - label: 'Reference', - id: 'build-decentralized-apps/nodeinterface/reference', - }, - ], - }, - { - type: 'category', - label: 'Token bridging', - collapsed: true, - items: [ - { - type: 'doc', - label: 'Overview', - id: 'build-decentralized-apps/token-bridging/overview', - }, - { - type: 'doc', - label: 'ETH bridging', - id: 'build-decentralized-apps/token-bridging/token-bridge-ether', - }, - { - type: 'doc', - label: 'ERC-20 token bridging', - id: 'build-decentralized-apps/token-bridging/token-bridge-erc20', - }, - { - type: 'category', - label: 'Bridge tokens programmatically', - items: [ - { - type: 'doc', - label: 'Get started', - id: 'build-decentralized-apps/token-bridging/bridge-tokens-programmatically/get-started', - }, - { - type: 'doc', - label: 'Use the standard gateway', - id: 'build-decentralized-apps/token-bridging/bridge-tokens-programmatically/how-to-bridge-tokens-standard', - }, - { - type: 'doc', - label: 'Use the generic-custom gateway', - id: 'build-decentralized-apps/token-bridging/bridge-tokens-programmatically/how-to-bridge-tokens-generic-custom', - }, - { - type: 'doc', - label: 'Use the custom gateway', - id: 'build-decentralized-apps/token-bridging/bridge-tokens-programmatically/how-to-bridge-tokens-custom-gateway', - }, - ], - }, - ], - }, - { - type: 'category', - label: 'Reference', - items: [ - { - type: 'doc', - id: 'build-decentralized-apps/reference/node-providers', - label: 'RPC endpoints and providers', - }, - { - type: 'doc', - label: 'Smart contract addresses', - id: 'build-decentralized-apps/reference/useful-addresses', - }, - { - type: 'doc', - label: 'Chain parameters', - id: 'build-decentralized-apps/reference/chain-params', - }, - { - type: 'doc', - label: 'Development frameworks', - id: 'build-decentralized-apps/reference/development-frameworks', - }, - { - type: 'doc', - label: 'Web3 libraries and tools', - id: 'build-decentralized-apps/reference/web3-libraries-tools', - }, - { - type: 'doc', - label: 'Monitoring tools and block explorers', - id: 'build-decentralized-apps/reference/monitoring-tools-block-explorers', - }, - { - type: 'doc', - label: 'Debugging tools', - id: 'build-decentralized-apps/reference/debugging-tools', - }, - - { - type: 'doc', - id: 'build-decentralized-apps/reference/mainnet-risks', - label: 'Mainnet risks', - }, - ], - }, - { - type: 'doc', - label: 'Troubleshooting', - id: 'for-devs/troubleshooting-building', - }, - { - type: 'category', - label: 'Arbitrum SDK', - items: sdkDocsSidebar, - }, - { - type: 'link', - label: 'Tutorials', - href: 'https://github.com/OffchainLabs/arbitrum-tutorials', - }, - ], - }, - { - type: 'category', - label: 'Run an Orbit chain', - collapsed: true, - items: [ - { - type: 'doc', - id: 'launch-orbit-chain/orbit-gentle-introduction', - label: 'A gentle introduction', - }, - { - type: 'doc', - id: 'launch-orbit-chain/orbit-quickstart', - label: 'Quickstart', - }, - { - type: 'category', - label: 'Customize your chain', - collapsed: true, - items: [ - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/customize-deployment-configuration', - label: `Customize your chain's deployment`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/reference/additional-configuration-parameters', - label: `Additional configuration parameters`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/use-a-custom-gas-token', - label: `Use a custom gas token`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/customize-precompile', - label: `Customize your chain's precompiles`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/customize-stf', - label: `Customize your chain's behavior`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-chain-finality', - label: `Configure delayed inbox finality`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/manage-fee-collectors', - label: `Manage the fee collectors`, - }, - ], - }, - { - type: 'category', - label: 'ArbOS', - collapsed: true, - items: [ - { - type: 'html', - value: - '
ArbOS software releases', - // q: why use an anchor html tag here? - // a: see note at end of file - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/arbos-upgrade', - label: `Upgrade ArbOS`, - }, - ], - }, - { - type: 'html', - value: - 'Data Availability Committees ', - // q: why use an anchor html tag here? - // a: see note at end of file - }, - { - type: 'doc', - id: 'launch-orbit-chain/concepts/anytrust-orbit-chain-keyset-generation', - label: 'Keyset generation (AnyTrust chains)', - }, - { - type: 'doc', - id: 'launch-orbit-chain/reference/monitoring-tools-and-considerations', - label: 'Monitoring tools and considerations', - }, - { - type: 'doc', - id: 'node-running/how-tos/running-an-orbit-node', - label: 'Run a full Orbit node', - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/add-orbit-chain-to-bridge-ui', - label: `Add your chain to the bridge`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/concepts/chain-ownership', - label: 'Orbit chain ownership', - }, - { - type: 'doc', - id: 'launch-orbit-chain/concepts/custom-gas-token-sdk', - label: 'Custom gas token SDK', - }, - { - type: 'doc', - id: 'launch-orbit-chain/concepts/public-preview-expectations', - label: 'Public preview', - }, - { - type: 'doc', - id: 'launch-orbit-chain/infra-options-orbit-chains', - label: 'Third-party infrastructure providers', - }, - { - type: 'doc', - id: 'launch-orbit-chain/troubleshooting-building-orbit', - label: 'FAQ', - }, - { - type: 'category', - label: 'Orbit SDK', - collapsed: true, - items: [ - { - type: 'doc', - id: 'launch-orbit-chain/orbit-sdk-introduction', - label: `Introduction`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-deploying-rollup-chain', - label: `Rollup Orbit Deployment`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-deploying-anytrust-chain', - label: `AnyTrust Orbit Deployment`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-deploying-custom-gas-token-chain', - label: `Custom Gas Token Orbit Deployment`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-preparing-node-config', - label: `Node Config Generation`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-deploying-token-bridge', - label: `Token bridge deployment`, - }, - { - type: 'doc', - id: 'launch-orbit-chain/how-tos/orbit-sdk-configuring-orbit-chain', - label: `Orbit Chain Configuration`, - }, - { - type: 'doc', - id: 'orbit-sdk-docs/index', - label: `Orbit SDK Reference`, - }, - ], - }, - ], - }, - { - type: 'category', - label: 'Write Stylus contracts', - collapsed: true, - items: [ - { - type: 'doc', - id: 'stylus/stylus-gentle-introduction', - label: 'A gentle introduction', - }, - { - type: 'doc', - id: 'stylus/stylus-quickstart', - label: 'Quickstart (Rust)', - }, - { - type: 'doc', - label: 'Run a local dev node', - id: 'stylus/how-tos/local-stylus-dev-node', - }, - { - type: 'doc', - label: 'Testnets', - id: 'stylus/reference/testnet-information', - }, - { - type: 'category', - label: 'Gas and ink', - collapsed: true, - items: [ - { - type: 'doc', - label: 'Overview', - id: 'stylus/concepts/stylus-gas', - }, - { - type: 'doc', - id: 'stylus/reference/opcode-hostio-pricing', - label: 'Gas and ink costs', - }, - ], - }, - { - type: 'category', - label: 'Stylus SDK', - collapsed: true, - items: [ - { - type: 'doc', - id: 'stylus/reference/rust-sdk-guide', - label: 'Rust SDK overview', - }, - { - type: 'doc', - id: 'stylus/reference/stylus-sdk', - label: 'SDK repositories', - }, - ], - }, - { - type: 'doc', - label: 'Troubleshooting', - id: 'stylus/troubleshooting-building-stylus', - }, - - { - type: 'doc', - label: 'Add a new smart contract language', - id: 'stylus/how-tos/adding-support-for-new-languages', - }, - { - type: 'doc', - label: 'Reduce the size of WASM binaries', - id: 'stylus/how-tos/optimizing-binaries', - }, - { - type: 'link', - label: 'Rust crate docs', - href: 'https://docs.rs/stylus-sdk/latest/stylus_sdk/index.html', - }, - { - type: 'link', - label: 'Source code repository', - href: 'https://github.com/OffchainLabs/stylus', - }, - { - type: 'doc', - label: 'Public preview', - id: 'stylus/concepts/public-preview-expectations', - }, - ], - }, - { - type: 'category', - label: 'Run an Arbitrum node', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/overview', - label: 'Overview', - }, - { - type: 'doc', - id: 'run-arbitrum-node/quickstart', - label: 'Quickstart', - }, - { - type: 'doc', - id: 'run-arbitrum-node/run-full-node', - label: 'Run a full node', - }, - { - type: 'doc', - id: 'run-arbitrum-node/run-local-dev-node', - label: 'Run a local dev node', - }, - { - type: 'html', - value: - 'Run a full Orbit node ', - // q: why use an anchor html tag here? - // a: see note at end of file - }, - { - type: 'doc', - id: 'run-arbitrum-node/l1-ethereum-beacon-chain-rpc-providers', - label: 'L1 Ethereum RPC providers', - }, - { - type: 'category', - label: 'ArbOS software releases', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/arbos-releases/overview', - label: 'Overview', - }, - { - type: 'doc', - id: 'run-arbitrum-node/arbos-releases/arbos20', - label: 'ArbOS 20 Atlas', - }, - { - type: 'doc', - id: 'run-arbitrum-node/arbos-releases/arbos11', - label: 'ArbOS 11', - }, - ], - }, - { - type: 'category', - label: 'More node types', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/more-types/run-archive-node', - label: 'Run an archive node', - }, - { - type: 'doc', - id: 'run-arbitrum-node/more-types/run-validator-node', - label: 'Run a validator', - }, - { - type: 'doc', - id: 'run-arbitrum-node/more-types/run-classic-node', - label: 'Run a Classic node', - }, - ], - }, - { - type: 'category', - label: 'Data Availability Committees', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/data-availability-committees/get-started', - label: 'Get started', - }, - { - type: 'doc', - id: 'run-arbitrum-node/data-availability-committees/deploy-das', - label: 'Deploy a Data Availability Server (DAS)', - }, - { - type: 'doc', - id: 'run-arbitrum-node/data-availability-committees/deploy-mirror-das', - label: 'Deploy a mirror Data Availability Server', - }, - { - type: 'doc', - id: 'run-arbitrum-node/data-availability-committees/configure-dac', - label: 'Configure a Data Availability Committee (DAC)', - }, - ], - }, - { - type: 'category', - label: 'Sequencer', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/sequencer/run-feed-relay', - label: 'Run a feed relay', - }, - { - type: 'doc', - id: 'run-arbitrum-node/sequencer/read-sequencer-feed', - label: 'Read the sequencer feed', - }, - { - type: 'doc', - id: 'run-arbitrum-node/sequencer/run-sequencer-coordination-manager', - label: 'Run a Sequencer Coordination Manager (SQM)', - }, - ], - }, - { - type: 'category', - label: 'Nitro', - collapsed: true, - items: [ - { - type: 'doc', - id: 'run-arbitrum-node/nitro/build-nitro-locally', - label: 'Build Nitro locally', - }, - { - type: 'doc', - id: 'run-arbitrum-node/nitro/migrate-state-and-history-from-classic', - label: 'Migrate to Nitro from Classic', - }, - ], - }, - { - type: 'doc', - id: 'run-arbitrum-node/troubleshooting', - label: 'Troubleshooting', - }, - { - type: 'doc', - label: 'FAQ', - id: 'node-running/faq', - }, - ], - }, - { - type: 'category', - label: 'Arbitrum bridge', - collapsed: true, - items: [ - { - type: 'doc', - id: 'arbitrum-bridge/quickstart', - label: 'Quickstart', - }, - { - type: 'doc', - id: 'arbitrum-bridge/usdc-arbitrum-one', - label: 'USDC on Arbitrum One', - }, - { - type: 'doc', - id: 'arbitrum-bridge/troubleshooting', - label: 'Troubleshooting', - }, - ], - }, - { - type: 'category', - label: 'How Arbitrum works', - collapsed: true, - items: [ - { - type: 'category', - label: 'Introductory concepts', - collapsed: true, - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/why-nitro', - label: 'Why Nitro?', - }, - { - type: 'doc', - id: 'how-arbitrum-works/tx-lifecycle', - label: 'Transaction lifecycle', - }, - { - type: 'doc', - id: 'how-arbitrum-works/sequencer', - label: 'Sequencer', - }, - { - type: 'doc', - id: 'how-arbitrum-works/inside-anytrust', - label: 'AnyTrust protocol', - }, - { - type: 'category', - label: 'Gas / fees', - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/gas-fees', - label: 'L2 gas and fees', - }, - { - type: 'doc', - id: 'how-arbitrum-works/l1-gas-pricing', - label: 'L1 pricing', - }, - ], - }, - ], - }, - { - type: 'category', - label: 'Advanced concepts', - collapsed: true, - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/inside-arbitrum-nitro', - label: 'Deep dive: Inside Arbitrum', - }, - { - type: 'link', - href: 'https://github.com/OffchainLabs/nitro/blob/master/docs/Nitro-whitepaper.pdf', - label: 'Deeper dive: Whitepaper', - }, - { - type: 'doc', - id: 'how-arbitrum-works/assertion-tree', - label: 'Assertion tree', - }, - { - type: 'category', - label: 'Cross-chain messaging', - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/arbos/l1-l2-messaging', - label: 'L1-to-L2 messaging', - }, - { - type: 'doc', - id: 'how-arbitrum-works/arbos/l2-l1-messaging', - label: 'L2-to-L1 messaging', - }, - ], - }, - { - type: 'category', - label: 'ArbOS', - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/arbos/introduction', - label: 'ArbOS', - }, - { - type: 'doc', - id: 'how-arbitrum-works/arbos/geth', - label: 'Geth', - }, - ], - }, - { - type: 'category', - label: 'Fraud proofs', - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/challenge-manager', - label: 'Interactive challenges', - }, - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/osp-assumptions', - label: 'One step proof assumptions', - }, - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/wasm-wavm', - label: 'Wasm To WAVM', - }, - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/wavm-custom-opcodes', - label: 'Custom WAVM opcodes', - }, - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/wavm-floats', - label: 'WAVM floats', - }, - { - type: 'doc', - id: 'how-arbitrum-works/fraud-proofs/wavm-modules', - label: 'WAVM modules', - }, - ], - }, - { - type: 'category', - label: 'The BOLD dispute protocol', - items: [ - { - type: 'doc', - id: 'how-arbitrum-works/bold/gentle-introduction', - label: 'A gentle introduction', - }, - { - type: 'link', - href: 'https://github.com/offchainlabs/bold-validator-starter-kit', - label: 'Deploy a validator on testnet', - }, - { - type: 'link', - href: 'https://arxiv.org/abs/2404.10491', - label: 'BOLD Whitepaper', - }, - { - type: 'link', - href: 'https://github.com/OffchainLabs/bold/blob/main/docs/research-specs/TechnicalDeepDive.pdf', - label: 'Technical deep dive', - }, - { - type: 'link', - href: 'https://github.com/OffchainLabs/bold/blob/main/docs/research-specs/Economics.pdf', - label: 'Economics of disputes', - }, - { - type: 'link', - href: 'https://github.com/OffchainLabs/bold', - label: 'Specification on Github', - }, - { - type: 'doc', - id: 'how-arbitrum-works/bold/public-preview-expectations', - label: 'Public preview', - }, - ], - }, - ], - }, - ], - }, - { - type: 'doc', - id: 'learn-more/faq', - label: 'FAQ', - }, - { - type: 'doc', - id: 'intro/glossary', - label: 'Glossary', - }, - { - type: 'doc', - id: 'for-devs/contribute', - }, - { - type: 'category', - label: 'Third-party docs', - collapsed: true, - items: [ - { - type: 'autogenerated', - dirName: 'for-devs/third-party-docs', - }, - ], - }, - { - type: 'doc', - label: 'Audit reports', - id: 'audit-reports', - }, - { - type: 'link', - label: 'DAO docs', - href: 'https://docs.arbitrum.foundation/gentle-intro-dao-governance', - }, - { - type: 'link', - label: 'Prysm docs', - href: 'https://docs.prylabs.network/docs/install/install-with-script', - }, - ], -}; - -module.exports = sidebars; - -// note RE html sidebar links: -// because the linked page lives in multiple sidebar sections, we pick one to be the "canonical" location for the page in the sidebar -// if we link to them both via id or standard href, multiple sections of the sidebar will be opened at once when the user visits this page; we don't want that -// if we use a fully qualified link, the remote/published page will display when visiting from localhost or preview deployments -// we also want to include a unicode arrow to indicate that we're routing the user to another section, in a way that's distinct from the icon that indicates "this href pulls you out of docs" diff --git a/website/src/components/AddressAliasHelper.tsx b/website/src/components/AddressAliasHelper.tsx deleted file mode 100644 index 1add5f903..000000000 --- a/website/src/components/AddressAliasHelper.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { Address } from '@arbitrum/sdk'; - -export const AddressAliasHelper = () => { - const [l1Address, setL1Address] = useState(''); - const [l2Address, setL2Address] = useState(''); - const [error, setError] = useState(); - useEffect(() => { - if (!l1Address) { - return setError(undefined); - } - try { - const l1addr = new Address(l1Address); - const afterApply = l1addr.applyAlias(); - setL2Address(afterApply.value); - setError(undefined); - } catch (err) { - setL2Address(undefined); - setError(err.message); - } - }, [l1Address]); - return ( - <> - setL1Address(event.target.value)} - /> - {l2Address && ( -
- L2 Alias: {l2Address} -
- )} - {error && ( -
- Error: {error} -
- )} - - ); -}; diff --git a/website/src/components/AddressExplorerLink.tsx b/website/src/components/AddressExplorerLink.tsx deleted file mode 100644 index a2398242f..000000000 --- a/website/src/components/AddressExplorerLink.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { getAddress, isAddress } from '@ethersproject/address'; - -type ChainID = 1 | 11155111 | 42170 | 42161 | 421614 | 13331371 | 23011913; - -const chainIDToExplorerUrlRoot: { - [chainId in ChainID]: string; -} = { - 1: 'https://etherscan.io/address', - 11155111: 'https://sepolia.etherscan.io/address', - 42161: 'https://arbiscan.io/address', - 42170: 'https://nova.arbiscan.io/address', - 421614: 'https://sepolia.arbiscan.io/address', - 13331371: 'https://stylusv2-explorer.arbitrum.io/address', - 23011913: 'https://stylus-testnet-explorer.arbitrum.io/address', -}; - -export const AddressExplorerLink = (props: { - address: string; - chainID: ChainID; - shortenAddress?: boolean; -}) => { - const { address, chainID, shortenAddress } = props; - const rootUrl = chainIDToExplorerUrlRoot[chainID]; - if (!rootUrl) throw new Error(`Error: no root url set for chain id ${chainID} `); - if (!isAddress(address)) throw new Error(`Error ${address} is not an address`); - if (getAddress(address) != address) - throw new Error(`Error: ${address} has invalid checksum; should be ${getAddress(address)}`); - - const addressLabel = shortenAddress ? address.slice(0, 6) + '...' + address.slice(-4) : address; - - return ( - - {addressLabel} - - ); -}; diff --git a/website/src/components/FAQStructuredData/index.js b/website/src/components/FAQStructuredData/index.js deleted file mode 100644 index 43c9b4e88..000000000 --- a/website/src/components/FAQStructuredData/index.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @typedef { import('./types').FAQStructuredDataProps } FAQStructuredDataProps - * @typedef { import('./types').FAQStructuredData } FAQStructuredData - */ - -import React from 'react'; -import { useLocation } from '@docusaurus/router'; - -/** - * A component that renders a FAQ structured data and markdown entries - * - * @see https://developers.google.com/search/docs/appearance/structured-data/faqpage - * @param {FAQStructuredDataProps} props - * @returns - */ -export default function FAQStructuredData(props) { - // This component is rendered asynchronously - // If the accessed URL for a page that calls this component contains an anchor, React won't be able to - // scroll into the right element, because it doesn't exist at the beginning. - // We use this piece of code to trigger the scrolling action when the component is fully loaded - const scrolledRef = React.useRef(false); - const { hash } = useLocation(); - React.useEffect(() => { - if (hash && !scrolledRef.current) { - const id = hash.replace('#', ''); - const element = document.getElementById(id); - if (element) { - window.scrollTo({ top: element.getBoundingClientRect().top + window.scrollY - 20 }); - scrolledRef.current = true; - } - } - }); - - // Loading the FAQs - const faqs = require(`./../../../static/${props.faqsId}-faqs.json`); - - // Creating the Structured Data object - /** @type {FAQStructuredData} */ - const faqStructuredData = { - '@context': 'https://schema.org', - '@type': 'FAQPage', - 'name': 'FAQs for ' + props.faqsId, - 'mainEntity': faqs.map((faq) => ({ - '@type': 'Question', - 'name': faq.question, - 'acceptedAnswer': { - '@type': 'Answer', - 'text': faq.answer, - }, - })), - }; - - // Rendering the ld+json script and the actual FAQ in HTML - return ( - <> -