From 56f084e5f90789f4e7a918415036ed2083c43e15 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:45:29 +0100 Subject: [PATCH 1/3] Proofreading: Use Linea section (#314) * proofreading for "Set up your wallet" * Proofreading - fund.md * Proofreading - how-to-bridge-eth.md --- docs/use-mainnet/bridges-of-linea/how-to-bridge-eth.md | 4 ++-- docs/use-mainnet/fund.md | 4 ++-- docs/use-mainnet/set-up-your-wallet.mdx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/use-mainnet/bridges-of-linea/how-to-bridge-eth.md b/docs/use-mainnet/bridges-of-linea/how-to-bridge-eth.md index 77336fdf5..4647c4d80 100644 --- a/docs/use-mainnet/bridges-of-linea/how-to-bridge-eth.md +++ b/docs/use-mainnet/bridges-of-linea/how-to-bridge-eth.md @@ -3,7 +3,7 @@ title: How to bridge ETH between Ethereum and Linea sidebar_position: 1 --- -This is a step by step guide on how to bridge ETH between Ethereum Mainnet (L1) to Linea (L2). +This is a step by step guide to bridging ETH between Ethereum Mainnet (L1) to Linea (L2). **To bridge ETH over testnet, simply click the testnet button at the bottom left of the [token bridge page](https://bridge.linea.build/) and follow the same steps as below.** @@ -149,7 +149,7 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no .default }> -3. Verify that the bridge is set to Linea Mainnet --> Ethereum. Manual claiming is the only available option for L2 to L1 bridging. +3. Verify that the bridge is set to Linea Mainnet -> Ethereum. Manual claiming is the only available option for L2 to L1 bridging. 4. Enter the amount of ETH you want to bridge over to Ethereum Mainnet, and select the “Start Bridging” button. diff --git a/docs/use-mainnet/fund.md b/docs/use-mainnet/fund.md index 77a8eb6fd..553a888ce 100644 --- a/docs/use-mainnet/fund.md +++ b/docs/use-mainnet/fund.md @@ -6,7 +6,7 @@ sidebar_position: 2 ## Getting tokens on Linea -For hackathon developers, the easiest way to get test token is by sending a message via https://xmtp.chat to an ENS name provided in the relevant hackathon prizes page. +For hackathon developers, the easiest way to get test tokens is by sending a message via https://xmtp.chat to an ENS name provided in the relevant hackathon prizes page. Otherwise, there are several ways to get tokens on Linea: @@ -35,7 +35,7 @@ To get Goerli ETH, you'll need to: 1. Navigate to the list of faucets linked through the Goerli card 1. Select a faucet and drip Goerli ETH -Transactions on Linea are much cheaper than Ethereum mainnet. Therefore, 0.2 ETH is enough to execute a basic workflow, but feel free to get as much as you need! +Transactions on Linea are much cheaper than Ethereum mainnet. 0.2 ETH is enough to execute a basic workflow, but feel free to get as much as you need! ## Get test ETH on Linea testnet diff --git a/docs/use-mainnet/set-up-your-wallet.mdx b/docs/use-mainnet/set-up-your-wallet.mdx index 43a091502..2502330fb 100644 --- a/docs/use-mainnet/set-up-your-wallet.mdx +++ b/docs/use-mainnet/set-up-your-wallet.mdx @@ -8,7 +8,7 @@ sidebar_position: 1 Linea is designed to be completely compatible with Ethereum. Because of that, **it works with MetaMask right out of the box**. (If you're not familiar with the identity manager, wallet, and web3 passport that is MetaMask, [get started here](https://support.metamask.io/hc/en-us/articles/360015489531)). -In fact, **the MetaMask extension wallet provides connections to Linea already built-in**. There's no special wallet setup necessary! The only thing you'll need to do is switch to Linea using the drop-down network switcher; if you need some pointers, follow [MetaMask's instructions here](https://support.metamask.io/hc/en-us/articles/16367251716251). +In fact, **the MetaMask extension wallet provides connections to Linea already built-in**. There's no special wallet setup necessary! The only thing you'll need to do is switch to Linea using the network switcher; if you need some pointers, follow [MetaMask's instructions here](https://support.metamask.io/hc/en-us/articles/16367251716251). All you need to interact with Linea is to download MetaMask, which you can **[install as a browser extension or mobile app](https://metamask.io/download/)**. @@ -16,7 +16,7 @@ All you need to interact with Linea is to download MetaMask, which you can **[in Linea Mainnet is **included in the available networks in MetaMask Extension and Mobile by default**. 💖🦊🚀 -In order to see Linea Goerli, you'll need to click on `Show/hide test networks`, as indicated in the image below. Afterwards, select the Linea Goerli network, and you're good to go. +In order to see Linea Goerli, you'll need to click on `Show test networks`, as indicated in the image below. Afterwards, select the Linea Goerli network, and you're good to go. Date: Tue, 3 Oct 2023 13:49:25 -0400 Subject: [PATCH 2/3] Update gas-fees.md (#312) * Update gas-fees.md * Update gas-fees.md * Update gas-fees.md * small changes --- docs/build-on-linea/gas-fees.md | 131 +++++++++++++++++--------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/docs/build-on-linea/gas-fees.md b/docs/build-on-linea/gas-fees.md index 253ac7241..78b754e10 100644 --- a/docs/build-on-linea/gas-fees.md +++ b/docs/build-on-linea/gas-fees.md @@ -3,7 +3,75 @@ title: Gas fees on Linea sidebar_position: 6 --- - If you're familiar with gas fees on Ethereum, then you know that they heavily fluctuate depending on how busy the network is (for a refresher on gas click [here](https://support.metamask.io/hc/en-us/articles/4404600179227-User-Guide-Gas#:~:text=A%20normal%20transaction%20sending%20ETH,transactions%20also%20cost%2021%2C000%20gas.)). Linea's gas fees depend on Ethereum's fee, and we will explain how the L2 fees are calculated, but the **TLDR is that Linea's gas fees should be around 1/15th of Ethereum's, and we hope to reduce them even further in the future.** + If you're familiar with gas fees on Ethereum, then you know that they heavily fluctuate depending on how busy the network is (for a refresher on gas click [here](https://support.metamask.io/hc/en-us/articles/4404600179227-User-Guide-Gas#:~:text=A%20normal%20transaction%20sending%20ETH,transactions%20also%20cost%2021%2C000%20gas.)). **Linea's gas fees on average should be 15x cheaper than Ethereum's, and we hope to reduce them even further in the future.** + + +## How do I make sure my transactions go through? + + Linea is compatible with EIP-1559; however, there are minor differences. + + 1. The base fee on Linea is fixed at 7 wei to ensure that blocks aren't over 50% full, so that we don't burn any ETH on Linea. + + 2. We don't mine a transaction if `gasPrice` or `maxPriorityFeePerGas` is lower than a given value that fluctuates over time. + +To ensure that your transaction gets included by the sequencer, we recommend using EIP-1559 with the following settings: + +- maxBaseFee = 1.35 * previousBlockMaxBaseFee + +- `maxPriorityFeePerGas` = reward value from eth_feeHistory( 5 blocks, latest, 20th percentile) + +You can use the `eth_feeHistory` RPC method with the params below to get the recommended values: + +```bash +curl https://linea-mainnet.infura.io/v3/your-api-key \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": [4, "latest", [20]] }' +``` + +## Example Code + +```typescript + + public async get1559Fees(percentile = this.gasEstimationPercentile): Promise { + const currentBlockNumber = await this.provider.getBlockNumber(); + if (this.cacheIsValidForBlockNumber.lt(currentBlockNumber)) { + const { reward, baseFeePerGas }: FeeHistory = await this.provider.send("eth_feeHistory", [ + "0x4", + "latest", + [percentile], + ]); + + const maxPriorityFeePerGas = reward + .reduce((acc: BigNumber, currentValue: string[]) => acc.add(currentValue[0]), BigNumber.from(0)) + .div(reward.length); + + if (maxPriorityFeePerGas && maxPriorityFeePerGas.gt(this.maxFeePerGasFromConfig)) { + throw new FeeEstimationError( + `Estimated miner tip of ${maxPriorityFeePerGas} exceeds configured max fee per gas of ${this.maxFeePerGasFromConfig}!`, + ); + } + + this.cacheIsValidForBlockNumber = BigNumber.from(currentBlockNumber); + + const maxFeePerGas = BigNumber.from(baseFeePerGas[baseFeePerGas.length - 1]) + .mul(2) + .add(maxPriorityFeePerGas); + + if (maxFeePerGas.gt(0) && maxPriorityFeePerGas.gt(0)) { + this.feesCache = { + maxPriorityFeePerGas, + maxFeePerGas: maxFeePerGas.gt(this.maxFeePerGasFromConfig) ? this.maxFeePerGasFromConfig : maxFeePerGas, + }; + } else { + this.feesCache = { + maxFeePerGas: this.maxFeePerGasFromConfig, + }; + } + } + return this.feesCache; + } +``` ## How do I check the gas price on Linea? @@ -29,63 +97,4 @@ curl https://mainnet.infura.io/v3/your-infura-api-key \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_gasPrice","params": [],"id":1}' -``` - -## The Formula - -**Total L2 Fee Equation** - -$$ -\text{total\_L2\_fee} = \text{L2\_base\_fee} + \text{L2\_miner\_tip} -$$ - -The L2 fee equation is comprised of two parts, the base fee and the miner tip. The base fee is 7 wei, which is the minimum base fee a standard protocol allows. The miner tip equation is a bit complex and will be explained in more detail below. - - -**L2 Miner Tip Equation** - -$$ -l2\_miner\_tip = \left( \sum_{i} (baseFee[i] \times 0.066 + reward[i] \times 0.066) \times ratio[i] \right) \div \left( \sum_{i} ratio[i] \right) -$$ - -Looking at this equation might seem overwhelming, but we are just calculating the weighted average to get the L2 miner tip. - -In this equation, the following variables are constants that could change in the future as we fine-tune our gas fee calculation: ```base_fee_coefficient = 0.066```, ```priority_fee_coefficient = 0.066```, ```batchSubmissionPercentile = 15```, and ```numBlocks = 200```. - -We use the [eth_feeHistory JSON-RPC method](https://docs.infura.io/networks/ethereum/json-rpc-methods/eth_feehistory) with the constant parameters given above to figure out what the 'baseFeePerGas', 'gasUsedRatio', and 'reward'is on Ethereum and then find the weighted average by plugging them into the equation. - -The request would look like the code below. - -```bash -curl https://mainnet.infura.io/v3/YOUR-API-KEY \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["200", "latest", [15]] }' - -``` - -## Example Calculation - -For practical purposes let's assume we ran the `eth_feeHistory` and used `numBlocks=3`, and got the following response: - -``` -{"jsonrpc":"2.0","id":1,"result":{"baseFeePerGas":["1001","1002","1003","1004"],"gasUsedRatio":[0.4,0.5,0.6],"oldestBlock":"0x113159b","reward":[["901"],["902"],["903"]]}} - -``` - -This maps to the following inputs for the equation: - -``` -baseFee = ["1001","1002","1003"] -reward= ["901", "902", "903"] -ratio = [0.4, 0.5, 0.6] - -``` - -Using the formula, we would iterate through all the values in the list, where i ranges from 1 to 3, to obtain: - -$$ -l2\_miner\_tip = \frac{{(1001 \times 0.66 + 901 \times 0.66) \times 0.4 + (1002 \times 0.66 + 902 \times 0.66) \times 0.5 + (1003 \times 0.66 + 903 \times 0.66) \times 0.6}}{{0.4 + 0.5 + 0.6}} -$$ - -After meticulously going through all this math, you should arrive at your gas price (if you do this for 200 blocks instead of 3). This should be close to the gas price the `eth_gasPrice` method returns from above. \ No newline at end of file +``` \ No newline at end of file From cc723d3016d28f612c8840cd48a1871756b9b468 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:38:31 +0100 Subject: [PATCH 3/3] Proofreading (#315) * proofreading for "Set up your wallet" * Proofreading - fund.md * Proofreading - how-to-bridge-eth.md * Proofreading - foundry.md * Proofreading - hardhat.mdx * Proofreading - remix.md * Proofreading - thirdweb.md * Proofreading - truffle.mdx * Proofreading - foundry.md (verify) * Proofreading - hardhat.md (verify) * Proofreading - truffle.md (verify) --- .../deploy-smart-contract/foundry.md | 6 ++--- .../deploy-smart-contract/hardhat.mdx | 12 +++++----- .../quickstart/deploy-smart-contract/remix.md | 6 ++--- .../deploy-smart-contract/thirdweb.md | 24 +++++++++---------- .../deploy-smart-contract/truffle.mdx | 4 ++-- .../verify-smart-contract/foundry.md | 10 ++++---- .../verify-smart-contract/hardhat.md | 6 ++--- .../verify-smart-contract/truffle.md | 4 ++-- 8 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/build-on-linea/quickstart/deploy-smart-contract/foundry.md b/docs/build-on-linea/quickstart/deploy-smart-contract/foundry.md index 660988963..d35f26812 100644 --- a/docs/build-on-linea/quickstart/deploy-smart-contract/foundry.md +++ b/docs/build-on-linea/quickstart/deploy-smart-contract/foundry.md @@ -13,7 +13,7 @@ Here's a video walkthrough: ## Prerequisites -Before you begin, Ensure you've: +Before you begin, ensure you've: 1. [Set up your wallet](../../../use-mainnet/set-up-your-wallet.mdx) 1. [Funded your wallet with Linea ETH](../../../use-mainnet/fund.md#get-test-eth-on-linea) @@ -53,7 +53,7 @@ These instructions use API keys and private keys inline. We highly recommend hid -To use Infura, you'll need to [get an API key](https://support.infura.io/hc/en-us/articles/15116941373979-Connecting-to-the-Linea-network) +To use Infura, you'll need to [get an API key](https://support.infura.io/hc/en-us/articles/15116941373979-Connecting-to-the-Linea-network). On testnet: @@ -113,7 +113,7 @@ Then, run: source .env ``` -Finally, we can modify the `foundry.toml` file to conveniently store the various rpc endpoints we might be working with. Add this section: +Finally, we can modify the `foundry.toml` file to conveniently store the various RPC endpoints we might be working with. Add this section: ```bash [rpc_endpoints] diff --git a/docs/build-on-linea/quickstart/deploy-smart-contract/hardhat.mdx b/docs/build-on-linea/quickstart/deploy-smart-contract/hardhat.mdx index bb2571a82..f09874ade 100644 --- a/docs/build-on-linea/quickstart/deploy-smart-contract/hardhat.mdx +++ b/docs/build-on-linea/quickstart/deploy-smart-contract/hardhat.mdx @@ -44,7 +44,7 @@ In the menu that appears, select `Create an empty hardhat.config.js` and press * Hardhat recommends using their plugin, `@nomicfoundation/hardhat-toolbox`, which can be downloaded by entering `Y` during the project creation process. -You should now have a sample project from Hardhat the deploys and test a `Lock` contract that locks funds for a set amount of time. +You should now have a sample project from Hardhat, the deploys, and test a `Lock` contract that locks funds for a set amount of time. :::note @@ -56,29 +56,29 @@ The default script in `scripts/deploy.js` locks 0.001 ETH in the contract upon d The sample project already includes the deployment script. To deploy on Linea, you'll just need to make a few modifications. -You can use [Truffle Dashboard](#truffle-dashboard) to deploy directly with your MetaMask wallet or deploy with the Hardhat CLI by [adding Linea to your `hardhat.config.js`](#hardhatconfigjs). +You can use [Truffle Dashboard](#truffle-dashboard) to deploy directly with your MetaMask wallet or deploy with the Hardhat CLI by [adding Linea to your `hardhat.config.js`](#use-hardhatconfigjs). ### Use Truffle Dashboard [Truffle Dashboard](https://trufflesuite.com/docs/truffle/how-to/use-the-truffle-dashboard/) allows you to forgo saving your private keys locally, instead connecting to your MetaMask wallet for deployments. To deploy with Truffle Dashboard using the [Hardhat plugin](https://github.com/trufflesuite/truffle/tree/develop/packages/dashboard-hardhat-plugin#truffledashboard-hardhat-plugin): 1. [Install Truffle using the recommended installation procedure](https://trufflesuite.com/docs/truffle/how-to/install/) -1. Run +1. Run: ``` npm install --save-dev @truffle/dashboard-hardhat-plugin ``` -1. Import the plugin into `hardhat.config.js` +1. Import the plugin into `hardhat.config.js`, with: ```javascript import "@truffle/dashboard-hardhat-plugin"; ``` - or + or: ```javascript require("@truffle/dashboard-hardhat-plugin"); ``` 1. Run `truffle dashboard` in your terminal, which will open a window on port `24012`. -1. Navigate to `localhost:24012` in your browser. Please ensure that Dashboard is connected to the Linea testnet or mainnet by connecting your MetaMask wallet to Linea. For reference, the Linea testnet network ID is `59140`. +1. Navigate to `localhost:24012` in your browser. Please ensure that your Truffle Dashboard is connected to the Linea testnet or mainnet by connecting your MetaMask wallet to Linea. For reference, the Linea testnet network ID is `59140`. For additional information on Deploy, please reference [thirdweb’s documentation](https://portal.thirdweb.com/deploy). +> For additional information on `deploy`, please reference [thirdweb’s documentation](https://portal.thirdweb.com/deploy). If you have any further questions or encounter any issues during the process, please [reach out to thirdweb support](https://support.thirdweb.com). diff --git a/docs/build-on-linea/quickstart/deploy-smart-contract/truffle.mdx b/docs/build-on-linea/quickstart/deploy-smart-contract/truffle.mdx index 29d516112..f0f864b63 100644 --- a/docs/build-on-linea/quickstart/deploy-smart-contract/truffle.mdx +++ b/docs/build-on-linea/quickstart/deploy-smart-contract/truffle.mdx @@ -75,7 +75,7 @@ You can check if it compiles by running `truffle compile` from the root folder. ## Write the migration script -To tell Truffle how, and in what order we want to deploy our smart contracts, we need to write a migration script. +To tell Truffle how we want to deploy our smart contracts, and in what order, we need to write a migration script. Create `1_deploy_token.js` in the `migrations` directory, and add the following code: @@ -117,7 +117,7 @@ Truffle allows you to deploy through the [Truffle Dashboard](#truffle-dashboard) ### truffle-config.js -You can deploy with Truffle using the command line, by specifying the Linea in `truffle-config.js`. To do so, you need to: +You can deploy with Truffle using the command line, by specifying Linea testnet in `truffle-config.js`. To do so, you need to: 1. Create a `.env` file in the root folder with your wallet's mnemonic. This is your [secret recovery phrase](https://support.metamask.io/hc/en-us/articles/360015290032-How-to-reveal-your-Secret-Recovery-Phrase). diff --git a/docs/build-on-linea/quickstart/verify-smart-contract/foundry.md b/docs/build-on-linea/quickstart/verify-smart-contract/foundry.md index 6428145cb..3a57988ab 100644 --- a/docs/build-on-linea/quickstart/verify-smart-contract/foundry.md +++ b/docs/build-on-linea/quickstart/verify-smart-contract/foundry.md @@ -5,7 +5,7 @@ title: Foundry import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -To verify your Foundry contracts, you can use Foundry's [verify-contract](https://book.getfoundry.sh/reference/forge/forge-verify-contract) to verify contracts on Lineascan. +To verify your Foundry contracts, you can use Foundry's [`verify-contract`](https://book.getfoundry.sh/reference/forge/forge-verify-contract) to verify contracts on Lineascan. You'll need to get a Lineascan (Linea instance of Etherscan) API key by creating an account at [https://lineascan.build/myapikey](https://lineascan.build/myapikey). @@ -13,7 +13,7 @@ You'll need to get a Lineascan (Linea instance of Etherscan) API key by creating :::note -These instructions verify using Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). +These instructions verify using the Linea instance of Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). ::: @@ -60,7 +60,7 @@ Contract successfully verified ### Verify a contract upon creation -If you want to verify a contract that has already been deployed, you can use the following commands: +If you want to verify a contract as it is being deployed for the first time, you can use the following commands: @@ -84,7 +84,7 @@ You can check that it was verified correctly by navigating to the [testnet block ## Using `.env` and `foundry.toml` to store etherscan information -If you don't want to paste your keys inline and have multiple etherscan API keys to manage, you can use `.env` and `foundry.toml` to set up custom configurations. +If you don't want to paste your keys inline and have multiple Etherscan API keys to manage, you can use `.env` and `foundry.toml` to set up custom configurations. Assuming you followed the instructions to create a `.env` file [here](../deploy-smart-contract/foundry.md#using-env-to-store-private-keys), add your Lineascan API key to the file: @@ -98,7 +98,7 @@ Then, run: source .env ``` -Finally, modify `foundry.toml` to include the etherscan configurations: +Finally, modify `foundry.toml` to include the Etherscan configurations: ```bash [etherscan] diff --git a/docs/build-on-linea/quickstart/verify-smart-contract/hardhat.md b/docs/build-on-linea/quickstart/verify-smart-contract/hardhat.md index 6fdee3f57..dce4553e3 100644 --- a/docs/build-on-linea/quickstart/verify-smart-contract/hardhat.md +++ b/docs/build-on-linea/quickstart/verify-smart-contract/hardhat.md @@ -18,7 +18,7 @@ If you aren't already using `@nomicfoundation/hardhat-toolbox`, you can use `@no ## Add your Lineascan API Key -We'll be using a `.env` file to store our sensitive information. You can find instructions on how to do so [here](../deploy-smart-contract/hardhat.mdx#use-hardhatconfigjs). +We'll be using a `.env` file to store our sensitive information. You can find instructions on how to set up the file [here](../deploy-smart-contract/hardhat.mdx#use-hardhatconfigjs). Next, you'll need to get a Lineascan (Linea instance of Etherscan) key by creating an account at [https://lineascan.build/myapikey](https://lineascan.build/myapikey). Grab your key, and add it to the `.env` file: @@ -36,7 +36,7 @@ const { PRIVATE_KEY, LINEASCAN_API_KEY } = process.env; :::note -These instructions verify using Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). +These instructions verify using the Linea instance of Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). ::: @@ -100,7 +100,7 @@ etherscan: { :::note -The Etherscan apiKey and network name for your custom chain must match the network name under `networks` in your `hardhat.config.js`. +The Etherscan `apiKey` and network name for your custom chain must match the network name under `networks` in your `hardhat.config.js`. ::: diff --git a/docs/build-on-linea/quickstart/verify-smart-contract/truffle.md b/docs/build-on-linea/quickstart/verify-smart-contract/truffle.md index d3f3a721a..38b4ab19c 100644 --- a/docs/build-on-linea/quickstart/verify-smart-contract/truffle.md +++ b/docs/build-on-linea/quickstart/verify-smart-contract/truffle.md @@ -8,7 +8,7 @@ These steps assume you stored your secret keys in a `.env` file, which you can r :::note -These instructions verify using Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). +These instructions verify using the Linea instance of Etherscan, which currently does not support Yul. If you would like to verify using Blockscout, please use the API URLs referenced [here](../../../use-mainnet/info-contracts.md#block-explorers). ::: @@ -158,6 +158,6 @@ Verifying contracts on sourcify -You can check that it was verified correctly by navigating to the [block explorer](https://lineascan.build/) and pasting in the deployed contract address. +You can check that it was verified correctly by navigating to the block explorer ([mainnet](https://lineascan.build/) or [testnet](https://goerli.lineascan.build/)) and pasting in the deployed contract address. ![verified contract](./../../../../static/img/docs/build-on-linea/quickstart/verify-smart-contract/lineascan_verification.png)