diff --git a/.github/workflows/update-algolia-index.yml b/.github/workflows/update-algolia-index.yml index 2106bd47b..244dec054 100644 --- a/.github/workflows/update-algolia-index.yml +++ b/.github/workflows/update-algolia-index.yml @@ -5,7 +5,28 @@ on: [push] jobs: update-prod-index: if: ${{ github.ref == 'refs/heads/main' }} - name: Update algolia index + name: Update algolia index -- Prod + runs-on: ubuntu-latest + env: + ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} + ALGOLIA_WRITE_API_KEY: ${{ secrets.ALGOLIA_WRITE_API_KEY }} + ALGOLIA_INDEX_NAME: prod_scroll-docs + defaults: + run: + working-directory: ./ + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + - name: Install Dependencies + run: npm i + - name: Build + run: npm run build + - name: Update index + run: npm run update-algolia-index + + update-dev-index: + if: ${{ github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/sepolia-content-population' }} + name: Update algolia index -- Dev runs-on: ubuntu-latest env: ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 21a586423..2f8d6154c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,20 +1,26 @@ # Contributing to the Scroll Documentation -PRs are welcome! We try to keep a clean commit history, so we'll follow a standard process initially created by the Chainlink team whose documentation we forked: +As we build out the initial scope of the documentation, we intend to be selective about PRs, especially in our English language documentation. If you're interested in making a code or content contribution, please start by creating an issue and discussing the idea with a member of our team. -- Create a PR +If you want information about contributing a translation, please see [TRANSLATION.md](./TRANSLATION.md). + +We try to keep a clean commit history, so we'll follow a standard process initially created by the Chainlink team whose documentation we forked: + +- Create a new issue + - Comment on the issue if you'd like to be assigned to it +- Fork the Repo & Create a PR - If your PR contains multiple commits, we'll ask you to squash them - - If your PR has conflicts with `main`, we'll ask you to rebase it + - If your PR has conflicts with `develop`, we'll ask you to rebase it - Someone will review your PR - Your PR will be merged, amended, closed, or you'll be asked for changes ## Standards - Commit messages - - Start with a present tense verb + - Start with a present-tense verb - Keep your commit headline short but sufficient to understand the scope and focus of the change. - Changes are often formatted like `add doc X`, `fix page Y`, `improve docs for Z`. - - Example: "`update contract addresses for BSC`". + - Example: "`update contract addresses for USDC on Scroll Sepolia`". - If you touch any infrastructure, make sure it builds with `yarn build` - Trust the autoformatter (prettier) - Make sure images are optimized and compressed @@ -29,7 +35,7 @@ git rebase origin/main git push -f ``` -It's okay to force push over your own PR branch. In fact, that's what we want so that the commits are clean. +It's okay to force push over your own PR branch. That's what we want so that the commits are clean. ## How to squash a PR diff --git a/TRANSLATION.md b/TRANSLATION.md new file mode 100644 index 000000000..82f32bfb3 --- /dev/null +++ b/TRANSLATION.md @@ -0,0 +1,26 @@ +# Translation Initiative + +_Our translation initiative hopes to translate Scroll documentation into different languages and make the website accessible to people worldwide._ + +Our current documentation is only available in English, but with community contributions, we want to support many language communities. Since this is a new initiative and we want to maintain high assurances about the information in our documentation, **we're only accepting contributions in Mandarin and Spanish**. Once we're comfortable with the process and can ensure a good experience for community translators, we'll seek contributions in additional languages. + +### Want to get involved as a translator? + +Create an issue describing which article you wish to translate. Then get started! If you need help or have any questions, join the [Scroll Discord](https://discord.gg/scroll). Once your translation is submitted, we'll ask a member of our team to do a review. + +### Standards and Policies + +For now, we will defer to Ethereum.org's excellent [Translation Style Guide](https://ethereum.org/en/contributing/translation-program/translators-guide/). We do not use a translation platform, but please assume all other guidance applies here. + +## Starting a translation + +1. Fork this repository +1. Create an issue named using the format "Translation: _[English Article Name]_ (_[lang]_)" -- for example, "Translation: User Guide Faucet (zh)" +1. Find the article you wish to translate in `src/content/docs/en/` and copy it to a matching folder in `src/content/docs/[lang]/`. All files should maintain the same file name and folder structure as the English version of the site. +1. To translate UI elements or article names, modify the appropriate entry in `public/locales/[lang]/translation.json`. If you're unsure what to do here, suggest any additional changes to the site in your PR. +1. Make a PR with the title following the template above. Be sure to mention the original issue in your description. +1. A team member will review, recommend changes and work with you to get the final version added to the code base. + +### Not familiar with Git? + +If you don't want to worry about all this Git stuff, contact a team member or community moderator on the [Scroll Discord](https://discord.gg/scroll). We'd be happy to point you at the original file to translate and suggest an online text editor (like [HackMD](https://hackmd.io/)) for sharing your results. We'll take it from there. diff --git a/astro.config.ts b/astro.config.ts index 71fc63f64..94d241367 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -9,6 +9,7 @@ import mdx from "@astrojs/mdx" import rehypeSlug from "rehype-slug" import rehypeAutolinkHeadings from "rehype-autolink-headings" import rehypeKatex from "rehype-katex" +import rehypeMermaid from "rehype-mermaidjs" import remarkGfm from "remark-gfm" import remarkMath from "remark-math" import image from "@astrojs/image" @@ -51,6 +52,7 @@ export default defineConfig({ remarkPlugins: [remarkMath, remarkGfm], rehypePlugins: [ rehypeSlug, + [rehypeMermaid, { strategy: "img-png" }], [ rehypeAutolinkHeadings, { diff --git a/package-lock.json b/package-lock.json index 2881e0e5a..68564233a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "react-instantsearch-hooks-web": "^6.38.1", "react-mailchimp-subscribe": "^2.1.3", "rehype-katex": "^6.0.2", + "rehype-mermaidjs": "^1.0.1", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "tailwindcss": "^3.2.4", @@ -891,6 +892,11 @@ "node": ">=6.9.0" } }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + }, "node_modules/@builder.io/partytown": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.7.6.tgz", @@ -2054,6 +2060,15 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@gera2ld/jsx-dom": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz", @@ -6093,6 +6108,14 @@ "dev": true, "peer": true }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cosmiconfig": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", @@ -6206,6 +6229,53 @@ "dev": true, "peer": true }, + "node_modules/cytoscape": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.26.0.tgz", + "integrity": "sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + }, "node_modules/d3": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", @@ -6499,6 +6569,41 @@ "node": ">=12" } }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", @@ -6608,6 +6713,15 @@ "node": ">=12" } }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, "node_modules/dart-linkcheck": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/dart-linkcheck/-/dart-linkcheck-2.0.15.tgz", @@ -6632,6 +6746,11 @@ "node": ">=0.10" } }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -6972,6 +7091,11 @@ "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" }, + "node_modules/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, "node_modules/dotenv": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", @@ -7010,6 +7134,11 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.412.tgz", "integrity": "sha512-lsdxyQVXw79Q1/yUWp4JDopW2M9pFjnbNF2/09d75qQL5ld8ddmGruQBeA0lP4HxcGIhrL0gFXqxJDWR58Whkw==" }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -10603,9 +10732,7 @@ "node_modules/heap": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "peer": true + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "node_modules/highlight.js": { "version": "11.8.0", @@ -11690,6 +11817,11 @@ "node": ">=10.0.0" } }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11715,6 +11847,11 @@ "node": ">=6" } }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, "node_modules/level": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", @@ -12084,8 +12221,12 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -12844,6 +12985,57 @@ "node": ">= 8" } }, + "node_modules/mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/mermaid-isomorphic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-2.1.0.tgz", + "integrity": "sha512-5ne8lMF4HLBznRSE7hGHF7G5rBBZ4qnGvihdgQHvO12dZijxWRcPs3c8hh6zJCECZO6Q9vCOj1TYUWEX9znVxw==", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "^10.0.0", + "playwright-core": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/micromark": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", @@ -13657,6 +13849,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -14096,6 +14296,11 @@ "node": ">=12.19" } }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -14892,6 +15097,17 @@ "node": ">=6" } }, + "node_modules/playwright-core": { + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.2.tgz", + "integrity": "sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ==", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -15660,6 +15876,25 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-mermaidjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rehype-mermaidjs/-/rehype-mermaidjs-1.0.1.tgz", + "integrity": "sha512-bXuvGxzljFS1KQphX8FKELLxLtHrHi0tI7G9s0a9IpydLF7miYH9/HDXr0RAgWtUxuERSUKtpD5zSur22aCvOA==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-html-isomorphic": "^1.0.0", + "hast-util-to-text": "^3.0.0", + "mermaid-isomorphic": "^2.0.0", + "mini-svg-data-uri": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit-parents": "^5.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/rehype-parse": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", @@ -18249,6 +18484,11 @@ "inline-style-parser": "0.1.1" } }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, "node_modules/sucrase": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", @@ -18918,6 +19158,14 @@ "node": ">=8" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, "node_modules/ts-essentials": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", @@ -19865,6 +20113,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, "node_modules/web3-utils": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", @@ -20991,6 +21244,11 @@ "to-fast-properties": "^2.0.0" } }, + "@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + }, "@builder.io/partytown": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.7.6.tgz", @@ -21624,6 +21882,11 @@ "@ethersproject/strings": "^5.7.0" } }, + "@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==" + }, "@gera2ld/jsx-dom": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz", @@ -24743,6 +25006,14 @@ "dev": true, "peer": true }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "requires": { + "layout-base": "^1.0.0" + } + }, "cosmiconfig": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", @@ -24832,6 +25103,46 @@ "dev": true, "peer": true }, + "cytoscape": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.26.0.tgz", + "integrity": "sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "requires": { + "layout-base": "^2.0.0" + } + }, + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + } + } + }, "d3": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", @@ -25046,6 +25357,43 @@ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" }, + "d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "requires": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + } + } + }, "d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", @@ -25125,6 +25473,15 @@ "d3-transition": "2 - 3" } }, + "dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, "dart-linkcheck": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/dart-linkcheck/-/dart-linkcheck-2.0.15.tgz", @@ -25141,6 +25498,11 @@ "assert-plus": "^1.0.0" } }, + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, "death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -25380,6 +25742,11 @@ "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" }, + "dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, "dotenv": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", @@ -25412,6 +25779,11 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.412.tgz", "integrity": "sha512-lsdxyQVXw79Q1/yUWp4JDopW2M9pFjnbNF2/09d75qQL5ld8ddmGruQBeA0lP4HxcGIhrL0gFXqxJDWR58Whkw==" }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -28060,9 +28432,7 @@ "heap": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "peer": true + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "highlight.js": { "version": "11.8.0", @@ -28819,6 +29189,11 @@ "readable-stream": "^3.6.0" } }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -28838,6 +29213,11 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, "level": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", @@ -29104,8 +29484,12 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "lodash.camelcase": { "version": "4.3.0", @@ -29691,6 +30075,50 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, + "mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "requires": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } + }, + "mermaid-isomorphic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-2.1.0.tgz", + "integrity": "sha512-5ne8lMF4HLBznRSE7hGHF7G5rBBZ4qnGvihdgQHvO12dZijxWRcPs3c8hh6zJCECZO6Q9vCOj1TYUWEX9znVxw==", + "requires": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "^10.0.0", + "playwright-core": "^1.0.0" + } + }, "micromark": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", @@ -30183,6 +30611,11 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==" + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -30519,6 +30952,11 @@ "dev": true, "peer": true }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -31075,6 +31513,11 @@ } } }, + "playwright-core": { + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.2.tgz", + "integrity": "sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ==" + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -31613,6 +32056,22 @@ "unist-util-visit": "^4.0.0" } }, + "rehype-mermaidjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rehype-mermaidjs/-/rehype-mermaidjs-1.0.1.tgz", + "integrity": "sha512-bXuvGxzljFS1KQphX8FKELLxLtHrHi0tI7G9s0a9IpydLF7miYH9/HDXr0RAgWtUxuERSUKtpD5zSur22aCvOA==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-html-isomorphic": "^1.0.0", + "hast-util-to-text": "^3.0.0", + "mermaid-isomorphic": "^2.0.0", + "mini-svg-data-uri": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit-parents": "^5.0.0", + "vfile": "^5.0.0" + } + }, "rehype-parse": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", @@ -33578,6 +34037,11 @@ "inline-style-parser": "0.1.1" } }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, "sucrase": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", @@ -34100,6 +34564,11 @@ } } }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + }, "ts-essentials": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", @@ -34756,6 +35225,11 @@ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, "web3-utils": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", diff --git a/package.json b/package.json index f3f5aee52..77b0237b7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "astro dev", "start": "astro dev", - "build": "astro build", + "build": "npm run setup; astro build", "preview": "astro preview", "format": "prettier --write .", "linkcheck": "tsc scripts/linkcheck.ts && node scripts/linkcheck.js", @@ -18,7 +18,8 @@ "lint-ts": "eslint --ext ts .", "lint-ts:fix": "eslint --ext ts .", "lint-solc": "solhint 'public/samples/**/*.sol'", - "prepare": "husky install" + "prepare": "husky install", + "setup": "npx playwright install" }, "dependencies": { "@algolia/client-search": "^4.14.2", @@ -43,6 +44,7 @@ "react-instantsearch-hooks-web": "^6.38.1", "react-mailchimp-subscribe": "^2.1.3", "rehype-katex": "^6.0.2", + "rehype-mermaidjs": "^1.0.1", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "tailwindcss": "^3.2.4", diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 7ccbe86ba..f80397d00 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -46,7 +46,7 @@ "gettingStarted": { "gettingStarted": "Getting Started", "overview": "Overview", - "alphaTestnet": "Alpha Testnet", + "scrollSepoliaTestnet": "Scroll Seplolia Testnet", "userGuide": "User Guide", "setup": "Setup", "faucet": "Faucet", @@ -56,6 +56,8 @@ "rollupExplorer": "Rollup Explorer", "alphaBlockExplorer": "Alpha Block Explorer", "goerliBlockExplorer": "Goerli Block Explorer", + "scrollSepoliaBlockExplorer": "Scroll Sepolia Explorer", + "sepoliaBlockExplorer": "Sepolia Explorer", "community": "Community", "discord": "Discord", "communityForum": "Community Forum" @@ -65,26 +67,43 @@ "buildingOnScroll": "Building on Scroll", "developerQuickstart": "Developer Quickstart", "verifyingSmartContracts": "Verifying Smart Contracts", - "alphaTestnetContracts": "Alpha Testnet Contracts", - "integrations": "Integrations", - "ethereum&AlphaTestnetDifferences": "Ethereum & Alpha Testnet Differences", + "scrollContracts": "Scroll Contracts", + "ethereumAndScrollDifferences": "Ethereum & Scroll Differences", + "l1AndL2Bridging": "L1 & L2 Bridging", + "ethAndErc20TokenBridge": "ETH & ERC20 Token Bridge", + "erc721NftBridge": "ERC721 NFT Bridge", + "erc1155TokenBridge": "ERC1155 Token Bridge", + "theScrollMessenger": "The Scroll Messenger", + "transactionFeesOnScroll": "Transaction Fees on Scroll", + "l2Fee": "L2 Fee", + "l1Fee": "L1 Fee", + "gasOracle": "Gas Oracle", + "future": "Future", "guides": "Guides", "contractDeploymentTutorial": "Contract Deployment Tutorial", + "crossChainInteraction": "Greeting Contract with Cross-chain Interaction", + "bridgingERC20TokenThroughCustomGateway": "Bridging ERC20 Token through Custom Gateway", + "bridgingERC721NftThroughCustomGateway": "Bridging ERC721 NFT through Custom Gateway", + "bridgingERC1155ThroughCustomGateway": "Bridging ERC1155 through Custom Gateway", + "estimatingGasAndTxFees": "Estimating Gas & Tx Fees", "resources": "Resources", "rollupExplorer": "Rollup Explorer", - "alphaBlockExplorer": "Alpha Block Explorer", - "goerliBlockExplorer": "Goerli Block Explorer" + "scrollSepoliaBlockExplorer": "Scroll Sepolia Explorer", + "sepoliaBlockExplorer": "Sepolia Explorer" }, "technology": { - "architecture": "Architecture", - "scrollArchitecture": "Scroll Architecture", + "introduction": "Introduction", "principles": "Principles", + "scrollArchitecture": "Scroll Architecture", + "scrollProtocol": "Scroll Protocol", + "overview": "Overview", + "rollupProcess": "Rollup Process", + "zkevm": "zkEVM", "introToZkevm": "Intro to zkEVM", "zkevmOverview": "zkEVM Overview", "bridge": "Bridge", "bridgeOverview": "Bridge Overview", - "rollupProcess": "Rollup Process", "sequencer": "Sequencer", "executionClient": "Execution Client", "zkTrie": "zkTrie", @@ -98,8 +117,10 @@ "theScalabilityProblem": "The Scalability Problem", "introToRollups": "Intro to Rollups", "zeroKnowledge": "Zero Knowledge", + "introToZeroKnowledge": "Intro to Zero Knowledge", "polynomialCommitmentSchemes": "Polynomial Commitment Schemes", - "kzgCommitmentScheme": "KZG Commitment Scheme" + "kzgCommitmentScheme": "KZG Commitment Scheme", + "additionalResources": "Additional Resources" } }, "notTranslated": { diff --git a/public/locales/es/translation.json b/public/locales/es/translation.json new file mode 100644 index 000000000..261ba69ce --- /dev/null +++ b/public/locales/es/translation.json @@ -0,0 +1,5 @@ +{ + "notTranslated": { + "notTranslated": "Esta página aún no ha sido traducida." + } +} diff --git a/src/assets/images/developers/L1GatewayWHITE.png b/src/assets/images/developers/L1GatewayWHITE.png new file mode 100644 index 000000000..8e31b1712 Binary files /dev/null and b/src/assets/images/developers/L1GatewayWHITE.png differ diff --git a/src/assets/images/developers/txFeesProjectStructure.png b/src/assets/images/developers/txFeesProjectStructure.png new file mode 100644 index 000000000..2acc38758 Binary files /dev/null and b/src/assets/images/developers/txFeesProjectStructure.png differ diff --git a/src/assets/images/developers/withdrawWHITE.png b/src/assets/images/developers/withdrawWHITE.png new file mode 100644 index 000000000..7a6f485d5 Binary files /dev/null and b/src/assets/images/developers/withdrawWHITE.png differ diff --git a/src/components/ClickToZoom.astro b/src/components/ClickToZoom.astro index 47ecc9fc1..b4a181250 100644 --- a/src/components/ClickToZoom.astro +++ b/src/components/ClickToZoom.astro @@ -18,7 +18,9 @@ const { src, alt } = Astro.props as Props .click-to-zoom { cursor: zoom-in; height: auto; - width: 100%; + max-width: 100%; + margin: 3em auto !important; + display: block; } diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index c617840cb..cf050affa 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -10,7 +10,7 @@ export const getSidebar = () => { contents: [{ title: t("sidebar.gettingStarted.overview"), url: "getting-started/overview" }], }, { - section: t("sidebar.gettingStarted.alphaTestnet"), + section: t("sidebar.gettingStarted.scrollSepoliaTestnet"), contents: [ { title: t("sidebar.gettingStarted.userGuide"), @@ -38,9 +38,9 @@ export const getSidebar = () => { }, ], }, + { title: t("sidebar.gettingStarted.scrollSepoliaBlockExplorer"), url: "https://blockscout.scroll.io/" }, + { title: t("sidebar.gettingStarted.sepoliaBlockExplorer"), url: "https://sepolia.etherscan.io/" }, { title: t("sidebar.gettingStarted.rollupExplorer"), url: "https://scroll.io/alpha/rollupscan" }, - { title: t("sidebar.gettingStarted.alphaBlockExplorer"), url: "https://blockscout.scroll.io/" }, - { title: t("sidebar.gettingStarted.goerliBlockExplorer"), url: "https://goerli.etherscan.io/" }, ], }, { @@ -61,14 +61,63 @@ export const getSidebar = () => { { section: "Developers", contents: [ - { title: t("sidebar.developers.buildingOnScroll"), url: "developers" }, - { title: t("sidebar.developers.developerQuickstart"), url: "developers/developer-quickstart" }, - { title: t("sidebar.developers.verifyingSmartContracts"), url: "developers/verifying-smart-contracts" }, - { title: t("sidebar.developers.alphaTestnetContracts"), url: "developers/alpha-testnet-contracts" }, - { title: t("sidebar.developers.integrations"), url: "developers/integrations" }, + { title: t("sidebar.developers.buildingOnScroll"), url: formatUrl("developers") }, + { title: t("sidebar.developers.developerQuickstart"), url: formatUrl("developers/developer-quickstart") }, { - title: t("sidebar.developers.ethereum&AlphaTestnetDifferences"), - url: formatUrl("developers/ethereum-and-alpha-testnet-differences"), + title: t("sidebar.developers.verifyingSmartContracts"), + url: formatUrl("developers/verifying-smart-contracts"), + }, + { + title: t("sidebar.developers.scrollContracts"), + url: formatUrl("developers/scroll-contracts"), + }, + { + title: t("sidebar.developers.ethereumAndScrollDifferences"), + url: formatUrl("developers/ethereum-and-scroll-differences"), + }, + { + title: t("sidebar.developers.l1AndL2Bridging"), + url: formatUrl("developers/l1-and-l2-bridging"), + children: [ + { + title: t("sidebar.developers.ethAndErc20TokenBridge"), + url: formatUrl("developers/l1-and-l2-bridging/eth-and-erc20-token-bridge"), + }, + { + title: t("sidebar.developers.erc721NftBridge"), + url: formatUrl("developers/l1-and-l2-bridging/erc721-nft-bridge"), + }, + { + title: t("sidebar.developers.erc1155TokenBridge"), + url: formatUrl("developers/l1-and-l2-bridging/erc1155-token-bridge"), + }, + { + title: t("sidebar.developers.theScrollMessenger"), + url: formatUrl("developers/l1-and-l2-bridging/the-scroll-messenger"), + }, + ], + }, + { + title: t("sidebar.developers.transactionFeesOnScroll"), + url: formatUrl("developers/transaction-fees-on-scroll"), + // children: [ + // { + // title: t("sidebar.developers.l2Fee"), + // url: formatUrl("developers/transaction-fees-on-scroll/l2-fee"), + // }, + // { + // title: t("sidebar.developers.l1Fee"), + // url: formatUrl("developers/transaction-fees-on-scroll/l1-fee"), + // }, + // { + // title: t("sidebar.developers.gasOracle"), + // url: formatUrl("developers/transaction-fees-on-scroll/gas-oracle"), + // }, + // { + // title: t("sidebar.developers.future"), + // url: formatUrl("developers/transaction-fees-on-scroll/future"), + // }, + // ], }, ], }, @@ -79,20 +128,53 @@ export const getSidebar = () => { title: t("sidebar.developers.contractDeploymentTutorial"), url: formatUrl("developers/guides/contract-deployment-tutorial"), }, + // { + // title: t("sidebar.developers.crossChainInteraction"), + // url: formatUrl("developers/guides/"), + // }, + // { + // title: t("sidebar.developers.bridgingERC20TokenThroughCustomGateway"), + // url: formatUrl("developers/guides/"), + // }, + // { + // title: t("sidebar.developers.bridgingERC721NftThroughCustomGateway"), + // url: formatUrl("developers/guides/"), + // }, + // { + // title: t("sidebar.developers.bridgingERC1155ThroughCustomGateway"), + // url: formatUrl("developers/guides/"), + // }, + // { + // title: t("sidebar.developers.estimatingGasAndTxFees"), + // url: formatUrl("developers/guides/"), + // }, ], }, { section: "Resources", contents: [ - { title: t("sidebar.developers.rollupExplorer"), url: "https://scroll.io/alpha/rollupscan" }, - { title: t("sidebar.developers.alphaBlockExplorer"), url: "https://blockscout.scroll.io/" }, - { title: t("sidebar.developers.goerliBlockExplorer"), url: "https://goerli.etherscan.io/" }, + { title: t("sidebar.developers.rollupExplorer"), url: "https://scroll.io/rollupscan" }, + { title: t("sidebar.developers.scrollSepoliaBlockExplorer"), url: "https://sepolia-blockscout.scroll.io/" }, + { title: t("sidebar.developers.sepoliaBlockExplorer"), url: "https://sepolia.etherscan.io/" }, ], }, ], technology: [ { - section: t("sidebar.technology.architecture"), + section: t("Overview"), + contents: [ + // { + // title: t("sidebar.technology.principles"), + // url: "technology/architecture/principles", + // }, + { + title: t("Scroll Architecture"), + url: "technology/architecture/scroll-architecture", + }, + ], + }, + { + section: t("sidebar.technology.scrollProtocol"), contents: [ { title: t("sidebar.technology.scrollArchitecture"), @@ -178,13 +260,21 @@ export const getSidebar = () => { { section: t("sidebar.learn.zeroKnowledge"), contents: [ + { + title: t("sidebar.learn.introToZeroKnowledge"), + url: formatUrl("learn/zero-knowledge/introduction-to-zero-knowledge"), + }, { title: t("sidebar.learn.polynomialCommitmentSchemes"), - url: "learn/zero-knowledge/polynomial-commitment-schemes", + url: formatUrl("learn/zero-knowledge/polynomial-commitment-schemes"), }, { title: t("sidebar.learn.kzgCommitmentScheme"), - url: "learn/zero-knowledge/kzg-commitment-scheme", + url: formatUrl("learn/zero-knowledge/kzg-commitment-scheme"), + }, + { + title: t("sidebar.learn.additionalResources"), + url: formatUrl("learn/zero-knowledge/additional-zk-learning-resources"), }, ], }, diff --git a/src/content/docs/en/article-components.mdx b/src/content/docs/en/article-components.mdx new file mode 100644 index 000000000..df13c6b78 --- /dev/null +++ b/src/content/docs/en/article-components.mdx @@ -0,0 +1,165 @@ +--- +section: gettingStarted +title: "Article Components" +date: Last Modified +lang: "en" +permalink: "/article-components" +excerpt: "Learn more about the topics of Ethereum Scalability and Zero Knowledge Cryptography" +isMdx: true +whatsnext: { "Next Up Page 1": "/", "Second Next Up Page": "/" } +--- + +import ClickToZoom from "../../../components/ClickToZoom.astro" +import priceAggr from "../../../assets/images/contract-devs/price-aggr.png" +import ToggleElement from "../../../components/ToggleElement.astro" +import Aside from "../../../components/Aside.astro" +import MarkmapView from "../../../components/MarkmapView/index.astro" + +This is body text right under the article title. It typically is just paragraph text that's pretty straightforward. Then there's **bold text**, and _italic text_, and **_bold-italic text_**, and `inline-code` and **`bold inline code`** and even _`italic inline code`_ and **_`bold italic inline code`_**. And of course don't forget [links](#), and [**bold links**](#), and [_italic links_](#), and [**_bold-italic links_**](#). + +## Markdown Components (also an H2 Heading) + +- We've also got unordered lists! +- They can have multiple items. + - And some sub-items. + - That get into details +- That's an unordered list. + +What else do we have? + +1. Of course there's also ordered lists. +1. They look like this. +1. They're pretty useful. + +### H3 Heading + +#### H4 Heading + +##### H5 Heading + +Let's see a horizontal rule. + +--- + +We define the Square-Fibonacci sequence[^1], a variation of the Fibonacci sequence: + +### Math + +- Let $f_0 = 1, f_1 = 1$ +- For $$i \geq 2$$, define $f_{i} := (f_{i-2})^2 + (f_{i-1})^2 \mod q$ + - Where $q$ is a large prime integer. We use this modulus to bound the size of each element, so that it can be represented by some predetermined number of bits. + +### Tables + +| Syntax | Description | +| --------- | ----------- | +| Header | Title | +| Paragraph | Text | + +### Blockquotes + +> #### Success +> +> Vitae reprehenderit at aliquid error voluptates eum dignissimos. + +### Footnotes + +Here's a simple footnote,[^1] and here's a longer one.[^bignote] + +[^1]: This is the first footnote. +[^bignote]: Here's one with multiple paragraphs and code. + +### Callout that worked in MD, but might not in MDX? + +:::tip[Did you know?] +Astro helps you build faster websites with “Islands Architecture”. +::: + +## Imported MDX Components + +### Callouts + + + + + + + +``` +:::tip[Did you know?] + Astro helps you build faster websites with “Islands Architecture”. +::: +``` + +### Images zoom + + + +### Toggle + + +
Why build on Scroll?
+

+ Scroll enables creators to turn their content into interactive, explorable experiences. With Scroll, you can create + rich, interactive stories that engage readers, provide a better user experience, and help you stand out from the + crowd. +

+
+ +
How does Scroll work?
+

+ Scroll combines powerful technologies like WebGL and WebRTC to create immersive, interactive experiences. The + platform allows you to build 3D environments, add interactivity, and embed content from popular web services to + create a unique, engaging experience for your audience. +

+
+ +
What can I build with Scroll?
+

+ You can build a wide range of experiences with Scroll, from interactive articles to immersive product demos and + virtual tours. Scroll is designed to help you create engaging, interactive experiences that elevate your content and + captivate your audience. +

+
+ +### Markmap + +#### Referenced File + + + + +[](#markmap)markmap +=================== + +- beautiful2 +- useful +- easy +- interactive + + + +### Mermaid + +```mermaid +stateDiagram + Step --> StepState + Step --> CellManager + ConstraintBuilder --> CellManager + CellManager --> ProofSystem(Halo2) + StepState --> ExecutionState + StepState --> step_context + ExecutionState --> ConstraintBuilder + step_context --> ConstraintBuilder +``` diff --git a/src/content/docs/en/developers/_images/injectedProviderMM.png b/src/content/docs/en/developers/_images/injectedProviderMM.png new file mode 100644 index 000000000..816517512 Binary files /dev/null and b/src/content/docs/en/developers/_images/injectedProviderMM.png differ diff --git a/src/content/docs/en/developers/_images/mmNetworkSelection.png b/src/content/docs/en/developers/_images/mmNetworkSelection.png new file mode 100644 index 000000000..e86176f9b Binary files /dev/null and b/src/content/docs/en/developers/_images/mmNetworkSelection.png differ diff --git a/src/content/docs/en/developers/alpha-testnet-contracts.mdx b/src/content/docs/en/developers/alpha-testnet-contracts.mdx deleted file mode 100644 index b475b625a..000000000 --- a/src/content/docs/en/developers/alpha-testnet-contracts.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -section: developers -date: Last Modified -title: "Alpha Testnet Contracts" -lang: "en" -permalink: "developers/alpha-testnet-contracts" -excerpt: "The network info and contract addresses you need to start with Scroll Alpha Testnet." ---- - -import Aside from "../../../../components/Aside.astro" - -## Network Info - -| Network Name | Scroll Alpha Testnet | Goerli Testnet | -| ------------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| RPC URL | [https://alpha-rpc.scroll.io/l2](https://alpha-rpc.scroll.io/l2) | [https://endpoints.omniatech.io/v1/eth/goerli/public](https://endpoints.omniatech.io/v1/eth/goerli/public) | -| Chain ID | 534353 | 5 | -| Currency Symbol | ETH | ETH | -| Block Explorer URL | [https://blockscout.scroll.io](https://blockscout.scroll.io/) | [https://goerli.etherscan.io](https://goerli.etherscan.io) | - -## Scroll Contracts - -### Rollup - -- L1 Rollup: `0x3C584eC7f0f2764CC715ac3180Ae9828465E9833` - -### Bridge - -- L1 Messenger: `0x5260e38080BFe97e6C4925d9209eCc5f964373b6` -- L1 Gateway Router: `0xe5E30E7c24e4dFcb281A682562E53154C15D3332` -- L2 Messenger: `0xb75d7e84517e1504C151B270255B087Fd746D34C` -- L2 Gateway Router: `0x6d79Aa2e4Fbf80CF8543Ad97e294861853fb0649` - -### L2 Predeploys - -- Message Queue: `0x5300000000000000000000000000000000000000` -- Block Container: `0x5300000000000000000000000000000000000001` -- Gas Price Oracle: `0x5300000000000000000000000000000000000002` -- Whitelist: `0x5300000000000000000000000000000000000003` -- WETH L2: `0xa1EA0B2354F5A344110af2b6AD68e75545009a03` -- Transaction Fee Vault: `0x5300000000000000000000000000000000000005` - -## Protocols - -### Uniswap V3 - -- Frontend website: [https://uniswap-v3.scroll.io/](https://uniswap-v3.scroll.io/) -- Main Contracts - - Core Factory: `0x6E7E0d996eF50E289af9BFd93f774C566F014660` - - NFT Position Manager: `0xbd1A5920303F45d628630E88aFbAF012bA078F37` - - Router: `0xD9880690bd717189cC3Fbe7B9020F27fae7Ac76F` -- Additional Contracts - - multicall2Address: `0x2117f703867a2B7E6813c7e5Edd96bf9a8d8eC30` - - proxyAdminAddress: `0x7023D099DcAE54c3ed93B8C07bC8948150A68bb4` - - tickLensAddress: `0xf39a3f98Bc7e03cB9A8dBF8246B8C66a1A5c025F` - - nftDescriptorLibraryAddressV1_3_0: `0x9590F386eC21A221646A19ac03984683713366d7` - - nonfungibleTokenPositionDescriptorAddressV1_3_0: `0xdbb991616CE0E6a0553258bd34bC1478042C03C2` - - descriptorProxyAddress: `0x9590F386eC21A221646A19ac03984683713366d7` - - v3MigratorAddress: `0x5Db25d2b7dba65c8aA2b16465438Ec44f75b0511` - - v3StakerAddress: `0xF957376105987D25EFe7D403eA63929e0dAc9E0c` - - quoterV2Address: `0xbf1c1FE1e9e900aFd5ba2Eb67480c44266D5eD84` - -## Tokens - - - -- Goerli USDC: `0x67aE69Fd63b4fc8809ADc224A9b82Be976039509` diff --git a/src/content/docs/en/developers/developer-quickstart.mdx b/src/content/docs/en/developers/developer-quickstart.mdx index c23c215a8..ead399f50 100644 --- a/src/content/docs/en/developers/developer-quickstart.mdx +++ b/src/content/docs/en/developers/developer-quickstart.mdx @@ -8,35 +8,43 @@ whatsnext: { "Verify Your Smart Contracts": "/developers/verifying-smart-contrac --- import Aside from "../../../../components/Aside.astro" +import ClickToZoom from "../../../../components/ClickToZoom.astro" +import networkSelection from "./_images/mmNetworkSelection.png" +import injectedProviderMM from "./_images/injectedProviderMM.png" With Scroll, your favorite tools for building and testing smart contracts just work. -Since Scroll is bytecode equivalent with the EVM, you’ll just need to point your favorite builder tools at a Scroll Alpha Testnet RPC Provider. +Since Scroll is bytecode equivalent with the EVM, you’ll just need to point your favorite builder tools at a Scroll Sepolia Testnet RPC Provider. If you run into any issues, please reach out in [our Discord](https://discord.gg/scroll). ## Acquiring Testnet Ether -To start building on Scroll, you'll first need to acquire some testnet ETH. See the [Faucet](/user-guide/faucet) page for tips on getting test tokens on Goerli. After this, you can bridge your testnet ETH to the Scroll Alpha Testnet (Layer 2) using our [Bridge](/user-guide/bridge). +To start building on Scroll, you'll first need to acquire some testnet ETH. See the [Faucet](/user-guide/faucet) page for tips on getting test tokens on Sepolia. After this, you can bridge your testnet ETH to the Scroll Sepolia Testnet (Layer 2) using our [Bridge](/user-guide/bridge). For a walkthrough, start with the User Guide's [Setup](/user-guide/setup) page. ## Network Configuration -Use the table below for configuring your Ethereum tools to the Scroll Alpha Testnet. +Use the table below to configure your Ethereum tools to the Scroll Alpha Testnet. -| Network Name | Scroll Alpha Testnet | Goerli test network | -| ------------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| RPC URL | [https://alpha-rpc.scroll.io/l2](https://alpha-rpc.scroll.io/l2) | [https://endpoints.omniatech.io/v1/eth/goerli/public](https://endpoints.omniatech.io/v1/eth/goerli/public) | -| Chain ID | 534353 | 5 | -| Currency Symbol | ETH | ETH | -| Block Explorer URL | [https://blockscout.scroll.io](https://blockscout.scroll.io/) | [https://goerli.etherscan.io](https://goerli.etherscan.io) | +| Network Name | Scroll Sepolia Testnet | Sepolia Testnet | +| ------------------ | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| RPC URL | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://eth-sepolia-public.unifra.io](https://eth-sepolia-public.unifra.io) | +| Chain ID | 534351 | 11155111 | +| Currency Symbol | ETH | ETH | +| Block Explorer URL | [https://sepolia-blockscout.scroll.io](https://sepolia-blockscout.scroll.io/) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | ## Configure your tooling + + ### Hardhat -Modify your Hardhat config file `hardhat.config.ts` to point at the Scroll Alpha Testnet public RPC. +Modify your Hardhat config file `hardhat.config.ts` to point at the Scroll Sepolia Testnet public RPC. ```jsx ... @@ -45,7 +53,7 @@ const config: HardhatUserConfig = { ... networks: { scrollAlpha: { - url: "https://alpha-rpc.scroll.io/l2" || "", + url: "https://sepolia-rpc.scroll.io/" || "", accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, @@ -57,44 +65,36 @@ const config: HardhatUserConfig = { ### Foundry -To deploy using the Scroll Alpha Testnet Public RPC, run: +To deploy using the Scroll Sepolia Testnet Public RPC, run: -`forge create ... --rpc-url=https://alpha-rpc.scroll.io/l2` +```bash +forge create ... --rpc-url=https://sepolia-rpc.scroll.io/ --legacy +``` ### Remix Web IDE -After compiling your contracts, the easiest way to deploy using Remix is by [setting up Metamask](/user-guide/setup#metamask), then selecting the **Scroll Alpha Testnet** network. +After compiling your contracts, the easiest way to deploy using Remix is by [setting up Metamask](/user-guide/setup#metamask), then selecting the **Scroll Sepolia Testnet** network. -
- -
-

Metamask with the Scroll Alpha Testnet selected as Network

-
-
+ -Now, in the “Deploy and Run Transactions” tab, use the “Environment” drop down and select “Injected Provider - MetaMask.” +Now, in the “Deploy and Run Transactions” tab, use the “Environment” drop-down and select “Injected Provider - MetaMask.” -
- -
-

Remix using MetaMask as a Network Provider for accessing the Scroll Alpha Testnet

-
-
+ -Connect your wallet and select the Scroll Alpha Testnet. Your account should be selected automatically in Remix, and you can click “Deploy.” +Connect your wallet and select the Scroll Sepolia Testnet. Your account should be selected automatically in Remix, and you can click “Deploy.” ### Truffle -Assuming you already have a truffle environment setup, go to the Truffle [configuration file](https://trufflesuite.com/docs/truffle/reference/configuration/), `truffle.js`. Make sure to have installed HDWalletProvider: `npm install @truffle/hdwallet-provider@1.4.0` +Assuming you already have a Truffle environment setup, go to the Truffle [configuration file](https://trufflesuite.com/docs/truffle/reference/configuration/), `truffle.js`. Make sure to have installed HDWalletProvider: `npm install @truffle/hdwallet-provider@1.4.0` -```jsx +```js const HDWalletProvider = require("@truffle/hdwallet-provider") ... module.exports = { networks: { scrollAlpha: { provider: () => - new HDWalletProvider(process.env.PRIVATE_KEY, "https://alpha-rpc.scroll.io/l2"), + new HDWalletProvider(process.env.PRIVATE_KEY, "https://sepolia-rpc.scroll.io/"), network_id: '*', }, } @@ -103,27 +103,54 @@ module.exports = { ### Brownie -To add the Scroll Alpha Testnet, run the following command: +To add the Scroll Sepolia Testnet, run the following command: ```bash -brownie networks add Ethereum scrollAlpha host=https://alpha-rpc.scroll.io/l2 chainid=534353 +brownie networks add Ethereum scrollAlpha host=https://sepolia-rpc.scroll.io/ chainid=534351 ``` To set this as your default network, add the following in your project config file: ```yaml networks: - default: scrollAlpha + default: scrollSepolia +``` + +Another way to add the Scroll Sepolia Testnet is to create a `yaml` file and run a command to add it. + +This is an example of a yaml file called `network-config.yaml` + +```yaml +live: +- name: Ethereum + networks: + - chainid: 534351 + explorer: https://sepolia-blockscout.scroll.io/ + host: https://sepolia-rpc.scroll.io + id: scrollSepolia + name: Scroll Sepolia Testnet +``` + +To add the Scroll Sepolia Testnet to the network list, run the following command: + +```bash +brownie networks import ./network-config.yaml +``` + +To deploy on Scroll, run the following command. In this example, `token.py` is the script to deploy the smart contract. Replace this with the name of your script: + +```bash +brownie run token.py --network scrollSepolia ``` ### ethers.js -Setting up a Scroll Alpha Testnet provider in an `ethers` script: +Setting up a Scroll Sepolia Testnet provider in an `ethers` script: ```jsx import { ethers } from "ethers" -const provider = new ethers.providers.JsonRpcProvider("https://alpha-rpc.scroll.io/l2") +const provider = new ethers.providers.JsonRpcProvider("https://sepolia-rpc.scroll.io/") ``` ### scaffold-eth @@ -139,14 +166,14 @@ In the `packages/hardhat/hardhat.config.js` file, you’ll add the network and s // // Select the network you want to deploy to here: // -const defaultNetwork = "scrollAlpha"; +const defaultNetwork = "scrollSepolia"; ... module.exports = { ... networks: { ... - scrollAlpha: { - url: "https://alpha-rpc.scroll.io/l2", + scrollSepolia: { + url: "https://sepolia-rpc.scroll.io/", accounts: { mnemonic: mnemonic(), }, @@ -156,16 +183,16 @@ module.exports = { } ``` -Be sure to fund the deployment wallet as well! Run `yarn generate` to create the wallet and `yarn account` to check its funds. Once funded, run `yarn deploy --network scrollAlpha` to deploy on the Alpha testnet. +Be sure to fund the deployment wallet as well! Run `yarn generate` to create the wallet and `yarn account` to check its funds. Once funded, run `yarn deploy --network scrollSepolia` to deploy on the Scroll Sepolia testnet. #### Configure the Frontend -To configure your frontend, you need to add the Scroll Alpha Testnet as a network option, then select it as default. +To configure your frontend, you need to add the Scroll Sepolia Testnet as a network option, then select it as default. To add the network, modify `packages/react-app/src/constants.js` . @@ -174,11 +201,11 @@ To add the network, modify `packages/react-app/src/constants.js` . export const NETWORKS = { ... scrollAlpha: { - name: "scrollAlpha", + name: "scrollSepolia", color: "#e9d0b8", - chainId: 534353, - rpcUrl: "https://alpha-rpc.scroll.io/l2", - blockExplorer: "https://blockscout.scroll.io", + chainId: 534351, + rpcUrl: "https://sepolia-rpc.scroll.io/", + blockExplorer: "https://sepolia-blockscout.scroll.io", }, ... } @@ -189,6 +216,6 @@ Next, in `packages/react-app/src/App.jsx` modify ```jsx ... /// 📡 What chain are your contracts deployed to? -const initialNetwork = NETWORKS.scrollAlpha; +const initialNetwork = NETWORKS.scrollSepolia; ... ``` diff --git a/src/content/docs/en/developers/ethereum-and-alpha-testnet-differences.mdx b/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx similarity index 56% rename from src/content/docs/en/developers/ethereum-and-alpha-testnet-differences.mdx rename to src/content/docs/en/developers/ethereum-and-scroll-differences.mdx index 64216a6e9..72a281ee1 100644 --- a/src/content/docs/en/developers/ethereum-and-alpha-testnet-differences.mdx +++ b/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx @@ -1,9 +1,9 @@ --- section: developers date: Last Modified -title: "Ethereum & Alpha Testnet Differences" +title: "Ethereum & Scroll Differences" lang: "en" -permalink: "developers/ethereum-and-alpha-testnet-differences" +permalink: "developers/ethereum-and-scroll-differences" excerpt: "There are a number of technical details that differ between Ethereum mainnet's EVM and Scroll's modified design for a zkEVM. Below you can see those differences as they exist now." --- @@ -13,18 +13,33 @@ There are a number of technical details that differ between Ethereum mainnet's E For open-source contributors and infrastructure builders, please contact our team for additional support. -