-You can permissionlessly launch an L3 Orbit chain that settles to one of Arbitrum's Layer 2 (L2) chains. There is an emerging licensing structure will soon make it possible to permissionlessly launch an L2 Orbit chain that settles directly to Ethereum. Please get in touch with the Arbitrum Foundation or Offchain Labs for more information.
+You can launch any Orbit chain permissionlessly.
-Note that launching a testnet doesn't require any license.
+Nitro is licensed under a Business Source license, similar to DeFi protocols like Uniswap and Aave, among others. This license contains an Additional Use Grant that permits the permissionless deployment of Nitro software on blockchains that settle to Arbitrum One or Nova.
+
+
+
+However, Orbit chains that settle to a parent chain other than Arbitrum One or Nova are subject to additional licensing guidelines under the AEP.
+
+
+
+
diff --git a/arbitrum-docs/partials/_troubleshooting-stylus-partial.mdx b/arbitrum-docs/partials/_troubleshooting-stylus-partial.mdx
index 92f712d59..d701ee5e5 100644
--- a/arbitrum-docs/partials/_troubleshooting-stylus-partial.mdx
+++ b/arbitrum-docs/partials/_troubleshooting-stylus-partial.mdx
@@ -54,7 +54,7 @@ No. Stylus contracts are compiled down to WASM. The user writes a program in Rus
### How is a Stylus contract deployed?
-Stylus contracts are deployed on chain as a blob of bytes, just like EVM ones. The only difference is that when the contract is executed, instead of invoking the EVM, we invoke a separate WASM runtime. Note that a special EOF-inspired prefix distinguishes Stylus contracts from traditional EVM contracts: when a contract's bytecode starts with the magic 0xEF000000
prefix, it's a Stylus WASM contract.
+Stylus contracts are deployed on chain as a blob of bytes, just like EVM ones. The only difference is that when the contract is executed, instead of invoking the EVM, we invoke a separate WASM runtime. Note that a special EOF-inspired prefix distinguishes Stylus contracts from traditional EVM contracts: when a contract's bytecode starts with the magic 0xEFF00000
prefix, it's a Stylus WASM contract.
diff --git a/arbitrum-docs/partials/_troubleshooting-users-partial.mdx b/arbitrum-docs/partials/_troubleshooting-users-partial.mdx
index dddd65b10..3f7435aee 100644
--- a/arbitrum-docs/partials/_troubleshooting-users-partial.mdx
+++ b/arbitrum-docs/partials/_troubleshooting-users-partial.mdx
@@ -16,7 +16,7 @@ Since transactions are processed in the order that the Sequencer receives them,
### How can I see the balance of ETH and other tokens in my wallet on Arbitrum?
-Most wallets are "connected" to one given network at a time. To view your ETH or token balances, ensure that you are connected to the appropriate Arbitrum chain. In MetaMask, you can switch networks via the "networks" dropdown. In this dropdown, select your desired network (either Arbitrum One or Arbitrum Nova for our mainnet networks). If your desired network hasn't been added to your wallet yet, you can add it at https://bridge.arbitrum.io/.
+Most wallets are "connected" to one given network at a time. To view your ETH or token balances, ensure that you are connected to the appropriate Arbitrum chain. In MetaMask and OKX Wallet, you can switch networks via the "networks" dropdown. In this dropdown, select your desired network (either Arbitrum One or Arbitrum Nova for our mainnet networks). If your desired network hasn't been added to your wallet yet, you can add it at https://bridge.arbitrum.io/.
diff --git a/arbitrum-docs/run-arbitrum-node/01-overview.md b/arbitrum-docs/run-arbitrum-node/01-overview.mdx
similarity index 56%
rename from arbitrum-docs/run-arbitrum-node/01-overview.md
rename to arbitrum-docs/run-arbitrum-node/01-overview.mdx
index a1252f9db..8858ada07 100644
--- a/arbitrum-docs/run-arbitrum-node/01-overview.md
+++ b/arbitrum-docs/run-arbitrum-node/01-overview.mdx
@@ -6,13 +6,13 @@ author: mahsamoosavi
In order to be able to _interact with_ or _build applications on_ any of the Arbitrum chains, you need access to the corresponding Arbitrum node. Options are:
-- You can use third party node providers (see the list [here](/build-decentralized-apps/reference/01-node-providers.md)) to get RPC access to fully-managed nodes
+- You can use third party node providers (see the list [here](/build-decentralized-apps/reference/01-node-providers.mdx)) to get RPC access to fully-managed nodes
- You can run your own Arbitrum node, especially if you want to always know the state of the Arbitrum chain
Here, you can find resources that help you run different types of Arbitrum nodes:
-- Step-by-step instructions for running different Arbitrum nodes, including [full Nitro node](/run-arbitrum-node/03-run-full-node.md), [full Classic node](/run-arbitrum-node/more-types/03-run-classic-node.md), [local full chain simulation](/run-arbitrum-node/04-run-local-full-chain-simulation.md), [Nitro dev node](/run-arbitrum-node/run-nitro-dev-node.mdx), [feed relay](/run-arbitrum-node/sequencer/01-run-feed-relay.md), and [validator](/run-arbitrum-node/more-types/02-run-validator-node.md)
-- Step-by-step instructions for how to [read the sequencer feed](/run-arbitrum-node/sequencer/02-read-sequencer-feed.md), [build the Nitro locally](/run-arbitrum-node/nitro/01-build-nitro-locally.md) and [run the sequencer coordinator manager UI tool](/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.md)
-- Step-by-step instructions for [how to configure a Data Availability Committee](/run-arbitrum-node/data-availability-committees/01-get-started.md)
-- [Troubleshooting page](/run-arbitrum-node/06-troubleshooting.md)
-- [Frequently asked questions](/node-running/faq.md)
+- Step-by-step instructions for running different Arbitrum nodes, including [full Nitro node](/run-arbitrum-node/03-run-full-node.mdx), [full Classic node](/run-arbitrum-node/more-types/03-run-classic-node.mdx), [local full chain simulation](/run-arbitrum-node/04-run-local-full-chain-simulation.mdx), [Nitro dev node](/run-arbitrum-node/run-nitro-dev-node.mdx), [feed relay](/run-arbitrum-node/sequencer/01-run-feed-relay.mdx), and [validator](/run-arbitrum-node/more-types/02-run-validator-node.mdx)
+- Step-by-step instructions for how to [read the sequencer feed](/run-arbitrum-node/sequencer/02-read-sequencer-feed.mdx), [build the Nitro locally](/run-arbitrum-node/nitro/01-build-nitro-locally.mdx) and [run the sequencer coordinator manager UI tool](/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.mdx)
+- Step-by-step instructions for [how to configure a Data Availability Committee](/run-arbitrum-node/data-availability-committees/01-get-started.mdx)
+- [Troubleshooting page](/run-arbitrum-node/06-troubleshooting.mdx)
+- [Frequently asked questions](/node-running/faq.mdx)
diff --git a/arbitrum-docs/run-arbitrum-node/02-quickstart.md b/arbitrum-docs/run-arbitrum-node/02-quickstart.mdx
similarity index 92%
rename from arbitrum-docs/run-arbitrum-node/02-quickstart.md
rename to arbitrum-docs/run-arbitrum-node/02-quickstart.mdx
index d270e03f6..2a60c838d 100644
--- a/arbitrum-docs/run-arbitrum-node/02-quickstart.md
+++ b/arbitrum-docs/run-arbitrum-node/02-quickstart.mdx
@@ -7,13 +7,9 @@ reader-task: Run a node with minimal effort and maximum understanding
content_type: quickstart
---
-import PublicPreviewBannerPartial from '../partials/_public-preview-banner-partial.mdx';
-
-
-
:::info
-There is no protocol level incentive to run an Arbitum full node. If you’re interested in accessing an Arbitrum chain, but you don’t want to set up your own node, see our [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.md) to get RPC access to fully-managed nodes hosted by a third party provider.
+There is no protocol level incentive to run an Arbitum full node. If you’re interested in accessing an Arbitrum chain, but you don’t want to set up your own node, see our [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx) to get RPC access to fully-managed nodes hosted by a third party provider.
:::
@@ -37,19 +33,19 @@ When it comes to interacting with the Arbitrum network, users have the option to
- Reduced trust requirements: By running a full node, users can interact with the Arbitrum network without relying on third-party services or infrastructure. This reduces the need to trust external entities and mitigates the risk of potential centralized failures or vulnerabilities.
- Lower resource requirements: Compared to archive nodes, full nodes generally require fewer resources such as storage and computational power. This makes them more accessible to users with limited hardware capabilities or those operating on resource-constrained environments.
-For detailed instructions on how to run an Arbitrum full node, see [here](/run-arbitrum-node/03-run-full-node.md).
+For detailed instructions on how to run an Arbitrum full node, see [here](/run-arbitrum-node/03-run-full-node.mdx).
### Considerations for running an Arbitrum archive node
While full nodes offer numerous advantages, there are situations where running an archive node may be more appropriate. Archive nodes store the complete history of the Arbitrum network, making them suitable for users who require extensive historical data access or advanced analytical purposes. However, it's important to note that archive nodes are more resource-intensive, requiring significant storage capacity and computational power.
-For detailed instructions on how to run an Arbitrum archive node, see [here](/run-arbitrum-node/more-types/01-run-archive-node.md).
+For detailed instructions on how to run an Arbitrum archive node, see [here](/run-arbitrum-node/more-types/01-run-archive-node.mdx).
### Considerations for running an Arbitrum classic node
-The significance of running an Arbitrum classic node is mainly applicable to individuals with specific needs for an archive node and access to classic-related commands. More details can be found [here](/run-arbitrum-node/more-types/01-run-archive-node.md).
+The significance of running an Arbitrum classic node is mainly applicable to individuals with specific needs for an archive node and access to classic-related commands. More details can be found [here](/run-arbitrum-node/more-types/01-run-archive-node.mdx).
-For detailed instructions on how to run an Arbitrum classic node, see [here](/run-arbitrum-node/more-types/03-run-classic-node.md).
+For detailed instructions on how to run an Arbitrum classic node, see [here](/run-arbitrum-node/more-types/03-run-classic-node.mdx).
### Considerations for running a feed relay
@@ -57,4 +53,4 @@ If you are running a single node, there is no requirement to set up a feed relay
In the near future, feed endpoints will mandate compression using a custom dictionary. Therefore, if you plan to connect to a feed using anything other than a standard node, it is strongly advised to run a local feed relay. This will ensure that you have access to an uncompressed feed by default, maintaining optimal performance and compatibility.
-For detailed instructions on how to run a feed relay, see [here](/run-arbitrum-node/sequencer/01-run-feed-relay.md).
+For detailed instructions on how to run a feed relay, see [here](/run-arbitrum-node/sequencer/01-run-feed-relay.mdx).
diff --git a/arbitrum-docs/run-arbitrum-node/03-run-full-node.md b/arbitrum-docs/run-arbitrum-node/03-run-full-node.mdx
similarity index 86%
rename from arbitrum-docs/run-arbitrum-node/03-run-full-node.md
rename to arbitrum-docs/run-arbitrum-node/03-run-full-node.mdx
index d254dcd17..20e0cd852 100644
--- a/arbitrum-docs/run-arbitrum-node/03-run-full-node.md
+++ b/arbitrum-docs/run-arbitrum-node/03-run-full-node.mdx
@@ -7,7 +7,7 @@ content_type: how-to
:::info
-There is no protocol-level incentive to run an Arbitum full node. If you’re interested in accessing an Arbitrum chain but don’t want to set up your own node, see our [Node Providers](/build-decentralized-apps/reference/01-node-providers.md) to get RPC access to fully managed nodes hosted by a third-party provider.
+There is no protocol-level incentive to run an Arbitum full node. If you’re interested in accessing an Arbitrum chain but don’t want to set up your own node, see our [Node Providers](/build-decentralized-apps/reference/01-node-providers.mdx) to get RPC access to fully managed nodes hosted by a third-party provider.
:::
@@ -45,23 +45,23 @@ Even though there are alpha and beta versions of the ` for execution layer.
- - If the chain is running [ArbOS 20](/run-arbitrum-node/arbos-releases/arbos20.md), additionally use the parameter `--parent-chain.blob-client.beacon-url=` for consensus layer. You can find a list of beacon chain RPC providers [here](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md).
+ - If the chain is running [ArbOS 20](/run-arbitrum-node/arbos-releases/arbos20.mdx), additionally use the parameter `--parent-chain.blob-client.beacon-url=` for consensus layer. You can find a list of beacon chain RPC providers [here](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx).
- It must provide a standard layer 1 node RPC endpoint that you run yourself or from a node provider.
- - Note: historical blob data is required for chains running [ArbOS 20](/run-arbitrum-node/arbos-releases/arbos20.md) to properly sync up if they are new or have been offline for more than 18 days. This means the consensus layer RPC endpoint you use may also need to provide historical blob data. Please see [Special notes on ArbOS 20: Atlas support for EIP-4844](/run-arbitrum-node/arbos-releases/arbos20.md#special-notes-on-arbos-20-atlas-support-for-eip-4844) for more details.
+ - Note: historical blob data is required for chains running [ArbOS 20](/run-arbitrum-node/arbos-releases/arbos20.mdx) to properly sync up if they are new or have been offline for more than 18 days. This means the consensus layer RPC endpoint you use may also need to provide historical blob data. Please see [Special notes on ArbOS 20: Atlas support for EIP-4844](/run-arbitrum-node/arbos-releases/arbos20.mdx#special-notes-on-arbos-20-atlas-support-for-eip-4844) for more details.
- Note: this parameter was called `--l1.url` in versions prior to `v2.1.0`
- Note: 8545 is usually the default port for the execution layer. For the Beacon endpoint port, you should connect to the correct port set on your parent chain's consensus client.
- L2 chain ID or name
- - Use the parameter `--chain.id=` to set the L2 chain from its chain id. See [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.md#rpc-endpoints) for a list of Arbitrum chains and their respective L2 chain IDs.
+ - Use the parameter `--chain.id=` to set the L2 chain from its chain id. See [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx) for a list of Arbitrum chains and their respective L2 chain IDs.
- Alternatively, you can use the parameter `--chain.name=` to set the L2 chain from its name (options are: `arb1`, `nova` and `sepolia-rollup`)
- Note: this parameter was called --l2.chain-id and only accepted chain IDs in versions before `v2.1.0`
diff --git a/arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.md b/arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.mdx
similarity index 99%
rename from arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.md
rename to arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.mdx
index ede8fe566..9c3e2aa5b 100644
--- a/arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.md
+++ b/arbitrum-docs/run-arbitrum-node/04-run-local-full-chain-simulation.mdx
@@ -151,6 +151,6 @@ Do not use any of these addresses in a production environment.
Here, We show a list of the parameters that might be useful when running a local devnode. You can also use the flag `./test-node.bash --help` to get them.
-import OptionalDevNodeCLIFlagsPartial from '../partials/_local-devnet-flags.md';
+import OptionalDevNodeCLIFlagsPartial from '../partials/_local-devnet-flags.mdx';
diff --git a/arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md b/arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx
similarity index 96%
rename from arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md
rename to arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx
index 348ef7d10..ae7fb37cd 100644
--- a/arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md
+++ b/arbitrum-docs/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx
@@ -3,10 +3,6 @@ title: 'L1 Ethereum beacon chain RPC providers'
author: dlee
---
-import PublicPreviewBannerPartial from '../partials/_public-preview-banner-partial.mdx';
-
-
-
:::info Note
This reference document provides an overview of Ethereum beacon chain RPC providers for Arbitrum validators to use for accessing blob data following Ethereum's Dencun upgrade in March 2024. The list curated here is **not comprehensive and in no way does Offchain Labs endorse or benefit from your use of any of these providers.**
:::
@@ -15,7 +11,7 @@ Following [Ethereum's Dencun upgrade in March 2024](https://eips.ethereum.org/EI
### What does this mean for node operators?
-To run a node for an L2 Arbitrum chain (i.e. Arbitrum One, Arbitrum Nova, and L2 Orbit chains), your node will need access to blob data to sync up to the latest state of your Arbitrum L2 chain. Blob data on Ethereum is stored on the beacon chain and is inaccessible to the EVM, hence why dedicated RPC endpoints for the beacon chain will be required after the Dencun upgrade. You can find more details on node requirements in the [Run a full node guide](/run-arbitrum-node/03-run-full-node.md).
+To run a node for an L2 Arbitrum chain (i.e. Arbitrum One, Arbitrum Nova, and L2 Orbit chains), your node will need access to blob data to sync up to the latest state of your Arbitrum L2 chain. Blob data on Ethereum is stored on the beacon chain and is inaccessible to the EVM, hence why dedicated RPC endpoints for the beacon chain will be required after the Dencun upgrade. You can find more details on node requirements in the [Run a full node guide](/run-arbitrum-node/03-run-full-node.mdx).
Furthermore, new node operators joining a network or node operators who come online following an extended period of offline time will require access to _historical_ blob data to sync up to the latest state of their Arbitrum chain.
diff --git a/arbitrum-docs/run-arbitrum-node/06-troubleshooting.md b/arbitrum-docs/run-arbitrum-node/06-troubleshooting.mdx
similarity index 100%
rename from arbitrum-docs/run-arbitrum-node/06-troubleshooting.md
rename to arbitrum-docs/run-arbitrum-node/06-troubleshooting.mdx
diff --git a/arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.md b/arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.mdx
similarity index 93%
rename from arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.md
rename to arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.mdx
index 4e62df41e..6b503cfe9 100644
--- a/arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.md
+++ b/arbitrum-docs/run-arbitrum-node/arbos-releases/01-overview.mdx
@@ -23,13 +23,13 @@ import PublicPreviewBannerPartial from '../../node-running/partials/_upgrade-cad
ArbOS upgrades are carried out by the chain's owner; in the case of Arbitrum One and Nova, the owner is the Arbitrum DAO and so an upgrade will require a governance proposal and vote to pass to complete the upgrade. [This is an example of a Nitro release that contains an ArbOS version bump, specifically to ArbOS 11](https://github.com/OffchainLabs/nitro/releases/tag/v2.2.0).
-Visit [Inside Arbitrum Nitro](/how-arbitrum-works/inside-arbitrum-nitro.md) to learn more about Nitro's architecture; more information about ArbOS software releases is available on [the Arbitrum DAO forum](https://forum.arbitrum.foundation/t/arbitrum-arbos-upgrades/19695).
+Visit [Inside Arbitrum Nitro](/how-arbitrum-works/01-a-gentle-introduction.mdx) to learn more about Nitro's architecture; more information about ArbOS software releases is available on [the Arbitrum DAO forum](https://forum.arbitrum.foundation/t/arbitrum-arbos-upgrades/19695).
## List of available ArbOS releases
-- [ArbOS 32 "Bianca"](/run-arbitrum-node/arbos-releases/arbos32.md)
-- [ArbOS 20 "Atlas"](/run-arbitrum-node/arbos-releases/arbos20.md)
-- [ArbOS 11](/run-arbitrum-node/arbos-releases/arbos11.md)
+- [ArbOS 32 "Bianca"](/run-arbitrum-node/arbos-releases/arbos32.mdx)
+- [ArbOS 20 "Atlas"](/run-arbitrum-node/arbos-releases/arbos20.mdx)
+- [ArbOS 11](/run-arbitrum-node/arbos-releases/arbos11.mdx)
## Naming and numbering scheme
diff --git a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.md b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.mdx
similarity index 65%
rename from arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.md
rename to arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.mdx
index a45458ac7..eb89fa653 100644
--- a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.md
+++ b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos11.mdx
@@ -22,10 +22,10 @@ Formal release notes can be found [here](https://github.com/OffchainLabs/nitro/r
- [EIP-3855: PUSH0 instruction](https://eips.ethereum.org/EIPS/eip-3855)
- [EIP-3860: Limit and meter initcode](https://eips.ethereum.org/EIPS/eip-3860)
- [EIP-6049: Deprecate SELFDESTRUCT](https://eips.ethereum.org/EIPS/eip-6049)
-- Improvements and fixes for [retryable tickets](/how-arbitrum-works/arbos/l1-l2-messaging.md) to ensure that the fee calculation to redeem retryable tickets will take into account both the infrastructure fee and the network fee. The infrastructure fee is the minimum L2 base fee only, while the network fee collects L2 congestion charges. This is important for [AnyTrust chains](/how-arbitrum-works/inside-anytrust.md) like Arbitrum Nova because members of the Data Availability Committee (DAC) gets paid a percentage of the infrastructure fee but not the network fee. Previously, the calculations to determine the fee for redeeming retryable tickets did not consider the infrastructure fee.
-- Fixes an issue where the [`ArbOwnerPublic` precompile](/build-decentralized-apps/precompiles/02-reference.md#arbownerpublic) returned the incorrect list of chain owners. This does not change the parties who are able to perform chain owner actions. As intended, only the Arbitrum DAO is able to take chain owner actions for Arbitrum One and Nova.
-- Resolves an issue where the [`arbBlockHash` method](/build-decentralized-apps/precompiles/02-reference.md#arbsys) would take up all the gas when reverting. The previous incorrect behavior meant that if a transaction calls `arbBlockHash` with an out-of-range block number, then the transaction would consume all the gas when reverting.
-- Addition of the [`L1RewardReceipient`](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo) and [`L1RewardRate`](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo) precompile methods to view L1 pricing parameters and make it easier to view the current chain configuration.
+- Improvements and fixes for [retryable tickets](/how-arbitrum-works/10-l1-to-l2-messaging.mdx) to ensure that the fee calculation to redeem retryable tickets will take into account both the infrastructure fee and the network fee. The infrastructure fee is the minimum L2 base fee only, while the network fee collects L2 congestion charges. This is important for [AnyTrust chains](/how-arbitrum-works/08-anytrust-protocol.mdx) like Arbitrum Nova because members of the Data Availability Committee (DAC) gets paid a percentage of the infrastructure fee but not the network fee. Previously, the calculations to determine the fee for redeeming retryable tickets did not consider the infrastructure fee.
+- Fixes an issue where the [`ArbOwnerPublic` precompile](/build-decentralized-apps/precompiles/02-reference.mdx#arbownerpublic) returned the incorrect list of chain owners. This does not change the parties who are able to perform chain owner actions. As intended, only the Arbitrum DAO is able to take chain owner actions for Arbitrum One and Nova.
+- Resolves an issue where the [`arbBlockHash` method](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) would take up all the gas when reverting. The previous incorrect behavior meant that if a transaction calls `arbBlockHash` with an out-of-range block number, then the transaction would consume all the gas when reverting.
+- Addition of the [`L1RewardReceipient`](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo) and [`L1RewardRate`](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo) precompile methods to view L1 pricing parameters and make it easier to view the current chain configuration.
- Fix the `ArbOwner` precompile to disallow emitting logs in `STATICCALL` contexts, bringing this in line with how the EVM is expected to behave as `STATICCALL` invocations should never be able to emit logs. The previous incorrect behavior would mean that a log was emitted when a chain owner made a `STATICCALL` on the `ArbOwner` precompile.
### Reference links for ArbOS 11
diff --git a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.md b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.mdx
similarity index 99%
rename from arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.md
rename to arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.mdx
index 757430d3e..adfb3d807 100644
--- a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.md
+++ b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos20.mdx
@@ -12,7 +12,7 @@ ArbOS 20 Atlas is shipped via Nitro v2.3.1, which is available on Docker hub wit
- [Nitro v2.3.1](https://github.com/OffchainLabs/nitro/releases/tag/v2.3.1) or higher
- [nitro-contracts v1.2.1](https://github.com/OffchainLabs/nitro-contracts/releases/tag/v1.2.1) or higher
- Wasm module root: `0x8b104a2e80ac6165dc58b9048de12f301d70b02a0ab51396c22b4b4b802a16a4`
-- Access to the [Ethereum Beacon Chain APIs](https://ethereum.github.io/beacon-APIs/#/), either from your own self-managed L1 Ethereum node or from a 3rd party provider like [those on this list](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md).
+- Access to the [Ethereum Beacon Chain APIs](https://ethereum.github.io/beacon-APIs/#/), either from your own self-managed L1 Ethereum node or from a 3rd party provider like [those on this list](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx).
### High-level description of ArbOS 20 changes
@@ -28,7 +28,7 @@ ArbOS 20 is an upgrade to enable Arbitrum's support for L1 Ethereum's [Dencun up
### Special notes on ArbOS 20: Atlas support for EIP-4844
-- Upgrading to **the Atlas ArbOS release will require access to L1 Ethereum beacon chain endpoints to retrieve blob data. For nodes of a chain that come online 18 days after Atlas gets activated on their chain will need access to historical data to sync up to the latest state.** If you are not operating your own Ethereum consensus client, [please visit this page to view a list of beacon chain RPC providers](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.md) where you can access blob data.
+- Upgrading to **the Atlas ArbOS release will require access to L1 Ethereum beacon chain endpoints to retrieve blob data. For nodes of a chain that come online 18 days after Atlas gets activated on their chain will need access to historical data to sync up to the latest state.** If you are not operating your own Ethereum consensus client, [please visit this page to view a list of beacon chain RPC providers](/run-arbitrum-node/05-l1-ethereum-beacon-chain-rpc-providers.mdx) where you can access blob data.
- Applications on Arbitrum will not have to be modified or take any explicit action to get the benefits of using EIP-4844 (i.e. the whole chain opts-in with ArbOS 20 “Atlas”).
- ArbOS 20 “Atlas” adds support for Arbitrum chains to send data in a blob storage format to data availability layers, like L1 Ethereum, that support the blob transaction type. This includes Arbitrum One and Arbitrum Nova. ArbOS 20 “Atlas” does not add support for Arbitrum chains to receive data in a blob storage format. This means that an L3 Orbit chain on top of an Arbitrum L2 will use calldata when posting L3 transaction data to the underlying L2. The L2 Arbitrum chain will then be able to post data to a L1 data availability layer like Ethereum using blobs.
- There currently aren’t estimates on what the end-user gas savings of using blob data will be. This topic is something being actively worked on and monitored. Without Mainnet data, the estimates for blob gas prices will not be accurate enough to reliably predict the cost reductions that users will experience - and even with Mainnet data, the savings will vary by use case (i.e. no current way to predict the price impacts from all blob gas market participants yet). In general, however, the use of blobs will reduce the cost of using Arbitrum L2s. To learn more about what EIP-4844 will mean for L2 users, please checkout this [blog post on Medium by Offchain Lab's Co-foudner and Chief Scientist Ed Felten](https://medium.com/offchainlabs/eip-4844-what-does-it-mean-for-l2-users-5e86ebc4c028).
diff --git a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.md b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.mdx
similarity index 77%
rename from arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.md
rename to arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.mdx
index fcaeb0e81..7b6dd6832 100644
--- a/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.md
+++ b/arbitrum-docs/run-arbitrum-node/arbos-releases/arbos32.mdx
@@ -13,28 +13,28 @@ Future versions of Nitro may remove support for Orbit chains which have historic
:::
-ArbOS 32 "Bianca" is shipped via [Nitro v3.2.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.2.1), which is available on Docker hub with the image tag: `offchainlabs/nitro-node:v3.2.1-d81324d`. This release of Nitro is a mandatory upgrade for Arbitrum One and Nova validators. For Arbitrum One and Nova, the ArbOS 32 "Bianca" upgrade required a governance vote to activate.
+The minimum Nitro version that supports ArbOS 32 "Bianca" is [Nitro v3.3.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.3.1), which is available on Docker hub with the image tag: `offchainlabs/nitro-node:v3.3.1-e326369`. This release of Nitro is a mandatory upgrade for Arbitrum One and Nova validators. For Arbitrum One and Nova, the ArbOS 32 "Bianca" upgrade required a governance vote to activate.
-Please note that it is important that you only run the Nitro v3.2.1 against trusted databases. If you want to use an untrusted database, you can first remove the `wasm` directory if it exists (it might be inside the `nitro` folder). Otherwise, the database may have malicious, unvalidated code that can result in remote code execution. This is also mitigated by ensuring you run the Arbitrum Nitro node inside Docker.
+Please note that it is important that you only run the Nitro v3.3.1 against trusted databases. If you want to use an untrusted database, you can first remove the `wasm` directory if it exists (it might be inside the `nitro` folder). Otherwise, the database may have malicious, unvalidated code that can result in remote code execution. This is also mitigated by ensuring you run the Arbitrum Nitro node inside Docker.
-The Arbitrum docs will remain the canonical home for information regarding ArbOS releases, with more details found on the [ArbOS Software Releases Overview page](./01-overview.md).
+The Arbitrum docs will remain the canonical home for information regarding ArbOS releases, with more details found on the [ArbOS Software Releases Overview page](./01-overview.mdx).
### Requirements:
-- [Nitro 3.2.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.2.1) or higher
+- [Nitro v3.3.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.3.1) or higher
- [nitro-contracts v2.1.0](https://github.com/OffchainLabs/nitro-contracts/releases/tag/v2.1.0) or higher
- WASM module root: `0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39`
### High-level description of ArbOS 32 changes
-ArbOS 32 Bianca is a major upgrade for Arbitrum chains. As a refresher, ArbOS upgrades can be treated as Arbitrum’s equivalent of a hard fork - more can be read about this subject over in [Arbitrum ArbOS upgrades](https://forum.arbitrum.foundation/t/arbitrum-arbos-upgrades/19695). Please note that ArbOS 21 Bianca is an upgrade that builds upon [ArbOS 20 Atlas](./arbos20.md).
+ArbOS 32 Bianca is a major upgrade for Arbitrum chains. As a refresher, ArbOS upgrades can be treated as Arbitrum’s equivalent of a hard fork - more can be read about this subject over in [Arbitrum ArbOS upgrades](https://forum.arbitrum.foundation/t/arbitrum-arbos-upgrades/19695). Please note that ArbOS 21 Bianca is an upgrade that builds upon [ArbOS 20 Atlas](./arbos20.mdx).
-ArbOS 32 Bianca brings many features, improvements, and bug fixes to Arbitrum chains. A full list of changes can be found in the Nitro release notes for [Nitro 3.2.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.2.1) or higher (as Nitro 3.2.1 is the endorsed Nitro node version for ArbOS 32 Bianca). Highlighted below are a few of the most impactful and critical features that are introduced with ArbOS 32 Bianca:
+ArbOS 32 Bianca brings many features, improvements, and bug fixes to Arbitrum chains. A full list of changes can be found in the Nitro release notes for [Nitro v3.3.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.3.1) or higher (as Nitro 3.3.1 is the endorsed Nitro node version for ArbOS 32 Bianca). Highlighted below are a few of the most impactful and critical features that are introduced with ArbOS 32 Bianca:
-- Addition and subsequent activation of [Stylus](../../stylus/stylus-gentle-introduction.md) on Arbitrum chains through the addition of a new WebAssembly-based (WASM) virtual machine that runs alongside the EVM. Stylus enables developers to write smart contracts in new programming languages that compile to WASM, like Rust, that are more efficient and safer than Solidity smart contracts while retaining complete interoperability.
+- Addition and subsequent activation of [Stylus](../../stylus/gentle-introduction.mdx) on Arbitrum chains through the addition of a new WebAssembly-based (WASM) virtual machine that runs alongside the EVM. Stylus enables developers to write smart contracts in new programming languages that compile to WASM, like Rust, that are more efficient and safer than Solidity smart contracts while retaining complete interoperability.
- Adding support for [RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md) decreases the costs of verifying the secp256r1 curve on-chain [by 99% when compared to current implementations](https://www.alchemy.com/blog/what-is-rip-7212), making secp256r1 verification more feasible for everyday use and enabling dApp developers and protocols to offer their users improved UX on Arbitrum One and Arbitrum Nova. Without this precompile, verifying this signature on-chain is extremely expensive. Passkey-based wallets offer better security than a typical EOA and seamless cross-device support. Many wallets, notably apps using embedded wallets, have been requesting this feature for over a year.
- [Only relevant to Arbitrum Nova] Updated the transaction fee router contracts on Arbitrum Nova to allow for fees collected to be automatically sent to the ArbitrumDAO Treasury on Arbitrum One. Currently, the ArbitrumDAO receives Arbitrum Nova transaction fees that are sent to an ArbitrumDAO-controlled address that requires a constitutional proposal to move, which is less efficient. This change is specific to Arbitrum Nova and is not expected to impact Orbit chains.
-- Introduction of a new Fast Withdrawals feature for Orbit chains to achieve fast finality. This feature allows for transactions processed by a committee of validators to be unanimously confirmed as quickly as 15 minutes, as opposed to the default 7-day challenge period. While any Orbit chain can adopt Fast Withdrawals, we only recommend Fast Withdrawals for AnyTrust chains. Note that to enable this feature, separate steps must be followed (below).
+- Introduction of a new Fast Withdrawals feature for Orbit chains to achieve fast finality. This feature allows for transactions processed by a committee of validators to be unanimously confirmed as quickly as 15 minutes, as opposed to the default 6.4-day challenge period. While any Orbit chain can adopt Fast Withdrawals, we only recommend Fast Withdrawals for AnyTrust chains. Note that to enable this feature, separate steps must be followed (below).
### Additional requirement for Arbitrum Orbit chains who wish to take advantage of the Stylus Cache Manager
@@ -42,7 +42,7 @@ ArbOS 32 Bianca brings many features, improvements, and bug fixes to Arbitrum ch
It is strongly recommended that teams upgrading to ArbOS 32 also spend the time following the instructions described below to deploy and enable the Stylus Cache Manager. Even if your team does not intend to build with Stylus in the immediate term, enabling the Cache Manager ensures that future usage of Arbitrum Stylus on your chain is smooth and provides a consistent UX with the developer experience of building with Arbitrum Stylus on Arbitrum One.
:::
-Specific to Stylus and ArbOS 32 "Bianca", we have developed a caching strategy that stores frequently accessed contracts in memory to reduce the costs and time associated with contract execution from repeated initializations. Check out the [Stylus caching strategy docs](../../stylus/concepts/stylus-cache-manager.md) to learn more.
+Specific to Stylus and ArbOS 32 "Bianca", we have developed a caching strategy that stores frequently accessed contracts in memory to reduce the costs and time associated with contract execution from repeated initializations. Check out the [Stylus caching strategy docs](../../stylus/how-tos/caching-contracts.mdx) to learn more.
In order to take advantage of this caching strategy, an additional step is required to deploy and enable it's use on your Orbit chain.
@@ -54,7 +54,7 @@ After you have upgraded your Orbit chain to ArbOS 32 "Bianca" (i.e. you have ful
### Reference links for ArbOS 32 Bianca
-- [Nitro v3.2.1 release notes](https://github.com/OffchainLabs/nitro/releases/tag/v3.2.1)
+- [Nitro v3.3.1](https://github.com/OffchainLabs/nitro/releases/tag/v3.3.1)
- [ArbOS 32 "Bianca" on-chain Tally vote](https://www.tally.xyz/gov/arbitrum/proposal/108288822474129076868455956066667369439381709547570289793612729242368710728616)
- [AIP: Activate Stylus and Enable Next-Gen WebAssembly Smart Contracts (ArbOS 32)](https://forum.arbitrum.foundation/t/aip-activate-stylus-and-enable-next-gen-webassembly-smart-contracts-arbos-30/22970)
- [AIP: Support RIP-7212 for Account Abstraction Wallets (ArbOS 32)](https://forum.arbitrum.foundation/t/aip-support-rip-7212-for-account-abstraction-wallets-arbos-30/23298)
diff --git a/arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.md b/arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.mdx
similarity index 64%
rename from arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.md
rename to arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.mdx
index 8d1581443..18d9eb122 100644
--- a/arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.md
+++ b/arbitrum-docs/run-arbitrum-node/data-availability-committees/01-get-started.mdx
@@ -6,10 +6,6 @@ sidebar_position: 1
content_type: overview
---
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-
AnyTrust chains rely on an external Data
Availability Committee (DAC) to store data and provide it on-demand instead of using its{' '}
@@ -19,24 +15,24 @@ import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-pa
This section offers information and a series of how-to guides to help you along the process of setting up a Data Availability Committee. These guides target two audiences: Committee members who wish to deploy a Data Availability Server, and chain owners who wish to configure their chain with the information of the Committee.
-Before following the guides in this section, you should be familiarized with how the AnyTrust protocol works, and the role of the DAC in the protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/inside-anytrust.md)_ to learn more.
+Before following the guides in this section, you should be familiar with how the AnyTrust protocol works and the role of the DAC in the protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/08-anytrust-protocol.mdx)_ to learn more.
## If you are a DAC member
-Committee members will need to run a DAS. To do that, they will first need to generate a pair of keys and deploy a DAS. They may also choose to deploy an additional mirror DAS. Find more information in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md) and [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md).
+Committee members will need to run a DAS. To do that, they will first need to generate a pair of keys and deploy a DAS. They may also choose to deploy an additional mirror DAS. Find more information in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx) and [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx).
Here's a basic checklist of actions to complete for DAC members:
-- [Deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md). Send the following information to the chain owner:
+- [Deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx). Send the following information to the chain owner:
- Public BLS key
- The https URL for the RPC endpoint which includes some random string (e.g. das.your-chain.io/rpc/randomstring123), communicated through a secure channel
- The https URL for the REST endpoint (e.g. das.your-chain.io/rest)
-- [Deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md) if you want to complement your setup with a mirror DAS. Send the following information to the chain owner:
+- [Deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx) if you want to complement your setup with a mirror DAS. Send the following information to the chain owner:
- The https URL for the REST endpoint (e.g. das.your-chain.io/rest)
## If you are a chain owner
-Chain owners will need to gather the information from the committee members to craft the necessary data to update their chain and the batch poster (more information in [How to configure the DAC in your chain](/run-arbitrum-node/data-availability-committees/04-configure-dac.md)). They might also want to test each DAS individually, by following the testing guides available in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md#testing-the-das) and [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md#testing-the-das).
+Chain owners will need to gather the information from the committee members to craft the necessary data to update their chain and the batch poster (more information in [How to configure the DAC in your chain](/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx)). They might also want to test each DAS individually, by following the testing guides available in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx#testing-the-das) and [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx#testing-the-das).
Here's a basic checklist of actions to complete for chain owners:
@@ -44,11 +40,11 @@ Here's a basic checklist of actions to complete for chain owners:
- Public BLS Key
- URL of the RPC endpoint
- URL(s) of the REST endpoint(s)
-- Ensure that at least one DAS is running as an [archive DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md#archive-da-servers)
-- [Generate the keyset and keyset hash](/run-arbitrum-node/data-availability-committees/04-configure-dac.md#step-1-generate-the-keyset-and-keyset-hash-with-all-the-information-from-the-servers) with all the information from the servers
-- [Update the SequencerInbox contract](/run-arbitrum-node/data-availability-committees/04-configure-dac.md#step-2-update-the-sequencerinbox-contract)
-- [Craft the new configuration for the batch poster](/run-arbitrum-node/data-availability-committees/04-configure-dac.md#step-3-craft-the-new-configuration-for-the-batch-poster)
-- [Craft the new configuration for your chain's nodes](/run-arbitrum-node/data-availability-committees/04-configure-dac.md#step-4-craft-the-new-configuration-for-your-chains-nodes)
+- Ensure that at least one DAS is running as an [archive DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx#archive-da-servers)
+- [Generate the keyset and keyset hash](/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx#step-1-generate-the-keyset-and-keyset-hash-with-all-the-information-from-the-servers) with all the information from the servers
+- [Update the SequencerInbox contract](/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx#step-2-update-the-sequencerinbox-contract)
+- [Craft the new configuration for the batch poster](/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx#step-3-craft-the-new-configuration-for-the-batch-poster)
+- [Craft the new configuration for your chain's nodes](/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx#step-4-craft-the-new-configuration-for-your-chains-nodes)
## Ask for help
diff --git a/arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.md b/arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx
similarity index 98%
rename from arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.md
rename to arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx
index 7bdac3a2f..c4cf02902 100644
--- a/arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.md
+++ b/arbitrum-docs/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx
@@ -6,10 +6,6 @@ sidebar_position: 2
content_type: how-to
---
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-
AnyTrust chains rely on an external Data
Availability Committee (DAC) to store data and provide it on-demand instead of using its{' '}
@@ -22,11 +18,11 @@ In this how-to, you'll learn how to deploy a DAS that exposes:
1. **An RPC interface** that the sequencer uses to store batches of data on the DAS.
2. **An HTTP REST interface** that lets the DAS respond to requests for those batches of data.
-For more information related to configuring a DAC, refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.md)_.
+For more information related to configuring a DAC, refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.mdx)_.
This how-to assumes that you're familiar with:
-- The DAC's role in the AnyTrust protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/inside-anytrust.md)_ for a refresher.
+- The DAC's role in the AnyTrust protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/08-anytrust-protocol.mdx)_ for a refresher.
- [Kubernetes](https://kubernetes.io/). The examples in this guide use Kubernetes to containerize your DAS.
## How does a DAS work?
@@ -85,7 +81,7 @@ DA servers also have an optional REST aggregator which, when a data batch is not
Gather the following information:
- The latest Nitro docker image: `@latestNitroNodeImage@`
-- An RPC endpoint for the parent chain. It is recommended to use a [third-party provider RPC](/build-decentralized-apps/reference/01-node-providers.md#third-party-rpc-providers) or [run your own node](/node-running/how-tos/running-an-orbit-node.mdx) to prevent being rate limited.
+- An RPC endpoint for the parent chain. It is recommended to use a [third-party provider RPC](/build-decentralized-apps/reference/01-node-providers.mdx#third-party-rpc-providers) or [run your own node](/node-running/how-tos/running-an-orbit-node.mdx) to prevent being rate limited.
- The SequencerInbox contract address in the parent chain.
- If you wish to configure a [REST aggregator for your DAS](#state-synchronization), you'll need the URL where the list of REST endpoints is kept.
@@ -396,7 +392,7 @@ After you decode a batch poster transaction and get its `data` within the functi
The first part (1 byte) is the `header flag`, which is used to specify which type of batch it is. Here we need to check if it has bit `0x80` (For example, `0x88` and `0x80` are both valid, but `0x55` is wrong).
-The second part (32 bytes) is the keyset hash. You can learn more about what keyset is [here](/how-arbitrum-works/inside-anytrust#keysets).
+The second part (32 bytes) is the keyset hash. You can learn more about what keyset is [here](/how-arbitrum-works/08-anytrust-protocol.mdx#keysets).
The third part (32 bytes) is the data hash, and this is what we need to retrieve data. When you get this hash, you can retrieve data directly by following what we demonstrate in Step 4.
@@ -409,7 +405,7 @@ In general, mirror DA servers serve two main purposes:
1. Prevent the main DAS from having to serve requests for data, allowing it to focus only on storing the data received.
2. Provide resiliency to the network in the case of a DAS going down.
-Find information about how to setup a mirror DAS in [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md).
+Find information about how to setup a mirror DAS in [How to deploy a mirror DAS](/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx).
## Security considerations
diff --git a/arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md b/arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx
similarity index 96%
rename from arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md
rename to arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx
index 5e7ea47d2..6ac8496c1 100644
--- a/arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.md
+++ b/arbitrum-docs/run-arbitrum-node/data-availability-committees/03-deploy-mirror-das.mdx
@@ -6,13 +6,9 @@ sidebar_position: 3
content_type: how-to
---
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-
:::caution Running a regular DAS vs running a mirror DAS
-The main use-case for running a mirror DAS is to complement your setup as a Data Availability Committee (DAC) member. That means that you should run your main DAS first, and then configure the mirror DAS. Refer to _[How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md)_ if needed.
+The main use-case for running a mirror DAS is to complement your setup as a Data Availability Committee (DAC) member. That means that you should run your main DAS first, and then configure the mirror DAS. Refer to _[How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx)_ if needed.
:::
@@ -23,16 +19,16 @@ The main use-case for running a mirror DAS is to complement your setup as a Data
members of the DAC run a Data Availability Server (DAS) to handle these operations.
-In this how-to, you'll learn how to configure a mirror DAS that serves `GET` requests for stored batches of information through a REST HTTP interface. For a refresher on DACs, refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.md)_.
+In this how-to, you'll learn how to configure a mirror DAS that serves `GET` requests for stored batches of information through a REST HTTP interface. For a refresher on DACs, refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.mdx)_.
This how-to assumes that you're familiar with:
-- How a regular DAS works and what configuration options are available. Refer to _[How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md)_ for a refresher.
+- How a regular DAS works and what configuration options are available. Refer to _[How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx)_ for a refresher.
- [Kubernetes](https://kubernetes.io/). The examples in this guide use Kubernetes to containerize your DAS.
## What is a mirror DAS?
-To avoid exposing the REST interface of your main DAS to the public in order to prevent spamming attacks (as explained in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md#security-considerations)), you can choose to run a mirror DAS to complement your setup. The mirror DAS will handle all public REST requests, while reading information from the main DAS via its (now private) REST interface.
+To avoid exposing the REST interface of your main DAS to the public in order to prevent spamming attacks (as explained in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx#security-considerations)), you can choose to run a mirror DAS to complement your setup. The mirror DAS will handle all public REST requests, while reading information from the main DAS via its (now private) REST interface.
In general, mirror DA servers serve two main purposes:
@@ -41,7 +37,7 @@ In general, mirror DA servers serve two main purposes:
## Configuration options
-A mirror DAS will use the same tool and, thus, the same configuration options as your main DAS. You can find an explanation of those options in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md#configuration-options).
+A mirror DAS will use the same tool and, thus, the same configuration options as your main DAS. You can find an explanation of those options in [How to deploy a DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx#configuration-options).
## How to deploy a mirror DAS
@@ -50,7 +46,7 @@ A mirror DAS will use the same tool and, thus, the same configuration options as
Gather the following information:
- The latest Nitro docker image: `@latestNitroNodeImage@`
-- An RPC endpoint for the parent chain. It is recommended to use a [third-party provider RPC](/build-decentralized-apps/reference/01-node-providers.md#third-party-rpc-providers) or [run your own node](/node-running/how-tos/running-an-orbit-node.mdx) to prevent being rate limited.
+- An RPC endpoint for the parent chain. It is recommended to use a [third-party provider RPC](/build-decentralized-apps/reference/01-node-providers.mdx#third-party-rpc-providers) or [run your own node](/node-running/how-tos/running-an-orbit-node.mdx) to prevent being rate limited.
- The SequencerInbox contract address in the parent chain.
- URL of the list of REST endpoints of other DA servers to configure the REST aggregator.
diff --git a/arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.md b/arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx
similarity index 94%
rename from arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.md
rename to arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx
index 8fb3a0efc..59a0629af 100644
--- a/arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.md
+++ b/arbitrum-docs/run-arbitrum-node/data-availability-committees/04-configure-dac.mdx
@@ -8,10 +8,6 @@ sidebar_position: 4
content_type: how-to
---
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-
AnyTrust chains rely on an external Data
Availability Committee (DAC) to store data and provide it on-demand instead of using its{' '}
@@ -21,13 +17,13 @@ import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-pa
and retrieve data from them.
-In this how-to, you'll learn how to configure the DAC in your chain. Refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.md)_ for the full process of running DA servers and configuring the chain.
+In this how-to, you'll learn how to configure the DAC in your chain. Refer to the _[Introduction](/run-arbitrum-node/data-availability-committees/01-get-started.mdx)_ for the full process of running DA servers and configuring the chain.
This how-to assumes that you're familiar with:
-- The DAC's role in the AnyTrust protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/inside-anytrust.md)_ for a refresher.
+- The DAC's role in the AnyTrust protocol. Refer to _[Inside AnyTrust](/how-arbitrum-works/08-anytrust-protocol.mdx)_ for a refresher.
- [Kubernetes](https://kubernetes.io/). The examples in this guide use Kubernetes to containerize your DAS.
-- [How to deploy a Data Availability Server (DAS)](/run-arbitrum-node/data-availability-committees/02-deploy-das.md). This is needed to understand where the data we'll be handling in this guide comes from.
+- [How to deploy a Data Availability Server (DAS)](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx). This is needed to understand where the data we'll be handling in this guide comes from.
- The [Foundry toolkit](https://github.com/foundry-rs/foundry)
## Step 0: Prerequisites
@@ -38,7 +34,7 @@ Before starting to generate the keyset and configuring the nodes and chain, you'
- URL of the RPC endpoint
- URL(s) of the REST endpoint(s)
-You should also make sure that at least one DAS is running as an [archive DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.md#archive-da-servers), otherwise the information will not be available after the expiry time.
+You should also make sure that at least one DAS is running as an [archive DAS](/run-arbitrum-node/data-availability-committees/02-deploy-das.mdx#archive-da-servers), otherwise the information will not be available after the expiry time.
## Step 1: Generate the keyset and keyset hash with all the information from the servers
@@ -48,7 +44,7 @@ The AnyTrust protocol assumes that for the `n` members of the DAC, a minimum of
To perform this signing operation, each DAC member must generate their own set of BLS public and private keys. They should do this independently and ensure these keys are random and only used by them. You can find more information about how to generate a BLS pair of keys in [Generating BLS Keys](/run-arbitrum-node/data-availability-committees/deploy-das#step-1-generate-the-bls-keypair).
-An Anytrust chain needs to know all DAC members' public keys to validate the integrity of the data being batched and posted. A _keyset_ is a list of all DAC members' RPC endpoint and BLS public key. Additionally, it also contains information about how many signatures are needed to approve a Data Availability Certificate (DACert), via a special `assumed-honest` parameter (i.e., the `h` parameter we mentioned above). This design lets the chain owner modify the DAC membership over time, and DAC members change their keys if needed. See _[Inside AnyTrust](/how-arbitrum-works/inside-arbitrum-nitro#inside-anytrust)_ for more information.
+An Anytrust chain needs to know all DAC members' public keys to validate the integrity of the data being batched and posted. A _keyset_ is a list of all DAC members' RPC endpoint and BLS public key. Additionally, it also contains information about how many signatures are needed to approve a Data Availability Certificate (DACert), via a special `assumed-honest` parameter (i.e., the `h` parameter we mentioned above). This design lets the chain owner modify the DAC membership over time, and DAC members change their keys if needed. See _[Inside AnyTrust](/how-arbitrum-works/08-anytrust-protocol.mdx)_ for more information.
We use this keyset, and its hash to configure the SequencerInbox contract with the valid keyset, and also the batch poster (to request storing information) and full nodes (to request information already stored).
diff --git a/arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.md b/arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.mdx
similarity index 77%
rename from arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.md
rename to arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.mdx
index a8272ecd5..c3cad95dc 100644
--- a/arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.md
+++ b/arbitrum-docs/run-arbitrum-node/more-types/01-run-archive-node.mdx
@@ -20,13 +20,13 @@ Before the Nitro upgrade, Arbitrum One ran on the Classic stack for about one ye
Running an Arbitrum One **full node** in **archive mode** lets you access both pre-Nitro and post-Nitro blocks, but it requires you to run **both Classic and Nitro nodes** together. You may not need to do this, depending on your use case:
-| Use case | Required node type(s) | Docs |
-| ------------------------------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
-| Access the **Arbitrum network** without running your own node | Fully managed by third-parties, exposed via RPC endpoints | [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.md) |
-| Run an **archive node** for **Arbitrum Sepolia (testnet)** or **Arbitrum Nova** | Full node (Nitro) | [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.md) |
-| Send **post-Nitro** archive requests | Full node (Nitro) | [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.md) |
-| Send **pre-Nitro** archive requests | Full node (Classic) | [How to run a full node (Classic, pre-Nitro)](/run-arbitrum-node/more-types/03-run-classic-node.md) |
-| Send **post-Nitro** _and_ **pre-Nitro** archive requests | Full node (Nitro) _and_ full node (Classic) | That's what this how-to is for; you're in the right place. |
+| Use case | Required node type(s) | Docs |
+| ------------------------------------------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| Access the **Arbitrum network** without running your own node | Fully managed by third-parties, exposed via RPC endpoints | [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx) |
+| Run an **archive node** for **Arbitrum Sepolia (testnet)** or **Arbitrum Nova** | Full node (Nitro) | [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.mdx) |
+| Send **post-Nitro** archive requests | Full node (Nitro) | [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.mdx) |
+| Send **pre-Nitro** archive requests | Full node (Classic) | [How to run a full node (Classic, pre-Nitro)](/run-arbitrum-node/more-types/03-run-classic-node.mdx) |
+| Send **post-Nitro** _and_ **pre-Nitro** archive requests | Full node (Nitro) _and_ full node (Classic) | That's what this how-to is for; you're in the right place. |
### System requirements
@@ -70,13 +70,21 @@ The minimum storage requirements will change as the Nitro chains grow (growing r
### Review and configure parameters
-| Arbitrum Nitro | Arbitrum Classic | Description |
-| ---------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `--parent-chain.connection.url=` | `--l1.url=` | Provide an standard L1 node RPC endpoint that you run yourself or from a third-party node provider (see [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.md)) |
-| `--chain.id=` | `--l2.chain-id=` | See [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.md) for a list of Arbitrum chains and the respective L2 chain IDs |
-| `--execution.caching.archive` | `--node.caching.archive` | Required for running an **Arbitrum One Nitro** archival node and retains past block state |
-| - | `--node.cache.allow-slow-lookup` | Required for running an **Arbitrum One Classic** archival node. When this option is present, it will load old blocks from disk if not in memory cache. |
-| - | `--core.checkpoint-gas-frequency=156250000` | Required for running an **Arbitrum One Classic** archival node. |
+| Arbitrum Nitro | Arbitrum Classic | Description |
+| ---------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `--parent-chain.connection.url=` | `--l1.url=` | Provide an standard L1 node RPC endpoint that you run yourself or from a third-party node provider (see [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx)) |
+| `--chain.id=` | `--l2.chain-id=` | See [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx) for a list of Arbitrum chains and the respective L2 chain IDs |
+| `--execution.caching.archive` | `--node.caching.archive` | Required for running an **Arbitrum One Nitro** archival node and retains past block state |
+| - | `--node.cache.allow-slow-lookup` | Required for running an **Arbitrum One Classic** archival node. When this option is present, it will load old blocks from disk if not in memory cache. |
+| - | `--core.checkpoint-gas-frequency=156250000` | Required for running an **Arbitrum One Classic** archival node. |
+
+| Arbitrum Nitro | Arbitrum Classic | Description |
+| ---------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `--parent-chain.connection.url=` | `--l1.url=` | Provide an standard L1 node RPC endpoint that you run yourself or from a third-party node provider (see [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx)) |
+| `--chain.id=` | `--l2.chain-id=` | See [RPC endpoints and providers](/build-decentralized-apps/reference/01-node-providers.mdx) for a list of Arbitrum chains and the respective L2 chain IDs |
+| `--execution.caching.archive` | `--node.caching.archive` | Required for running an **Arbitrum One Nitro** archival node and retains past block state |
+| - | `--node.cache.allow-slow-lookup` | Required for running an **Arbitrum One Classic** archival node. When this option is present, it will load old blocks from disk if not in memory cache. |
+| - | `--core.checkpoint-gas-frequency=156250000` | Required for running an **Arbitrum One Classic** archival node. |
### Run the Docker image(s)
@@ -121,4 +129,4 @@ Both Nitro and Classic have multiple other parameters that can be used to config
### Troubleshooting
-If you run into any issues, visit the [node-running troubleshooting guide](/run-arbitrum-node/06-troubleshooting.md).
+If you run into any issues, visit the [node-running troubleshooting guide](/run-arbitrum-node/06-troubleshooting.mdx).
diff --git a/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.md b/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.md
deleted file mode 100644
index d709ae78f..000000000
--- a/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: 'How to run a validator'
-description: Learn how to run an Arbitrum feed relay on your local machine.
-sidebar_position: 4
-content_type: how-to
----
-
-Some Arbitrum nodes will choose to act as validators. This means that they watch the progress of the rollup protocol and perhaps also participate in that protocol to advance the state of the chain securely.
-Not all nodes will choose to do this. Because the rollup protocol doesn’t decide what the chain will do but merely confirms the correct behavior that is fully determined by the inbox messages, a node can ignore the rollup protocol and simply compute for itself the correct behavior.
-Here we describe different strategies that validators follow and provide instructions on how to run them.
-
-### Validation strategies
-
-- Currently, the ability to post assertions on-chain for mainnet Arbitrum chains is allowlisted.
-- Here's a full list of validation strategies:
- - `Defensive` (allowlist required)
- - Post stake and create challenge if local state disagrees with on-chain assertion (wallet required, will only post stake on-chain if bad assertion found)
- - `StakeLatest` (allowlist required)
- - Stay staked on latest assertion and challenge any bad assertions found (wallet required, always staked, uses some gas every time new assertion created)
- - `ResolveNodes` (allowlist required)
- - Stay staked on latest assertion, resolve any unconfirmed assertions and challenge any bad assertions found (wallet required, always staked, uses some gas every time unconfirmed assertion resolved or new assertion created)
- - `MakeNodes` (allowlist required)
- - Continuously create new assertions, challenging any bad assertions found (wallet required, always staked, most expensive node to run)
- - Note that if there is more than one `MakeNodes` validator running, they might all try to create a new assertion at same time. In that case, only one will be successful, and the others will have still spent gas on reverted calls that didn't do anything.
-- There's one more validation strategy that is not allowlisted and is available for all types of node: `Watchtower`. A node in `Watchtower` mode will immediately log an error if an on-chain assertion deviates from the locally computed chain state. It doesn't require a wallet, as it never takes any action on-chain. This strategy is enabled by default in all nodes (full and archive).
-
-### Running a Watchtower validator
-
-- By default, all nodes (full and archive) will run in `Watchtower` mode.
-- If a deviation is detected, a node running in Watchtower mode will log an error containing the string `found incorrect assertion in watchtower mode`
-- To verify that the Watchtower mode is enabled, this line should appear in the logs:
- ```shell
- INFO [09-28|18:43:49.367] running as validator txSender=nil actingAsWallet=nil whitelisted=false strategy=Watchtower
- ```
- - `strategy` should be `Watchtower`
- - The log line `validation succeeded` shows that the L2 block validator is working
- - The log line `found correct assertion` shows that the L1 validator is working
-- Watchtower mode adds a small amount of execution and memory overhead. You can deactivate this mode by using the parameter `--node.staker.enable=false`.
-
-### Creating a wallet for an allowlisted validator
-
-- Watchtower validators never need a wallet, because they never post on-chain
-- Defensive validators need a wallet configured, but the wallet does not need to be funded until it logs that an assertion has been found
-- All other validators require a funded wallet to immediately post stake, as well as additional funds that will be spent at regular intervals
-- Here is an example of how to tell Nitro to create validator wallet for Arbitrum One and exit:
- ```shell
- docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum @latestNitroNodeImage@ --parent-chain.connection.url=https://l1-mainnet-node:8545 --chain.id=42161 --node.staker.enable --node.staker.parent-chain-wallet.only-create-key --node.staker.parent-chain-wallet.password="SOME SECURE PASSWORD"
- ```
-- Wallet file will be created under the mounted directory inside the `arb1/wallet/` directory for Arb1, or `nova/wallet/` directory for Nova. Be sure to backup the wallet, it will be the only way to withdraw stake when desired
-
-### Running an allowlisted defensive validator
-
-- A defensive validator requires that a wallet has already been created using the above steps
-- Defensive validator wallets do not need to be funded initially
-- If a defensive validator detects a deviation, it will log `bringing defensive validator online because of incorrect assertion`, and wait for funds to be added to wallet so stake can be posted and a dispute created
-- Here is an example of how to run an allowlisted defensive validator for Arbitrum One:
- ```shell
- docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum @latestNitroNodeImage@ --parent-chain.connection.url=https://l1-mainnet-node:8545 --chain.id=42161 --node.staker.enable --node.staker.strategy=Defensive --node.staker.parent-chain-wallet.password="SOME SECURE PASSWORD"
- ```
-- For Orbit chains, you need to set the `--chain.info-json=` flag instead of `--chain.id=`
-- To verify validator is working, this log line shows the wallet is setup correctly:
- ```shell
- INFO [09-28|18:43:49.367] running as validator txSender=0x... actingAsWallet=0x... whitelisted=true strategy=Defensive
- ```
- - `whitelisted` should be `true` after your wallet has been added to the allowlist
- - `strategy` should be `Defensive`
- - `txSender` and `actingAsWallet` should both be present and not `nil`
- - The log line `validation succeeded` shows that the L2 block validator is working
- - The log line `found correct assertion` shows that the L1 validator is working
-
-#### Orbit chains: grant whitlelist
-
-- You need to be the chain owner to include a new validator address in the allowlist:
-- Find your `upgradeExecutor` contract address.
-- Send transactions to the `executeCall` method of the`upgradeExecutor` contract and set the `target` address to your Rollup contract's address, set the `targetCalldata` to `0xa3ffb772{Your new allowlist validator address}`. (`0xa3ffb772` is the signature of `setValidator(address[],bool[])`)
-- Call your Rollup contract's `isValidator(address)` and check the result.
diff --git a/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.mdx b/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.mdx
new file mode 100644
index 000000000..d8459494d
--- /dev/null
+++ b/arbitrum-docs/run-arbitrum-node/more-types/02-run-validator-node.mdx
@@ -0,0 +1,140 @@
+---
+title: 'How to run a validator'
+description: Learn how to run an Arbitrum validator node
+author: TucksonDev
+sme: TucksonDev
+sidebar_position: 4
+content_type: how-to
+---
+
+Validators are nodes that choose to participate in the rollup protocol to advance the state of the chain securely. Since the activation of BoLD, chains can now choose to make validation permissionless. You can learn more in the [BoLD introduction](/how-arbitrum-works/bold/gentle-introduction.mdx).
+
+This page describes the different strategies a validator may follow and provides instructions on how to run a validator for an Arbitrum chain.
+
+This how-to assumes that you're familiar with the following:
+
+- How to run a full node (see instructions [here](/run-arbitrum-node/03-run-full-node.mdx) for DAO-governed chains, and [here](/node-running/how-tos/running-an-orbit-node.mdx) for Orbit chains)
+- [How the Rollup protocol works](/how-arbitrum-works/06-optimistic-rollup.mdx)
+- [How BoLD works](/bold/concepts/bold-technical-deep-dive.mdx#how-bold-uses-ethereum), if you're running a validator for a chain that has BoLD activated
+
+## Validation strategies
+
+Validators can be configured to follow a specific validation strategy. Here we describe what strategies are available in Nitro:
+
+| Strategy | Description | Gas usage |
+| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| **`Defensive`** | If the local state disagrees with the on-chain assertion, this validator will post a stake and create a challenge | Only acts if a bad assertions is found |
+| **`StakeLatest`** | This validator will stay staked on the latest assertion found, and will challenge any bad assertions that it finds (this strategy is only available in pre-BoLD chains) | Gas used every time a new assertion is created |
+| **`ResolveNodes`** | This validator will stay staked on the latest assertion found, resolve any unconfirmed assertions, and it will challenge any bad assertions that it finds | Gas used every time a new assertion is created and to resolve unconfirmed assertions |
+| **`MakeNodes`** | This validator continuously creates new assertions, resolves any unconfirmed assertions, and challenges bad assertions found. Note that if there is more than one `MakeNodes` validator running, they might all try to create a new assertion simultaneously. In that case, only one will be successful, while the others will have their transactions reverted | Gas used to create new assertions, move the stake to the latest one, and resolve unconfirmed assertions |
+
+### The watchtower strategy
+
+One more validation strategy is available for all types of nodes: `watchtower`. This strategy is enabled by default in all nodes (full and archive), and it doesn't require a wallet, as it never takes any action on-chain.
+
+A node in `watchtower` mode will immediately log an error if an on-chain assertion deviates from the locally computed chain state.
+
+```shell
+found incorrect assertion in watchtower mode
+```
+
+To verify that the watchtower mode is enabled, this line should appear in the logs:
+
+```shell
+INFO [09-28|18:43:49.367] running as validator txSender=nil actingAsWallet=nil whitelisted=false strategy=Watchtower
+```
+
+Additionally, the following logs indicate whether all components are working correctly:
+
+- The log line `validation succeeded` shows that the node is validating chain blocks successfully
+- The log line `found correct assertion` shows that the node is finding assertions on the parent chain successfully
+
+Watchtower mode adds a small amount of execution and memory overhead to your node. You can deactivate this mode using the parameter `--node.staker.enable=false`.
+
+## How to run a validator node
+
+This section explains how to configure your node to act as a validator.
+
+### Step 0: prerequisites
+
+A validator node is a regular full node with validation enabled, so you'll have to know how to configure a full node. You can find instructions [here](/run-arbitrum-node/03-run-full-node.mdx) for DAO-governed chains, and [here](/node-running/how-tos/running-an-orbit-node.mdx) for Orbit chains.
+
+Additionally, you'll need a wallet with enough funds to perform actions on-chain and enough tokens to stake. Keep in mind that:
+
+- The token used to perform actions on-chain is the native token of the parent chain (usually `ETH`)
+- For chains with BoLD activated, the token used to stake depends on the chain configuration. For Arbitrum One and Arbitrum Nova, the staking token is `WETH`
+- For chains that don't have BoLD activated, the token used to stake is the native token of the parent chain (usually `ETH`)
+
+### Step 1: configure and run your validator
+
+On top of the configuration of a regular full node, you'll need to configure the following parameters for it to act as a validator:
+
+| Parameter | Value | Description |
+| ----------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `--node.staker.enable` | `true` | Enables validation |
+| `--node.staker.strategy` | `Watchtower`, `Defensive`, `StakeLatest`, `ResolveNodes`, `MakeNodes` | Strategy that your node will use (only needed if BoLD is not enabled) |
+| `--node.staker.parent-chain-wallet.private-key` | 0xPrivateKey | Private key of the wallet used to perform the operations on-chain. Use either `private-key` or `password` (below) |
+| `--node.staker.parent-chain-wallet.password` | Password | Password of a wallet generated with nitro (see instructions [here](#use-nitro-to-create-a-wallet-for-your-validator)). Use either `private-key` (above) or `password` |
+| `--node.bold.enable` | true | Enables validation with BoLD (not needed if BoLD is not activated) |
+| `--node.bold.strategy` | `Watchtower`, `Defensive`, `StakeLatest`, `ResolveNodes`, `MakeNodes` | Strategy that your node will use (not needed if BoLD is not activated) |
+
+Here's an example of how to run a defensive validator for Arbitrum One:
+
+```shell
+docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum @latestNitroNodeImage@ --parent-chain.connection.url=https://l1-mainnet-node:8545 --chain.id=42161 --node.staker.enable --node.staker.strategy=Defensive --node.staker.parent-chain-wallet.password="SOME SECURE PASSWORD" --node.bold.enable --node.bold.strategy=Defensive
+```
+
+### Step 2: verify that your node is running as a validator
+
+To verify that your node is acting as a validator, you can look for the following log line:
+
+```shell
+INFO [09-28|18:43:49.367] running as validator txSender=0x... actingAsWallet=0x... whitelisted=true strategy=Defensive
+```
+
+Note that `strategy` should be the configured strategy. `txSender` and `actingAsWallet` should both be present and not `nil`.
+
+Furthermore, the following logs will indicate that all components are working as intended:
+
+- The log line `validation succeeded` shows that the node is validating chain blocks successfully
+- The log line `found correct assertion` shows that the node is finding assertions on the parent chain successfully
+
+## Run a validator for an Orbit chain
+
+Validation for Orbit chains works the same way as for DAO-governed Arbitrum chains. However, as specified in [How to run a node](/node-running/how-tos/running-an-orbit-node.mdx#2-child-chain-parameters), you need to include the information of the chain when configuring your node by using `--chain.info-json`.
+
+```shell
+--chain.info-json=
+```
+
+Additionally, keep in mind that some chains might not have BoLD activated yet, so BoLD-specific parameters will not be needed.
+
+## Advanced features
+
+### Use Nitro to create a wallet for your validator
+
+Nitro includes a tool to create a validator wallet for a specific chain automatically. You can access it by using the option `--node.staker.parent-chain-wallet.only-create-key` and setting a password for the wallet with `--node.staker.parent-chain-wallet.password`.
+
+Here is an example of how to create a validator wallet for Arbitrum One and exit:
+
+```shell
+docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum @latestNitroNodeImage@ --parent-chain.connection.url=https://l1-mainnet-node:8545 --chain.id=42161 --node.staker.enable --node.staker.parent-chain-wallet.only-create-key --node.staker.parent-chain-wallet.password="SOME SECURE PASSWORD"
+```
+
+The wallet file will be created under the mounted directory inside the `/wallet/` directory (for example, `arb1/wallet/` for Arbitrum One, or `nova/wallet/` for Arbitrum Nova). Be sure to backup the wallet, as it will be the only way to withdraw the stake when desired.
+
+Once the wallet is created, you can instruct your validator to use it by adding the option `--node.staker.parent-chain-wallet.password="SOME SECURE PASSWORD"` when running your node.
+
+### How to add new validators to the allowlist (Orbit chains)
+
+On permissioned validation setups, the set of validators that can act on a given chain is limited to the ones added to the allowlist of validators in the Rollup contract.
+
+Follow these instructions to add a new validator address to the allowlist. Remember that you need to be able to perform admin actions to the chain to complete this operation.
+
+1. Find your `upgradeExecutor` contract address
+2. Call the `executeCall` method of the `upgradeExecutor` contract:
+ - set the `target` address to your Rollup contract's address
+ - set the `targetCalldata` to `0xa3ffb772{Your new allowlist validator address}` (`0xa3ffb772` is the signature of `setValidator(address[],bool[])`). For example, if you want to add the address `0x1234567890123456789012345678901234567890`, your `targetCalldata` should be `0xa3ffb7721234567890123456789012345678901234567890`.
+3. Call your Rollup contract's `isValidator(address)` and check the result
+
+After performing this operation, the new validator will be able to run a validator node to participate in the chain.
diff --git a/arbitrum-docs/run-arbitrum-node/more-types/03-run-classic-node.md b/arbitrum-docs/run-arbitrum-node/more-types/03-run-classic-node.mdx
similarity index 100%
rename from arbitrum-docs/run-arbitrum-node/more-types/03-run-classic-node.md
rename to arbitrum-docs/run-arbitrum-node/more-types/03-run-classic-node.mdx
diff --git a/arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.md b/arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.mdx
similarity index 97%
rename from arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.md
rename to arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.mdx
index 571cf4864..f356106ec 100644
--- a/arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.md
+++ b/arbitrum-docs/run-arbitrum-node/nitro/01-build-nitro-locally.mdx
@@ -6,11 +6,7 @@ sidebar_position: 7
content_type: how-to
---
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-
-Arbitrum Nitro is the software that powers all Arbitrum chains. This how-to shows how you can build a Docker image, or binaries, directly from Nitro's source code. If you want to run a node for one of the Arbitrum chains, however, it is recommended that you use the docker image available on DockerHub, as explained in [How to run a full node](/run-arbitrum-node/03-run-full-node.md).
+Arbitrum Nitro is the software that powers all Arbitrum chains. This how-to shows how you can build a Docker image, or binaries, directly from Nitro's source code. If you want to run a node for one of the Arbitrum chains, however, it is recommended that you use the docker image available on DockerHub, as explained in [How to run a full node](/run-arbitrum-node/03-run-full-node.mdx).
This how-to assumes that you're running one of the following operating systems:
diff --git a/arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.md b/arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.mdx
similarity index 90%
rename from arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.md
rename to arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.mdx
index 67b08cc56..a205f91fb 100644
--- a/arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.md
+++ b/arbitrum-docs/run-arbitrum-node/nitro/02-migrate-state-and-history-from-classic.mdx
@@ -8,7 +8,7 @@ content_type: how-to
sidebar_position: 11
---
-When running a Nitro node for the first time on a chain that produced [classic blocks](/build-decentralized-apps/03-public-chains.md#classic-deprecated) in the past (like Arbitrum One), you need to initialize its database to, at least, the state of the chain after executing the last classic block. The common, and recommended, way of doing that is to provide a database snapshot using the `--init.url` option (as mentioned in [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.md)). In this how-to we show you an alternative way for doing that, migrating the state and history of the chain from a fully synced classic node.
+When running a Nitro node for the first time on a chain that produced [classic blocks](/build-decentralized-apps/03-public-chains.mdx#classic-deprecated) in the past (like Arbitrum One), you need to initialize its database to, at least, the state of the chain after executing the last classic block. The common, and recommended, way of doing that is to provide a database snapshot using the `--init.url` option (as mentioned in [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.mdx)). In this how-to we show you an alternative way for doing that, migrating the state and history of the chain from a fully synced classic node.
:::info Is this How-to for you?
@@ -22,8 +22,8 @@ Keep in mind that this process only applies to Arbitrum One. Other Arbitrum chai
To successfully migrate the state and history of the chain from a classic (pre-Nitro) node to a Nitro node, you'll need:
-- A fully synced classic node: you can find instructions on how to run a classic node in [this page](/run-arbitrum-node/more-types/03-run-classic-node.md).
-- A clean, uninitialized Nitro node: you can find instructions on how to set up a Nitro node in [this page](/run-arbitrum-node/03-run-full-node.md).
+- A fully synced classic node: you can find instructions on how to run a classic node in [this page](/run-arbitrum-node/more-types/03-run-classic-node.mdx).
+- A clean, uninitialized Nitro node: you can find instructions on how to set up a Nitro node in [this page](/run-arbitrum-node/03-run-full-node.mdx).
## Step 1: Enable export options in your classic node
@@ -87,5 +87,5 @@ This state import operation requires more resources than a regular run of a Nitr
## See also
-- [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.md)
-- [How to run a full node (Classic, pre-Nitro)](/run-arbitrum-node/more-types/03-run-classic-node.md)
+- [How to run a full node (Nitro)](/run-arbitrum-node/03-run-full-node.mdx)
+- [How to run a full node (Classic, pre-Nitro)](/run-arbitrum-node/more-types/03-run-classic-node.mdx)
diff --git a/arbitrum-docs/run-arbitrum-node/nitro/03-nitro-database-snapshots.md b/arbitrum-docs/run-arbitrum-node/nitro/03-nitro-database-snapshots.mdx
similarity index 100%
rename from arbitrum-docs/run-arbitrum-node/nitro/03-nitro-database-snapshots.md
rename to arbitrum-docs/run-arbitrum-node/nitro/03-nitro-database-snapshots.mdx
diff --git a/arbitrum-docs/run-arbitrum-node/run-nitro-dev-node.mdx b/arbitrum-docs/run-arbitrum-node/run-nitro-dev-node.mdx
index 715f9d872..19603eab7 100644
--- a/arbitrum-docs/run-arbitrum-node/run-nitro-dev-node.mdx
+++ b/arbitrum-docs/run-arbitrum-node/run-nitro-dev-node.mdx
@@ -8,10 +8,6 @@ content_type: how-to
sidebar_position: 5
---
-import PublicPreviewBannerPartial from '../partials/_public-preview-banner-partial.mdx';
-
-
-
## Overview
This page provides step-by-step instructions for setting up and running a local Nitro node in `--dev` mode. This mode is ideal for developers who want to quickly test contracts using a single node, as it offers a simpler and faster setup compared to more complex environments.
diff --git a/arbitrum-docs/run-arbitrum-node/sequencer/01-run-feed-relay.md b/arbitrum-docs/run-arbitrum-node/sequencer/01-run-feed-relay.mdx
similarity index 100%
rename from arbitrum-docs/run-arbitrum-node/sequencer/01-run-feed-relay.md
rename to arbitrum-docs/run-arbitrum-node/sequencer/01-run-feed-relay.mdx
diff --git a/arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.md b/arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.mdx
similarity index 94%
rename from arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.md
rename to arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.mdx
index ff5b31142..aa3b9b756 100644
--- a/arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.md
+++ b/arbitrum-docs/run-arbitrum-node/sequencer/02-read-sequencer-feed.mdx
@@ -11,7 +11,7 @@ todos:
- Align on what we want to treat as proper nouns vs common nouns
---
-[Running an Arbitrum relay locally as a feed relay](/run-arbitrum-node/sequencer/01-run-feed-relay.md) lets you subscribe to an uncompressed sequencer feed for real-time data as the sequencer accepts and orders transactions off-chain.
+[Running an Arbitrum relay locally as a feed relay](/run-arbitrum-node/sequencer/01-run-feed-relay.mdx) lets you subscribe to an uncompressed sequencer feed for real-time data as the sequencer accepts and orders transactions off-chain.
When connected to websocket port `9642` of the local relay, you'll receive a data feed that looks something like this:
diff --git a/arbitrum-docs/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.md b/arbitrum-docs/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.mdx
similarity index 100%
rename from arbitrum-docs/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.md
rename to arbitrum-docs/run-arbitrum-node/sequencer/03-run-sequencer-coordination-manager.mdx
diff --git a/arbitrum-docs/stylus/cli-tools-overview.md b/arbitrum-docs/stylus/cli-tools-overview.md
index addca90ab..f1dbb51c9 100644
--- a/arbitrum-docs/stylus/cli-tools-overview.md
+++ b/arbitrum-docs/stylus/cli-tools-overview.md
@@ -4,8 +4,6 @@ title: CLI Tools (cargo-stylus)
sidebar_label: CLI tools overview
---
-# CLI tools (cargo-stylus)
-
The CLI tools provided for Stylus, specifically the `cargo-stylus` tool, are designed to help developers manage, compile, and optimize their Stylus contracts efficiently. This overview provides a summary of the tools available and how to use them effectively.
## Available tools
diff --git a/arbitrum-docs/stylus/concepts/stylus-gas.md b/arbitrum-docs/stylus/concepts/gas-metering.mdx
similarity index 95%
rename from arbitrum-docs/stylus/concepts/stylus-gas.md
rename to arbitrum-docs/stylus/concepts/gas-metering.mdx
index ca90e1f31..95f6cacff 100644
--- a/arbitrum-docs/stylus/concepts/stylus-gas.md
+++ b/arbitrum-docs/stylus/concepts/gas-metering.mdx
@@ -1,5 +1,5 @@
---
-title: 'Gas and ink in Stylus'
+title: 'Gas metering'
description: 'A conceptual overview of gas and ink, the primitives that Stylus uses to measure the cost of WASM activation, compute, memory, and storage.'
author: rachel-bousfield
sme: rachel-bousfield
@@ -9,10 +9,6 @@ sidebar_position: 3
**Gas and ink** are the pricing primitives that are used to determine the cost of handling specific opcodes and host I/Os on Stylus. For an overview of specific opcode and host I/O costs, see [Gas and ink costs](/stylus/reference/opcode-hostio-pricing).
-import PublicPreviewBannerPartial from '../../partials/_public-preview-banner-partial.mdx';
-
-
-