From 96c367f0bcb2e14f2668116b164dcb4032a81e97 Mon Sep 17 00:00:00 2001 From: j pimmel Date: Fri, 17 Jan 2025 17:32:12 -0800 Subject: [PATCH] Refactor Node ops nav content relating to Accessing Onchain Data (#1095) * Refactor Node ops nav content relating to Accessing Onchain data to be at the toplevel * Fix paths after refactor * Fix more paths after refactor * Update references to Flowdiver to point to Flowscan * Fixed remaining path issues * Change flowdiver to flowscan * Remaining path fixes Add vercel dead link forwarders from old locations * Mopping up * typos * EVM gateway updates * Update hardware specifications * Test to see nav change * Test to see nav change * Restore * Revert * Revert * Revert name --- docs/build/advanced-concepts/scaling.md | 2 +- docs/build/basics/accounts.md | 2 +- docs/build/basics/blocks.md | 2 +- docs/build/basics/collections.md | 2 +- docs/build/basics/fees.md | 2 +- docs/build/basics/flow-token.md | 2 +- docs/build/basics/scripts.md | 2 +- docs/build/basics/transactions.md | 2 +- .../guides/mobile/react-native-quickstart.md | 2 +- docs/ecosystem/block-explorers.md | 6 +- docs/ecosystem/projects.mdx | 2 +- .../_category_.yml | 1 + .../access-http-api.md | 0 .../index.md} | 38 ++++++------ docs/networks/flow-networks/index.md | 6 +- .../node-ops/access-nodes/_category_.yml | 1 + .../access-node-configuration-options.md | 4 +- .../access-nodes/access-node-setup.md | 36 ++++++------ .../access-onchain-data/_category_.yml | 1 - .../access-nodes/_category_.yml | 1 - .../evm-gateway/_category_.yml | 1 - .../node-ops/evm-gateway/_category_.yml | 1 + .../evm-gateway/evm-gateway-setup.md | 58 ++++++++++++++++--- docs/networks/node-ops/index.md | 6 +- .../light-nodes/_category_.yml | 0 .../light-nodes/observer-node.md | 12 ++-- docs/networks/node-ops/node-operation/faq.md | 4 +- .../node-ops/node-operation/node-bootstrap.md | 2 +- .../node-ops/node-operation/node-economics.md | 2 +- .../node-ops/node-operation/node-roles.md | 2 +- .../node-ops/node-operation/node-setup.md | 2 +- docs/tools/clients/fcl-js/api.md | 2 +- docusaurus.config.js | 8 +-- src/data/tools/index.ts | 6 +- vercel.json | 29 +++++++--- 35 files changed, 153 insertions(+), 96 deletions(-) rename docs/networks/{node-ops/access-onchain-data/access-nodes/accessing-data => access-onchain-data}/_category_.yml (64%) rename docs/networks/{node-ops/access-onchain-data/access-nodes/accessing-data => access-onchain-data}/access-http-api.md (100%) rename docs/networks/{node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md => access-onchain-data/index.md} (97%) create mode 100644 docs/networks/node-ops/access-nodes/_category_.yml rename docs/networks/node-ops/{access-onchain-data => }/access-nodes/access-node-configuration-options.md (99%) rename docs/networks/node-ops/{access-onchain-data => }/access-nodes/access-node-setup.md (93%) delete mode 100644 docs/networks/node-ops/access-onchain-data/_category_.yml delete mode 100644 docs/networks/node-ops/access-onchain-data/access-nodes/_category_.yml delete mode 100644 docs/networks/node-ops/access-onchain-data/evm-gateway/_category_.yml create mode 100644 docs/networks/node-ops/evm-gateway/_category_.yml rename docs/networks/node-ops/{access-onchain-data => }/evm-gateway/evm-gateway-setup.md (78%) rename docs/networks/node-ops/{access-onchain-data => }/light-nodes/_category_.yml (100%) rename docs/networks/node-ops/{access-onchain-data => }/light-nodes/observer-node.md (96%) diff --git a/docs/build/advanced-concepts/scaling.md b/docs/build/advanced-concepts/scaling.md index 4e3be306f1..bd2e360d51 100644 --- a/docs/build/advanced-concepts/scaling.md +++ b/docs/build/advanced-concepts/scaling.md @@ -86,7 +86,7 @@ We can leverage this model to design an ideal system transaction architecture as To simplify the system further, we can reuse the same cryptographic key multiple times within the same account by adding it as a new key. These additional keys can have a weight of 0 since they do not need to authorize transactions. -Here’s a visual example of how such an [account configuration](https://www.flowdiver.io/account/0x18eb4ee6b3c026d2?tab=keys) might look: +Here’s a visual example of how such an [account configuration](https://www.flowscan.io/account/18eb4ee6b3c026d2?tab=keys) might look: ![Example.Account](scaling-example-account.png "Example Account") diff --git a/docs/build/basics/accounts.md b/docs/build/basics/accounts.md index 71f6ddef5a..b346bb76c1 100644 --- a/docs/build/basics/accounts.md +++ b/docs/build/basics/accounts.md @@ -213,7 +213,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/accounts/get- Accounts can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -**gRPC API** [building-on-flow/nodes/access-api#accounts](../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md#accounts) +**gRPC API** [building-on-flow/nodes/access-api#accounts](../../networks/access-onchain-data/index.md#accounts) **REST API** [http-api#tag/Accounts](/http-api#tag/Accounts) diff --git a/docs/build/basics/blocks.md b/docs/build/basics/blocks.md index 4d583061f3..1df92cce81 100644 --- a/docs/build/basics/blocks.md +++ b/docs/build/basics/blocks.md @@ -63,7 +63,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/get-flow-data Blocks can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Block API**](../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md#blocks) +[**gRPC Block API**](../../networks/access-onchain-data/index.md#blocks) [**REST Block API**](/http-api#tag/Blocks) diff --git a/docs/build/basics/collections.md b/docs/build/basics/collections.md index 83fda90ee0..e73a3f006d 100644 --- a/docs/build/basics/collections.md +++ b/docs/build/basics/collections.md @@ -20,7 +20,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/get-flow-data Collections can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Collection API**](../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md#collections) +[**gRPC Collection API**](../../networks/access-onchain-data/index.md#collections) [**REST Collection API**](/http-api#tag/Collections) diff --git a/docs/build/basics/fees.md b/docs/build/basics/fees.md index 9e79cff333..5a3dc0a06e 100644 --- a/docs/build/basics/fees.md +++ b/docs/build/basics/fees.md @@ -159,7 +159,7 @@ You should see the `computationUsed` field. Take a note of the value, you will u **On testnet or mainnet** -Once a transaction is completed, you can use an explorer like [Flowdiver](https://flowdiver.io/) to review the transaction details and events emitted. For Flowdiver, you can open the transaction in question and look for the event `FeesDeducted` from the [`FlowFees`](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowFees.cdc) contract: +Once a transaction is completed, you can use an explorer like [Flowscan](https://flowscan.io/) to review the transaction details and events emitted. For Flowscan, you can open the transaction in question and look for the event `FeesDeducted` from the [`FlowFees`](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowFees.cdc) contract: ![flowscan-fees](./_fees_images/flowscan-fees.png) diff --git a/docs/build/basics/flow-token.md b/docs/build/basics/flow-token.md index efabb75de9..720893043e 100644 --- a/docs/build/basics/flow-token.md +++ b/docs/build/basics/flow-token.md @@ -92,7 +92,7 @@ Transactions are submitted using a Flow SDK via the Access API. On Flow, a transaction is identified by its hash - the hash that exists as soon as that transaction is signed and submitted to an Access or Collection node. Results of transactions can be queried by transaction hash through the Access API. -A user can check the status of a transaction at any time via the [Flow Block Explorer](https://www.flowdiver.io/). +A user can check the status of a transaction at any time via the [Flow Block Explorer](https://flowscan.io/). To expose these results natively in your app, you can use a Flow SDK to fetch transaction results, [for example using the Flow Go SDK](https://github.com/onflow/flow-go-sdk#querying-transaction-results). diff --git a/docs/build/basics/scripts.md b/docs/build/basics/scripts.md index edcb7c7ba8..d7fccf5b93 100644 --- a/docs/build/basics/scripts.md +++ b/docs/build/basics/scripts.md @@ -65,7 +65,7 @@ Scripts can be used for the following: A script can be executed by submitting it to the Access API provided by access nodes. Currently, there are three API endpoints that allow a user to execute scripts at the latest sealed block, a previous block height, or a previous block ID. -[**gRPC Script API**](../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md#scripts) +[**gRPC Script API**](../../networks/access-onchain-data/index.md#scripts) [**REST Script API**](/http-api#tag/Scripts) diff --git a/docs/build/basics/transactions.md b/docs/build/basics/transactions.md index c78c1f5a46..5566fb96f4 100644 --- a/docs/build/basics/transactions.md +++ b/docs/build/basics/transactions.md @@ -437,7 +437,7 @@ A user can define their own transactions or it can use already defined transacti Transactions can be submitted and obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Transaction API**](../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md#transactions) +[**gRPC Transaction API**](../../networks/access-onchain-data/index.md#transactions) [**REST Transaction API**](/http-api#tag/Transactions) diff --git a/docs/build/guides/mobile/react-native-quickstart.md b/docs/build/guides/mobile/react-native-quickstart.md index c830e88361..2c07d1f3ac 100644 --- a/docs/build/guides/mobile/react-native-quickstart.md +++ b/docs/build/guides/mobile/react-native-quickstart.md @@ -448,7 +448,7 @@ const styles = StyleSheet.create({ ``` -Press the "Init Account" button you should see the wallet ask you to approve a transaction. After approving, you will see a transaction response appear in your console (make sure to have that open). It may take a few moments. With the transaction result printed, you can use the `transactionId` to look up the details of the transaction using a [block explorer](https://testnet.flowdiver.io/). +Press the "Init Account" button you should see the wallet ask you to approve a transaction. After approving, you will see a transaction response appear in your console (make sure to have that open). It may take a few moments. With the transaction result printed, you can use the `transactionId` to look up the details of the transaction using a [block explorer](https://testnet.flowscan.io/). ## Mutating the Blockchain diff --git a/docs/ecosystem/block-explorers.md b/docs/ecosystem/block-explorers.md index 6ff46fa733..eb3d609f3b 100644 --- a/docs/ecosystem/block-explorers.md +++ b/docs/ecosystem/block-explorers.md @@ -14,7 +14,7 @@ Block explorers are user-friendly online tools that visually present blockchain ## Flow Diver -[Flow Diver](https://www.flowdiver.io/) provides various tools to explore the blockchain, including: +[Flowscan](https://flowscan.io/) provides various tools to explore the blockchain, including: - Blocks - Transactions @@ -25,8 +25,8 @@ Block explorers are user-friendly online tools that visually present blockchain ### Supported networks: -- [Mainnet](https://www.flowdiver.io/) -- [Testnet](https://testnet.flowdiver.io/) +- [Mainnet](https://flowscan.io/) +- [Testnet](https://testnet.flowscan.io/) ## Flow View diff --git a/docs/ecosystem/projects.mdx b/docs/ecosystem/projects.mdx index 4497423973..20d1563f26 100644 --- a/docs/ecosystem/projects.mdx +++ b/docs/ecosystem/projects.mdx @@ -208,7 +208,7 @@ Explore an array of exciting, grassroots initiatives, and projects that thrive w }, { type: 'link', - label: 'Flowdiver historical API', + label: 'Flow historical API', href: 'https://findonflow.github.io/findlabs-api/', description: 'It is an Api to allow users to fetch historical data of Flow blockchain from the findlabs database.', customProps: { diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/_category_.yml b/docs/networks/access-onchain-data/_category_.yml similarity index 64% rename from docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/_category_.yml rename to docs/networks/access-onchain-data/_category_.yml index c266b90373..a856f2b92d 100644 --- a/docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/_category_.yml +++ b/docs/networks/access-onchain-data/_category_.yml @@ -1 +1,2 @@ +position: 3 label: Accessing Data diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-http-api.md b/docs/networks/access-onchain-data/access-http-api.md similarity index 100% rename from docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-http-api.md rename to docs/networks/access-onchain-data/access-http-api.md diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md b/docs/networks/access-onchain-data/index.md similarity index 97% rename from docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md rename to docs/networks/access-onchain-data/index.md index f0d47e6abf..69044949bd 100644 --- a/docs/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md +++ b/docs/networks/access-onchain-data/index.md @@ -1193,7 +1193,7 @@ message Block { | block_header | A summary of a [block](#block-header) | | protocol_state_id | The root hash of protocol state. | -The detailed semantics of block formation are covered in the [block formation guide](../../../../../build/basics/blocks.md). +The detailed semantics of block formation are covered in the [block formation guide](../../build/basics/blocks.md). ### Block Header @@ -1349,17 +1349,17 @@ message TransactionSignature { | authorizers | Addresses of the transaction authorizers | | signatures | [Signatures](#transaction-signature) from all signer accounts | -The detailed semantics of transaction creation, signing and submission are covered in the [transaction submission guide](../../../../../build/basics/transactions.md#signing-a-transaction). +The detailed semantics of transaction creation, signing and submission are covered in the [transaction submission guide](../../build/basics/transactions.md#signing-a-transaction). #### Proposal Key -The proposal key is used to specify a sequence number for the transaction. Sequence numbers are covered in more detail [here](../../../../../build/basics/transactions.md#sequence-numbers). +The proposal key is used to specify a sequence number for the transaction. Sequence numbers are covered in more detail [here](../../build/basics/transactions.md#sequence-numbers). -| Field | Description | -| --------------- | ---------------------------------------------------------------------------------------------------- | -| address | Address of proposer account | -| key_id | ID of proposal key on the proposal account | -| sequence_number | [Sequence number](../../../../../build/basics/transactions.md#sequence-numbers) for the proposal key | +| Field | Description | +| --------------- | ------------------------------------------------------------------------------------------- | +| address | Address of proposer account | +| key_id | ID of proposal key on the proposal account | +| sequence_number | [Sequence number](../../build/basics/transactions.md#sequence-numbers) for the proposal key | #### Transaction Signature @@ -1415,7 +1415,7 @@ message Account { The `code` and `contracts` fields contain the raw Cadence source code, encoded as UTF-8 bytes. -More information on accounts can be found [here](../../../../../build/basics/accounts.md). +More information on accounts can be found [here](../../build/basics/accounts.md). #### Account Key @@ -1433,17 +1433,17 @@ message AccountKey { } ``` -| Field | Description | -| --------------- | -------------------------------------------------------------------------------------------- | -| id | Index of the key within the account, used as a unique identifier | -| public_key | Public key encoded as bytes | -| sign_algo | [Signature algorithm](../../../../../build/basics/accounts.md#signature-and-hash-algorithms) | -| hash_algo | [Hash algorithm](../../../../../build/basics/accounts.md#signature-and-hash-algorithms) | -| weight | [Weight assigned to the key](../../../../../build/basics/accounts.md#account-keys) | -| sequence_number | [Sequence number for the key](../../../../../build/basics/transactions.md#sequence-numbers) | -| revoked | Flag indicating whether or not the key has been revoked | +| Field | Description | +| --------------- |---------------------------------------------------------------------------| +| id | Index of the key within the account, used as a unique identifier | +| public_key | Public key encoded as bytes | +| sign_algo | [Signature algorithm](../../build/basics/accounts.md#signature-and-hash-algorithms) | +| hash_algo | [Hash algorithm](../../build/basics/accounts.md#signature-and-hash-algorithms) | +| weight | [Weight assigned to the key](../../build/basics/accounts.md#account-keys) | +| sequence_number | [Sequence number for the key](../../build/basics/transactions.md#sequence-numbers) | +| revoked | Flag indicating whether or not the key has been revoked | -More information on account keys, key weights and sequence numbers can be found [here](../../../../../build/basics/accounts.md). +More information on account keys, key weights and sequence numbers can be found [here](../../build/basics/accounts.md). ### Event diff --git a/docs/networks/flow-networks/index.md b/docs/networks/flow-networks/index.md index 6fde3e7ca8..8744e4e29b 100644 --- a/docs/networks/flow-networks/index.md +++ b/docs/networks/flow-networks/index.md @@ -31,7 +31,7 @@ For more information on how to access these networks, refer to the following gui There are two primary ways to access on-chain data within the Flow network; Access Nodes and Light nodes. Access Nodes are the node type that are most useful for developers, as they provide access to the Flow network via the following API endpoints: -- [Flow Access API](../node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md) +- [Flow Access API](../access-onchain-data/index.md) - [Mainnet](./accessing-mainnet.md): `access.mainnet.nodes.onflow.org:9000` - [Testnet](./accessing-testnet.md): `access.devnet.nodes.onflow.org:9000` - [Status Page](https://status.onflow.org/) - Network status page @@ -44,7 +44,7 @@ Rate limits for Flow Public Access nodes hosted by QuickNode are detailed [here] If you’re getting started you don’t need to run your own node and you can use the above public nodes. The public access nodes are rate-limited, so as your product matures you might want to run your own node. There are multiple options available: -- Start with a [Light (Observer) Node](../node-ops/access-onchain-data/light-nodes/observer-node.md). +- Start with a [Light (Observer) Node](../node-ops/light-nodes/observer-node.md). - You can also use a third-party provider like [Quicknode](https://www.quicknode.com/docs/flow). -Check out [Running a Node](../node-ops/access-onchain-data/light-nodes/observer-node.md) for more information. +Check out [Running a Node](../node-ops/light-nodes/observer-node.md) for more information. diff --git a/docs/networks/node-ops/access-nodes/_category_.yml b/docs/networks/node-ops/access-nodes/_category_.yml new file mode 100644 index 0000000000..6fd7254a2a --- /dev/null +++ b/docs/networks/node-ops/access-nodes/_category_.yml @@ -0,0 +1 @@ +label: Access Nodes \ No newline at end of file diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/access-node-configuration-options.md b/docs/networks/node-ops/access-nodes/access-node-configuration-options.md similarity index 99% rename from docs/networks/node-ops/access-onchain-data/access-nodes/access-node-configuration-options.md rename to docs/networks/node-ops/access-nodes/access-node-configuration-options.md index c059927eec..a38add3293 100644 --- a/docs/networks/node-ops/access-onchain-data/access-nodes/access-node-configuration-options.md +++ b/docs/networks/node-ops/access-nodes/access-node-configuration-options.md @@ -1,7 +1,7 @@ --- title: Serving execution data sidebar_label: Execution Data -sidebar_position: 3 +sidebar_position: 2 --- Flow chain data comprises of two parts, @@ -100,7 +100,7 @@ gsutil ls "gs://flow-genesis-bootstrap/checkpoints/" The checkpoint paths are in the format `flow-genesis-bootstrap/checkpoints/[network]/[epoch number]-[block height]/`. Where * `[network]` is the network the checkpoint is from. For example, `mainnet` or `testnet`. -* `[epoch number]` is the epoch number when the checkpoint was taken. You can find the current epoch number on the [flowdiver](https://www.flowdiver.io/) home page. +* `[epoch number]` is the epoch number when the checkpoint was taken. You can find the current epoch number on the [flowscan.io](https://flowscan.io/) home page. * `[block height]` is the block height at which the checkpoint was taken. Make sure that the checkpoint you select is from an epoch when your node was part of the network. diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/access-node-setup.md b/docs/networks/node-ops/access-nodes/access-node-setup.md similarity index 93% rename from docs/networks/node-ops/access-onchain-data/access-nodes/access-node-setup.md rename to docs/networks/node-ops/access-nodes/access-node-setup.md index 1ac0b5dfb9..c7ecdc2a72 100644 --- a/docs/networks/node-ops/access-onchain-data/access-nodes/access-node-setup.md +++ b/docs/networks/node-ops/access-nodes/access-node-setup.md @@ -1,13 +1,13 @@ --- title: Setting Up a Flow Access Node sidebar_label: Access Node Setup -sidebar_position: 2 +sidebar_position: 1 --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -This guide is for running a permissonless Access node on Flow. If you are planning to run a different type of staked node then see [node bootstrap](../../node-operation/node-bootstrap.md). +This guide is for running a permissonless Access node on Flow. If you are planning to run a different type of staked node then see [node bootstrap](../node-operation/node-bootstrap.md). Permissionless Access nodes allow any operator to run a Flow Access node. Unlike the other staked nodes, a permissionless access node does not have to be approved by the service account before it can join the network, hence the term "permissionless". The goal is to make all node types permissionless and this is the first step towards achieving that goal. @@ -24,7 +24,7 @@ Chain analytics, audit and exploration applications can run such an access node New nodes are able to join the network each time a new epoch begins. An epoch is a period of time (approximately one week) when the node operators in the network are constant. At epoch boundaries, newly staked node operators are able to join the network and existing node operators which have unstaked may exit the network. -You can read more about epochs [here](../../../staking/03-schedule.md). +You can read more about epochs [here](../../staking/03-schedule.md). In order to join the network at epoch N+1, the access node **must** be registered with at least 100 FLOW staked prior to the end of epoch N's Staking Auction Phase. @@ -32,9 +32,9 @@ In order to join the network at epoch N+1, the access node **must** be registere Currently on mainnet, the staking auction starts every Wednesday at around 20:00 UTC and ends on the next Wednesday at around 12:00 UTC. Since this deadline may shift slightly from epoch to epoch, we recommend the node be staked by _Wednesday, 8:00 UTC_ to be able to join the network in the next epoch. -Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../../../staking/05-epoch-scripts-events.md#flowepochepochsetup). +Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../../staking/05-epoch-scripts-events.md#flowepochepochsetup). -![Flow Epoch Schedule](../../node-operation/epoch-startup-order.png) +![Flow Epoch Schedule](../node-operation/epoch-startup-order.png) ## Limitations @@ -53,7 +53,7 @@ To summarize, :::note -To run an access node you will need to provision a machine or virtual machine to run your node software. Please follow the [node-provisioning](../../node-operation/node-provisioning.md) guide for it. +To run an access node you will need to provision a machine or virtual machine to run your node software. Please follow the [node-provisioning](../node-operation/node-provisioning.md) guide for it. You can provision the machine before or after your node has been chosen. ::: @@ -156,14 +156,14 @@ All your private keys should be in the `bootstrap` folder created earlier. Pleas You need to now register the node on chain by staking the node via [Flow Port](https://port.onflow.org/). -[Here](../../../flow-port/staking-guide.md) is a guide on how to use Flow port if you are not familiar with it. -If you are staking via a custody provider or would like to directly submit a staking transaction instead follow this [guide](../../../staking/index.md#how-do-i-stake). +[Here](../../flow-port/staking-guide.md) is a guide on how to use Flow port if you are not familiar with it. +If you are staking via a custody provider or would like to directly submit a staking transaction instead follow this [guide](../../staking/index.md#how-do-i-stake). Fund you Flow account with at least 100.01 FLOW tokens, which covers the required stake plus the storage deposit. On Flow port, choose `Stake and Delegate` -> `Start Staking` or `Stake Again` and then choose Access node as the option. -![choose_access_flowport](../../node-operation/choose_access_flowport.png) +![choose_access_flowport](../node-operation/choose_access_flowport.png) On the next screen, provide the node details of you node. @@ -183,13 +183,13 @@ $cat ./bootstrap/public-root-information/node-info.pub. e737ec6efbd26ef43bf67691 #### Example -![node_details_permissionless_an](../../node-operation/node_details_permissionless_an.png) +![node_details_permissionless_an](../node-operation/node_details_permissionless_an.png) On the next screen, ensure that you stake 100 FLOW token. #### Example -![transaction_register_node_permissionless_an](../../node-operation/transaction_register_node_permissionless_an.png) +![transaction_register_node_permissionless_an](../node-operation/transaction_register_node_permissionless_an.png) Submit the Transaction. @@ -213,15 +213,15 @@ You can check these balances on Flow Port before and after the epoch transition When you stake the node, you should see the following on Flow Port under `Stake & Delegate` -![Staked_node](../../node-operation/Staked_FlowPort.png) +![Staked_node](../node-operation/Staked_FlowPort.png) After the epoch transition, if you see you token balance under the Staked Amount then your node got chosen. -![Staked_node](../../node-operation/Selected_FlowPort.png) +![Staked_node](../node-operation/Selected_FlowPort.png) Instead, if you see that your token balance is under the Unstaked Amount, then your node did not get chosen. -![Unstaked_node](../../node-operation/Unstaked_FlowPort.png) +![Unstaked_node](../node-operation/Unstaked_FlowPort.png) ### Check Using Flow CLI @@ -253,13 +253,13 @@ Account staking info: ### Epoch Setup Event -Alternatively, if you can monitor events, look for [the epoch setup event](../../../staking/05-epoch-scripts-events.md#flowepochepochsetup) that gets emitted by the epoch contract. That event is emitted at the end of epoch N's staking auction and contains a list of node IDs that are confirmed for the next epoch. +Alternatively, if you can monitor events, look for [the epoch setup event](../../staking/05-epoch-scripts-events.md#flowepochepochsetup) that gets emitted by the epoch contract. That event is emitted at the end of epoch N's staking auction and contains a list of node IDs that are confirmed for the next epoch. ## Step 4 - Start Your Node If your node was selected as part of Step 3, you can now start your node. -First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](../../node-operation/node-provisioning.md) guide for it. +First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](../node-operation/node-provisioning.md) guide for it. The access node can be run as a Docker container with the following command. @@ -398,7 +398,7 @@ $PWD/flow-go/flow_access_node \ -For a more mature setup, it is recommended that you run the container using systemd as described [here](../../node-operation/node-setup.md#systemd) +For a more mature setup, it is recommended that you run the container using systemd as described [here](../node-operation/node-setup.md#systemd) > 🚀 The access node should now be up and running, and you should be able to query the node using Flow CLI or curl, @@ -412,7 +412,7 @@ curl http://localhost/v1/blocks?height=sealed ## Monitoring and Metrics -The node publishes several Prometheus metrics. See [Monitoring Node Health](../../node-operation/monitoring-nodes.md) to setup node monitoring. +The node publishes several Prometheus metrics. See [Monitoring Node Health](../node-operation/monitoring-nodes.md) to setup node monitoring. ### Node Status diff --git a/docs/networks/node-ops/access-onchain-data/_category_.yml b/docs/networks/node-ops/access-onchain-data/_category_.yml deleted file mode 100644 index d81c89b978..0000000000 --- a/docs/networks/node-ops/access-onchain-data/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: Accessing On-chain Data diff --git a/docs/networks/node-ops/access-onchain-data/access-nodes/_category_.yml b/docs/networks/node-ops/access-onchain-data/access-nodes/_category_.yml deleted file mode 100644 index b309eb3d2d..0000000000 --- a/docs/networks/node-ops/access-onchain-data/access-nodes/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: Access Nodes diff --git a/docs/networks/node-ops/access-onchain-data/evm-gateway/_category_.yml b/docs/networks/node-ops/access-onchain-data/evm-gateway/_category_.yml deleted file mode 100644 index 9df7f0c8cc..0000000000 --- a/docs/networks/node-ops/access-onchain-data/evm-gateway/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: EVM Gateway diff --git a/docs/networks/node-ops/evm-gateway/_category_.yml b/docs/networks/node-ops/evm-gateway/_category_.yml new file mode 100644 index 0000000000..dcaa60d488 --- /dev/null +++ b/docs/networks/node-ops/evm-gateway/_category_.yml @@ -0,0 +1 @@ +label: EVM Gateway Setup \ No newline at end of file diff --git a/docs/networks/node-ops/access-onchain-data/evm-gateway/evm-gateway-setup.md b/docs/networks/node-ops/evm-gateway/evm-gateway-setup.md similarity index 78% rename from docs/networks/node-ops/access-onchain-data/evm-gateway/evm-gateway-setup.md rename to docs/networks/node-ops/evm-gateway/evm-gateway-setup.md index 19da22228a..64a7cbea81 100644 --- a/docs/networks/node-ops/access-onchain-data/evm-gateway/evm-gateway-setup.md +++ b/docs/networks/node-ops/evm-gateway/evm-gateway-setup.md @@ -1,7 +1,7 @@ --- title: Setting up an EVM Gateway node sidebar_label: EVM Gateway Setup -sidebar_position: 3 +sidebar_position: 2 --- import Tabs from '@theme/Tabs'; @@ -11,21 +11,48 @@ This guide is for running the [EVM Gateway](https://github.com/onflow/flow-evm-g [Ethereum JSON-RPC specification](https://ethereum.org/en/developers/docs/apis/json-rpc/) and is the only node type which accepts EVM client connections. -The EVM Gateway consumes Flow protocol state from the configured Flow Access Node and persists the indexed EVM state locally to service EVM client requests. It submits EVM transactions it receives into the Flow network, wrapped in a Cadence transaction, and mutating EVM state when executed. Non-mutating RPC methods only query the local state index of the gateway and are never forwarded to Access Nodes. It does not participate in the block production process and requires no stake. +The EVM Gateway consumes Flow protocol state from the configured Flow Access Node and persists the indexed EVM state locally to +service EVM client requests. It submits EVM transactions it receives into the Flow network, wrapped in a Cadence transaction, and +mutating EVM state when executed. Non-mutating RPC methods only query the local state index of the gateway and are never forwarded +to Access Nodes. It does not participate in the block production process and requires no stake. + + ## Who Should Run an EVM Gateway -The EVM Gateway can serve as both a dedicated private RPC endpoint and a performance scaling solution, offering similar capabilities +The EVM Gateway can serve as a dedicated private RPC, a performance scaling solution, and a free gas provider offering similar capabilities to centralized middleware providers like Infura, Alchemy, etc at a fraction of the cost. This is because EVM Gateway nodes connect directly to the Flow network with no middle layer in between. -Applications which generate high call volumes to the JSON-RPC and which may have hit rate limits can benefit from running their -own gateway. Self-hosted gateways are dedicated to the operator, enabling the removal of rate limits. Self-hosted gateways -connect directly to your chosen Access Node, which you can also run if desired. +Applications which generate high call volumes to the JSON-RPC and which may have hit rate limits on Flow public nodes may benefit from running their +own gateway to remove rate limits. Self-hosted gateways connect directly to public Flow Access Nodes, which can also be [self-operated](../access-nodes/access-node-setup.md). ## Hardware specifications -TBD +The EVM Gateway is a lightweight node which runs on commodity hardware and cloud VMs. It can be run on GCP _standard_ and AWS _large_ +VM types for typical app co-location use-cases. However, higher volume use cases may require larger instance types and more +testing. An inactive node requires less than 200MB memory when run in Docker and data storage growth corresponds with Flow EVM transaction +growth. Listed below are theoretical RPS maximums based on mainnet CPU and memory resource utilization metrics and linear +volume scaling assumptions. + +### Google Cloud Platform (GCP) VM Types + +| VM Type | vCPUs | Memory (GB) | Estimated Max Requests/s | +| --------- |-------|-------------|--------------------------| +| n2-standard-2 | 2 | 8 | ~2,950 | +| c4a-standard-1 | 1 | 4 | ~1,475 | +| c4a-standard-2 | 2 | 8 | ~2,950 | +| n2-highmem-4 | 4 | 32 | ~11,800 | +| c3-standard-8 | 8 | 32 | ~29,500 | + +### Amazon Web Services (AWS) EC2 Instance Types +| Instance Type | vCPUs | Memory (GB) | Estimated Max Requests/s | +| --------- |--------|-------------|--------------------------| +| m6i.large | 2 | 8 | ~2,950 | +| c6i.large | 2 | 4 | ~3,687 | +| m6i.xlarge | 4 | 16 | ~11,800 | +| c6i.2xlarge | 8 | 16| ~29,500 | +| t3.2xlarge | 8 | 32 | ~17,700 | # How To Run EVM Gateway @@ -154,8 +181,14 @@ export INIT_CADENCE_HEIGHT="85981135" # 211176670 for testnet export COINBASE="${EVM_ADDRESS_WITHOUT_0x}" export COA_ADDRESS="${CADENCE_ACCOUNT_ADDRESS_WITHOUT_0x}" export COA_KEY="${CADENCE_ACCOUNT_PRIVATE_KEY_WITHOUT_0x}" -export GAS_PRICE="100" +export GAS_PRICE="100" # operators can set this to 0 for zero cost transactions. The linked COA account will pay for transactions on users behalf + +# $\{ACCESS_NODE_SPORK_HOSTS\} are comma separated +# testnet: access-001.devnet51.nodes.onflow.org:9000 +# mainnet: access-001.mainnet25.nodes.onflow.org:9000 ``` +ACCESS_NODE_SPORK_HOSTS is used by the gateway to track state across Flow sporks. These are generally infrequent with only one planned +spork per year. A canonical list of required hosts can be found in the EVM Gateway [Makefile](https://github.com/onflow/flow-evm-gateway/blob/main/Makefile#L9). @@ -172,6 +205,7 @@ After=network-online.target User=$USER ExecStart=/usr/bin/evm-gateway \ --access-node-grpc-host=$ACCESS_NODE_GRPC_HOST \ +--access-node-spork-hosts=ACCESS_NODE_SPORK_HOSTS \ --flow-network-id=$FLOW_NETWORK_ID \ --init-cadence-height=$INIT_CADENCE_HEIGHT \ --ws-enabled=true \ @@ -312,6 +346,14 @@ curl -s -XPOST 'your-evm-gw-host:8545' --header 'Content-Type: application/json' Join our [Discord](https://discord.com/invite/J6fFnh2xx6) and use the `#flow-evm` channel to ask any questions you may have about EVM Gateway. +### Database version inconsistency/corruption + +If you see a similar message to this from an aborted startup the gateway database directory is not compatible with the schema versions of the runtime, or there may be corruption. In this instance we recommend + +```bash +Jan 16 17:00:57 nodename docker[6552]: {"level":"error","error":"failed to open db for dir: /flow-evm-gateway/db, with: pebble: manifest file \"MANIFEST-018340\" for DB \"/flow-evm-gateway/db\": comparer name from file \"leveldb.BytewiseComparator\" != comparer name from Options \"flow.MVCCComparer\"","time":"2025-01-16T17:00:57Z","message":"Gateway runtime error"} +``` + ### State stream configuration If you are running an Access Node on the same logical host as the EVM Gateway you may see ehe following log entries. diff --git a/docs/networks/node-ops/index.md b/docs/networks/node-ops/index.md index 95aadc1171..f7ff8ec9cd 100644 --- a/docs/networks/node-ops/index.md +++ b/docs/networks/node-ops/index.md @@ -39,7 +39,7 @@ The observer node is not staked but still provides the same API as the access no :::info -To run a light node, follow this [guide](./access-onchain-data/light-nodes/observer-node.md) +To run a light node, follow this [guide](./light-nodes/observer-node.md) ::: @@ -75,13 +75,13 @@ Launch an access node using QuickNode :::info -To run a self-hosted access node, follow this [guide](./access-onchain-data/access-nodes/access-node-setup.md) +To run a self-hosted access node, follow this [guide](./access-nodes/access-node-setup.md) ::: :::tip -Alternately, instead of running an access node, you can use the [Flow community](./access-onchain-data/access-nodes/accessing-data/access-api.md) access nodes or the ones run by any of the other node operators. +Alternately, instead of running an access node, you can use the [Flow community](../access-onchain-data/index.md) access nodes or the ones run by any of the other node operators. ::: diff --git a/docs/networks/node-ops/access-onchain-data/light-nodes/_category_.yml b/docs/networks/node-ops/light-nodes/_category_.yml similarity index 100% rename from docs/networks/node-ops/access-onchain-data/light-nodes/_category_.yml rename to docs/networks/node-ops/light-nodes/_category_.yml diff --git a/docs/networks/node-ops/access-onchain-data/light-nodes/observer-node.md b/docs/networks/node-ops/light-nodes/observer-node.md similarity index 96% rename from docs/networks/node-ops/access-onchain-data/light-nodes/observer-node.md rename to docs/networks/node-ops/light-nodes/observer-node.md index 3a2d2120b1..67d44ff6af 100644 --- a/docs/networks/node-ops/access-onchain-data/light-nodes/observer-node.md +++ b/docs/networks/node-ops/light-nodes/observer-node.md @@ -4,13 +4,13 @@ sidebar_label: Light Node Setup sidebar_position: 1 --- -A light node also known as the observer node is similar to an access node and provides a locally accessible, continuously updated, verified copy of the block data. It serves the [gRPC Access API](../access-nodes/accessing-data/access-api.md) but unlike an access node, an light node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. +A light node also known as the observer node is similar to an access node and provides a locally accessible, continuously updated, verified copy of the block data. It serves the [gRPC Access API](../../access-onchain-data/index.md) but unlike an access node, an light node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. The light node bootstraps by connecting to an access node and becoming part of the public network comprised of access nodes and other light nodes. It then continuously receives blocks, which the consensus nodes are adding to the chain, either directly from access nodes or from other light nodes that are part of the public network. However, it makes no trust assumption of the upstream access node or the light node which is providing the block and locally verifies that the blocks that are received are the correct extension of the chain e.g. after receiving valid blocks A, B and C when it receives block D, it verifies that block D is indeed signed by the consensus nodes and is a valid next block. The received block data is indexed and made available via the Access API. For Collection, Transactions and Account queries, it delegates those requests to the upstream access node. Similarly, transactions and scripts sent to a light node are also forwarded to the upstream access node. Future versions of the light node will be able to serve this data locally as well. Since the light node is not staked, it does not produce or execute blocks but instead serves as an _unstaked access node_ that can be easily run on any consumer-grade computer which has enough disk space. -![Observer nodes](../../node-operation/observer.png) +![Observer nodes](../node-operation/observer.png) ## Who should run a light node? @@ -73,7 +73,7 @@ curl -sL -O storage.googleapis.com/flow-genesis-bootstrap/boot-tools-intel-mac.t #### Step 3 - Download the root-protocol-state-snapshot.json file for the current spork -The `root-protocol-state-snapshot.json` is generated for each [spork](../../node-operation/spork.md) and contains the genesis data for that spork. +The `root-protocol-state-snapshot.json` is generated for each [spork](../node-operation/spork.md) and contains the genesis data for that spork. It is published and made available after each spork. The download location is specified [here](https://github.com/onflow/flow/blob/master/sporks.json) under [rootProtocolStateSnapshot](https://github.com/onflow/flow/blob/master/sporks.json#L16) and can be downloaded as follows, For mainnet find the latest spork version from [sporks.json](https://github.com/onflow/flow/blob/master/sporks.json) and then download the `root-protocol-state-snapshot.json` and the signature file for it. @@ -115,7 +115,7 @@ Primary key fingerprint: 7D23 8D1A E6D3 2A71 8ECD 8611 CB52 64F7 FD4C DD27 Subkey fingerprint: 40CD 9571 7AC4 63E6 1EE3 B285 B718 CA31 0EDB 542F ``` -Alternately, if you don't care about the blocks before the current block, you can request the current root-snapshot file via the [Flow CLI](../../../../tools/flow-cli/index.md). +Alternately, if you don't care about the blocks before the current block, you can request the current root-snapshot file via the [Flow CLI](../../../tools/flow-cli/index.md). For mainnet ```shell @@ -207,7 +207,7 @@ e.g. querying the REST API endpoint using curl curl "http://localhost/v1/blocks?height=sealed" ``` -The light node, like the other type of Flow nodes, also produces Prometheus metrics that can be used to monitor node health. More on that [here](../../node-operation/node-setup.md#monitoring-and-metrics) +The light node, like the other type of Flow nodes, also produces Prometheus metrics that can be used to monitor node health. More on that [here](../node-operation/node-setup.md#monitoring-and-metrics) ## FAQs @@ -261,4 +261,4 @@ Access-003: While the public keys remain the same, the hostnames change each spork to include the spork name. Substitute `[current mainnet spork]` and `[current devnet spork]` with the appropriate spork name (e.g. `mainnet20`). -See [Past Sporks](../../node-operation/past-sporks.md) for the current spork for each network. +See [Past Sporks](../node-operation/past-sporks.md) for the current spork for each network. diff --git a/docs/networks/node-ops/node-operation/faq.md b/docs/networks/node-ops/node-operation/faq.md index 227745328a..208ff84ce1 100644 --- a/docs/networks/node-ops/node-operation/faq.md +++ b/docs/networks/node-ops/node-operation/faq.md @@ -7,9 +7,9 @@ sidebar_position: 1 ### Can anybody run a node? What is the approval process? -Anyone can run an [observer node](../access-onchain-data/light-nodes/observer-node.md). +Anyone can run an [observer node](../light-nodes/observer-node.md). -Anyone can run an Access Node after registering and staking. See [Access Node Setup](../access-onchain-data/access-nodes/access-node-setup.md) for detailed instructions. +Anyone can run an Access Node after registering and staking. See [Access Node Setup](../access-nodes/access-node-setup.md) for detailed instructions. For the other node roles, individuals can go through an application process that involves asking about their background and experience contributing to decentralized projects. To pursue an application, please visit [the Flow website here to apply](https://www.onflow.org/node-validators). diff --git a/docs/networks/node-ops/node-operation/node-bootstrap.md b/docs/networks/node-ops/node-operation/node-bootstrap.md index 7052bd4849..8b6097eb36 100644 --- a/docs/networks/node-ops/node-operation/node-bootstrap.md +++ b/docs/networks/node-ops/node-operation/node-bootstrap.md @@ -5,7 +5,7 @@ description: How to get started running a node on Flow sidebar_position: 8 --- -This guide is for getting a new node staked and running on Flow other than a permissionless Access node. For running a permissionless Access node see [Access node setup](../access-onchain-data/access-nodes/access-node-setup.md). For sporking documentation for existing node operators, see [Spork Process](./spork.md). +This guide is for getting a new node staked and running on Flow other than a permissionless Access node. For running a permissionless Access node see [Access node setup](../access-nodes/access-node-setup.md). For sporking documentation for existing node operators, see [Spork Process](./spork.md). ## Timing diff --git a/docs/networks/node-ops/node-operation/node-economics.md b/docs/networks/node-ops/node-operation/node-economics.md index 1636171ee5..9443a07f71 100644 --- a/docs/networks/node-ops/node-operation/node-economics.md +++ b/docs/networks/node-ops/node-operation/node-economics.md @@ -14,7 +14,7 @@ Node operators play a crucial role in securing the Flow network. Here’s a simp This illustration is strictly to serve as an example. Actual numbers will vary based on several factors. -For real-time numbers, please refer to the [block explorer](https://www.flowdiver.io/tokenomics). +For real-time numbers, please refer to the [block explorer](https://www.flowscan.io/tokenomics). ::: diff --git a/docs/networks/node-ops/node-operation/node-roles.md b/docs/networks/node-ops/node-operation/node-roles.md index 161332d034..67aa06715e 100644 --- a/docs/networks/node-ops/node-operation/node-roles.md +++ b/docs/networks/node-ops/node-operation/node-roles.md @@ -52,7 +52,7 @@ Access nodes are required to stake 100 FLOW to be a confirmed node operator. How An observer node provides locally accessible, continuously updated, verified copy of the block data. It serves the Access API but unlike an access node, an observer node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. -[Get started running an observer node](../access-onchain-data/light-nodes/observer-node.md) +[Get started running an observer node](../light-nodes/observer-node.md) ## diff --git a/docs/networks/node-ops/node-operation/node-setup.md b/docs/networks/node-ops/node-operation/node-setup.md index 7addeaaed0..3438dcc416 100644 --- a/docs/networks/node-ops/node-operation/node-setup.md +++ b/docs/networks/node-ops/node-operation/node-setup.md @@ -6,7 +6,7 @@ sidebar_position: 12 --- This guide is for running a Collection, Consensus, Verification and Execution node. -If you are planning to run an Access node then refer to [access node setup](../access-onchain-data/access-nodes/access-node-setup.md). +If you are planning to run an Access node then refer to [access node setup](../access-nodes/access-node-setup.md). First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](./node-provisioning.md) guide for it. diff --git a/docs/tools/clients/fcl-js/api.md b/docs/tools/clients/fcl-js/api.md index c2c112e483..42086b22de 100644 --- a/docs/tools/clients/fcl-js/api.md +++ b/docs/tools/clients/fcl-js/api.md @@ -545,7 +545,7 @@ The callback sent to `subscribe` will be called with a list of `authn` services. > 📣 **These methods can be used in browsers and NodeJS.** -These methods allows dapps to interact directly with the Flow blockchain via a set of functions that currently use the [Access Node API](../../../networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api.md). +These methods allows dapps to interact directly with the Flow blockchain via a set of functions that currently use the [Access Node API](../../../networks/access-onchain-data/index.md). --- diff --git a/docusaurus.config.js b/docusaurus.config.js index cff3531f2f..166fd9c152 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -422,12 +422,12 @@ const config = { label: 'Network Status', }, { - href: 'https://flowdiver.io/', - label: 'Flowdiver Mainnet', + href: 'https://flowdscan.io/', + label: 'Flowscan Mainnet', }, { - href: 'https://testnet.flowdiver.io/', - label: 'Flowdiver Testnet', + href: 'https://testnet.flowscan.io/', + label: 'Flowscan Testnet', }, { to: '/networks/node-ops/node-operation/past-sporks', diff --git a/src/data/tools/index.ts b/src/data/tools/index.ts index f840eba38d..018f199db4 100644 --- a/src/data/tools/index.ts +++ b/src/data/tools/index.ts @@ -403,12 +403,12 @@ const flowRunnerTool: Tool = { // Explorers const flowScanTool: Tool = { - title: 'Flowdiver', + title: 'Flowscan', tags: ['metrics', 'lookup', 'mainnet'], - link: 'https://flowdiver.io/', + link: 'https://flowscan.io/', iconSrc: 'https://pbs.twimg.com/profile_images/1693654862536331264/ViqtN5qj_400x400.jpg', - description: `Flowdiver is a blockchain explorer that lets you browse all on-chain events, transactions, contracts, and accounts.`, + description: `Flowscan is a blockchain explorer that lets you browse all on-chain events, transactions, contracts, and accounts.`, }; const flowViewSourceTool: Tool = { diff --git a/vercel.json b/vercel.json index 9352f4601a..d26aaa58fd 100644 --- a/vercel.json +++ b/vercel.json @@ -184,12 +184,12 @@ }, { "source": "/access-api", - "destination": "/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api", + "destination": "/networks/access-onchain-data", "permanent": true }, { "source": "/nodes/access-api", - "destination": "/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api", + "destination": "/networks/access-onchain-data", "permanent": true }, { @@ -1053,17 +1053,17 @@ }, { "source": "/networks/node-ops/nodes/node-operation/observer-node", - "destination": "/networks/node-ops/access-onchain-data/light-nodes/observer-node", + "destination": "/networks/node-ops/light-nodes/observer-node", "permanent": true }, { "source": "/networks/node-ops/nodes/node-operation/access-node-setup", - "destination": "/networks/node-ops/access-onchain-data/access-nodes/access-node-setup", + "destination": "/networks/node-ops/access-nodes/access-node-setup", "permanent": true }, { "source": "/networks/node-ops/nodes/access-api", - "destination": "/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api", + "destination": "/networks/node-ops/access-nodes/accessing-data/access-api", "permanent": true }, { @@ -1167,7 +1167,7 @@ }, { "source": "/networks/node-ops/node-operation/access-node-setup", - "destination": "/networks/node-ops/access-onchain-data/access-nodes/access-node-setup", + "destination": "/networks/node-ops/access-nodes/access-node-setup", "permanent": true }, { @@ -1177,7 +1177,22 @@ }, { "source": "/networks/node-ops/node-operation/observer-node", - "destination": "/networks/node-ops/access-onchain-data/light-nodes/observer-node", + "destination": "/networks/node-ops/light-nodes/observer-node", + "permanent": true + }, + { + "source": "/networks/node-ops/access-onchain-data/access-nodes/access-node-setup", + "destination": "/networks/node-ops/access-nodes/access-node-setup", + "permanent": true + }, + { + "source": "/networks/node-ops/access-onchain-data/light-nodes/observer-node", + "destination": "/networks/node-ops/light-nodes/observer-node", + "permanent": true + }, + { + "source": "/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api", + "destination": "/networks/node-ops/access-nodes/accessing-data/access-api", "permanent": true }, {