diff --git a/lychee.toml b/lychee.toml
index 73b34c1e3..0ad13b998 100644
--- a/lychee.toml
+++ b/lychee.toml
@@ -1,33 +1,33 @@
############################# Display #############################
-
-# Verbose program output
-verbose = "info"
-
+# Use error level to only show failed requests
+verbose = "error"
# Don't show interactive progress bar while checking links.
no_progress = true
+# Don't show the source file of links
+no_show_source = false
############################# Requests ############################
-
# URL remapping rules.
remap = [
- "file:///(.*?)/pages/img/(.*) file:///$1/public/img/$2",
- "file:///(.*?)/pages/resources/(.*) file:///$1/public/resources/$2",
- "file:///([^#.?]+)(#.*)?$ file:///$1.mdx$2",
- "\\\\& &"
+ # Handle resource files without adding .mdx extension
+ "file:///pages/(.*?)\\.(pdf|png|jpg|jpeg|gif|svg|json)$ file:///./pages/$1.$2",
+ # Handle URL-encoded anchors (%23) for mdx files
+ "file:///([^%\\.]+)%23(.*) file:///./pages/$1.mdx#$2",
+ # Handle regular anchors (#) for mdx files
+ "file:///([^#\\.]+)#(.*) file:///./pages/$1.mdx#$2",
+ # Handle regular mdx files without anchors
+ "file:///([^#%\\.]+)$ file:///./pages/$1.mdx",
]
-# Base URL or website root directory to check relative URLs.
-base = "./pages"
+# Base URL or website root directory to check relative URLs
+base = "."
############################# Exclusions ##########################
-
# Exclude loopback IP address range and localhost from checking.
exclude_loopback = true
-
# Exclude all mail addresses from checking.
exclude_mail = true
-
-# Exclude RPC URLs from checking.
+# Exclude RPC URLs from checking
exclude = [
'https://mainnet.optimism.io',
'https://mainnet-sequencer.optimism.io',
@@ -37,8 +37,20 @@ exclude = [
'https://web.archive.org',
'https://mainnet.base.org',
'https://sepolia.base.org',
- 'https://optimism.easscan.org'
+ 'https://optimism.easscan.org',
+ '\.(pdf|zip|png|jpg|jpeg|gif|svg|json)$'
+]
+
+# Accept all status codes except 404
+accept = [
+ "100..=399",
+ "401..=403",
+ "405..=999"
]
-# Accept these status codes
-accept = ["100..=103", "200..=299", "403..=403", "502..=502"]
\ No newline at end of file
+# Use compact format for cleaner output
+format = "compact"
+
+############################# Anchors #############################
+# Enable checking for anchors in local files
+check_anchors = true
\ No newline at end of file
diff --git a/pages/builders/app-developers/transactions/parameters.mdx b/pages/builders/app-developers/transactions/parameters.mdx
index 22e450911..1f1da0aa2 100644
--- a/pages/builders/app-developers/transactions/parameters.mdx
+++ b/pages/builders/app-developers/transactions/parameters.mdx
@@ -42,7 +42,7 @@ From the block, retrieve the `baseFeePerGas` and `gasUsed` fields.
OP Mainnet adjusts the base fee based on the amount of gas used in the previous block.
If the previous block used more than 5m gas (of the 30m gas limit), then the base fee will increase by up to 10%.
If the previous block used less than 5m gas, then the base fee will decrease by up to 10%.
-Refer to the [OP Mainnet EIP-1559 Parameters](/chain/differences#eip-1559-parameters) section for more details.
+Refer to the [OP Mainnet EIP-1559 Parameters](/stack/differences#eip-1559-parameters) section for more details.
{
Select a base fee per gas
}
diff --git a/pages/builders/app-developers/transactions/troubleshooting.mdx b/pages/builders/app-developers/transactions/troubleshooting.mdx
index 2a40d74e4..9ab4daeb4 100644
--- a/pages/builders/app-developers/transactions/troubleshooting.mdx
+++ b/pages/builders/app-developers/transactions/troubleshooting.mdx
@@ -22,7 +22,6 @@ We have a workaround that users and wallet operators can implement immediately,
Set the maximum fee per gas for transactions to a relatively high value, such as 0.1 gwei.
This will *not* increase the transaction cost because the same base fee, determined by a formula, is charged to all the transactions in the block.
-[See here for more details](/builders/cex-wallet-developers/wallet-support#base-fee).
To save on the cost of L2 gas you want to minimize the max priority fee.
Also, if the [current base fee](https://optimistic.grafana.net/public-dashboards/c84a5a9924fe4e14b270a42a8651ceb8?orgId=1&refresh=5m) is comparable to 0.1 gwei or higher, you might want to suggest to users a higher multiple of the base fee than you would on L1 Ethereum because it can grow faster in the time interval between transaction creation and transaction signing and submission.
diff --git a/pages/builders/chain-operators/features/custom-gas-token.mdx b/pages/builders/chain-operators/features/custom-gas-token.mdx
index b62405f19..59064c2ee 100644
--- a/pages/builders/chain-operators/features/custom-gas-token.mdx
+++ b/pages/builders/chain-operators/features/custom-gas-token.mdx
@@ -48,7 +48,7 @@ An OP Stack chain that uses the custom gas token feature enables an end user to
* The [`v2.0.0-beta.3` release](https://github.com/ethereum-optimism/optimism/tree/op-contracts/v2.0.0-beta.3)
-enables fee withdrawals to L1 and L2. For more details on these values, see the [Withdrawal Network](/builders/chain-operators/configuration/rollup.mdx#withdrawal-network)
+enables fee withdrawals to L1 and L2. For more details on these values, see the [Withdrawal Network](/builders/chain-operators/configuration/rollup#withdrawal-network)
section of the docs.
* Deploy the L1 contracts from `contracts-bedrock` using the following command:
diff --git a/pages/builders/chain-operators/self-hosted.mdx b/pages/builders/chain-operators/self-hosted.mdx
index 31dc22ac9..f206a840f 100644
--- a/pages/builders/chain-operators/self-hosted.mdx
+++ b/pages/builders/chain-operators/self-hosted.mdx
@@ -22,8 +22,8 @@ There are two main steps to get started building your own self-hosted OP Chain:
* **Chain Architecture**: OP Chains use execution and consensus clients as well as the OP Stack's privileged roles. For more details, see the [Chain Architecture](/builders/chain-operators/architecture) guide.
* **Smart Contracts**: OP Chains use several smart contracts on the L1
blockchain to manage aspects of the Rollup. Each OP Stack chain has its own
- set of [L1 smart contracts](/stack/smart-contracts#layer-1-contracts),
- [L2 predeploy contracts](/stack/smart-contracts#layer-2-contracts-predeploys),
+ set of [L1 smart contracts](/stack/smart-contracts),
+ [L2 predeploy contracts](/stack/smart-contracts),
and [L2 preinstall contracts](/builders/chain-operators/features/preinstalls)
that are deployed when the chain is created.
* **Preinstalls**: OP Chains come with [preinstalled core contracts](/builders/chain-operators/features/preinstalls), making them usable as soon as a chain is initialized on the OP Stack.
@@ -56,7 +56,7 @@ OP Chains can be configured for throughput, cost, and other decentralization tra
{Set Public RPC Endpoint
}
- * Set the [public RPC Endpoint](/builders/chain-operators/architecture#ingress-traffic), so your OP Chain can handle large volumes of RPC requests from your users.
+ * Set the [public RPC Endpoint](/builders/chain-operators/architecture), so your OP Chain can handle large volumes of RPC requests from your users.
{Enable Analytics for Onchain Data
}
diff --git a/pages/builders/chain-operators/tools/chain-monitoring.mdx b/pages/builders/chain-operators/tools/chain-monitoring.mdx
index 14da3c81b..1dac6ef35 100644
--- a/pages/builders/chain-operators/tools/chain-monitoring.mdx
+++ b/pages/builders/chain-operators/tools/chain-monitoring.mdx
@@ -97,13 +97,13 @@ To enable metrics, pass the `--metrics.enabled` flag to the op-geth. You can cus
To enable metrics, pass the `--metrics.enabled` flag to the op-proposer. You can customize the metrics port and address via the `--metrics.port` and `--metrics.addr` flags, respectively.
-You can find more information about these flags in our [Proposer configuration doc](https://docs.optimism.io/builders/chain-operators/configuration/proposer#metricsenabled).
+You can find more information about these flags in our [Proposer configuration doc](/builders/chain-operators/configuration/proposer#metricsenabled).
### `op-batcher`
To enable metrics, pass the `--metrics.enabled` flag to the op-batcher. You can customize the metrics port and address via the `--metrics.port` and `--metrics.addr` flags, respectively.
-You can find more information about these flags in our [Batcher configuration doc](https://docs.optimism.io/builders/chain-operators/configuration/batcher#metricsenabled).
+You can find more information about these flags in our [Batcher configuration doc](/builders/chain-operators/configuration/proposer#metricsenabled).
### `op-challenger`
diff --git a/pages/builders/chain-operators/tools/op-deployer.mdx b/pages/builders/chain-operators/tools/op-deployer.mdx
index 0a814a46e..c611d27a6 100644
--- a/pages/builders/chain-operators/tools/op-deployer.mdx
+++ b/pages/builders/chain-operators/tools/op-deployer.mdx
@@ -101,7 +101,7 @@ op-deployer apply --workdir .deployer --l1-rpc-url --private-key
-#### Data Availability
+### Data Availability
Guarantee that some data will be "available" (i.e. *retrievable*) during a reasonably long time
window. In Optimism's case, the data in question are [sequencer batches](#sequencer-batch) that [validators](#validator)
@@ -363,17 +363,17 @@ need in order to verify the sequencer's work and validate the L2 chain. The [fin
should be taken as the lower bound on the availability window, since that is when data availability is the most crucial,
as it is needed to perform a [fault proof](#fault-proof). "Availability" **does not** mean guaranteed long-term storage of the data.
-#### Data Availability Provider
+### Data Availability Provider
Service that can be used to make [data available](#data-availability). Ideally, a good data availability provider provides strong *verifiable* guarantees
of data availability, such as Ethereum call data and EIP4844.
-#### Deposit
+### Deposit
L2 transaction derived from an L1 block (by the rollup driver). While transaction deposits are notably (but not only) used to "deposit" (bridge) ETH and tokens to L2, the word
*deposit* should be understood as "a transaction *deposited* to L2 from L1".
-#### Deposit contract
+### Deposit contract
L1 contract to which [EOAs](#eoa-or-externally-owned-account) and contracts may send deposits. The deposits are
emitted as log records (in Solidity, these are called *events*) for consumption by [rollup nodes](#rollup-node).
@@ -384,140 +384,140 @@ emitted as log records (in Solidity, these are called *events*) for consumption
[Merkle Patricia Trie roots](#merkle-patricia-trie) included in the L1 block.
-#### Deposited Transaction
+### Deposited Transaction
L2 transaction that was derived from L1 and included in a L2 block. There are two kinds of deposited transactions:
L1 attributes deposited transaction (submits the L1 block's attributes to the L1 Attributes Predeployed Contract) and User deposited transactions
(transactions derived from an L1 call to the deposit contract).
-#### Depositor
+### Depositor
L1 address (contract or \[EOA]) that makes (is the `msg.sender` of) the [depositing
call](#depositing-call). The *depositor* is **NOT** the originator of the [depositing transaction](#depositing-transaction) (i.e. `tx.origin`).
-#### Depositing Call
+### Depositing Call
L1 call to the deposit contract, which will be derived to a [user-deposited transaction](#user-deposited-transaction) by the rollup driver.
This call specifies all the data (destination, value, calldata, ...) for the deposited transaction.
-#### Depositing Transaction
+### Depositing Transaction
L1 transaction that makes one or more [depositing calls](#depositing-call).
-#### Deposited transaction type
+### Deposited transaction type
EIP-2718 transaction type, which specifies the input fields and correct handling of a deposited transaction.
-#### Event or log data
+### Event or log data
Data generated by the [depositing call](#depositing-call) and read by the rollup driver to derive the [deposited transaction](#deposited-transaction).
-#### Finalized L2 Head
+### Finalized L2 Head
Highest L2 block that can be derived from *finalized* L1 blocks — i.e. L1
blocks older than two L1 epochs (64 L1 [time slots](#time-slot)).
-#### Finalization Period
+### Finalization Period
The minimum amount of time (in seconds) that must elapse before a withdrawal can be finalized, sometimes called **withdrawal delay**.
The finalization period is necessary to afford sufficient time for validators to make a fault proof.
-#### L1 Attributes Deposited Transaction
+### L1 Attributes Deposited Transaction
A [deposited transaction](#deposited-transaction) that is used to register the L1 block
attributes (number, timestamp, ...) on L2 via a call to the [L1 Attributes Predeployed Contract](#l1-attributes-predeployed-contract).
That contract can then be used to read the attributes of the L1 block corresponding to the current L2 block.
-#### L1 Attributes Predeployed Contract
+### L1 Attributes Predeployed Contract
A [predeployed contract](#predeployed-contract) on L2 that can be used to retrieve the L1 block attributes of L1 blocks with a given
block number or a given block hash.
-#### L2 Chain Derivation
+### L2 Chain Derivation
The process that reads [L2 derivation inputs](#l2-derivation-inputs) from L1 in order to derive the L2
chain.
-#### L2 Chain Inception
+### L2 Chain Inception
L1 block number at which the output roots for the [genesis block](#l2-genesis-block) were proposed on the [output
oracle](#l2-output-oracle-contract) contract. In the current implementation, this is the L1 block number at which the output oracle contract was deployed or upgraded.
-#### L2 Derivation Inputs
+### L2 Derivation Inputs
Data that is found in L1 blocks and is read by the [rollup node](#rollup-node) to construct [payload
attributes](#payload-attributes). L2 derivation inputs include: L1 block attributes (block number, timestamp, basefee), deposits (as log data),
sequencer batches (as transaction data), and system configuration updates (as log data).
-#### Payload Attributes
+### Payload Attributes
Object that can be derived from [L2 chain derivation inputs](#l2-derivation-inputs) found on L1, which are
then passed to the [execution engine](#execution-engine) to construct L2 blocks. The payload attributes object essentially
encodes a [block](#block) without output properties.
-#### Relayer
+### Relayer
EOA on L1 which finalizes a withdrawal by submitting the data necessary to verify its inclusion on L2.
-#### Safe L2 Block
+### Safe L2 Block
L2 block that can be derived entirely from L1 by a [rollup node](#rollup-node). This can vary
between different nodes, based on their view of the L1 chain.
-#### Safe L2 Head
+### Safe L2 Head
Highest [safe L2 block](#safe-l2-block) that a [rollup node](#rollup-node) knows about.
-#### Sequencer Batch
+### Sequencer Batch
-List of L2 transactions (that were submitted to a sequencer) tagged with an [epoch
+A list of L2 transactions (that were submitted to a sequencer) tagged with an [epoch
number](#sequencing-epoch) and an L2 block timestamp (which can trivially be converted to a block number, given our
block time is constant). Sequencer batches are part of the [L2 derivation inputs](#l2-derivation-inputs). Each batch represents the inputs needed to build
**one** L2 block (given the existing L2 chain state) — except for the first block of each epoch, which also needs
information about deposits (cf. the section on [L2 derivation inputs](#l2-derivation-inputs)).
-#### System Configuration
+### System Configuration
Collection of dynamically configurable rollup parameters maintained
by the [`SystemConfig`](https://github.com/ethereum-optimism/optimism/blob/v1.1.4/packages/contracts-bedrock/src/L1/SystemConfig.sol) contract on L1 and read by the L2 [derivation](#l2-chain-derivation) process.
These parameters enable keys to be rotated regularly and external cost parameters to be adjusted
without the network upgrade overhead of a hardfork.
-#### Unsafe L2 Block
+### Unsafe L2 Block
L2 block that a [rollup node](#rollup-node) knows about, but which was not derived from the L1
chain. In sequencer mode, this will be a block sequenced by the sequencer itself. In validator mode, this will be a
block acquired from the sequencer via [unsafe sync](#unsafe-sync).
-#### Unsafe L2 Head
+### Unsafe L2 Head
Highest [unsafe L2 block](#unsafe-l2-block) that a [rollup node](#rollup-node) knows about.
-#### Unsafe Block Consolidation
+### Unsafe Block Consolidation
Process through which the [rollup node](#rollup-node) attempts to move the [safe L2
head](#safe-l2-head) a block forward, so that the oldest [unsafe L2 block](#unsafe-l2-block) becomes the new safe L2 head. In order to perform consolidation,
the node verifies that the [payload attributes](#payload-attributes) derived from the L1 chain match the oldest unsafe L2 block exactly.
-#### Unsafe Sync
+### Unsafe Sync
Process through which a [validator](#validator) learns about [unsafe L2 blocks](#unsafe-l2-block) from
the [sequencer](#sequencer). These unsafe blocks will later need to be confirmed by the L1 chain (via [unsafe block consolidation](#unsafe-block-consolidation)).
-#### User-Deposited Transaction
+### User-Deposited Transaction
Deposited transaction which is derived from an L1 call to the deposit contract and [depositing call](#depositing-call); explicitly excludes [L1 attributes deposited
transactions](#l1-attributes-depositedtransaction).
-#### Withdrawal transaction
+### Withdrawal transaction
Sent from L2 to L1 that may transfer data and/or value; these "transactions" exist at multiple levels (see withdrawal initiating transaction and withdrawal finalizing transaction for details).
-#### Withdrawal initiating transaction
+### Withdrawal initiating transaction
A specific transaction on L2 sent to the Withdrawals predeploy.
-#### Withdrawal finalizing transaction
+### Withdrawal finalizing transaction
A specific L1 transaction which finalizes and relays the withdrawal.
diff --git a/pages/stack/differences.mdx b/pages/stack/differences.mdx
index 5f370f4b0..ceb510744 100644
--- a/pages/stack/differences.mdx
+++ b/pages/stack/differences.mdx
@@ -81,7 +81,7 @@ The Sequencer executes transactions from the mempool in priority fee order (high
## Chain Finality
-Unlike L1s such as Ethereum, OP Stack chains have Unsafe, Safe, and Finalized Heads which indicate the state of finality for a given L2 block. Fault proofs do not impact the finalization of the L2 rollup, only the finalization of withdrawal transactions to the L1. You can read more about these [in the docs glossary](/resources/glossary#unsafe-l2-block).
+Unlike L1s such as Ethereum, OP Stack chains have Unsafe, Safe, and Finalized Heads which indicate the state of finality for a given L2 block. Fault proofs do not impact the finalization of the L2 rollup, only the finalization of withdrawal transactions to the L1. You can read more about these [in the docs glossary](/connect/resources/glossary#unsafe-l2-block).
## What's Next
diff --git a/pages/stack/interop/assets/transfer-superchainERC20.mdx b/pages/stack/interop/assets/transfer-superchainERC20.mdx
index 18e9fa29a..b5dead9f9 100644
--- a/pages/stack/interop/assets/transfer-superchainERC20.mdx
+++ b/pages/stack/interop/assets/transfer-superchainERC20.mdx
@@ -91,7 +91,7 @@ sequenceDiagram
3. The message relay will trigger the minting of tokens on the destination chain
- The transfer isn't complete until the message is successfully relayed on the destination chain. See the [technical reference guide](https://supersim.pages.dev/guides/interop/manually-relaying-interop-messages-cast) for specific relay instructions.
+ The transfer isn't complete until the message is successfully relayed on the destination chain. See the [technical reference guide](https://supersim.pages.dev/guides/interop/viem?#viem-to-send-and-relay-interop-messages) for specific relay instructions.
### Step 4: Verify completion
@@ -103,13 +103,13 @@ sequenceDiagram
3. The tokens should now be available for use on the destination chain
-For detailed technical instructions including contract addresses, specific commands, and message relaying details, refer to our [technical reference guide](https://supersim.pages.dev/guides/interop/manually-relaying-interop-messages-cast).
+For detailed technical instructions including contract addresses, specific commands, and message relaying details, refer to our [technical reference guide](https://supersim.pages.dev/guides/interop/viem?#viem-to-send-and-relay-interop-messages).
## Alternative methods
You can also use:
-* [viem bindings/actions](https://supersim.pages.dev/guides/interop/relay-using-viem) for TypeScript integration
+* [viem bindings/actions](https://supersim.pages.dev/guides/interop/viem) for TypeScript integration
## Next steps
diff --git a/pages/stack/interop/message-passing.mdx b/pages/stack/interop/message-passing.mdx
index 3be6ed39c..af661135b 100644
--- a/pages/stack/interop/message-passing.mdx
+++ b/pages/stack/interop/message-passing.mdx
@@ -48,7 +48,7 @@ Cross-chain messaging involves four main phases:
4. **Message Execution**: The destination chain receives and processes the message, executing any associated actions or state changes specified in the original message.
-For detailed implementation steps and code examples, see our [message passing implementation guide](https://supersim.pages.dev/guides/interop/relay-using-viem.html).
+For detailed implementation steps and code examples, see our [message passing implementation guide](https://supersim.pages.dev/guides/interop/viem).
## Common Use Cases
@@ -57,10 +57,10 @@ For detailed implementation steps and code examples, see our [message passing im
* Cross-chain state synchronization
* Token transfers and bridging
-For a practical example, see our [cross-chain ping pong tutorial](https://supersim.pages.dev/guides/interop/cross-chain-contract-via-l2cdm).
+For a practical example, see our [cross-chain ping pong tutorial](https://supersim.pages.dev/guides/interop/cross-chain-contract-calls-pingpong).
## Next steps
* Read about the [anatomy of a cross-chain message](/stack/interop/cross-chain-message)
* Try [Supersim](supersim) for testing cross-chain messages locally
-* Learn about [manually relaying messages](https://supersim.pages.dev/guides/interop/manually-relaying-interop-messages-cast)
+* Learn about [manually relaying messages](https://supersim.pages.dev/guides/interop/viem?#viem-to-send-and-relay-interop-messages)
diff --git a/pages/stack/rollup/outages.mdx b/pages/stack/rollup/outages.mdx
index 4f20970e9..70faa381c 100644
--- a/pages/stack/rollup/outages.mdx
+++ b/pages/stack/rollup/outages.mdx
@@ -83,7 +83,7 @@ As a security measure, transactions sent via the `OptimismPortal` are indistingu
Transactions triggered via the `OptimismPortal` contract will appear to have been sent by the L1 address that triggered the transaction **unless** the transaction was sent by a smart contract.
L2 transactions sent by smart contracts via the `OptimismPortal` contract will appear to have been sent by an "aliased" version of the smart contract's address.
-Refer to the [address aliasing](/chain/differences#address-aliasing) explainer for more information about address aliasing.
+Refer to the [address aliasing](/stack/differences#address-aliasing) explainer for more information about address aliasing.
### Inclusion rules
diff --git a/pages/stack/transactions/fees.mdx b/pages/stack/transactions/fees.mdx
index 0c8ed183d..cba93d183 100644
--- a/pages/stack/transactions/fees.mdx
+++ b/pages/stack/transactions/fees.mdx
@@ -44,7 +44,7 @@ Transactions must specify a maximum base fee higher than the block base fee to b
The actual fee charged is the block base fee, even if the transaction specifies a higher maximum base fee.
The OP Mainnet base fee behaves exactly like the Ethereum base fee with a few small parameter changes to account for the much shorter block times on OP Mainnet.
-None of these parameters should significantly impact your application, but you can read more about each of these parameters on the [OP Mainnet differences](/chain/differences#eip-1559) page.
+None of these parameters should significantly impact your application, but you can read more about each of these parameters on the [OP Mainnet differences](/stack/differences#eip-1559-parameters) page.
Read more about the base fee in the [Ethereum.org documentation](https://ethereum.org/en/developers/docs/gas/#base-fee).
### Priority fee
diff --git a/words.txt b/words.txt
index 61eb8abc2..19f670b5c 100644
--- a/words.txt
+++ b/words.txt
@@ -249,7 +249,6 @@ Openfort
oplabs
opnode's
opstack
-Opti
Pausability
pausable
pcscdpath
@@ -271,7 +270,6 @@ pprof
Precommitments
precommitments
preconfigured
-Predeploy
predeploy
Predeployed
predeployed