From 5f62da7e80b88bda87e9866fe45e9cf203ba33b1 Mon Sep 17 00:00:00 2001
From: Joel Willmore <95916148+jlwllmr@users.noreply.github.com>
Date: Mon, 4 Nov 2024 09:45:48 +0000
Subject: [PATCH] Remove user-focused content (#793)
* Remove community section
* Relocate glossary and add redirects
* Remove /users
* Adjust navbar
* Adjust sidebar and footer
* Address broken links
* Update links and file types
* External redirects
* Build and reinstate paths to enable redirects
* Update RedirectPage.js and apply component to relevant pages
* Amend redirects
* fixing missing circle
* jank initial script for reading URL and highlighting nabar item
* Remove directory, update Vercel redirects, adjust sidebar
* Amend JSON formatting
* fixing navbar highlighting for real
* Edit
* edit 2
---------
Co-authored-by: sammysango <136692631+sammysango@users.noreply.github.com>
---
.gitignore | 1 +
docs/developers/community/hackathons.mdx | 164 ------------
.../community/irys/irys-dynamic-nfts.mdx | 2 +-
.../guides/community/irys/irys-nfts.mdx | 2 +-
docs/developers/guides/run-a-node/besu.mdx | 3 +-
.../guides/run-a-node/bootnodes.mdx | 2 +-
docs/developers/guides/run-a-node/erigon.mdx | 3 +-
docs/developers/guides/run-a-node/geth.mdx | 3 +-
.../guides/run-a-node/linea-besu.mdx | 1 +
.../deploy-smart-contract/atlas.mdx | 7 -
.../{cookbook.md => cookbook.mdx} | 11 +-
.../{foundry.md => foundry.mdx} | 10 +-
.../deploy-smart-contract/hardhat.mdx | 8 +-
.../{remix.md => remix.mdx} | 7 -
docs/developers/quickstart/index.mdx | 5 +-
.../{atlas.md => atlas.mdx} | 0
.../{foundry.md => foundry.mdx} | 2 +-
.../{hardhat.md => hardhat.mdx} | 0
docs/users/index.mdx | 22 --
docs/users/linea-voyage/index.mdx | 8 -
docs/users/linea-voyage/linea-surge/index.mdx | 21 --
.../linea-surge/linea-surge-model.mdx | 250 ------------------
.../linea-surge/linea-surge-overview.mdx | 65 -----
docs/users/linea-voyage/lxp/index.mdx | 149 -----------
docs/users/move-funds/bridge.mdx | 42 ---
docs/users/move-funds/fund.mdx | 78 ------
docs/users/move-funds/index.mdx | 8 -
docs/users/move-funds/set-up-your-wallet.mdx | 70 -----
.../zero-knowledge-glossary/index.mdx | 0
docusaurus.config.js | 99 ++-----
sidebars.js | 94 ++-----
src/components/HomepageCards/index.tsx | 7 +-
src/css/custom.css | 38 +--
static/img/socialCards/besu.jpg | Bin 0 -> 78222 bytes
static/img/socialCards/bootnodes.jpg | Bin 0 -> 82854 bytes
static/img/socialCards/erigon.jpg | Bin 0 -> 78986 bytes
static/img/socialCards/geth.jpg | Bin 0 -> 78085 bytes
static/img/socialCards/linea-besu.jpg | Bin 0 -> 81943 bytes
static/js/navbarHighlight.js | 84 ++++++
vercel.json | 55 ++++
40 files changed, 224 insertions(+), 1097 deletions(-)
delete mode 100644 docs/developers/community/hackathons.mdx
rename docs/developers/quickstart/deploy-smart-contract/{cookbook.md => cookbook.mdx} (96%)
rename docs/developers/quickstart/deploy-smart-contract/{foundry.md => foundry.mdx} (90%)
rename docs/developers/quickstart/deploy-smart-contract/{remix.md => remix.mdx} (90%)
rename docs/developers/quickstart/verify-smart-contract/{atlas.md => atlas.mdx} (100%)
rename docs/developers/quickstart/verify-smart-contract/{foundry.md => foundry.mdx} (98%)
rename docs/developers/quickstart/verify-smart-contract/{hardhat.md => hardhat.mdx} (100%)
delete mode 100644 docs/users/index.mdx
delete mode 100644 docs/users/linea-voyage/index.mdx
delete mode 100644 docs/users/linea-voyage/linea-surge/index.mdx
delete mode 100644 docs/users/linea-voyage/linea-surge/linea-surge-model.mdx
delete mode 100644 docs/users/linea-voyage/linea-surge/linea-surge-overview.mdx
delete mode 100644 docs/users/linea-voyage/lxp/index.mdx
delete mode 100644 docs/users/move-funds/bridge.mdx
delete mode 100644 docs/users/move-funds/fund.mdx
delete mode 100644 docs/users/move-funds/index.mdx
delete mode 100644 docs/users/move-funds/set-up-your-wallet.mdx
rename docs/{users => }/zero-knowledge-glossary/index.mdx (100%)
create mode 100644 static/img/socialCards/besu.jpg
create mode 100644 static/img/socialCards/bootnodes.jpg
create mode 100644 static/img/socialCards/erigon.jpg
create mode 100644 static/img/socialCards/geth.jpg
create mode 100644 static/img/socialCards/linea-besu.jpg
create mode 100644 static/js/navbarHighlight.js
diff --git a/.gitignore b/.gitignore
index a227d28f6..21c2cc965 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@
# Misc
.DS_Store
+.env
.env.local
.env.development.local
.env.test.local
diff --git a/docs/developers/community/hackathons.mdx b/docs/developers/community/hackathons.mdx
deleted file mode 100644
index 455d81008..000000000
--- a/docs/developers/community/hackathons.mdx
+++ /dev/null
@@ -1,164 +0,0 @@
----
-title: Hackathons
-image: /img/socialCards/hackathons.jpg
----
-
-Looking to hack on Linea and win some bounties? Here's the page where you can find all the information you need to know to get started!
-
-All winners have the opportunity to bring their project to fruition through a variety of Consensys programs:
-
-- Linea Ecosystem Investment Alliance
-- MetaMask Grants DAO
-- Consensys Scale program
-- Linea Builders Club
-
-And be featured on [X](https://twitter.com/lineabuild), [Linea Farcaster](https://warpcast.com/linea), and livestreams!
-
-:::info
-[**Get started through the Linea Builder Launchpad**](https://aspecta.id/builder-matrix/Linea-builder-launchpad)
-to find the one-stop shop for claiming builder NFTs, applying for the Linea Builders Club, getting
-access to developer workshops, and other Linea developer activations.
-
-[**Apply for the Linea Builders Club**](https://linea.deform.cc/linea-builders-club) to get exclusive
-access to tech talks, events, the Linea team, and more!
-
-[**Join the Consensys Developer Chat**](https://t.me/+rI-iPLacQXQ5MDVh) for IRL hackathons and get
-connected with the MetaMask, Phosphor, and Verax teams!
-:::
-
-## Helpful links
-
-- **Get test ETH and get help**
- - Use our [faucet or bridge to get mainnet or testnet ETH](../../users/move-funds/index.mdx). Otherwise, [ping us in our Telegram channel](https://t.me/+JMGAPixWzKQyMDY5) or find us IRL at the hackathon to request test ETH directly!
-- **Deploy a smart contract**
- - Follow our [step-by-step quickstart on how to deploy and verify a smart contract](../../developers/quickstart) with a variety of tools like Hardhat, Foundry, and more!
-- **Get access to Verax private beta**
- - Send your account address in our [Telegram chat](https://t.me/+rI-iPLacQXQ5MDVh) to get access to Verax private beta! Here's a [quick tutorial](https://docs.ver.ax/verax-documentation/developer-guides/tutorials/from-a-schema-to-an-attestation) on how to leverage Verax.
-- [**Walkthroughs and use cases**](https://youtube.com/playlist?list=PLJ06SwdM0bLrA-3EGRji4W0QI8fyA8PyW&si=vQsXrtFVUsXhygJ0)
-- [**Tutorials and guides**](../guides/community/index.mdx)
-
-## The Linea Dev Cook-Off
-
-**Create, Iterate, and Innovate!** :frog:
-
-Every month, Linea will host a mini, online buildathon to celebrate and reward continuous hacking!
-We will have a $10,000 prize pool to distribute to qualified projects.
-
-You can create a new project, iterate on an ongoing one, or revive and refresh that old side
-project you've been wanting to get back to.
-
-That means you don't need to start from scratch! The only requirement is that you're building with
-Linea, made progress on your project in the current month, and you've posted about your project on
-social (and included a frog somewhere)!
-
-This is a great opportunity to win some small prizes alongside your regular building, improve on
-past hackathon projects, and get exposure to the Linea team and community!
-
-Literally, win cool prizes for just shipping.
-
-
-
-
-
-
-
-#### Things to note
-- You can submit on behalf of a formal organization (profit-seeking company or DAO), but priority will be given to independent hackers
-- You can make multiple submissions
-- You can use old code!
-- Bonus points for adding a frog somewhere in your submission :wink: :frog:
-- Bonus points will be awarded to projects that incorporate the partner [tooling](../tooling/index.mdx)
-
-#### Examples of acceptable work
-- Flappy bird, but with frogs :frog: and on-chain
-- A step-by-step, published tutorial on how to build a (maybe frog-themed :frog:) dapp on Linea
-- A translated guide on how to build on Linea
-- A published video explainer on how to build with Linea or Linea concepts
-- Improving the UI of a hackathon project you built before
-- A Dune dashboard demonstrating something cool about Linea activity
-- An [onthis.xyz](https://onthis.xyz) shortcut to improve onchain UX
-
-#### Judging criteria
-- Functionality and technicality - How complete and complex is the project?
-- Really great UX - How easy is it for a new user to navigate or how easy it is to follow the tutorial?
-- Originality - How original and innovative is the project? Is it pushing the boundaries of on-chain use cases?
-- Goshdarnit this is cool - A catch-all vibe check for projects that are simply fun to interact with
-
-#### What counts as a qualifying submission
-
-If you're submitting a dapp or Farcaster frame...
-- Open source, public Github repo
-- Non-trivial progress made on your project during that month (as measured by your Github commit history)
-- Verified smart contract deployed on Linea Sepolia or Linea Mainnet
-- Working product demo link
-- Short video explainer and demo (less than 5 minutes) of your project and, if it's not a new project, what changes you made that month
-- Posted and tagged on Twitter ([@lineabuild](http://x.com/lineabuild)) or Farcaster ([@linea](https://warpcast.com/linea))
-
-If you're submitting a tutorial...
-- Open source, public Github repo
-- Published tutorial link
-- Non-trivial progress made on your project during that month (as measured by your Github commit history)
-- Bonus points for publishing an accompanying video explainer
-- Posted and tagged on Twitter ([@lineabuild](http://x.com/lineabuild)) or Farcaster ([@linea](https://warpcast.com/linea))
-
-If you're submitting a Dune analytics dashboard...
-- Dune dashboard link
-- Non-trivial progress made on your project during that month
-- Posted and tagged on Twitter ([@lineabuild](http://x.com/lineabuild)) or Farcaster ([@linea](https://warpcast.com/linea))
-
-Ultimately, a "high-quality" submission is quite subjective, but you can imagine invalid submissions as something like unusable demos, projects that are simply slightly modified clones of other projects, and otherwise scrapped together hacks that took little to no effort to put together.
-
-#### How to submit
-
-Register and submit [**here**](https://www.hackquest.io/en/hackathon/explore/Linea-Oct-Nov-Dev-Cook-off)
-
-### October-November 2024 (10,000 USDT in prizes!) :frog:
-
-This month, you can win a share of an 5,000 USDT prize pool for general track submissions, or a
-share of another 5,000 USDT pool for integrating Verax/Hemera. [See the Hackquest page](https://www.hackquest.io/en/hackathon/explore/Linea-Oct-Nov-Dev-Cook-off).
-
-**Due 23:59(GMT+8), November 30, 2024**
-
-#### General track: 5,000 USDT prize pool
-
-We'll be distributing 5,000 USDT amongst the top qualified projects. This can take the form of two
-outstanding projects receiving 2,500 USDT each, 10 projects receiving 500 USDT each, or, in the case
-that no submissions meet our quality bar, no prize being distributed for that month.
-
-#### Verax/Hemera track: 5,000 USDT prize pool
-
-There are five themes we suggest for hackers trying to integrate with Verax/Hemera. Prize money
-will be distributed among qualifying projects that successfully integrate with Verax/Hemera, based
-on these themes:
-
-- Theme 1: Linea Ecosystem Data Analytics App/Dashboard
-- Theme 2: SocialFi
-- Theme 3: DeFi
-- Theme 4: GameFi
-- Theme 5: DiD (Decentralized Identity)
-
-For more detailed information about building for his track, please refer to the "Verax/Hemera
-Themes” section on [Hackquest](https://www.hackquest.io/en/hackathon/explore/Linea-Oct-Nov-Dev-Cook-off).
-
-:::note
-A full list of additional resources is available on Hackquest.
-:::
-
-#### Blockchain for Good Award (BGA): up to 500 USDT
-
-The BGA award of 300-500 USDT is available on top of the main 5,000 USDT prize pool for this track,
-awarded for projects that meet one or more of the UN's 17 Sustainable Development Goals, and
-available for 1-2 projects
-
-Entry is optional. To enter, however, you do not need to submit or prepare any additional materials.
-
-## Other hackathons
-
-Look forward to finding us IRL at:
-- [ETHGlobal Bangkok](https://ethglobal.com/events/bangkok)
-- [Builder Nights Bangkok](https://lu.ma/80mtze59)
-- [Devcon Bangkok](https://devcon.org/en/)
-- [ETHDenver](https://www.ethdenver.com/)
diff --git a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx
index 5237f5e81..a9fbb9833 100644
--- a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx
+++ b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx
@@ -84,7 +84,7 @@ contract SuperMon is ERC721URIStorage {
```
-[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.md), or
+[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), or
[any other environment](https://docs.linea.build/developers/quickstart/deploy-smart-contract).
## Upload the images
diff --git a/docs/developers/guides/community/irys/irys-nfts.mdx b/docs/developers/guides/community/irys/irys-nfts.mdx
index f4db89899..6704db60d 100644
--- a/docs/developers/guides/community/irys/irys-nfts.mdx
+++ b/docs/developers/guides/community/irys/irys-nfts.mdx
@@ -24,7 +24,7 @@ offchain actions.
If you're new to NFTs and smart contract development, consider deploying
one of [the audited ThirdWeb contracts](../../../../developers/quickstart/deploy-smart-contract/thirdweb.md) to learn more.
-You can also [deploy this minimal contract using Remix](../../../../developers/quickstart/deploy-smart-contract/remix.md).
+You can also [deploy this minimal contract using Remix](../../../../developers/quickstart/deploy-smart-contract/remix.mdx).
```solidity
// SPDX-License-Identifier: MIT
diff --git a/docs/developers/guides/run-a-node/besu.mdx b/docs/developers/guides/run-a-node/besu.mdx
index 67b7ba3bf..e3f87a7b3 100644
--- a/docs/developers/guides/run-a-node/besu.mdx
+++ b/docs/developers/guides/run-a-node/besu.mdx
@@ -1,6 +1,7 @@
---
title: Besu
description: Install the Besu client to run a Linea node.
+image: /img/socialCards/besu.jpg
---
import Tabs from "@theme/Tabs";
@@ -192,4 +193,4 @@ You should get a result similar to:
"highestBlock": "0x3cedec"
}
}
-```
\ No newline at end of file
+```
diff --git a/docs/developers/guides/run-a-node/bootnodes.mdx b/docs/developers/guides/run-a-node/bootnodes.mdx
index acb1d3142..8c6edfbfd 100644
--- a/docs/developers/guides/run-a-node/bootnodes.mdx
+++ b/docs/developers/guides/run-a-node/bootnodes.mdx
@@ -1,7 +1,7 @@
---
title: Bootnodes
description: Bootnodes available for Linea Mainnet
-image: /img/socialCards/edge-nodes.jpg
+image: /img/socialCards/bootnodes.jpg
---
The following bootnodes enable your node to find a peer node when initializing. To
diff --git a/docs/developers/guides/run-a-node/erigon.mdx b/docs/developers/guides/run-a-node/erigon.mdx
index fe694694d..15fee814a 100644
--- a/docs/developers/guides/run-a-node/erigon.mdx
+++ b/docs/developers/guides/run-a-node/erigon.mdx
@@ -1,6 +1,7 @@
---
title: Erigon
description: Install the Erigon client to run a Linea node.
+image: /img/socialCards/erigon.jpg
---
import Tabs from "@theme/Tabs";
@@ -211,4 +212,4 @@ You should get a result similar to:
"highestBlock": "0x3cedec"
}
}
-```
\ No newline at end of file
+```
diff --git a/docs/developers/guides/run-a-node/geth.mdx b/docs/developers/guides/run-a-node/geth.mdx
index e70d5206a..cb3e1c593 100644
--- a/docs/developers/guides/run-a-node/geth.mdx
+++ b/docs/developers/guides/run-a-node/geth.mdx
@@ -1,6 +1,7 @@
---
title: Geth
description: Install the Geth client to run a Linea node.
+image: /img/socialCards/geth.jpg
---
import Tabs from "@theme/Tabs";
@@ -222,4 +223,4 @@ You should get a result similar to:
"highestBlock": "0x3cedec"
}
}
-```
\ No newline at end of file
+```
diff --git a/docs/developers/guides/run-a-node/linea-besu.mdx b/docs/developers/guides/run-a-node/linea-besu.mdx
index 977d33957..04389c7ca 100644
--- a/docs/developers/guides/run-a-node/linea-besu.mdx
+++ b/docs/developers/guides/run-a-node/linea-besu.mdx
@@ -1,6 +1,7 @@
---
title: Linea Besu
description: Install the Besu client to run a Linea node.
+image: /img/socialCards/linea-besu.jpg
---
import Tabs from "@theme/Tabs";
diff --git a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx
index be16f7c45..eceebf420 100644
--- a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx
+++ b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx
@@ -6,13 +6,6 @@ image: /img/socialCards/atlas.jpg
Atlas is a browser-based IDE with an integrated AI assistant that allows you to write, test and deploy smart contracts directly from your browser.
-## Prerequisites
-
-Before you begin, ensure you:
-
-1. [Set up your wallet](../../../users/move-funds/set-up-your-wallet.mdx).
-1. [Fund your wallet with Linea ETH](../../../users/move-funds/fund.mdx) on either the testnet or mainnet.
-
## Deploy a contract
1. Go to `https://app.atlaszk.com`.
diff --git a/docs/developers/quickstart/deploy-smart-contract/cookbook.md b/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx
similarity index 96%
rename from docs/developers/quickstart/deploy-smart-contract/cookbook.md
rename to docs/developers/quickstart/deploy-smart-contract/cookbook.mdx
index 158dec531..fc211f490 100644
--- a/docs/developers/quickstart/deploy-smart-contract/cookbook.md
+++ b/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx
@@ -13,13 +13,6 @@ fast way to develop smart contracts by integrating with a variety of blockchain-
Here, we'll walk through searching for a protocol on Cookbook and deploying it to Linea using
Cookbook's no-code deploy and using Cookbook with Remix, Hardhat and Foundry.
-## Prerequisites
-
-Before you begin, ensure you:
-
-1. [Set up your wallet](../../../users/move-funds/set-up-your-wallet.mdx)
-2. [Fund your wallet with Linea ETH](../../../users/move-funds/fund.mdx) on either the testnet or mainnet
-
## Search Cookbook's smart contract registry
Navigate to [cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?utm=lineadocs) and explore **Protocols** on Linea, or search for specific smart contracts in the search bar.
@@ -94,7 +87,7 @@ automatically be opened in a new Remix workspace.
Select **Compile** to compile your smart contract in Remix. Most contracts opened with Cookbook will automatically
compile within Remix.
-Refer to the [Remix instructions](./remix.md) for more information on how to compile and deploy smart
+Refer to the [Remix instructions](./remix.mdx) for more information on how to compile and deploy smart
contracts in the Remix IDE.
### Method 2 - Use the Cookbook Remix plug-in within the Remix IDE
@@ -137,7 +130,7 @@ contracts in the Remix IDE.
-1. Compile and deploy the smart contract as described in [the Remix instructions](./remix.md).
+1. Compile and deploy the smart contract as described in [the Remix instructions](./remix.mdx).
## Deploy your smart contract with Hardhat
diff --git a/docs/developers/quickstart/deploy-smart-contract/foundry.md b/docs/developers/quickstart/deploy-smart-contract/foundry.mdx
similarity index 90%
rename from docs/developers/quickstart/deploy-smart-contract/foundry.md
rename to docs/developers/quickstart/deploy-smart-contract/foundry.mdx
index 76b74d5a4..346f543a5 100644
--- a/docs/developers/quickstart/deploy-smart-contract/foundry.md
+++ b/docs/developers/quickstart/deploy-smart-contract/foundry.mdx
@@ -21,17 +21,13 @@ In this quickstart, we'll create a basic [Foundry](https://book.getfoundry.sh/)
## Prerequisites
-Before you begin, ensure you:
-
-1. [Set up your wallet](../../../users/move-funds/set-up-your-wallet.mdx)
-1. [Fund your wallet with Linea ETH](../../../users/move-funds/fund.mdx) on either the testnet, or mainnet
-1. Download and install Foundry:
+Before you begin, ensure you download and install Foundry:
```bash
curl -L https://foundry.paradigm.xyz | bash
```
- Then, open a new terminal, and call `foundryup` to install the latest release.
+Then, open a new terminal, and call `foundryup` to install the latest release.
## Create a Foundry project
@@ -131,4 +127,4 @@ forge create --rpc-url linea-sepolia src/Counter.sol:Counter --private-key $PRIV
-Next, you can optionally [verify your contract on the network](../verify-smart-contract/foundry.md).
+Next, you can optionally [verify your contract on the network](../verify-smart-contract/foundry.mdx).
diff --git a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx
index f649f838d..776621053 100644
--- a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx
+++ b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx
@@ -11,11 +11,7 @@ In this quickstart, we'll create a basic [Hardhat](https://hardhat.org/) project
## Prerequisites
-Before you begin, ensure you:
-
-1. [Set up your wallet](../../../users/move-funds/set-up-your-wallet.mdx).
-2. [Fund your wallet with Linea ETH](../../../users/move-funds/fund.mdx) on either testnet, or mainnet.
-3. [Set up your environment using Hardhat's recommended instructions](https://hardhat.org/tutorial/setting-up-the-environment#2.-setting-up-the-environment).
+Before you begin, ensure you set up your environment using Hardhat's recommended instructions](https://hardhat.org/tutorial/setting-up-the-environment#2.-setting-up-the-environment).
## Create a Hardhat project
@@ -159,4 +155,4 @@ Deployed Addresses
LockModule#Lock - 0x2c73d6f093A2032D3371bFB9a29f7cE666080c4A
```
-Next, you can optionally [verify your contract on the network](../verify-smart-contract/hardhat.md).
+Next, you can optionally [verify your contract on the network](../verify-smart-contract/hardhat.mdx).
diff --git a/docs/developers/quickstart/deploy-smart-contract/remix.md b/docs/developers/quickstart/deploy-smart-contract/remix.mdx
similarity index 90%
rename from docs/developers/quickstart/deploy-smart-contract/remix.md
rename to docs/developers/quickstart/deploy-smart-contract/remix.mdx
index 173cfbd5d..e9a58620f 100644
--- a/docs/developers/quickstart/deploy-smart-contract/remix.md
+++ b/docs/developers/quickstart/deploy-smart-contract/remix.mdx
@@ -8,13 +8,6 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
In this tutorial, we'll walk through creating a basic Remix project and deploying a sample contract.
-## Prerequisites
-
-Before you begin, ensure you:
-
-1. [Set up your wallet](../../../users/move-funds/set-up-your-wallet.mdx)
-2. [Fund your wallet with Linea ETH](../../../users/move-funds/fund.mdx) on either the testnet, or mainnet
-
## Explore the Remix workspace
To start using Remix, navigate to their [website](https://remix.ethereum.org/). The default project includes a
diff --git a/docs/developers/quickstart/index.mdx b/docs/developers/quickstart/index.mdx
index 53033a4cc..ae05d127e 100644
--- a/docs/developers/quickstart/index.mdx
+++ b/docs/developers/quickstart/index.mdx
@@ -12,8 +12,9 @@ It's always best practice to work on a test network before deploying a contract
Before you begin, ensure you've:
-1. [Set up your wallet](../../users/move-funds/set-up-your-wallet.mdx).
-2. [Funded your wallet with Linea ETH](../../users/move-funds/fund.mdx) on either the testnet or mainnet.
+1. [Set up your wallet](https://support.metamask.io/getting-started/getting-started-with-metamask/).
+2. Funded your wallet with Linea ETH, either through [bridging](../guides/bridge/index.mdx) or using
+an on-ramp such as [MetaMask Portfolio](https://portfolio.metamask.io/buy).
## Resources
diff --git a/docs/developers/quickstart/verify-smart-contract/atlas.md b/docs/developers/quickstart/verify-smart-contract/atlas.mdx
similarity index 100%
rename from docs/developers/quickstart/verify-smart-contract/atlas.md
rename to docs/developers/quickstart/verify-smart-contract/atlas.mdx
diff --git a/docs/developers/quickstart/verify-smart-contract/foundry.md b/docs/developers/quickstart/verify-smart-contract/foundry.mdx
similarity index 98%
rename from docs/developers/quickstart/verify-smart-contract/foundry.md
rename to docs/developers/quickstart/verify-smart-contract/foundry.mdx
index 9e99d2b69..85f7c6c6c 100644
--- a/docs/developers/quickstart/verify-smart-contract/foundry.md
+++ b/docs/developers/quickstart/verify-smart-contract/foundry.mdx
@@ -89,7 +89,7 @@ If you don't want to paste your keys inline and have multiple Etherscan API keys
the `.env` and `foundry.toml` files to set up custom configurations.
These steps assume you stored your secret keys in a `.env` file. which you can read more about
-[in the Foundry deployment instructions](../deploy-smart-contract/foundry.md#deploy-a-smart-contract-using-a-env-file).
+[in the Foundry deployment instructions](../deploy-smart-contract/foundry.mdx#deploy-a-smart-contract-using-a-env-file).
```bash
LINEASCAN_API_KEY=YOUR_LINEASCAN_API_KEY
diff --git a/docs/developers/quickstart/verify-smart-contract/hardhat.md b/docs/developers/quickstart/verify-smart-contract/hardhat.mdx
similarity index 100%
rename from docs/developers/quickstart/verify-smart-contract/hardhat.md
rename to docs/developers/quickstart/verify-smart-contract/hardhat.mdx
diff --git a/docs/users/index.mdx b/docs/users/index.mdx
deleted file mode 100644
index 49f016d1f..000000000
--- a/docs/users/index.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: About Linea
-sidebar_position: 2
-image: /img/socialCards/about-linea.jpg
----
-
-Linea is an Ethereum layer 2 (L2) network that provides access to innovative Web3
-projects at significantly lower costs compared to Ethereum. It's compatible with the
-Ethereum Virtual Machine (EVM), allowing users to deploy existing Ethereum applications and
-develop new ones that would be too costly on Mainnet. It also enables the community to
-use those dapps, **at a fraction of the cost**, and at **multiples the speed** of Mainnet.
-
-Linea delivers unrivaled network security with its cryptographically secure zk-rollup infrastructure,
-comprehensive security partnerships, and security-oriented ecosystem culture. View the
-[Linea architecture](../architecture/index.mdx) for more information.
-
-You can get started by [funding your Linea account](./move-funds/index.mdx) using the
-fiat onramp in MetaMask Portfolio or by bridging over funds.
-
-:::tip
-If you run into a problem, view the [Linea Support page](https://support.linea.build/hc/en-us) and let us know.
-:::
diff --git a/docs/users/linea-voyage/index.mdx b/docs/users/linea-voyage/index.mdx
deleted file mode 100644
index 52435982e..000000000
--- a/docs/users/linea-voyage/index.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Linea Voyage
-image: /img/socialCards/linea-voyage.jpg
----
-
-import DocCardList from '@theme/DocCardList';
-
-
diff --git a/docs/users/linea-voyage/linea-surge/index.mdx b/docs/users/linea-voyage/linea-surge/index.mdx
deleted file mode 100644
index 53c93645b..000000000
--- a/docs/users/linea-voyage/linea-surge/index.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: 'Linea Voyage: The Surge'
-image: /img/socialCards/linea-voyage-the-surge.jpg
----
-
-Linea Surge is an LXP-driven program that enables people to collect LXP-L in return for having
-assets on Linea and deploying those assets into protocols.
-
-The goal for The Surge is to allow users that provide liquidity on the network to collect LXP-L.
-LXP-L is similar to the system we have in place today for LXP, but is collected by contributing
-liquidity to Linea.
-
-A core focus is on the expansion of available assets through new applications
-and DeFi use cases built on Linea. Additional liquidity brought by new applications sustainably
-supports additional volume, in turn impacting on the sustainability of the liquidity through
-increased fees for liquidity providers and increasing the percentage of ecosystem trading
-activity compared to other venues. This constitutes something of a flywheel network effect for
-the ecosystem.
-
-The following sections provide further detail. In the overview page, we will explore the program,
-before explaining the math behind it in _Point incentive design_.
diff --git a/docs/users/linea-voyage/linea-surge/linea-surge-model.mdx b/docs/users/linea-voyage/linea-surge/linea-surge-model.mdx
deleted file mode 100644
index b9d93726b..000000000
--- a/docs/users/linea-voyage/linea-surge/linea-surge-model.mdx
+++ /dev/null
@@ -1,250 +0,0 @@
----
-title: Point incentive design
-sidebar_position: 2
-image: /img/socialCards/point-incentive-design.jpg
----
-
-:::note
-
-This allocation methodology is subject to minimal change.
-
-:::
-
-
-## LXP-L function
-
-LXP-L is intended to recognize and incentivize meaningful contributors within the Linea ecosystem.
-These points encompass a variety of actions, such as being an early adopter, owning assets on Linea,
-engaging with different protocols within the ecosystem, demonstrating past involvement across
-other blockchain networks, and more.
-
-The overarching function is as follows:
-
-
-$$
-P_{u} = DF \left[ EA \cdot \int_{0}^{T} \left( m_{pl} PL_{t} + \sum_{v \in V} m_{v,t} AP_{v,t} \right) dt + m_{rp} RP + m_{vet} P_{v} \right]
-$$
-
-
-
-This point formula can be extracted into three terms:
-
-$$
-P_{u} = DF \cdot \left( P_{E} + P_{R} + P_{V} \right)
-$$
-
-$P_{u}$ represents the LXP-L user _u_ earns. There are three ways users can earn points:
-
-- Ecosystem Points $\left(P_{E} \right)$
-- Referral Points $\left(P_{R} \right)$
-- Veteran Points $\left(P_{V} \right)$
-
-## Formula explanation
-
-### Decay function (DF)
-
-To gradually adapt the number of points and incentivize early participation in the program,
-we're employing a decay function that decreases at every Volt (1 month). At the start of the
-program, this function will be 1, and will be reduced by a factor of 10% after every Epoch,
-so the overall number of points will be 10% lower every month.
-
-### Ecosystem Points
-
-Ecosystem points incentivize onboarding assets onto Linea, along with user activity across
-various ecosystem protocols. It is calculated as follows:
-
-$$
-P_{E} = EA \cdot \int_{0}^{T} \left( m_{pl} PL_{t} + \sum_{v \in V} m_{v,t} AP_{v,t} \right) dt
-$$
-
-Where:
-
-- _EA_ is the [early adopter modifier](#early-adopter-modifier) that serves as a decay function
-across time
-- $m_{pl}$ is the multiplier for passive liquidity
-- $PL_{t}$ is the amount of passive liquidity held in wallet
-- _$V$_ is the set of DeFi verticals participating in the program
-- $m_{v,t}$ is the multiplier for vertical _v_ at time _t_
-- $AP_{v,t}$ is the amount of activity points earned in vertical _v_ at time _t_ weighted by the
-specific asset class that is in use across the different verticals. Asset classes will come with
-a different multiplier $\left(m_{a,t} \right)$ that will change the value of individual
-$AP_{v,t}$ to ensure a healthy ecosystem that is not concentrated in few asset classes
-(usually ETH/stables).
-
-
-
-
-
-
-
-In this specific example—which will apply to Volt 1 at the beginning of the program—we're using the
-$m_{a,t}$ multiplier to maximize the points for ETH and LRT liquidity on DEXs and lending
-platforms, with a lower weight on stables and LST and a minor weight for RWA and others. We are
-also maximizing liquidity on third party bridges pools (AMM) for ETH and stables to provide a better
-bridging experience to users.
-
-### Early adopter modifier
-
-_EA_ is the early adopter modifier, a multiplier that recognizes early activity on Linea. Early
-activity is defined as activity occurring before the start of the program.
-
-This multiplier will be constant within the time period of a single Volt (1 month) and will
-reduce over successive Volts. This is used to recognize the contributions of users that have
-provided liquidity on Linea since mainnet went live and users bridging active liquidity to
-Linea after the announcement but before The Surge program starts.
-
-The way it works is by looking at historical activity of each address that is eligible to get
-$P_{E}$.
-
-The _EA_ multiplier will be applied to your account if:
-
-- The address had at least one active liquidity event across any smart contract on Linea (also
-ones not included in the program), AND;
-- At least one active liquidity event was $\geq$ 0.1 ETH or WETH.
-
-Since the Surge has started, it is no longer possible to obtain early adopter status. This was only
-possible if your address had active liquidity events before the Surge was announced or before it
-started.
-
-The _EA_ multiplier will start at 1.5 at the beginning of the program and will be reduced at
-the end of each Volt, before reaching the value of 1 for the rest of the program:
-
-| Volt | EA multiplier |
-| :-------- | -------- |
-| Volt 1 | 1.5 |
-| Volt 2 | 1.3 |
-| Volt 3 | 1.2 |
-| Volt 4 | 1 |
-| Volt 5 | 1 |
-| Volt 6 | 1 |
-
-### DEX objective functions
-
-For Linea's DEXs, we've implemented a points incentive program tailored to recognize active
-liquidity providers for their crucial role. In this program, user points are calculated
-from the market depth of their liquidity positions and factoring in the respective pools'
-realized volatility. This methodology ensures that points are accrued per block at a rate
-proportional to the effectiveness of the liquidity provided. In essence, the deeper the market
-depth from your liquidity position, the greater the accumulation of points.
-
-Market depth for some percentage X% is calculated for a given user, pool, and block as the USD
-value of the liquidity in range X% above and X% below the active price of the pool. This function
-is formulated for various AMM structures to use the appropriate price impact mechanism for each.
-With this definition of market depth, we define the market depth score as a weighted average of
-market depth at several realized volatility levels (RV30, 2RV30, and 3RV30), with weights that
-reflect the likelihood of the given price being reached. It is the measure of liquidity across
-a certain price range, adjusted for the past volatility of the token pair. At each block,
-users will gain points according to this market depth score.
-
-This system is designed to fine-tune liquidity provision across different asset types: in a
-concentrated liquidity market maker for example, the methodology requires tighter allocations
-for stablecoin pools to reflect their lower volatility, while allowing for broader allocations
-in more volatile pools. Our aim is to optimize liquidity throughout the ecosystem, thereby
-minimizing price impact for all DEX users. By participating, liquidity providers not only
-boost the tokens they receive by allocating assets more strategically, but also contribute
-to the overall health and efficiency of the market.
-
-## Lending objective functions
-
-For lending protocols, our objective function prioritizes tokens supplied and the total revenue
-to suppliers from lending interest.
-
-$$
-O_{{Lending}} = {Value of Non Recursive Tokens Supplied} + \beta_{R} \left({Supplier Revenue from Non Recursive Interest} \right)
-$$
-
-$ \beta_{R}$ is a parameter that sets the value of income relative to value supplied. To handle
-income in a symmetric way across verticals, it is the same $\beta_{R}$ used in the DEX objective
-function.
-
-We distinguish supplier revenue from interest to exclude supplier revenue from Linea incentives.
-We also exclude any and all recursive borrowing, both for its impact on supply and its impact
-on interest payments.
-
-Recursive borrowing is borrowing a token using the same token as collateral. Although lending
-protocols allow this, it is not an intended use case. The user will always pay a higher interest
-rate on their borrowed tokens than they receive on their supplied tokens, essentially gifting
-money to the protocol for no gain.
-
-However, when incentive programs pay users for the value they supply, it can make recursive
-borrowing profitable. In many past incentive programs, users have opened recursive borrow
-positions to farm incentives, removing them all when the incentive program ends.
-
-To avoid this, we simply exclude all recursive borrowing, counting only the net value of each
-token supplied by a given account. We also subtract the share of interest paid by recursive
-borrowers from the supplier revenue. This makes the recursive strategy unappealing, and we do
-not expect any users to attempt it.
-
-### Decentralized trading objective functions
-
-#### Taker incentives
-
-Trading incentives are set with the following equation:
-
-
-$$
-\text{Trader Incentives}_{i} = \min \left( \text{Total Trader Incentives} \times \frac{\text{Trade volume}_{i}}{\text{Total trade volume}}, \text{fees}_{i} \right)
-$$
-
-
-The trader incentives allocated to user _i_ are weighted by the user’s share of total trade volume.
-However, each user cannot receive more incentives than the total amount of trading fees they paid
-during the grant period. Incentives that would exceed fees are redistributed to the rest of the
-trader pool. If total trading fees are less than the total trader incentives, extra incentives
-will be rolled into the next grant period.
-
-#### Maker incentives
-
-We define the market depth score in the same way as the [DEX liquidity section](#dex-objective-functions).
-
-### Bridge liquidity objective functions
-
-Third-party bridges typically operate by facilitating the exchange of wrapped versions of
-assets like ETH and stablecoins, transitioning them onto Linea where they are exchanged for the
-original assets. This process relies on substantial liquidity pools within automated market
-makers (AMMs) to ensure efficient swaps with minimal slippage.
-
-Similar to the [DEX section](#dex-objective-functions), points will be allocated based on a
-market depth score to improve liquidity and minimize slippage for meaningful pairs.
-
-### Objective functions for other verticals
-
-For all other types of protocols, we leverage TVL as the primary metric to allocate points.
-
-### Referral points
-
-Referral points incentivize cooperative onboarding activities. These points are calculated by
-the formula:
-
-$$
-P_{R}=m_{rp}RP_{u}
-$$
-
-where:
-
-- $RP_{u}$ is the total referral points earned by user _u_
-- $m_{rp}$ is the multiplier for referral activity
-
-To obtain the total referral points earned by user _u_, we sum over eligible points
- $\hat{P}_{r}$ generated by _r_ wallets that have activated user _u_'s referral code.
-
-$$
-RP_{u} = \sum_{r \in R_u} \hat{P}_{r}
-$$
-
-Eligible points $\hat{P}_{r}$ are points generated through on-chain wallet activities and, to
-prevent second-order referral effects, do not include referral points. The referral multiplier
-$m_{rp}$ is optimized throughout the program to incentivize early onboarding efforts and adjust
-for network growth.
-
-### Veteran points
-
-Veteran points $P_{V}$ and the multiplier $m_{vet}$ provide additional points to users who have
-demonstrated notable activity and partnership in the past, inviting active blockchain participants
-to join the Linea network.
-
-This is a recurring function of ecosystem points, acting as an additional multiplier only for a
-specific list of addresses provided by the Linea team.
diff --git a/docs/users/linea-voyage/linea-surge/linea-surge-overview.mdx b/docs/users/linea-voyage/linea-surge/linea-surge-overview.mdx
deleted file mode 100644
index 426189f1d..000000000
--- a/docs/users/linea-voyage/linea-surge/linea-surge-overview.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: Overview
-sidebar_position: 1
-image: /img/socialCards/overview.jpg
----
-
-Once it starts, the program will last for 6 months, or until the network TVL reaches $3B, whichever
-happens first. The Surge is structured into six Volts (epochs), each one month long. Why Volts?
-Because if we reach the target we will let the epoch run till the end of the Volt. And we can play
-with themes: every Volt will have narratives and featured partners, and provide educational
-content — each Volt a distinct experience.
-
-## Early adopters
-
-The points system will start when the program goes live but we already have users and early
-adopters who have provided liquidity on the network. It's important to acknowledge what
-has been done so far. For this reason, the formula that defines points has an early adopter
-modifier that provides more points to users that started contributing earlier than others.
-
-## Dashboard
-
-After go-live, OpenBlock Labs will provide a dashboard where anyone can verify the number
-of LXP-L collected within The Surge. This will feature all necessary information for a user to
-observe their activity and points received.
-
-## Sybil
-
-While in previous campaigns we tied the minting of LXP to addresses that hold Proof Of Humanity
-to specifically protect the LXP points from bot farms and reduce sybils, in this case there's
-no such need. Providing a unit of points per $ locked is an action that does not incentivize bot
-activity: a user will get the same amount of points regardless of whether they concentrate all
-the liquidity in a single wallet or split it among thousands of addresses. This makes the
-experience even easier and more enjoyable for users who bridge liquidity to Linea.
-
-## Security and UX
-
-Dapps that participate in the program will have a great opportunity to grow, but our main
-priorities at Linea are security and UX. We can't afford to assign LXP-L points to dapps that
-put users' funds at risk, so this is the right time to raise the bar for security at an ecosystem
-level. Every dapp that is on the ecosystem portal today is audited by one of the Linea security
-partners, and in order to be eligible for inclusion in the program, a dapp must satisfy the
-following criteria:
-
-- Meet UX requirements from an established framework
-- Satisfy at least one of the two following conditions:
- - Has been live for at least one year on any other EVM chain with a TVL peak of more than $50M
- - Provide an audit report associated with the version of the contract that is deployed on
- Linea and has implemented at least one real-time exploit detection solution provided by
- Linea Partners
-
-## Relationship between LXP and LXP-L
-
-The goal for The Surge is to attract more liquidity by tracking the contribution of each user,
-leveraging a similar system that we have in place today: LXP-L will be a different token with
-the same non-transferable characteristic of LXP. Both of these points systems recognize involvement
-from two distinctly different user bases while providing greater transparency for each group.
-
-This approach ensures a balanced alignment between LXP and LXP-L. Considering the complexity
-of the Surge points model, it is challenging to establish precise alignment for these two types
-of points. Implementing parallel points systems allows us to assess the alignment retrospectively
-and make necessary adjustments to maintain fairness between users who contribute liquidity
-and those who contribute through activity.
-
-Moreover, we will continue to provide opportunities for users to contribute to the growth of
-the ecosystem by performing activity-based activations on Linea dapps.
diff --git a/docs/users/linea-voyage/lxp/index.mdx b/docs/users/linea-voyage/lxp/index.mdx
deleted file mode 100644
index 504e02b0d..000000000
--- a/docs/users/linea-voyage/lxp/index.mdx
+++ /dev/null
@@ -1,149 +0,0 @@
----
-title: Linea Voyage LXP
-sidebar_position: 5
-image: /img/socialCards/linea-voyage-lxp.jpg
----
-
-## What is Linea Voyage XP?
-
-Similar to video and role-playing games, wherein your character can gain Experience Points (XP) as
-you go through the game, Linea Voyage LXP represents your journey and experience in the Linea
-ecosystem.
-The Voyage LXP tokens will be a custom
-[ERC-20 token](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/), and will be
-visible by default in your MetaMask wallet.
-
-**Voyage LXP tokens are non-transferable, soulbound tokens that are distributed to recognize the
-community's extraordinary contribution toward the growth of the Linea ecosystem. They do not have
-any monetary value!**
-
-Apart from being a measure of contribution to building Linea into a robust and secure L2 network,
-Voyage LXP will also make owners eligible for benefits such as receiving official community roles,
-exclusive Linea swag, and more!
-
-To learn more about the Linea Voyage program, click [here](https://support.linea.build/linea-voyage).
-
-:::note
-Voyage LXP are non-transferable, and cannot be bridged to other networks. You cannot buy, sell, or
-swap them, nor can you accumulate them by transferring LXP from another account.
-
-However, you can use multiple accounts to earn LXP; more on that below.
-:::
-
-## Contract address
-
-| Voyage LXP contract address |
-| --- |
-| [0xd83af4fbD77f3AB65C3B1Dc4B38D7e67AEcf599A](https://lineascan.build/address/0xd83af4fbD77f3AB65C3B1Dc4B38D7e67AEcf599A) |
-
-## Account binding
-
-
-
-Account binding allows you to aggregate your Voyage LXP tokens to a single primary account.
-If you're navigating the Linea ecosystem with multiple accounts, choose one as your main hub to
-effortlessly accumulate all the Voyage LXP you've received.
-This ensures that every adventure is accurately recorded across your interconnected accounts,
-providing a seamless and comprehensive representation of your Linea experience.
-
-**Account binding is not retroactive. If you bind your account address after Voyage XP is received,
-then those won't be linked to the primary account!**
-
-:::caution
-
-**Account binding is permanent and irreversible, so make sure you are choosing the correct account address when going through the process!**
-
-- Using account binding is only necessary for those who want to bind two or more accounts.
-
-- To receive LXP, the Primary account set must pass Proof of Humanity. Accounts set as secondary do not need to pass PoH.
-
-- All LXP will be sent to your Primary account when using Account Binding.
-
-- You will receive LXP once per task. The exception to this is the Linea Voyage Testnet NFT, holders will receive LXP for each NFT owned.
-:::
-
-To start the Account binding process, follow the steps below:
-
-1. Go [here](https://linea.build/activations)
-2. Connect your wallet in the top-right corner of the page
-
-
-
-
-
-
-
-3. Click on the address of your currently selected account to open a dropdown menu. Here, click
-"Manage Wallet(s)"
-
-
-
-
-
-
-
-4. Sign the signature request
-
-
-
-
-
-
-
-5. Select "Set as Primary Account"
-
-
-
-
-
-
-
-6. Select "Add secondary Account"
-
-
-
-
-
-
-
-7. Follow the prompts to connect the account you want to bind and sign the signature request.
-8. Read through the disclaimer, check the box, and hit confirm to finish the binding process
-
-
-
-
-
-
-
-:::info[What if I want to bind an account from a different Secret Recovery Phrase/seed phrase?]
-
-Refer to the [support guide](https://support.linea.build/linea-voyage/lxp-binding-an-account-from-a-different-secret-recovery-phrase-).
-
-:::
diff --git a/docs/users/move-funds/bridge.mdx b/docs/users/move-funds/bridge.mdx
deleted file mode 100644
index 28274e767..000000000
--- a/docs/users/move-funds/bridge.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Bridge your funds
-image: /img/socialCards/bridge-your-funds.jpg
----
-
-The [official Linea bridge](https://bridge.linea.build/) provides multiple options to bridge
-your funds to Linea.
-
-You can select the option most appropriate to you:
-
-- **MetaMask bridge for users** - The bridge feature in MetaMask Portfolio, which we recommend as
- the simplest option for most users.
-- **Third-party bridges for users** - Use alternative third-party bridges.
-- **Linea Native Bridge** - Best suited for tech operators, dapp teams, and liquidity
-providers. For more guidance on the native bridge, see [here](../../developers/guides/bridge/how-to-bridge-eth.mdx).
-
-:::info
-The Linea Native Bridge is a slower option that should not be used for time-sensitive transfers.
-Additionally, you will need to manually claim ERC-20 tokens that are transferred across using this bridge.
-:::
-
-## Use the MetaMask Portfolio bridge
-
-The [MetaMask Portfolio's bridge](https://portfolio.metamask.io/bridge) surveys bridges across Linea to
-source its routes and rates and provides you with the best price.
-
-MetaMask Portfolio's bridge also allows you to bridge and swap tokens as part of the same transaction.
-
-[View the MetaMask Portfolio's bridge documentation](https://support.metamask.io/metamask-portfolio/bridge/)
-for more information.
-
-## Third-party bridges
-
-You can find third-party bridges on the [ecosystem portal](https://linea.build/apps). Use the
-filter to find the available third-party bridges.
-
-:::caution
-
-These are permissionless bridges, and, you should do your own research before interacting
-with dapps in order to keep your funds safe.
-
-:::
diff --git a/docs/users/move-funds/fund.mdx b/docs/users/move-funds/fund.mdx
deleted file mode 100644
index 24071fce1..000000000
--- a/docs/users/move-funds/fund.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: Fund your accounts
-description: Get tokens in your accounts
-sidebar_position: 2
-image: /img/socialCards/fund-your-accounts.jpg
----
-
-Linea uses ETH for network transaction fees. You can fund your account on either [Linea Mainnet](#linea-mainnet) for
-real transactions or [Linea Sepolia](#linea-sepolia) for testing purposes.
-
-## Linea Mainnet
-
-You can buy tokens directly on Linea using [MetaMask Portfolio](https://portfolio.metamask.io/).
-Alternatively, if you already have tokens on another network, you can [bridge them to Linea](./bridge.mdx).
-For example you can bridge ETH on the Ethereum network over to the Linea network.
-
-:::info
-The [MetaMask Portfolio](https://portfolio.metamask.io/) dapp allows you to buy, sell, swap, stake, bridge, and
-manage your cryptoassets, among other features.
-
-Linea purchases in MetaMask Portfolio are available worldwide.
-:::
-
-
-
-### Buy tokens on Linea Mainnet
-
-To buy tokens using MetaMask Portfolio:
-
-1. Access [MetaMask Portfolio](https://portfolio.metamask.io), and connect the account that will
- receive your purchased tokens.
-1. Select the option to buy tokens:
- - On a mobile device, select **Buy** from the hamburger icon menu located in the top left
- of the screen.
- - On a desktop, select **Buy** on screen.
-
- :::info
- If you've never used the **Buy** option previously, you'll first need to
- select your region because payment methods and provider availability vary based on your bank's location.
- :::
-
-1. Set the payment method, if you've bought tokens before on your current device, your
- previous choice is loaded by default.
-1. In the **Buy** menu, select the token, and locate and select **Linea** from the networks list.
-1. In the list of tokens available to buy on Linea, select the one you want to buy.
-1. On the main screen, input the amount you wish to spend.
-1. View your quotes:
- - On a desktop browser, one or more quotes appear on the right.
- - On mobile devices, select **Get Quotes**.
-1. Pick a quote by selecting it.
-
-Selecting a quote redirects you to the provider's site to complete the transaction. You may need
-to complete KYC ("Know Your Customer"; essentially, identifying yourself) with the provider.
-
-After you've completed the steps with the provider, you'll be routed back to MetaMask Portfolio.
-Timescales for receiving your funds vary based on the provider and token route.
-
-## Linea Sepolia
-
-You can use one of the following Linea Sepolia faucets to drip testnet ETH directly to your
-Linea Sepolia address:
-
-
-- [Covalent](https://www.covalenthq.com/faucet/)
-- [Infura](https://www.infura.io/faucet/linea)
-- [GetBlock](https://getblock.io/faucet/linea-sepolia/)
-- [HackQuest](https://www.hackquest.io/en/faucets/59141) (and check out their [Linea Learning Track](https://www.hackquest.io/en/learning-track/9be129e7-575b-49bd-a64e-1bbe32427ace))
-
-Alternatively, [use the Linea Native Bridge to bridge tokens between Sepolia and Linea Sepolia](../../developers/guides/bridge/how-to-bridge-eth.mdx).
diff --git a/docs/users/move-funds/index.mdx b/docs/users/move-funds/index.mdx
deleted file mode 100644
index b37b6aa21..000000000
--- a/docs/users/move-funds/index.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Move funds to Linea
-image: /img/socialCards/move-funds-to-linea.jpg
----
-
-import DocCardList from '@theme/DocCardList';
-
-
diff --git a/docs/users/move-funds/set-up-your-wallet.mdx b/docs/users/move-funds/set-up-your-wallet.mdx
deleted file mode 100644
index 67d12cfd6..000000000
--- a/docs/users/move-funds/set-up-your-wallet.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: Set up your wallet
-description: Set up your wallet to start using Linea
-sidebar_position: 1
-image: /img/socialCards/set-up-your-wallet.jpg
----
-
-Use a wallet such as MetaMask to manage your digital assets and interact with dapps on the Linea network.
-
-:::info
-
-Linea is designed to be completely compatible with Ethereum and works with
-MetaMask out of the box.
-
-[View the MetaMask support site](https://support.metamask.io/getting-started/getting-started-with-metamask/)
-if you're not familiar with the MetaMask wallet.
-
-:::
-
-## Install MetaMask
-
-The MetaMask browser extension and mobile app provide built-in connections to Linea.
-
-You can [install MetaMask as a browser extension or mobile app](https://metamask.io/download/).
-
-## Access Linea on MetaMask
-
-### Linea Mainnet
-
-Linea Mainnet is included in the available networks in the MetaMask browser extension and mobile
-app by default.
-
-Select **Linea Mainnet** from the network dropdown to connect to the network.
-[View the MetaMask instructions](https://support.metamask.io/networks-and-sidechains/managing-networks/how-to-connect-to-linea-on-metamask/)
-for more information.
-
-### Linea Sepolia
-
-To connect to Linea Sepolia testnet, select **Show test networks**, as indicated in the image
-below, and then select **Linea Sepolia**.
-
-
-
-
-
-
-
-## Next steps
-
-View [the ecosystem portal](https://linea.build/apps) to see list of Web3 dapps available on Linea.
-
-Regardless of what you're doing on Linea, you'll likely need some tokens to transact on the network.
-To do this, you can [fund your Linea account](./fund.mdx).
-
-## Troubleshooting tips
-
-If you're interacting with a dapp on Linea, try that dapp's documentation and resources first.
-If you can't find your answer there, take a look at the [Linea Support Help Center](https://support.linea.build),
-and search on the [Linea Community Forums](https://community.linea.build) or [Discord](https://discord.com/invite/linea)
-for related issues. If it seems like a MetaMask issue at that point, jump over to
-[MetaMask's Help Center](https://support.metamask.io), where you can explore their forums, and
-start a conversation with support.
-
-## Other wallets
-
-Linea is compatible with any EVM-compatible wallet. If you want to add the Linea network, then
-[view the relevant network information](../../developers/quickstart/info-contracts.mdx).
diff --git a/docs/users/zero-knowledge-glossary/index.mdx b/docs/zero-knowledge-glossary/index.mdx
similarity index 100%
rename from docs/users/zero-knowledge-glossary/index.mdx
rename to docs/zero-knowledge-glossary/index.mdx
diff --git a/docusaurus.config.js b/docusaurus.config.js
index b6a7be68c..4049e2786 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -41,7 +41,8 @@ const config = {
},
scripts: [
- {src: "/js/getfeedback.js", defer: true, async: true}
+ {src: "/js/getfeedback.js", defer: true, async: true},
+ {src: "/js/navbarHighlight.js", defer: true}
],
markdown: {
@@ -116,23 +117,17 @@ const config = {
srcDark: "img/Linea_logo_white.svg",
},
items: [
- {
- type: "doc",
- docId: "users/index",
- position: "left",
- label: "Users",
- },
{
type: "doc",
docId: "developers/quickstart/index",
position: "left",
- label: "Developers",
+ label: "Quickstart",
},
{
type: "doc",
- docId: "architecture/index",
+ docId: "developers/guides/index",
position: "left",
- label: "Architecture",
+ label: "Guides",
},
// { can add this section back if we want it
// type: "dropdown",
@@ -154,6 +149,12 @@ const config = {
position: "left",
label: "Run a node",
},
+ {
+ type: "doc",
+ docId: "architecture/index",
+ position: "left",
+ label: "Architecture",
+ },
{
to: "/developers/linea-version",
position: "right",
@@ -178,11 +179,11 @@ const config = {
title: "Links",
items: [
{
- label: "Linea homepage",
+ label: "Home",
href: "https://linea.build/",
},
{
- label: "Network status",
+ label: "Status",
href: "https://linea.statuspage.io/",
},
{
@@ -190,8 +191,8 @@ const config = {
href: "https://lineascan.build",
},
{
- label: "Linea Sepolia block explorer",
- href: "https://sepolia.lineascan.build",
+ label: "Risk disclosures",
+ href: "/risk-disclosures",
},
],
},
@@ -216,7 +217,7 @@ const config = {
title: "Contribute",
items: [
{
- label: "Contribute to our documentation",
+ label: "Documentation",
href: "https://github.com/Consensys/doc.linea",
},
],
@@ -295,11 +296,14 @@ const config = {
from: "/developers/deploy-smart-contracts",
},
{
- to: "/users/zero-knowledge-glossary",
- from: ["/reference/glossary", "/zero-knowledge-glossary"],
+ to: "/zero-knowledge-glossary",
+ from: [
+ "/reference/glossary",
+ "/users/zero-knowledge-glossary"
+ ],
},
{
- to: "/users",
+ to: "/",
from: [
"/get-started",
"/get-started/fund",
@@ -307,16 +311,15 @@ const config = {
"/get-started/quickstart",
"/use-zkevm",
"/use-linea/index.md",
+ "/build-on-linea/use-linea-testnet/fund",
+ "/use-mainnet/fund",
+ "/build-on-linea/use-linea-testnet/bridge-funds/usdc-bridge",
+ "/build-on-linea/use-linea-testnet/bridge-funds/use-etherscan",
+ "/use-mainnet/set-up-your-wallet",
+ "/build-on-linea/use-linea-testnet/set-up-your-wallet",
+ "/use-mainnet",
],
},
- {
- to: "/users/move-funds/set-up-your-wallet",
- from: "/build-on-linea/use-linea-testnet/set-up-your-wallet",
- },
- {
- to: "/users/move-funds/fund",
- from: "/build-on-linea/use-linea-testnet/fund",
- },
{
to: "/developers/quickstart/info-contracts",
from: "/build-on-linea/use-linea-testnet/info-contracts",
@@ -329,54 +332,18 @@ const config = {
to: "/developers/guides/bridge",
from: "/build-on-linea/use-linea-testnet/bridge-funds",
},
- {
- to: "/users/move-funds/bridge",
- from: "/build-on-linea/use-linea-testnet/bridge-funds/usdc-bridge",
- },
- {
- to: "/users/move-funds/bridge",
- from: "/build-on-linea/use-linea-testnet/bridge-funds/use-etherscan",
- },
{
to: "/developers/guides/gas/gas-fees",
from: "/use-mainnet/gas-import",
},
- {
- to: "/users/linea-voyage/linea-surge/linea-surge-overview",
- from: "/use-mainnet/linea-surge/linea-surge-overview",
- },
- {
- to: "/users/linea-voyage/linea-surge/linea-surge-model",
- from: "/use-mainnet/linea-surge/linea-surge-model",
- },
- {
- to: "/users/linea-voyage/linea-surge/linea-surge-model",
- from: "/use-mainnet/linea-surge-model",
- },
- {
- to: "/users/linea-voyage/linea-surge",
- from: "/use-mainnet/linea-surge",
- },
{
to: "/developers/guides/gas/gas-fees",
from: "/reference/api/linea-estimategas",
},
- {
- to: "/users/linea-voyage/lxp",
- from: "/use-mainnet/linea-xp",
- },
{
to: "/developers/guides/bridge",
from: "/use-mainnet/bridges-of-linea",
},
- {
- to: "/users/move-funds/fund",
- from: "/use-mainnet/fund",
- },
- {
- to: "/users/move-funds/set-up-your-wallet",
- from: "/use-mainnet/set-up-your-wallet",
- },
{
to: "/developers/quickstart/info-contracts",
from: "/use-mainnet/info-contracts",
@@ -403,10 +370,6 @@ const config = {
"/developers/guides/run-a-node/use-binary",
],
},
- {
- to: "/developers/community/hackathons",
- from: "/build-on-linea/hackathons",
- },
{
to: "/developers/guides/linea-inscriptions",
from: "/build-on-linea/tooling/linea-inscriptions",
@@ -486,10 +449,6 @@ const config = {
to: "/developers/quickstart",
from: "/build-on-linea/quickstart",
},
- {
- to: "/users",
- from: "/use-mainnet",
- },
{
to: "/developers/tooling",
from: "/build-on-linea/tooling",
diff --git a/sidebars.js b/sidebars.js
index 0193e93a4..9fbb6cddb 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -1,74 +1,6 @@
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
docSidebar: [
- "users/index",
- {
- type: "category",
- collapsed: true,
- label: "Move funds to Linea",
- link: {
- type: "doc",
- id: "users/move-funds/index",
- },
- items: [
- "users/move-funds/set-up-your-wallet",
- "users/move-funds/fund",
- "users/move-funds/bridge",
- ],
- },
- {
- type: "category",
- label: "Linea Voyage",
- link: {
- type: "doc",
- id: "users/linea-voyage/index",
- },
- items: [
- "users/linea-voyage/lxp/index",
- {
- type: "category",
- label: "The Surge",
- link: {
- type: "doc",
- id: "users/linea-voyage/linea-surge/index",
- },
- items: [
- "users/linea-voyage/linea-surge/linea-surge-model",
- "users/linea-voyage/linea-surge/linea-surge-overview",
- ],
- },
- ],
- },
- "users/zero-knowledge-glossary/index",
- "risk-disclosures/index",
- {
- type: "category",
- label: "Contact us",
- items: [
- {
- type: "link",
- label: "Get help",
- href: "https://support.linea.build/",
- },
- {
- type: "link",
- label: "Provide feedback",
- href: "https://community.linea.build/c/feedback",
- },
- {
- type: "link",
- label: "Report an issue",
- href: "https://community.linea.build/c/bug-reports/",
- },
- {
- type: "link",
- label: "Join our Discord",
- href: "https://discord.gg/linea",
- },
- ],
- },
- ],
- developersSidebar: [
{
type: "category",
label: "Getting started",
@@ -446,17 +378,27 @@ const sidebars = {
},
{
type: "category",
- label: "Community",
- link: {
- type: "doc",
- id: "developers/community/hackathons",
- },
+ label: "Contact",
items: [
- "developers/community/hackathons",
{
type: "link",
- label: "Bug bounty program",
- href: "https://immunefi.com/bounty/linea/",
+ label: "Support",
+ href: "https://support.linea.build/",
+ },
+ {
+ type: "link",
+ label: "Feedback",
+ href: "https://community.linea.build/c/feedback",
+ },
+ {
+ type: "link",
+ label: "Report an issue",
+ href: "https://community.linea.build/c/bug-reports/",
+ },
+ {
+ type: "link",
+ label: "Discord",
+ href: "https://discord.gg/linea",
},
],
},
diff --git a/src/components/HomepageCards/index.tsx b/src/components/HomepageCards/index.tsx
index fca8c2f7f..5b62fee81 100644
--- a/src/components/HomepageCards/index.tsx
+++ b/src/components/HomepageCards/index.tsx
@@ -25,12 +25,11 @@ type CardItem = {
const CardList: CardItem[] = [
{
- title: "Bridge your funds",
- link: "/users/move-funds/bridge",
+ title: "Guides",
+ link: "/developers/guides",
description: (
<>
- Learn how to safely bridge your tokens over to Linea via MetaMask and
- ecosystem bridges
+ Learn how to get the most out of Linea with our developer-focused guides
>
),
buttonName: "Bridge",
diff --git a/src/css/custom.css b/src/css/custom.css
index 3afb44dbd..9e467d7c3 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -625,11 +625,11 @@ html[data-theme="dark"] .header-dockerhub-link::before {
text-align: center;
}
-/* circle icons */
-.navbar__link[href="/users"]::before,
+/* Basic circle icons for navbar items */
+.navbar__link[href="/developers/guides"]::before,
.navbar__link[href="/developers/quickstart"]::before,
-.navbar__link[href="/architecture"]::before,
-.navbar__link[href="/developers/guides/run-a-node"]::before {
+.navbar__link[href="/developers/guides/run-a-node"]::before,
+.navbar__link[href="/architecture"]::before {
content: "";
display: inline-block;
width: 7px;
@@ -642,33 +642,21 @@ html[data-theme="dark"] .header-dockerhub-link::before {
margin-left: 12px;
}
-/* circle hover */
-.navbar__link[href="/users"]:hover::before,
-.navbar__link[href="/developers/quickstart"]:hover::before,
-.navbar__link[href="/architecture"]:hover::before,
-.navbar__link[href="/developers/guides/run-a-node"]:hover::before {
+/* Hover effect for circles */
+.navbar__link:hover::before {
background-color: #61dfff;
border: 1px solid #61dfff;
}
-/* persist circle highlight when in a specific section */
-/* intentionally leaving out "Run a node" for now, as this falls under the "Developers" section, and it was less clear UI to have two navbar dots highlighted */
-.navbar__link[href="/users"][aria-current="page"]::before,
-.navbar__link[href="/architecture"][aria-current="page"]::before,
-.navbar__link[href="/developers/quickstart"][aria-current="page"]::before {
- background-color: #61dfff;
- border: 1px solid #61dfff;
+/* Highlight the dot for the current page using aria-current */
+.navbar__link[aria-current="page"]::before {
+ background-color: #61dfff; /* Dot color for the active page */
+ border: 1px solid #61dfff; /* Border color for the active page */
}
+/* Ensure dots are hidden on smaller screens */
@media (width <= 1500px) {
- .navbar__item {
- font-size: 16px;
- }
-
- .navbar__link[href="/users"]::before,
- .navbar__link[href="/developers/quickstart"]::before,
- .navbar__link[href="/architecture"]::before,
- .navbar__link[href="/developers/guides/run-a-node"]::before {
+ .navbar__link::before {
display: none;
}
}
@@ -924,4 +912,4 @@ html[data-theme="dark"] .navbar {
.getfeedback-hidden {
display: none !important;
-}
\ No newline at end of file
+}
diff --git a/static/img/socialCards/besu.jpg b/static/img/socialCards/besu.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c14c5b86344813180b4bd553756509b046b06879
GIT binary patch
literal 78222
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%0ATJ
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