From f5cdd4389fe34eba5f01ee76779167b4aec4c975 Mon Sep 17 00:00:00 2001 From: Ahmed Castro Date: Mon, 18 Sep 2023 13:11:52 -0600 Subject: [PATCH 01/15] Update prod branch from develop (#88) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Removed trailing slashes in the urls (#63) Fix: faucet link broken because of the double slash * Fix: What's next link on ERC721 bridge page when you're on ERC721 NFT Bridge page and scrolling down to whats next you see ERC1155 Token Bridge tap, when you click on it. it doesn't take you to ERC1155 Token Bridge page. it will reload the same page. so i fixed by editing the whats next line. * Update: Add Bware Faucet (#64) * add bware faucet * fix dangling html close comment * fix: apply new logo (#66) * Rebranding (#69) * Update: 8/23/23 (#65) * Removed trailing slashes in the urls (#63) Fix: faucet link broken because of the double slash * Fix: What's next link on ERC721 bridge page when you're on ERC721 NFT Bridge page and scrolling down to whats next you see ERC1155 Token Bridge tap, when you click on it. it doesn't take you to ERC1155 Token Bridge page. it will reload the same page. so i fixed by editing the whats next line. * Update: Add Bware Faucet (#64) * add bware faucet * fix dangling html close comment --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> * fix: apply new logo (#67) * update press link and change zero-knowledge to zero knowledge --------- Co-authored-by: Daniel Helm Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> Co-authored-by: Holybasil * Prod to develop fixing icons to resolve PRs to different branches (#72) * Update: 8/23/23 (#65) * Removed trailing slashes in the urls (#63) Fix: faucet link broken because of the double slash * Fix: What's next link on ERC721 bridge page when you're on ERC721 NFT Bridge page and scrolling down to whats next you see ERC1155 Token Bridge tap, when you click on it. it doesn't take you to ERC1155 Token Bridge page. it will reload the same page. so i fixed by editing the whats next line. * Update: Add Bware Faucet (#64) * add bware faucet * fix dangling html close comment --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> * fix: apply new logo (#67) * fix: Apple touch icon 256x256 (#68) * Update prod for rebrand. (#71) * Removed trailing slashes in the urls (#63) Fix: faucet link broken because of the double slash * Fix: What's next link on ERC721 bridge page when you're on ERC721 NFT Bridge page and scrolling down to whats next you see ERC1155 Token Bridge tap, when you click on it. it doesn't take you to ERC1155 Token Bridge page. it will reload the same page. so i fixed by editing the whats next line. * Update: Add Bware Faucet (#64) * add bware faucet * fix dangling html close comment * fix: apply new logo (#66) * Rebranding (#69) * Update: 8/23/23 (#65) * Removed trailing slashes in the urls (#63) Fix: faucet link broken because of the double slash * Fix: What's next link on ERC721 bridge page when you're on ERC721 NFT Bridge page and scrolling down to whats next you see ERC1155 Token Bridge tap, when you click on it. it doesn't take you to ERC1155 Token Bridge page. it will reload the same page. so i fixed by editing the whats next line. * Update: Add Bware Faucet (#64) * add bware faucet * fix dangling html close comment --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> * fix: apply new logo (#67) * update press link and change zero-knowledge to zero knowledge --------- Co-authored-by: Daniel Helm Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> Co-authored-by: Holybasil --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> Co-authored-by: Holybasil Co-authored-by: zzq0826 <770166635@qq.com> --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> Co-authored-by: Holybasil Co-authored-by: zzq0826 <770166635@qq.com> * Update blocks.mdx (#76) * Update erc721-nft-bridge.mdx (#78) * Update helper.tsx (#75) * Update/repo banner (#83) * update: new banner * add badges * fix not translate in React Components inside Astro (#85) * fixed broken links and fixed some whats-nexts (#87) * fix spelling of "Merkle" (#91) * Fixed wrong address (#90) * Update bridge-erc20-through-the-custom-gateway.mdx Fixed wrong address * Update bridge-erc20-through-the-custom-gateway.mdx * Update PureFooter.tsx (#84) Open a new target URL in new tab, current its overriding this page(main domain) --------- Co-authored-by: Kirill Nikolaev <80189148+knikolaeff@users.noreply.github.com> Co-authored-by: monem <142049670+juve4ever@users.noreply.github.com> Co-authored-by: Daniel Helm Co-authored-by: Holybasil Co-authored-by: zzq0826 <770166635@qq.com> Co-authored-by: Péter Garamvölgyi Co-authored-by: diposs Co-authored-by: ManuGodzilla <142924505+ManuGodzilla@users.noreply.github.com> Co-authored-by: Anton Livaja Co-authored-by: jrsurya <30382496+jrsurya@users.noreply.github.com> --- README.md | 11 ++++++----- astro-i18next.config.ts | 1 + src/assets/banner.png | Bin 0 -> 46758 bytes src/components/Footer/PureFooter/PureFooter.tsx | 2 +- .../bridge-erc20-through-the-custom-gateway.mdx | 6 +++--- .../guides/contract-deployment-tutorial.mdx | 2 +- ...scroll-messenger-cross-chain-interaction.mdx | 1 + .../docs/en/developers/scroll-contracts.mdx | 1 + .../bridge/cross-domain-messaging.mdx | 2 +- .../docs/en/technology/chain/transactions.mdx | 8 ++++---- .../docs/en/technology/zkevm/zkevm-overview.mdx | 1 - src/content/docs/en/user-guide/bridge.mdx | 2 +- 12 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 src/assets/banner.png diff --git a/README.md b/README.md index a31817a53..ab7109a62 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +![Contribute to Scroll](./src/assets/banner.png) + +[![Twitter Follow](https://img.shields.io/twitter/follow/Scroll_ZKP?style=social)](https://twitter.com/Scroll_ZKP) +[![Discord](https://img.shields.io/discord/984015101017346058?color=%235865F2&label=Discord&logo=discord&logoColor=%23fff)](https://discord.gg/scroll) + This is the open source project for the Scroll documentation. ## Developing @@ -8,13 +13,9 @@ npm install && npm run dev ## Docs architecture -- All docs are markdown and stored in `/src/pages`. +- All articles are markdown and stored in `/src/content/docs/`. - Navigation is JSON in `/src/config/sidebar.ts` -## Deployment - -Managed by Scroll using Netlify at https://app.netlify.com/sites/scroll-documentation/overview. - ## Credits - Special thanks to the Chainlink team whose documentation we forked. Their repo is available [here](https://github.com/smartcontractkit/documentation) and viewable at [https://docs.chain.link/](https://docs.chain.link/). diff --git a/astro-i18next.config.ts b/astro-i18next.config.ts index 539545585..d191ee33b 100644 --- a/astro-i18next.config.ts +++ b/astro-i18next.config.ts @@ -3,4 +3,5 @@ export default { defaultLocale: "en", showDefaultLocale: true, locales: ["en", "zh"], + load: ["server", "client"], } diff --git a/src/assets/banner.png b/src/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8c66d8c18c2f8d2e197fdfb2225b68e9a22c43 GIT binary patch literal 46758 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 Lm8EJVOoRUq6>#Z) literal 0 HcmV?d00001 diff --git a/src/components/Footer/PureFooter/PureFooter.tsx b/src/components/Footer/PureFooter/PureFooter.tsx index 56706e7e1..ee126d83f 100644 --- a/src/components/Footer/PureFooter/PureFooter.tsx +++ b/src/components/Footer/PureFooter/PureFooter.tsx @@ -33,7 +33,7 @@ const Footer = () => {

Follow Us

{mediaList.map((item) => ( - + {} ))} diff --git a/src/content/docs/en/developers/guides/bridge-erc20-through-the-custom-gateway.mdx b/src/content/docs/en/developers/guides/bridge-erc20-through-the-custom-gateway.mdx index 866bfe17f..70a9b35f8 100644 --- a/src/content/docs/en/developers/guides/bridge-erc20-through-the-custom-gateway.mdx +++ b/src/content/docs/en/developers/guides/bridge-erc20-through-the-custom-gateway.mdx @@ -36,14 +36,14 @@ contract L1Token is ERC20 { ## Step 2: Launch the counterpart token on Scroll Sepolia testnet -Next, launch you'll launch a counterpart to this token on Scroll, which will represent the original token on Sepolia. This token can implement custom logic to match that of the L1 token or even add additional features beyond those of the L1 token. +Next, you'll launch a counterpart to this token on Scroll, which will represent the original token on Sepolia. This token can implement custom logic to match that of the L1 token or even add additional features beyond those of the L1 token. For this to work: -- The token must implement the `IScrollStandardERC20`` interface in order to be compatible with the bridge. +- The token must implement the `IScrollStandardERC20` interface in order to be compatible with the bridge. - The contract should provide the gateway address and the counterpart token addresses (the L1 token we just launched) under the `gateway()` and `counterpart()` functions. It should also allow the L2 gateway to call the token `mint()` and `burn()` functions, which are called when a token is deposited and withdrawn. -The following is a complete example of a token compatible with the bridge. To the constructor, you will pass the official Scroll Custom Gateway address (`0x31C994F2017E71b82fd4D8118F140c81215bbb37`) and the address of the token launched on Sepolia. +The following is a complete example of a token compatible with the bridge. To the constructor, you will pass the official Scroll Custom Gateway address (`0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf`) and the address of the token launched on Sepolia. ```solidity // SPDX-License-Identifier: MIT diff --git a/src/content/docs/en/developers/guides/contract-deployment-tutorial.mdx b/src/content/docs/en/developers/guides/contract-deployment-tutorial.mdx index f222c6071..60c126a9c 100644 --- a/src/content/docs/en/developers/guides/contract-deployment-tutorial.mdx +++ b/src/content/docs/en/developers/guides/contract-deployment-tutorial.mdx @@ -5,7 +5,7 @@ title: "Contract Deployment Tutorial" lang: "en" permalink: "developers/guides/contract-deployment-tutorial" excerpt: "The Scroll Sepolia Testnet allows the community to deploy smart contracts on Scroll. In this tutorial, we will teach you how to deploy a contract on Scroll Sepolia." -whatsnext: { "Contract Deployment Tutorial": "/developers/developer-quickstart/" } +whatsnext: { "Scroll Messenger Cross-chain Interaction": "/developers/guides/scroll-messenger-cross-chain-interaction/" } --- import Aside from "../../../../../components/Aside.astro" diff --git a/src/content/docs/en/developers/guides/scroll-messenger-cross-chain-interaction.mdx b/src/content/docs/en/developers/guides/scroll-messenger-cross-chain-interaction.mdx index 2793510e2..15d26035e 100644 --- a/src/content/docs/en/developers/guides/scroll-messenger-cross-chain-interaction.mdx +++ b/src/content/docs/en/developers/guides/scroll-messenger-cross-chain-interaction.mdx @@ -4,6 +4,7 @@ date: Last Modified title: "Scroll Messenger Cross-chain Interaction" lang: "en" permalink: "developers/guides/scroll-messenger-cross-chain-interaction" +whatsnext: { "Bridge ERC20 through the Custom Gateway": "/developers/guides/bridge-erc20-through-the-custom-gateway" } excerpt: "In this example, we will launch a dummy smart contract on either Sepolia or Scroll Sepolia testnet and interact with it from the opposite chain." --- diff --git a/src/content/docs/en/developers/scroll-contracts.mdx b/src/content/docs/en/developers/scroll-contracts.mdx index 81bac2964..0570b661c 100644 --- a/src/content/docs/en/developers/scroll-contracts.mdx +++ b/src/content/docs/en/developers/scroll-contracts.mdx @@ -4,6 +4,7 @@ date: Last Modified title: "Scroll Sepolia Contracts" lang: "en" permalink: "developers/scroll-contracts" +whatsnext: { "Ethereum & Scroll Differences": "/developers/ethereum-and-scroll-differences" } excerpt: "The network info and contract addresses you need to start with Scroll Sepolia Testnet." --- diff --git a/src/content/docs/en/technology/bridge/cross-domain-messaging.mdx b/src/content/docs/en/technology/bridge/cross-domain-messaging.mdx index 9308e216c..bc8b53fb3 100644 --- a/src/content/docs/en/technology/bridge/cross-domain-messaging.mdx +++ b/src/content/docs/en/technology/bridge/cross-domain-messaging.mdx @@ -217,7 +217,7 @@ function sendMessage( Next, the cross-domain message hash is appended to `L2MessageQueue` by calling its `appendMessage` function. The `L2MessageQueue` contract maintains the [Withdraw Trie](#withdraw-trie), an append-only Merkle tree. Every time a new message is appended to the queue, the contract inserts it into the Withdraw Trie and updates the trie's root hash. -After the transaction batch containing users' L2-to-L1 messages is finalized on the L1 rollup contract, users need to submit corresponding _Execute Withdrawal_ transactions to call `relayMessageWithProof` method in the `L1ScrollMessenger` contract that executes the withdrawal on L1. Thanks to the Merle proofs, the finalization of withdrawal transactions on L1 is trustless and can be submitted by user themselves or by a third party on behalf of users. +After the transaction batch containing users' L2-to-L1 messages is finalized on the L1 rollup contract, users need to submit corresponding _Execute Withdrawal_ transactions to call `relayMessageWithProof` method in the `L1ScrollMessenger` contract that executes the withdrawal on L1. Thanks to the Merkle proofs, the finalization of withdrawal transactions on L1 is trustless and can be submitted by user themselves or by a third party on behalf of users. To make it easier to construct a withdraw MIP, Scroll maintains a service called Bridge History API. Bridge History API monitors `SentMessage` events emitted from `L2ScrollMessenger` and maintains a Withdraw Trie internally. It continuously generates Merkle proofs for every withdrawal messages. Users and third-party services can query Merkle proofs from the Bridge History API to include in the _Execute Withdrawal_ transactions. diff --git a/src/content/docs/en/technology/chain/transactions.mdx b/src/content/docs/en/technology/chain/transactions.mdx index 90ac2bfd1..d22a3402a 100644 --- a/src/content/docs/en/technology/chain/transactions.mdx +++ b/src/content/docs/en/technology/chain/transactions.mdx @@ -62,15 +62,15 @@ First, users can directly submit transactions to L2 sequencers. To do so, users Second, deposit and enforced transactions are originated on L1. Scroll L1 bridge contract provides three entry points for users and smart contracts to send transactions from the L1. All messages sent through these three entry points will be appended to the `L1MessageQueue` contract. -- The `ScrollGatewayRouter` contract and several standard token gateways allow users and contracts to deposit standard tokens to L2. See more details in the [Deposit Token Gateways](/-oscADc8SoKAOxjtpcEqKg). -- The `L1ScrollMessenger` contract allows users and contracts to send arbitrary messages to L2. See more details in the [Sending Arbitrary Messages](/UPyw7afFQE6q-9CIdIRBag#Sending-Arbitrary-Messages). -- The `EnforcedTxGateway` contract allows EOAs to initiate an enforced transaction from the same address to withdraw tokens or call other contracts on L2. See more details in the [Sending Enforced Transaction](/UPyw7afFQE6q-9CIdIRBag#Sending-Enforced-Transactions). +- The `ScrollGatewayRouter` contract and several standard token gateways allow users and contracts to deposit standard tokens to L2. See more details in the [Deposit Token Gateways](/technology/bridge/deposit-gateways). +- The `L1ScrollMessenger` contract allows users and contracts to send arbitrary messages to L2. See more details in the [Sending Arbitrary Messages](/technology/bridge/cross-domain-messaging#sending-arbitrary-messages). +- The `EnforcedTxGateway` contract allows EOAs to initiate an enforced transaction from the same address to withdraw tokens or call other contracts on L2. See more details in the [Sending Enforced Transaction](/technology/bridge/cross-domain-messaging#sending-enforced-transactions). The Scroll sequencer periodically starts a new mining job. It pulls the L1 messages from the `L1MessageQueue` contract and transactions in the L2 mempool and seals a block. Once a transaction is included in a L2 block, its status becomes `Confirmed`. ### Commit Transaction Data -The rollup node collects new L2 blocks and packs them into chunks and batches (see more details in [Transaction Batching](/RxRWLFtiQ7W_wbc0jMnQNA)). Periodically it sends a _Commit Transaction_ that posts the data of a batch of transactions to the L1 `ScrollChain` contract. After the Commit Transaction is finalized in a L1 block, the status of the transactions in this batch becomes `Committed`. At this time, users can reconstruct L2 state themselves completely based on the committed data from the L1 contract. +The rollup node collects new L2 blocks and packs them into chunks and batches (see more details in [Transaction Batching](/technology/chain/transactions#transaction-batching)). Periodically it sends a _Commit Transaction_ that posts the data of a batch of transactions to the L1 `ScrollChain` contract. After the Commit Transaction is finalized in a L1 block, the status of the transactions in this batch becomes `Committed`. At this time, users can reconstruct L2 state themselves completely based on the committed data from the L1 contract. ### Finalize Transactions diff --git a/src/content/docs/en/technology/zkevm/zkevm-overview.mdx b/src/content/docs/en/technology/zkevm/zkevm-overview.mdx index 19a1b6326..50bc28318 100644 --- a/src/content/docs/en/technology/zkevm/zkevm-overview.mdx +++ b/src/content/docs/en/technology/zkevm/zkevm-overview.mdx @@ -5,7 +5,6 @@ title: "zkEVM Overview" lang: "en" permalink: "technology/zkevm-overview" excerpt: "In order to understand how to build a zkEVM, which proves the execution of the EVM, we need to first look at the EVM itself." -whatsnext: { "Bridge Overview": "/technology/bridge/bridge-overview" } --- import ClickToZoom from "../../../../../components/ClickToZoom.astro" diff --git a/src/content/docs/en/user-guide/bridge.mdx b/src/content/docs/en/user-guide/bridge.mdx index 08c806a1c..b55ce7853 100644 --- a/src/content/docs/en/user-guide/bridge.mdx +++ b/src/content/docs/en/user-guide/bridge.mdx @@ -20,7 +20,7 @@ excerpt: "To start bridging assets from Sepolia, navigate to the portal bridge a {/* TODO: Update all instructions after being able to walk through the whole flow. */} Visit our [Bridge](https://scroll.io/bridge) app to get started![^thanks-hop] The Bridge supports both **Deposit** and **Withdraw** operations, allowing users to trustlessly move assets from Sepolia Testnet to Scroll Sepolia Testnet. -[^thanks-hop]: Forked from [Hop Exchange]('https://hop.exchange/')'s UI 🙌 +[^thanks-hop]: Forked from [Hop Exchange](https://hop.exchange/)'s UI 🙌 Deposits can take up to 15 minutes to be available on Scroll. From d7c9a68b4cfa9bd8b34ab0512ea3b681b107d586 Mon Sep 17 00:00:00 2001 From: Daniel Helm Date: Tue, 17 Oct 2023 19:58:46 +0700 Subject: [PATCH 02/15] feat: add technology/security section (#100) * feat: add technology/security section * update scope and firm ordering * update Zellic reports * fix critical price - missing 0 * add report * clarify out-of-scope submissions --------- Co-authored-by: Haichen Shen --- public/locales/en/translation.json | 6 +- src/config/sidebar.ts | 17 ++++ .../security/audits-and-bug-bounty.mdx | 77 +++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/content/docs/en/technology/security/audits-and-bug-bounty.mdx diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index e5b4c44e5..56e0464d3 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -129,7 +129,11 @@ "bridgeOverview": "Bridge Overview", "prover": "Prover", "proofGeneration": "Proof Generation", - "cpuProverRepo": "CPU Prover Repo" + "cpuProverRepo": "CPU Prover Repo", + + "security": "Security", + "auditsAndBugBounty": "Audits & Bug Bounty", + "l2BeatAssessment": "L2Beat Assessment" }, "learn": { "ethereumAndProtocols": "Ethereum & Protocols", diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index dff7ea04d..9bd327841 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -252,6 +252,23 @@ export const getSidebar = () => { }, ], }, + { + section: t("sidebar.technology.security"), + contents: [ + { + title: t("sidebar.technology.auditsAndBugBounty"), + url: formatUrl("technology/security/audits-and-bug-bounty"), + }, + // { + // title: t("sidebar.technology.risks"), + // url: formatUrl("technology/security/risks"), + // }, + // { + // title: t("sidebar.technology.l2BeatAssessment"), + // url: "https://l2beat.com/scaling/projects/scroll", + // }, + ], + }, ], learn: [ { diff --git a/src/content/docs/en/technology/security/audits-and-bug-bounty.mdx b/src/content/docs/en/technology/security/audits-and-bug-bounty.mdx new file mode 100644 index 000000000..8e203a333 --- /dev/null +++ b/src/content/docs/en/technology/security/audits-and-bug-bounty.mdx @@ -0,0 +1,77 @@ +--- +section: technology +date: Last Modified +title: "Audits & Bug Bounty Program" +lang: "en" +permalink: "technology/security/audits-and-bug-bounty" +--- + +import Aside from "../../../../../components/Aside.astro" + +Scroll treats security as a top priority. + +Aside from rigorous testing, an internal security team, and comprehensive code reviews, we have also engaged with multiple security audit firms to conduct audits on our codebase. We have also launched a bug bounty program to encourage the community to participate in the security of our protocol. + + + +## Independent Audits + +Scroll has worked with several industry-leading security audit firms to review our codebase, with critical code receiving reviews from multiple teams, including [Trail of Bits](https://www.trailofbits.com/), [OpenZeppelin](https://www.openzeppelin.com/), [Zellic](https://www.zellic.io/), and [KALOS](https://www.kalos.xyz/). + +- Trail of Bits, Zellic, and KALOS have reviewed our zkEVM circuits +- OpenZeppelin and Zellic have performed independent audits on our bridge & rollup contracts +- Trail of Bits has analyzed our node implementation + + + +### zkEVM circuits + +- Trail of Bits + - Wave 1 + - Wave 2 + - Wave 3 +- Zellic and Kalos + - [Wave 1](https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%201%20Audit%20Report.pdf) + - [Wave 2](https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%202%20Audit%20Report.pdf) + +### Node implementation + +- Trail of Bits + - [zkTrie](https://github.com/trailofbits/publications/blob/master/reviews/2023-07-scroll-zktrie-securityreview.pdf) + - L2geth + - [L2geth diff](https://github.com/trailofbits/publications/blob/master/reviews/2023-08-scrollL2geth-securityreview.pdf) + +### Bridge and rollup contract + +- OpenZeppelin + - [Phase 1](https://blog.openzeppelin.com/scroll-layer-1-audit-1) + - [Phase 2](https://blog.openzeppelin.com/scroll-phase-2-audit) + - [GasSwap, Multiple Verifier, Wrapped Ether and Diff](https://blog.openzeppelin.com/scroll-gasswap-multiple-verifier-wrapped-ether-and-diff-audit) + - [ScrollOwner and Rate Limiter](https://blog.openzeppelin.com/scrollowner-and-rate-limiter-audit) + - [USDC Gateway](https://blog.openzeppelin.com/scroll-usdc-gateway-audit) + - [Contract diff](https://blog.openzeppelin.com/scroll-diff-audit-report) +- Zellic + - [Report 1](https://github.com/Zellic/publications/blob/master/Scroll%20-%2005.26.23%20Zellic%20Audit%20Report.pdf) + - [Report 2](https://github.com/Zellic/publications/blob/master/Scroll%20-%2009.27.23%20Zellic%20Audit%20Report.pdf) + +## Bug Bounty Program + +Scroll has an active [Bug Bounty Program on Immunefi](https://immunefi.com/bounty/scroll/), a leading bug bounty platform. The program is open to the public, and we encourage anyone to participate. + +Rewards depend on the severity of reported vulnerabilities: + +- **Critical**: up to \$1,000,000 +- **High**: \$10,000 - \$50,000 +- **Medium**: \$5,000 + +### Scope + +The scope of the bug bounty program covers the blockchain infrastructure and the smart contracts for bridging and rollup. For a detailed breakdown of bug categories, please refer to the bug bounty page. + +Besides the listed scopes in the bug bounty program, we also encourage reporting any vulnerabilities identified to Immunefi, which we will still consider for rewards. For any discoveries of critical vulnerabilities outside of the scope of the bug bounty program, please also send reports to security@scroll.io. From 5ddad66df291fb45f732079045103a6e5d0bedf6 Mon Sep 17 00:00:00 2001 From: Ahmed Castro Date: Tue, 17 Oct 2023 19:59:36 +0700 Subject: [PATCH 03/15] Developer guides: Mainnet related updates (#102) * initial network changes * update for mainnet content --------- Co-authored-by: Daniel Helm --- public/locales/en/translation.json | 6 +- src/config/sidebar.ts | 12 +- .../en/developers/developer-quickstart.mdx | 64 +++++-- .../ethereum-and-scroll-differences.mdx | 6 +- src/content/docs/en/developers/index.mdx | 8 +- .../the-scroll-messenger.mdx | 8 +- .../docs/en/developers/scroll-contracts.mdx | 157 ++++++++++++++++-- .../developers/transaction-fees-on-scroll.mdx | 6 +- .../developers/verifying-smart-contracts.mdx | 19 ++- 9 files changed, 234 insertions(+), 52 deletions(-) diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 56e0464d3..06291408d 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -96,9 +96,13 @@ "bridgingERC1155ThroughCustomGateway": "Bridging ERC1155 through Custom Gateway", "estimatingGasAndTxFees": "Estimating Gas & Tx Fees", "resources": "Resources", + "mainnetResources": "Mainnet Resources", + "sepoliaResources": "Sepolia Resources", + "scrollBlockExplorer": "Scrollscan Explorer", "rollupExplorer": "Rollup Explorer", "scrollSepoliaBlockExplorer": "Scroll Sepolia Explorer", - "sepoliaBlockExplorer": "Sepolia Explorer" + "sepoliaRollupExplorer": "Rollup Explorer", + "sepoliaBlockExplorer": "Scrollscan Explorer" }, "technology": { "introduction": "Introduction", diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index 9bd327841..7ad31e7df 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -154,11 +154,17 @@ export const getSidebar = () => { ], }, { - section: t("sidebar.developers.resources"), + section: t("sidebar.developers.mainnetResources"), contents: [ { 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/" }, + { title: t("sidebar.developers.scrollBlockExplorer"), url: "https://scrollscan.com/" }, + ], + }, + { + section: t("sidebar.developers.sepoliaResources"), + contents: [ + { title: t("sidebar.developers.sepoliaRollupExplorer"), url: "https://sepolia.scroll.io/rollupscan" }, + { title: t("sidebar.developers.scrollSepoliaBlockExplorer"), url: "https://sepolia.scrollscan.dev/" }, ], }, ], diff --git a/src/content/docs/en/developers/developer-quickstart.mdx b/src/content/docs/en/developers/developer-quickstart.mdx index fc6b3f563..302f4f214 100644 --- a/src/content/docs/en/developers/developer-quickstart.mdx +++ b/src/content/docs/en/developers/developer-quickstart.mdx @@ -12,29 +12,69 @@ import Aside from "../../../../components/Aside.astro" import ClickToZoom from "../../../../components/ClickToZoom.astro" import networkSelection from "./_images/mmNetworkSelection.png" import injectedProviderMM from "./_images/injectedProviderMM.png" +import ToggleElement from "../../../../components/ToggleElement.astro" 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 Sepolia Testnet RPC Provider. +Since Scroll is bytecode equivalent with the EVM, you’ll just need to point your favorite builder tools at a Scroll RPC Provider. If you run into any issues, please reach out in [our Discord](https://discord.gg/scroll). -## Acquiring Testnet Ether +## Acquiring 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 Sepolia. After this, you can bridge your testnet ETH to the Scroll Sepolia Testnet (Layer 2) using our [Bridge](/user-guide/bridge). +Scroll uses ETH as its native currency, which will be needed to pay transaction fees for deploying and interacting with the network. + +To start building on Scroll, we suggest you begin with using our Scroll Sepolia testnet. 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 [Sepolia Bridge](https://sepolia.scroll.io/bridge), as described in the [Bridge article](/user-guide/bridge). For a walkthrough, start with the User Guide's [Setup](/user-guide/setup) page. +Once you're ready to deploy on Scroll's mainnet, you can bridge over ETH using [our native bridge](https://scroll.io/bridge/) or one of the 3rd-party bridges. + ## Network Configuration +### Scroll Mainnet + +Use the table below to configure your Ethereum tools to the Scroll mainnet. + +| Network Name | Scroll | Ethereum Mainnet | +| ------------------ | -------------------------------------------------- | ---------------------------------------------------- | +| RPC URL | [https://rpc.scroll.io/](https://rpc.scroll.io/) | [https://eth.llamarpc.com](https://eth.llamarpc.com) | +| Chain ID | 534352 | 1 | +| Currency Symbol | ETH | ETH | +| Block Explorer URL | [https://scrollscan.com/](https://scrollscan.com/) | [https://etherscan.io](https://etherscan.io) | + + +
Additional Scroll Mainnet RPCs and Infra
+ - [Scroll Native Bridge](https://scroll.io/bridge) + - [Scroll RPC Providers on ChainList.org](https://chainlist.org/chain/534352) + - [Ethereum RPC Providers on ChainList.org](https://chainlist.org/chain/1) + {/* - Additional Block Explorers: + - [Dora](https://www.ondora.xyz/network/scroll/interactions) + - [L2Scan](https://scroll.l2scan.co/) */} + +
+ +### Scroll Sepolia Testnet + Use the table below to configure your Ethereum tools to the Scroll Sepolia Testnet. -| 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) | +| Network Name | Scroll Sepolia | Ethereum Sepolia | +| ------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------ | +| RPC URL | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://rpc2.sepolia.org](https://rpc2.sepolia.org) | +| Chain ID | 534351 | 11155111 | +| Currency Symbol | ETH | ETH | +| Block Explorer URL | [https://sepolia.scrollscan.com](https://sepolia.scrollscan.com/) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | + + +
Additional Scroll Sepolia RPCs and Infra
+ - [Scroll Sepolia Native Bridge](https://sepolia.scroll.io/bridge) + - [Scroll Sepolia RPC Providers on ChainList.org](https://chainlist.org/chain/534351) + - [Ethereum Sepolia RPC Providers on ChainList.org](https://chainlist.org/chain/11155111) + - Additional Block Explorers: + - [Dora](https://www.ondora.xyz/network/scroll-sepolia/interactions) + - [L2Scan](https://scroll.l2scan.co/) + +
## Configure your tooling @@ -126,7 +166,7 @@ live: - name: Ethereum networks: - chainid: 534351 - explorer: https://sepolia-blockscout.scroll.io/ + explorer: https://sepolia.scrollscan.com/ host: https://sepolia-rpc.scroll.io id: scrollSepolia name: Scroll Sepolia Testnet @@ -195,7 +235,7 @@ Be sure to fund the deployment wallet as well! Run `yarn generate` to create the 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` . +To add the network, modify `packages/react-app/src/constants.js`. ```jsx ... @@ -206,7 +246,7 @@ export const NETWORKS = { color: "#e9d0b8", chainId: 534351, rpcUrl: "https://sepolia-rpc.scroll.io/", - blockExplorer: "https://sepolia-blockscout.scroll.io", + blockExplorer: "https://sepolia.scrollscan.com", }, ... } diff --git a/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx b/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx index ad849c063..4328eb611 100644 --- a/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx +++ b/src/content/docs/en/developers/ethereum-and-scroll-differences.mdx @@ -10,7 +10,7 @@ excerpt: "There are a number of technical details that differ between Ethereum m import Aside from "../../../../components/Aside.astro" -A number of technical details differ between Ethereum mainnet's EVM and Scroll's modified design for a zkEVM. Below you can see those differences as they exist on Scroll Sepolia. +A number of technical details differ between Ethereum mainnet's EVM and Scroll's modified design for a zkEVM. Below you can see those differences as they exist on Scroll and Scroll Sepolia. For open-source contributors and infrastructure builders, please contact our team for additional support. @@ -71,7 +71,7 @@ When verifying `EXTCODESIZE`, it is expensive to load the whole contract data in ## Block Time -The Sepolia Testnet aims for a constant block time of 3 seconds. This is shorter and more consistent than the 12 seconds used in the Ethereum under ideal conditions. +Scroll aims for a constant block time of 3 seconds. This is shorter and more consistent than the 12 seconds used in the Ethereum under ideal conditions. This was chosen for two reasons: @@ -90,7 +90,7 @@ You can read in more detail on Shanghai hard fork differences from London on the ## Transaction Fees -The fee charged to Scroll Sepolia transactions contains two parts: +The fee charged to Scroll transactions contains two parts: - **L2 gas fee:** similar to L1, the amount of L2 execution fee equals to `L2_gas_price * L2_gas_used`, covering the following costs: - L2 sequencer execution & storage cost diff --git a/src/content/docs/en/developers/index.mdx b/src/content/docs/en/developers/index.mdx index 4875a01c7..0b9ab96a2 100644 --- a/src/content/docs/en/developers/index.mdx +++ b/src/content/docs/en/developers/index.mdx @@ -28,7 +28,7 @@ ensuring that all code executed on the Scroll Layer 2 behaves just as if it were ## Getting Started -**Looking to build on the Scroll Sepolia Testnet?** +**Looking to build on the Scroll?** - For the essentials: Check out the [Developer Quickstart](/developers/developer-quickstart) - For a tutorial walking through deploying your first smart contract on Scroll, read our [contract deployment tutorial](/developers/guides/contract-deployment-tutorial) @@ -78,9 +78,9 @@ ensuring that all code executed on the Scroll Layer 2 behaves just as if it were
Community — Scroll brings together users and builders.

- We know the challenges of building in the open and getting user engagement before mainnet release! Scroll has a - blossoming community of users and builders, and with a Discord community of over 100,000 users eager to try out - applications on our testnet, we’re excited to connect builders with users that can provide real-world feedback. + We know the challenges of building in the open and getting user engagement! Scroll has a blossoming community of + users and builders, and with a Discord community of over 500,000 members eager to try out applications on our + testnet or mainnet, we’re excited to connect builders with users that can provide real-world feedback.

diff --git a/src/content/docs/en/developers/l1-and-l2-bridging/the-scroll-messenger.mdx b/src/content/docs/en/developers/l1-and-l2-bridging/the-scroll-messenger.mdx index 10ee9b867..fb21fb219 100644 --- a/src/content/docs/en/developers/l1-and-l2-bridging/the-scroll-messenger.mdx +++ b/src/content/docs/en/developers/l1-and-l2-bridging/the-scroll-messenger.mdx @@ -24,11 +24,15 @@ the messenger smart contract deployed on L1, `L1ScrollMessenger`. To send a mess ## Finalizing transactions on L1 Any upcoming transactions from L2 need to be finalized using the `relayMessageWithProof` function on the Scroll Messenger -contract. We call this process "submitting an Execute Withdrawal transaction," and it is required for both sending arbitrary messages and transferring assets through a gateway or the router. When you use `relayMessageWithProof`, you'll have to provide a Merkle inclusion proof showing your transaction is included in the trie of "withdrawal" messages, along with other parameters. Producing this proof and these values can be done locally and permissionlessly, but at the moment, the easiest way to retrieve these parameters is through our backend API hosted at https://sepolia-api-bridge.scroll.io/api/. +contract. We call this process "submitting an Execute Withdrawal transaction," and it is required for both sending arbitrary messages and transferring assets through a gateway or the router. When you use `relayMessageWithProof`, you'll have to provide a Merkle inclusion proof showing your transaction is included in the trie of "withdrawal" messages, along with other parameters. Producing this proof and these values can be done locally and permissionlessly, but at the moment, the easiest way to retrieve these parameters is through our backend APIs: + +- Scroll Sepolia API: https://sepolia-api-bridge.scroll.io/api/ +- Scroll API: https://mainnet-api-bridge.scroll.io/api/ Supply the address of the EOA or contract responsible for initiating the original transaction on L2 to the `/claimable` diff --git a/src/content/docs/en/developers/scroll-contracts.mdx b/src/content/docs/en/developers/scroll-contracts.mdx index 0570b661c..9554390cd 100644 --- a/src/content/docs/en/developers/scroll-contracts.mdx +++ b/src/content/docs/en/developers/scroll-contracts.mdx @@ -1,7 +1,7 @@ --- section: developers date: Last Modified -title: "Scroll Sepolia Contracts" +title: "Scroll Contracts" lang: "en" permalink: "developers/scroll-contracts" whatsnext: { "Ethereum & Scroll Differences": "/developers/ethereum-and-scroll-differences" } @@ -9,28 +9,149 @@ excerpt: "The network info and contract addresses you need to start with Scroll --- import Aside from "../../../../components/Aside.astro" +import ToggleElement from "../../../../components/ToggleElement.astro" + +In this article you'll find useful contract addresses for Scroll and commonly used protocols. See the section below for [Scroll Sepolia](#scroll-sepolia-testnet) info. ## Network Info -| 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) | +Use the table below to configure your Ethereum tools to the Scroll mainnet. + +| Network Name | Scroll | Ethereum Mainnet | +| ------------------ | -------------------------------------------------- | ---------------------------------------------------- | +| RPC URL | [https://rpc.scroll.io/](https://rpc.scroll.io/) | [https://eth.llamarpc.com](https://eth.llamarpc.com) | +| Chain ID | 534352 | 1 | +| Currency Symbol | ETH | ETH | +| Block Explorer URL | [https://scrollscan.com/](https://scrollscan.com/) | [https://etherscan.io](https://etherscan.io) | + + +
Additional Scroll Mainnet RPCs and Infra
+ - [Scroll Native Bridge](https://scroll.io/bridge) + - [Scroll Rollup Scanner](https://scroll.io/rollupscan) + - [Scroll RPC Providers on ChainList.org](https://chainlist.org/chain/534352) + - [Ethereum RPC Providers on ChainList.org](https://chainlist.org/chain/1) + {/* - Additional Block Explorers: + - [Dora](https://www.ondora.xyz/network/scroll/interactions) + - [L2Scan](https://scroll.l2scan.co/) */} + +
-## Scroll Sepolia Contracts +## Scroll Contracts ### Rollup -- L1 Rollup (Scroll Chain): `0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0` +- L1 Rollup (Scroll Chain): `0xa13BAF47339d63B743e7Da8741db5456DAc1E556` ### ETH and ERC20 Bridge +- L1 ERC20 Gateway Router: `0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6` +- L2 ERC20 Gateway Router: `0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79` + +### Advanced Bridge Contracts + +- Scroll Messenger + - L1 Messenger: `0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367` + - L2 Messenger: `0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC` +- ETH Bridge + - L1 ETH Gateway: `0x7F2b8C31F88B6006c382775eea88297Ec1e3E905` + - L2 ETH Gateway: `0x6EA73e05AdC79974B931123675ea8F78FfdacDF0` + - L1 WETH Gateway: `0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE` + - L2 WETH Gateway: `0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9` +- ERC20 Bridge + - L1 ERC20 Standard Gateway: `0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9` + - L2 ERC20 Standard Gateway: `0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A` + - L1 ERC20 Custom Gateway: `0xb2b10a289A229415a124EFDeF310C10cb004B6ff` + - L2 ERC20 Custom Gateway: `0x64CCBE37c9A82D85A1F2E74649b7A42923067988` +- ERC721 Bridge + - L1 ERC721 Gateway: `0x6260aF48e8948617b8FA17F4e5CEa2d21D21554B` + - L2 ERC721 Gateway: `0x7bC08E1c04fb41d75F1410363F0c5746Eae80582` +- ERC1155 Bridge + - L1 ERC1155 Gateway: `0xb94f7F6ABcb811c5Ac709dE14E37590fcCd975B6` + - L2 ERC1155 Gateway: `0x62597Cc19703aF10B58feF87B0d5D29eFE263bcc` +- Gas Oracle + - L2 Gas Oracle (deployed on Mainnet): `0x987e300fDfb06093859358522a79098848C33852` + +### L2 Predeploys + +- Message Queue: `0x5300000000000000000000000000000000000000` +- Gas Price Oracle: `0x5300000000000000000000000000000000000002` +- Whitelist: `0x5300000000000000000000000000000000000003` +- WETH L2: `0x5300000000000000000000000000000000000004` +- Transaction Fee Vault: `0x5300000000000000000000000000000000000005` + +## Protocols on Scroll Mainnet + +### Uniswap v3 + +- Main Contracts + - Core Factory: `0x70C62C8b8e801124A4Aa81ce07b637A3e83cb919` + - NFT Position Manager: `0xB39002E4033b162fAc607fc3471E205FA2aE5967` + - Router: `0xfc30937f5cDe93Df8d48aCAF7e6f5D8D8A31F636` +- Additional Contracts + - multicall2Address: `0xC1D2e074C38FdD5CA965000668420C80316F0915` + - proxyAdminAddress: `0x1E6dcAb806A42055098f23E2B3ac72D6E195F967` + - tickLensAddress: `0x85780e12e90D2a684eB8E7404c985b5B5c8ce7E9` + - nftDescriptorLibraryAddressV1_3_0: `0xAeE9c206ba89F3DA25EEe4636208519e0B86965B` + - nonfungibleTokenPositionDescriptorAddressV1_3_0: `0xACcf12204b7591B2ECCEFe737440B0f53748B191` + - descriptorProxyAddress: `0x675DD953225D296A44790dC1390a1E7eF378f464` + - v3MigratorAddress: `0xF00577B5Dd0DA227298E954Ed11356F264Cf93d4` + - v3StakerAddress: `0xFdFbE973c9ecB036Ecfb7af697FcACe789D3f928` + - quoterV2Address: `0x2566e082Cb1656d22BCbe5644F5b997D194b5299` + +## Additional Useful Contracts + +- Multicall3: `0xcA11bde05977b3631167028862bE2a173976CA11` + +## Tokens + + + +{" "} + +
+ +--- + +## Scroll Sepolia Testnet + +### Network Info + +Use the table below to configure your Ethereum tools to the Scroll Sepolia Testnet. + +| Network Name | Scroll Sepolia | Ethereum Sepolia | +| ------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------ | +| RPC URL | [https://sepolia-rpc.scroll.io/](https://sepolia-rpc.scroll.io/) | [https://rpc2.sepolia.org](https://rpc2.sepolia.org) | +| Chain ID | 534351 | 11155111 | +| Currency Symbol | ETH | ETH | +| Block Explorer URL | [https://sepolia.scrollscan.com](https://sepolia.scrollscan.com/) | [https://sepolia.etherscan.io](https://sepolia.etherscan.io) | + + +
Additional Scroll Sepolia RPCs and Infra
+ - [Scroll Sepolia Native Bridge](https://sepolia.scroll.io/bridge) + - [Scroll Sepolia Rollup Scanner](https://sepolia.scroll.io/rollupscan) + - [Scroll Sepolia RPC Providers on ChainList.org](https://chainlist.org/chain/534351) + - [Ethereum Sepolia RPC Providers on ChainList.org](https://chainlist.org/chain/11155111) + - Additional Block Explorers: + - [Dora](https://www.ondora.xyz/network/scroll-sepolia/interactions) + - [L2Scan](https://scroll.l2scan.co/) + +
+ +### Scroll Sepolia Contracts + +#### Rollup + +- L1 Rollup (Scroll Chain): `0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0` + +#### ETH and ERC20 Bridge + - L1 ERC20 Gateway Router: `0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a` - L2 ERC20 Gateway Router: `0x9aD3c5617eCAa556d6E166787A97081907171230` -### Advanced Bridge Contracts +#### Advanced Bridge Contracts - Scroll Messenger - L1 Messenger: `0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A` @@ -54,7 +175,7 @@ import Aside from "../../../../components/Aside.astro" - Gas Oracle - L2 Gas Oracle (deployed on Sepolia): `0x247969F4fad93a33d4826046bc3eAE0D36BdE548` -### L2 Predeploys +#### L2 Predeploys - Message Queue: `0x5300000000000000000000000000000000000000` - Gas Price Oracle: `0x5300000000000000000000000000000000000002` @@ -62,9 +183,9 @@ import Aside from "../../../../components/Aside.astro" - WETH L2: `0x5300000000000000000000000000000000000004` - Transaction Fee Vault: `0x5300000000000000000000000000000000000005` -## Protocols on Sepolia +### Protocols -### Uniswap v3 +#### Uniswap v3 - Frontend website: [https://uniswap-showcase.sepolia.scroll.xyz/](https://uniswap-showcase.sepolia.scroll.xyz/) - Main Contracts @@ -82,19 +203,19 @@ import Aside from "../../../../components/Aside.astro" - v3StakerAddress: `0xe7b82794Cab21e665a3e6f8ea562d392AA6E0619` - quoterV2Address: `0xd5dd33650Ef1DC6D23069aEDC8EAE87b0D3619B2` -### Aave +#### Aave See this [Github gist](https://gist.github.com/dghelm/7fe68f0a524f30846e1142721c081d84). -## Additional Useful Contracts +### Additional Useful Contracts - Multicall3: `0xcA11bde05977b3631167028862bE2a173976CA11` -## Tokens +### Tokens - Gho Token: `0xD9692f1748aFEe00FACE2da35242417dd05a8615` diff --git a/src/content/docs/en/developers/transaction-fees-on-scroll.mdx b/src/content/docs/en/developers/transaction-fees-on-scroll.mdx index f9c4a48ea..8ce7c2f70 100644 --- a/src/content/docs/en/developers/transaction-fees-on-scroll.mdx +++ b/src/content/docs/en/developers/transaction-fees-on-scroll.mdx @@ -12,11 +12,11 @@ import Aside from "../../../../components/Aside.astro" ## Overview -Scroll Sepolia Testnet fees are notably lower than on its supporting layer. For users and developers, transaction fees on Scroll appear to work similarly to those on Ethereum mainnet, and existing tools, wallets, and code will likely work as if they were. However, the transaction fee shown in the wallet isn't the whole picture unless the software is specifically aware of Scroll's fee calculations. +Scroll fees are notably lower than on its supporting layer. For users and developers, transaction fees on Scroll appear to work similarly to those on Ethereum mainnet, and existing tools, wallets, and code will likely work as if they were. However, the transaction fee shown in the wallet isn't the whole picture unless the software is specifically aware of Scroll's fee calculations. Due to the design of L2 rollups, transaction costs depend on the L1's costs. To leverage Ethereum's security, Scroll must account for the cost of the transaction data and proofs that must be stored and verified on the L1. -Compared to Ethereum mainnet, Scroll Sepolia introduces some new dimensions to transaction fee calculation to do this. The final cost of a transaction is constructed from several parts: +Compared to Ethereum mainnet, Scroll introduces some new dimensions to transaction fee calculation to do this. The final cost of a transaction is constructed from several parts: - **L2 fee** - Calculated in the same manner as on the L1, equaling `gas_price * gas_used` @@ -60,7 +60,7 @@ Transactions aren't committed 1-by-1 -- they are collected in batches of blocks ### Estimating the L1 Data Fee -Scroll has a pre-deployed `L1GasPriceOracle`, accessible on Scroll Sepolia at ([`0x5300000000000000000000000000000000000002`](https://sepolia-blockscout.scroll.io/address/0x5300000000000000000000000000000000000002)). It provides a `getL1Fee` method to estimate the L1 data fee for a given transaction's raw data. +Scroll has a pre-deployed `L1GasPriceOracle`, accessible on both Scroll and Scroll Sepolia at ([`0x5300000000000000000000000000000000000002`](https://sepolia-blockscout.scroll.io/address/0x5300000000000000000000000000000000000002)). It provides a `getL1Fee` method to estimate the L1 data fee for a given transaction's raw data. ```solidity function getL1Fee(bytes memory _data) external view override returns (uint256); diff --git a/src/content/docs/en/developers/verifying-smart-contracts.mdx b/src/content/docs/en/developers/verifying-smart-contracts.mdx index 96cf78f82..8a3edfc6b 100644 --- a/src/content/docs/en/developers/verifying-smart-contracts.mdx +++ b/src/content/docs/en/developers/verifying-smart-contracts.mdx @@ -13,12 +13,13 @@ import ClickToZoom from "../../../../components/ClickToZoom.astro" import verify1 from "./_images/verify1.png" import CodeSample from "../../../../components/CodeSample/CodeSample.astro" -After deploying your smart contracts, it's important to verify your code on [our block explorer](https://sepolia-blockscout.scroll.io/). This can be done in an automated way using your developer tooling or using Blockscout's Web UI. +After deploying your smart contracts, it's important to verify your code on [our block explorer](https://scrollscan.com/) or the [Sepolia block explorer](https://sepolia-blockscout.scroll.io). -