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.
-