From 2ace9a509ce3e894c4c05ad7baf3296aa680bad1 Mon Sep 17 00:00:00 2001
From: David Ansermino <14164624+ansermino@users.noreply.github.com>
Date: Mon, 9 Dec 2024 19:35:56 -0500
Subject: [PATCH 1/3] Add existing docs
---
docs/.bookignore | 4 +
docs/.config/lychee.toml | 11 +
docs/.gitattributes | 1 +
docs/.gitignore | 21 +
docs/.spellcheck.yml | 18 +
docs/Makefile | 9 +
docs/README.md | 33 +
docs/babel.config.js | 3 +
docs/devSidebars.js | 5 +
docs/dictionary.txt | 90 +
docs/docs/developers/guides/_category_.json | 3 +
.../developers/guides/network_upgrades.md | 142 +
docs/docs/developers/introduction.md | 17 +
.../users/getting_started/_category_.json | 4 +
.../users/getting_started/hardware-reqs.md | 12 +
docs/docs/users/getting_started/install.md | 94 +
.../users/getting_started/install.module.css | 5 +
docs/docs/users/getting_started/syncing.md | 34 +
docs/docs/users/guides/_category_.json | 4 +
.../users/guides/advanced/_category_.json | 4 +
.../guides/advanced/generating_snapshots.md | 4 +
docs/docs/users/guides/gc.md | 84 +
.../users/guides/interacting_with_wallets.md | 137 +
.../users/guides/monitoring/_category_.json | 4 +
.../users/guides/monitoring/best_practices.md | 19 +
.../users/guides/monitoring/health_checks.md | 118 +
docs/docs/users/guides/monitoring/logs.md | 20 +
docs/docs/users/guides/monitoring/metrics.md | 35 +
docs/docs/users/guides/running_with_curio.md | 12 +
docs/docs/users/introduction.md | 59 +
.../docs/users/knowledge_base/_category_.json | 4 +
docs/docs/users/knowledge_base/docker_tips.md | 136 +
.../docs/users/knowledge_base/jwt_handling.md | 99 +
.../network_upgrades_state_migrations.md | 51 +
.../users/knowledge_base/snapshot_service.md | 46 +
docs/docs/users/openrpc.json | 2244 +++
docs/docs/users/reference/_category_.json | 4 +
docs/docs/users/reference/cli.md | 1579 ++
docs/docs/users/reference/cli.sh | 127 +
docs/docs/users/reference/env_variables.js | 34 +
docs/docs/users/reference/env_variables.md | 63 +
docs/docs/users/reference/json_rpc.md | 53 +
docs/docusaurus.config.js | 140 +
docs/package.json | 55 +
docs/src/css/index.css | 53 +
docs/static/.nojekyll | 0
docs/static/img/favicon.ico | Bin 0 -> 15406 bytes
docs/static/img/logo-with-text.png | Bin 0 -> 83655 bytes
docs/static/img/logo.png | Bin 0 -> 5636 bytes
docs/tsconfig.json | 8 +
docs/userSidebars.js | 5 +
docs/yarn.lock | 14129 ++++++++++++++++
52 files changed, 19836 insertions(+)
create mode 100644 docs/.bookignore
create mode 100644 docs/.config/lychee.toml
create mode 100644 docs/.gitattributes
create mode 100644 docs/.gitignore
create mode 100644 docs/.spellcheck.yml
create mode 100644 docs/Makefile
create mode 100644 docs/README.md
create mode 100644 docs/babel.config.js
create mode 100644 docs/devSidebars.js
create mode 100644 docs/dictionary.txt
create mode 100644 docs/docs/developers/guides/_category_.json
create mode 100644 docs/docs/developers/guides/network_upgrades.md
create mode 100644 docs/docs/developers/introduction.md
create mode 100644 docs/docs/users/getting_started/_category_.json
create mode 100644 docs/docs/users/getting_started/hardware-reqs.md
create mode 100644 docs/docs/users/getting_started/install.md
create mode 100644 docs/docs/users/getting_started/install.module.css
create mode 100644 docs/docs/users/getting_started/syncing.md
create mode 100644 docs/docs/users/guides/_category_.json
create mode 100644 docs/docs/users/guides/advanced/_category_.json
create mode 100644 docs/docs/users/guides/advanced/generating_snapshots.md
create mode 100644 docs/docs/users/guides/gc.md
create mode 100644 docs/docs/users/guides/interacting_with_wallets.md
create mode 100644 docs/docs/users/guides/monitoring/_category_.json
create mode 100644 docs/docs/users/guides/monitoring/best_practices.md
create mode 100644 docs/docs/users/guides/monitoring/health_checks.md
create mode 100644 docs/docs/users/guides/monitoring/logs.md
create mode 100644 docs/docs/users/guides/monitoring/metrics.md
create mode 100644 docs/docs/users/guides/running_with_curio.md
create mode 100644 docs/docs/users/introduction.md
create mode 100644 docs/docs/users/knowledge_base/_category_.json
create mode 100644 docs/docs/users/knowledge_base/docker_tips.md
create mode 100644 docs/docs/users/knowledge_base/jwt_handling.md
create mode 100644 docs/docs/users/knowledge_base/network_upgrades_state_migrations.md
create mode 100644 docs/docs/users/knowledge_base/snapshot_service.md
create mode 100644 docs/docs/users/openrpc.json
create mode 100644 docs/docs/users/reference/_category_.json
create mode 100644 docs/docs/users/reference/cli.md
create mode 100755 docs/docs/users/reference/cli.sh
create mode 100644 docs/docs/users/reference/env_variables.js
create mode 100644 docs/docs/users/reference/env_variables.md
create mode 100644 docs/docs/users/reference/json_rpc.md
create mode 100644 docs/docusaurus.config.js
create mode 100644 docs/package.json
create mode 100644 docs/src/css/index.css
create mode 100644 docs/static/.nojekyll
create mode 100644 docs/static/img/favicon.ico
create mode 100644 docs/static/img/logo-with-text.png
create mode 100644 docs/static/img/logo.png
create mode 100644 docs/tsconfig.json
create mode 100644 docs/userSidebars.js
create mode 100644 docs/yarn.lock
diff --git a/docs/.bookignore b/docs/.bookignore
new file mode 100644
index 000000000000..31ed66701cb5
--- /dev/null
+++ b/docs/.bookignore
@@ -0,0 +1,4 @@
+README.md
+.github
+.spellcheck.yml
+LICENSE
\ No newline at end of file
diff --git a/docs/.config/lychee.toml b/docs/.config/lychee.toml
new file mode 100644
index 000000000000..75ec001d9783
--- /dev/null
+++ b/docs/.config/lychee.toml
@@ -0,0 +1,11 @@
+# This is the common config used by lychee, our dead html link checker
+# See the github actions workflows to see the inputs
+# https://github.com/lycheeverse/lychee/blob/2109470dc380eaf66944b6bcfa86230e0a58e58f/lychee-bin/src/options.rs#L152
+
+verbose = "debug"
+no_progress = true
+# Requires CAPTCHA verification
+exclude = ["https://faucet.calibnet.chainsafe-fil.io/funds.html"]
+timeout = 60
+max_retries = 6
+retry_wait_time = 10
diff --git a/docs/.gitattributes b/docs/.gitattributes
new file mode 100644
index 000000000000..0c85f3460ec4
--- /dev/null
+++ b/docs/.gitattributes
@@ -0,0 +1 @@
+docs/reference/cli.md linguist-generated=true
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 000000000000..f95c0fddb34f
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,21 @@
+dictionary.dic
+# Dependencies
+/node_modules
+
+# Production
+/build
+
+# Generated files
+.docusaurus
+.cache-loader
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/docs/.spellcheck.yml b/docs/.spellcheck.yml
new file mode 100644
index 000000000000..8719feae8287
--- /dev/null
+++ b/docs/.spellcheck.yml
@@ -0,0 +1,18 @@
+matrix:
+ - name: Markdown
+ aspell:
+ lang: en
+ dictionary:
+ wordlists:
+ - .wordlist.txt
+ encoding: utf-8
+ pipeline:
+ - pyspelling.filters.markdown:
+ - pyspelling.filters.html:
+ comments: false
+ ignores:
+ - code
+ - pre
+ sources:
+ - "**/*.md"
+ default_encoding: utf-8
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 000000000000..306eeeb4f24c
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,9 @@
+SPELLCHECK_DICTIONARY=./dictionary.txt
+format-spellcheck-dictionary:
+ @cat $(SPELLCHECK_DICTIONARY) | sort --ignore-case | uniq > $(SPELLCHECK_DICTIONARY).tmp
+ @mv $(SPELLCHECK_DICTIONARY).tmp $(SPELLCHECK_DICTIONARY)
+
+format-spellcheck-dictionary-check:
+ @cat $(SPELLCHECK_DICTIONARY) | sort --ignore-case | uniq > $(SPELLCHECK_DICTIONARY).tmp
+ @diff $(SPELLCHECK_DICTIONARY) $(SPELLCHECK_DICTIONARY).tmp
+ @rm $(SPELLCHECK_DICTIONARY).tmp
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000000..9b02c672ab42
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,33 @@
+# Forest Documentation
+
+This directory contains a Docusaurus documentation website for both user and developer documentation.
+
+### Installation
+
+```
+$ yarn
+```
+
+### Local Development
+
+```
+$ yarn start
+```
+
+This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
+
+### Spellcheck
+
+```
+yarn spellcheck
+```
+
+You can add unknown words to `dictionary.txt`.
+
+### Build
+
+```
+$ yarn build
+```
+
+This command generates static content into the `build` directory and can be served using any static contents hosting service.
diff --git a/docs/babel.config.js b/docs/babel.config.js
new file mode 100644
index 000000000000..bfd75dbdfc72
--- /dev/null
+++ b/docs/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: [require.resolve("@docusaurus/core/lib/babel/preset")],
+};
diff --git a/docs/devSidebars.js b/docs/devSidebars.js
new file mode 100644
index 000000000000..df2f4222de84
--- /dev/null
+++ b/docs/devSidebars.js
@@ -0,0 +1,5 @@
+const sidebars = {
+ userSidebar: [{ type: "autogenerated", dirName: "." }],
+};
+
+module.exports = sidebars;
diff --git a/docs/dictionary.txt b/docs/dictionary.txt
new file mode 100644
index 000000000000..b28f32753abb
--- /dev/null
+++ b/docs/dictionary.txt
@@ -0,0 +1,90 @@
+2k
+APIs
+backend
+benchmarking
+blockstore
+Butterflynet
+Calibnet
+calibnet
+cardinality
+ChainSafe
+chainsafe
+ChainSafe's
+changelog
+CIDs
+CLI
+cli
+Cloudflare
+codebase
+devnet
+Devops
+Devs
+Ethereum
+F3
+f3
+f3-sidecar
+FFI
+FIL
+fil
+Filecoin
+filecoin-project
+Filfox
+FilOz
+FIP
+FIPs
+FVM
+GC
+GiB
+Github
+Grafana
+hotfix
+ie.
+Implementers
+implementers
+io
+IPFS
+JSON
+JSON-RPC
+JWT
+JWTs
+keystore
+Kubernetes
+kubernetes
+Linux
+Liveness
+liveness
+localhost
+localhost's
+M1
+M2
+macOS
+Mainnet
+mainnet
+NV22
+NV23
+NV24
+NVMe
+onwards
+Organisation
+p2p
+pre-compiled
+preload
+preloaded
+Q4
+README
+Roadmap
+roadmap
+RPC
+rustup
+subcommands
+swappiness
+TabItem
+TBD
+Terraform
+testnet
+tipset
+tipsets
+V0
+V1
+VPS
+WIP
diff --git a/docs/docs/developers/guides/_category_.json b/docs/docs/developers/guides/_category_.json
new file mode 100644
index 000000000000..506e345f68d8
--- /dev/null
+++ b/docs/docs/developers/guides/_category_.json
@@ -0,0 +1,3 @@
+{
+ "label": "Guides"
+}
diff --git a/docs/docs/developers/guides/network_upgrades.md b/docs/docs/developers/guides/network_upgrades.md
new file mode 100644
index 000000000000..55d1208bcd9e
--- /dev/null
+++ b/docs/docs/developers/guides/network_upgrades.md
@@ -0,0 +1,142 @@
+---
+title: Network Upgrades
+sidebar_position: 1
+---
+
+## Network upgrades
+
+This document describes the process of network upgrades in the Filecoin network and how they are handled in Forest.
+
+## Overview
+
+### Network upgrade schedule
+
+The network upgrades rough schedule is published in [Filecoin Core Devs discussions](https://github.com/filecoin-project/core-devs/discussions) (see the [2024 schedule](https://github.com/filecoin-project/core-devs/discussions/155)). The schedule is subject to change, and the exact dates are announced at least two weeks before the upgrade (usually at least a month).
+
+### Network upgrade scope
+
+The network upgrades scope is published in the [Filecoin Core Devs discussions](https://github.com/filecoin-project/core-devs/discussions) (see the [NV23 scope](https://github.com/filecoin-project/core-devs/discussions/149)). The scope includes the changes in the Filecoin protocol in the form of accepted FIPs.
+
+Some FIPs require changes in the FVM, some (most) in the Builtin Actors, and some in the Forest. Additionally, some changes require state migrations, which may not be trivial to implement and require significant computing resources.
+
+### Network upgrade implementation in Forest
+
+Rough implementation steps in Forest are as follows:
+
+```mermaid
+graph TD
+ A[Skeleton with base migration] --> B[State migrations]
+ A --> H[Network-aware node changes]
+ A --> I[fil-actor-states update and release]
+ I --> D
+ H --> D
+ B --> D
+ C[Update to latest FVM] --> D[2k network testing]
+ D[2k network testing] --> E[Butterflynet testing with Lotus]
+ E[Butterflynet testing with Lotus] --> F[Calibration network upgrade]
+ F[Calibration network upgrade] --> G[Mainnet upgrade]
+```
+
+#### Skeleton with base migration
+
+This provides the base for the state migrations and network-aware node changes. See the sample PR for NV24 [here](https://github.com/ChainSafe/forest/pull/4819).
+
+#### State migrations
+
+State migrations are described in detail in the relevant FIPs, including the steps required to perform them. Note that naive state migrations might take a significant amount of time and resources. It is up to the implementation team to decide whether to optimize them.
+
+:::note
+Testing the state migration on a relevant network is crucial before the upgrade epoch. This is done by changing the upgrade epoch in both Lotus and Forest and ensuring both migrations produce the same state root. This is done locally, but it might be facilitated in the future.
+
+This also allows for assessing the duration of the state migration and determining whether it is feasible to perform it on the mainnet.
+:::
+
+#### Update to latest FVM
+
+Both Forest and the `builtin-actors` repository depend on the FVM. The FVM is updated to the latest version to include the changes required for the network upgrade. The exact version and its release are coordinated across the Filecoin implementations.
+
+#### `fil-actor-states` update and release
+
+The `fil-actor-states` repository is updated to the latest bundle release. The changes are then released, and the Forest repository is updated to include the new release. Necessary CIDs are updated. The bundle release and the version to be used are coordinated across the Filecoin implementations.
+
+#### Network-aware node changes
+
+Some changes are required in the Forest itself but outside migrations. These changes are usually related to the network upgrade itself, e.g., changes in the block validation rules.
+
+#### 2k network testing
+
+The changes are tested locally on the devnet with a Lotus RC and a `builtin-actors` bundle RC.
+
+#### Butterflynet testing with Lotus
+
+The changes are tested on the Butterflynet. The FilOz team provides a testnet for this purpose and shares necessary resources with other teams so they can join the network.
+
+#### Calibration network upgrade
+
+The changes are battle-tested on the calibnet. All teams join the network and test the changes in a real-world scenario. This is the last stage before the mainnet upgrade.
+
+#### Mainnet upgrade
+
+The changes are deployed on the mainnet. The upgrade is coordinated across the Filecoin implementations.
+
+## Dependencies
+
+### Builtin Actors
+
+Forest network upgrades usually depend on new bundle releases of the Filecoin Builtin Actors. The releases can be found [here](https://github.com/filecoin-project/builtin-actors/releases). On top of the new bundle, the Forest team is maintaining a _fork_ of this repository, which contains mainly the same code as the original repository but with some changes to make it compatible with Forest and without smart contract quirks. Thanks to this, we don't need to maintain our interfaces and can use the original ones (almost) directly. The repository can be found [here](https://github.com/ChainSafe/fil-actor-states). This comes at the cost of maintaining the fork up-to-date with the original repository and cutting new releases when bundle changes are in place; see a sample [sync PR](https://github.com/ChainSafe/fil-actor-states/pull/311).
+
+The steps required to update the Builtin Actors in Forest are as follows:
+
+1. Update the `fil-actor-states` repository to the tag of the new bundle release.
+2. Ensure that the changes are compatible with Forest. If not, prepare a PR ahead of time to address breaking changes.
+3. Cut a new release of the `fil-actor-states`.
+4. Update the `fil-actor-states` dependency in Forest.
+5. Update the CIDs in the [bundle module](https://github.com/ChainSafe/forest/blob/main/src/networks/actors_bundle.rs) to include bundles for any networks that you want to support.
+6. Update the manifest with `❯ forest-tool state-migration generate-actors-metadata > build/manifest.json`. This will add necessary entries to the manifest.
+
+Note that if there were no Rust interface changes, e.g., a re-tag, steps 1-4 can be skipped.
+
+### FVM
+
+:::warning
+FVM does not follow semantic versioning. This means that a seemingly hotfix update can contain breaking changes.
+:::
+
+Depending on the changes in the network upgrade, an FVM upgrade might be necessary. This can be either a _soft_ upgrade with a limited number of breaking changes, e.g., `4.3.1` to `4.3.2`, or a _hard_ upgrade where the changes are significant, e.g., `4.3.1` to `5.0.0`. The latter requires more development effort and testing.
+
+The steps required to update the FVM in Forest (soft upgrade) are as follows:
+
+1. Update the FVM dependency in the `fil-actor-states` repository.
+2. Ensure that the changes are compatible with Forest. If not, prepare a PR ahead of time to address breaking changes.
+3. Cut a new release of the `fil-actor-states`.
+4. Update the `fil-actor-states` dependency in Forest.
+5. Update the FVM in the Forest repository. The relevant entries in the changelog are `fvmX` and `fvm_sharedX`, where `X` is the major version of the FVM.
+
+## Coordination
+
+The most crucial part of the network upgrade is coordinating with other Filecoin implementation teams. The upgrades are coordinated by the [FilOz team](https://www.filoz.org). The coordination happens during the fortnightly Filecoin Implementers calls and the `#fil-implementers` channel in the Filecoin Slack. It includes the upgrade date, the expected duration, and the scope of the required changes.
+
+## Communication
+
+We communicate the network upgrades via the following channels:
+
+- [Forest Discussions](https://github.com/ChainSafe/forest/discussions). See the [NV23 announcement](https://github.com/ChainSafe/forest/discussions/4488) for an example.
+- The `#fil-forest-announcements` channel in the Filecoin Slack.
+
+## Network upgrade monitoring
+
+Given the impact of network upgrades and potential issues they cause around the upgrade time, all development teams should monitor the upgrade process and address potential issues as soon as possible. Usually, an upgrade room is created on Zoom, and the link to it is shared with the implementers.
+
+On the Forest side, developers monitoring the upgrade should:
+
+- have a running node (latest release) synced to the network and following the chain,
+- immediately investigate all unexpected node behavior around the network upgrade, be it state mismatch or other warnings/errors not happening in the past,
+- join the network monitoring room on Zoom and actively participate in the discussions, especially when comparing the state after the upgrade,
+- contact the Forest infrastructure team, which might be directly affected if anything on the Forest side goes awry. An emergency fix and snapshot might be needed for them.
+
+Some commands useful when asserting Forest parity against Lotus and Venus state after the upgrade:
+
+- `forest-cli chain head -n X` - this will print the last X tipsets to assert that Forest and Lotus are following the same chain and not a fork,
+- `forest-cli state compute --epoch X` will print the computed state at the given epoch. We should assert that we reach the same state after 5-10 epochs.
+
+If all goes well, the network should still be monitored for at least one or two hours, and maintainers should be ready to react to issues.
diff --git a/docs/docs/developers/introduction.md b/docs/docs/developers/introduction.md
new file mode 100644
index 000000000000..3be22be3201c
--- /dev/null
+++ b/docs/docs/developers/introduction.md
@@ -0,0 +1,17 @@
+---
+title: Introduction
+hide_title: true
+sidebar_position: 1
+slug: /
+---
+
+## Developer Documentation
+
+:::warning
+
+This documentation is intended for contributors to the Forest codebase. If you are a user of Forest you might want
+the [user documentation](/).
+
+:::
+
+Welcome to the Forest developer documentation!
diff --git a/docs/docs/users/getting_started/_category_.json b/docs/docs/users/getting_started/_category_.json
new file mode 100644
index 000000000000..877a378f7089
--- /dev/null
+++ b/docs/docs/users/getting_started/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Getting Started",
+ "position": 2
+}
diff --git a/docs/docs/users/getting_started/hardware-reqs.md b/docs/docs/users/getting_started/hardware-reqs.md
new file mode 100644
index 000000000000..548e7265c882
--- /dev/null
+++ b/docs/docs/users/getting_started/hardware-reqs.md
@@ -0,0 +1,12 @@
+---
+title: Hardware Requirements
+sidebar_position: 1
+---
+
+Forest is designed to be lightweight enough to run on consumer hardware.
+
+| | Minimum | Recommended | Notes |
+| ---------- | ------- | ----------- | --------------------------------------------------------- |
+| CPU | 4-core | 8-core | |
+| Memory | 16 GiB | 32 GiB | State migrations can require increased amounts of memory. |
+| Disk Space | 128 GiB | 256 GiB | NVMe recommended. Snapshots can require ~70+ GiB each. |
diff --git a/docs/docs/users/getting_started/install.md b/docs/docs/users/getting_started/install.md
new file mode 100644
index 000000000000..29f83cc115fb
--- /dev/null
+++ b/docs/docs/users/getting_started/install.md
@@ -0,0 +1,94 @@
+---
+title: Installing
+sidebar_position: 2
+---
+
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+
+
+
+To install Forest from pre-compiled binaries, please refer to the
+[releases page](https://github.com/ChainSafe/forest/releases), or consider using
+Docker.
+
+
+
+
+
Images
+
+Images are available via Github Container Registry:
+
+```shell
+ghcr.io/chainsafe/forest
+```
+
+You will find tagged images following these conventions:
+
+- `latest` - latest stable release
+- `vx.x.x` - tagged versions
+- `edge` - latest development build of the `main` branch
+- `date-digest` (e.g., `2023-02-17-5f27a62`) - all builds that landed on the `main` branch
+
+A list of available images can be found here: https://github.com/ChainSafe/forest/pkgs/container/forest
+
+
+
+```shell
+# Clone the Forest repository
+git clone --depth 1 https://github.com/ChainSafe/forest.git && cd forest
+make install
+```
+
+Both approaches will compile and install `forest` and `forest-cli` to
+`~/.cargo/bin`. Make sure you have it in your `PATH`.
+
+
+
+
+## Verifying the installation
+
+Ensure that Forest was correctly installed.
+
+```shell
+❯ forest --version
+forest-filecoin 0.19.0+git.671c30c
+```
diff --git a/docs/docs/users/getting_started/install.module.css b/docs/docs/users/getting_started/install.module.css
new file mode 100644
index 000000000000..e90d187d9c1d
--- /dev/null
+++ b/docs/docs/users/getting_started/install.module.css
@@ -0,0 +1,5 @@
+.installtab[aria-selected='false'] {
+ border-bottom-color: white;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
diff --git a/docs/docs/users/getting_started/syncing.md b/docs/docs/users/getting_started/syncing.md
new file mode 100644
index 000000000000..a85ef0d62640
--- /dev/null
+++ b/docs/docs/users/getting_started/syncing.md
@@ -0,0 +1,34 @@
+---
+title: Syncing A Node
+sidebar_position: 3
+---
+
+:::info
+
+All nodes joining the network are recommended to sync from a snapshot. This is the default behavior of Forest.
+
+Syncing from genesis (tipset 0) is generally infeasible.
+
+:::
+
+Once started, Forest will connect to the bootstrap peers and in parallel fetch the latest snapshot from [Forest's snapshot service](../knowledge_base/snapshot_service.md). Once the snapshot is downloaded, it will be loaded into the node, and then syncing will continue by utilizing its peers.
+
+### Mainnet
+
+```shell
+forest
+```
+
+### Calibnet
+
+```shell
+forest --chain calibnet
+```
+
+## Monitoring Sync Status
+
+In another shell:
+
+```shell
+forest-cli sync status
+```
diff --git a/docs/docs/users/guides/_category_.json b/docs/docs/users/guides/_category_.json
new file mode 100644
index 000000000000..c59a630d3b4a
--- /dev/null
+++ b/docs/docs/users/guides/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Guides",
+ "position": 3
+}
diff --git a/docs/docs/users/guides/advanced/_category_.json b/docs/docs/users/guides/advanced/_category_.json
new file mode 100644
index 000000000000..fa338fd55290
--- /dev/null
+++ b/docs/docs/users/guides/advanced/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Advanced",
+ "position": 2
+}
diff --git a/docs/docs/users/guides/advanced/generating_snapshots.md b/docs/docs/users/guides/advanced/generating_snapshots.md
new file mode 100644
index 000000000000..426546ee8402
--- /dev/null
+++ b/docs/docs/users/guides/advanced/generating_snapshots.md
@@ -0,0 +1,4 @@
+---
+title: Generating Snapshots
+sidebar_position: 1
+---
diff --git a/docs/docs/users/guides/gc.md b/docs/docs/users/guides/gc.md
new file mode 100644
index 000000000000..7c14d7572cdd
--- /dev/null
+++ b/docs/docs/users/guides/gc.md
@@ -0,0 +1,84 @@
+---
+title: Garbage Collector
+sidebar_position: 1
+---
+
+### Enabling/Disabling Garbage Collection
+
+By default, garbage collection is automatically enabled in Forest to ensure that unnecessary data is regularly cleared out, optimizing disk usage and performance.
+
+If you want to disable GC, for example, while testing new features or running performance benchmarks where GC may cause unnecessary overhead, you can do so by starting the Forest daemon with the `--no-gc` flag.
+
+This ensures that GC process is skipped, preventing potential performance impact.
+
+### Cadence of GC Runs
+
+Garbage Collection (GC) runs on a regular schedule and follows these steps:
+
+- **Mark**: Scan all the data blocks, create a unique identifier (hash) for each, and store these in a list.
+- Wait for the chain to reach finality
+- **Sweep**: Check which data is still needed by starting at the latest block. Anything not needed and older than the finality point gets deleted.
+
+This process keeps the system clean by regularly removing old, unused data.
+
+### What is Garbage Collected?
+
+The GC process removes unreachable blocks and state trees that are older than chain finality epochs. Specifically, it:
+
+- Marks blocks that can no longer be reached from the blockchain’s HEAD and prepares them for deletion.
+- Removes state trees that are no longer needed to ensure the persistence layer remains lightweight and efficient.
+
+GC does not remove:
+
+- Any block that is reachable from the current heaviest tipset.
+- Data younger than chain finality epochs (to prevent the accidental removal of blocks that may later be part of a fork).
+
+### When Should You Disable GC?
+
+GC is critical in production environments, but you may want to disable it in the following cases:
+
+- **Performance benchmarking**: When you want to measure raw performance without GC overhead.
+- **Testing new features**: When developing or experimenting with features where GC pauses might interfere with quick iteration cycles.
+
+Always remember to enable GC when moving back to production or long-term testing environments.
+
+## What Happens During a GC Run?
+
+### Memory Usage Spikes
+
+During the GC process, Forest consumes extra memory temporarily:
+
+- **Mark Phase**: It requires 4 bytes of memory per database record.
+- **Filter Phase**: While traversing reachable blocks, it uses 32 bytes of memory per reachable block.
+
+For a typical 100 GiB mainnet snapshot, this results in approximately 2.5 GiB of additional memory usage.
+
+### Syncing Pauses or Performance Overheads
+
+While GC runs in the background, it can cause some delays or pauses, particularly during the "filter" stage, where reachable blocks are processed:
+
+- **Syncing Pauses**: There may be brief interruptions in syncing as resources are allocated for the GC process.
+- **Performance Overhead**: While relatively efficient, the mark-and-sweep algorithm could slow down operations slightly, especially on large datasets.
+
+## Disk Usage
+
+### With GC
+
+When GC is enabled, you can expect disk usage to be slightly higher than live data for three reasons:
+
+1. Unreachable data isn’t removed until it’s at least 7.5 hours old.
+2. The GC is conservative, leaving behind a small amount of unreachable data (less than 1%).
+3. Some fragmentation in the blockstore backend may prevent immediate disk space reclamation.
+
+Overall, the disk usage is expected to be slightly above the live dataset size, which helps maintain optimal database performance.
+
+### Without GC
+
+If you disable GC, the database will continue to grow as unreachable data remains in the system. Over time, this can lead to significant disk space consumption, especially in active environments where many blocks are added, and forks may create unreachable blocks.
+
+Without GC, expect disk usage to grow without bounds as old data is never purged. This could lead to:
+
+- Higher storage costs.
+- Decreased performance as the database grows larger and becomes more fragmented.
+
+For detailed information on the inner workings of the GC, refer to the [GC documentation](https://docs.rs/forest-filecoin/0.20.0/forest_filecoin/db/gc/index.html)
diff --git a/docs/docs/users/guides/interacting_with_wallets.md b/docs/docs/users/guides/interacting_with_wallets.md
new file mode 100644
index 000000000000..ddcadbac1efc
--- /dev/null
+++ b/docs/docs/users/guides/interacting_with_wallets.md
@@ -0,0 +1,137 @@
+---
+title: Interacting With Wallets
+sidebar_position: 1
+---
+
+# Wallets in Forest
+
+The Forest client provides two types of wallets:
+
+1. **Local wallet (only accessible by you)**: This wallet is recommended for day-to-day use due to its higher security. Since it is only accessible by you, it minimizes exposure and reduces the likelihood of compromise.
+
+2. **Node wallet (accessible by the Forest node)**: This wallet is managed by the Forest node and is included for backward compatibility with Lotus. It’s less secure as the node may have direct access to it for network operations. This could potentially expose it to unauthorized access or other network-related vulnerabilities.
+
+In the following sections, we will be using the wallet in its local mode.
+
+## Configuration
+
+To query an account's balance or transfer funds, you need access to a running Filecoin node. You can run such a node yourself or use a publicly available node.
+
+[Glif.io](https://www.glif.io/en) runs a public Filecoin node that we can use by setting the `FULLNODE_API_INFO` environment variable:
+
+```shell
+export FULLNODE_API_INFO=/dns/api.calibration.node.glif.io/tcp/443/https
+```
+
+:::caution
+
+As a rule of thumb, only send mainnet FIL tokens through a node that you trust.
+The rest of this document will assume you're using testnet tokens.
+
+:::
+
+## Creating an account
+
+Initially, our wallet contains no addresses:
+
+```shell
+❯ forest-wallet list
+Address Default Balance
+```
+
+Let's create a new address and inspects its balance:
+
+```shell
+❯ forest-wallet new
+t1amfhh3hxvsilyhloxwheuxforst5hyzsbletgoy
+```
+
+```shell
+❯ forest-wallet list
+Address Default Balance
+t1amfhh3hxvsilyhloxwheuxforst5hyzsbletgoy X 0 FIL
+```
+
+You can make sure you are using testnet addresses by checking their prefix. They start with a `t` whereas mainnet ones start with a `f`.
+
+:::note
+
+You can read more about the different address types [here](https://docs.filecoin.io/smart-contracts/filecoin-evm-runtime/address-types).
+
+:::
+
+The generated address will be unique and it will have a balance of `0 FIL`.
+Since this is a testnet account, we can add FIL to it from the [faucet](https://faucet.calibnet.chainsafe-fil.io/funds.html)/[alternate faucet](https://faucet.triangleplatform.com/filecoin/calibration).
+
+After requesting the funds and waiting roughly a minute, we can see the funds arrive in our wallet:
+
+```shell
+❯ forest-wallet list
+Address Default Balance
+t1amfhh3hxvsilyhloxwheuxforst5hyzsbletgoy X 100 FIL
+```
+
+## Sending FIL tokens from your wallet
+
+Let's create a new, empty account:
+
+```shell
+❯ forest-wallet new
+t1qj55ggurqydu4mgoon7ycvkyyhofc4tvf25tmlq
+
+❯ forest-wallet list
+Address Default Balance
+t1qj55ggurqydu4mgoon7ycvkyyhofc4tvf25tmlq 0 FIL
+t1amfhh3hxvsilyhloxwheuxforst5hyzsbletgoy X 100 FIL
+```
+
+We can transfer FIL to this new account from our default account:
+
+```shell
+❯ forest-wallet send t1qj55ggurqydu4mgoon7ycvkyyhofc4tvf25tmlq "1.2 FIL"
+bafy2bzaceblzz644szs6s5ggyxlgdnonlq5bavu54cxwujcdtgdaze2bafdle
+```
+
+It takes a minute or so for the message to be included in the Filecoin blockchain. Once the message has gone through, we can inspect our balances again:
+
+```shell
+❯ forest-wallet list
+Address Default Balance
+t1qj55ggurqydu4mgoon7ycvkyyhofc4tvf25tmlq 1200 milliFIL
+t1amfhh3hxvsilyhloxwheuxforst5hyzsbletgoy X ~98800 milliFIL
+```
+
+:::tip
+
+When requesting funds from the faucet or sending tokens to another address, the CID of the message will be shown. You can use it to inspect the message on any [Filecoin Blockchain Explorer](https://docs.filecoin.io/networks/calibration/explorers).
+
+:::
+
+The gas cost of the message is automatically paid from the sending account.
+
+## Lotus compatibility
+
+If you want to use the builtin wallet in a Lotus or Forest node, you can use the `forest-wallet` executable with the `--remote-wallet` option. The subcommands remain the same but require write access to the remote Filecoin node.
+
+## Security recommendations
+
+To maximize the security of your local wallet, we recommend following these best practices:
+
+- **Set strict file permissions**: Ensure that the local wallet file can only be accessed by your user account by running the following command:
+
+ ```shell
+ chmod 600 ~/.local/share/forest/keystore.json
+ ```
+
+ This makes the file readable and writable only by you.
+
+- **Encrypt your wallet data**: Encryption provides an additional layer of security in case your system is compromised or accessed by others. You can either encrypt your entire disk or, at a minimum, your home directory.
+
+- **Create backups**: Regularly back up your local wallet. This ensures that if something happens to your system, you will still have access to your funds.
+ Please refer to the `forest-tool backup` subcommands.
+
+:::danger
+
+**Never share your wallet with anyone**: Your wallet contains your private key, which gives full control over your funds. No legitimate service will ever ask you to share your private key or wallet file.
+
+:::
diff --git a/docs/docs/users/guides/monitoring/_category_.json b/docs/docs/users/guides/monitoring/_category_.json
new file mode 100644
index 000000000000..de72be0badd6
--- /dev/null
+++ b/docs/docs/users/guides/monitoring/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Monitoring",
+ "position": 2
+}
diff --git a/docs/docs/users/guides/monitoring/best_practices.md b/docs/docs/users/guides/monitoring/best_practices.md
new file mode 100644
index 000000000000..7322c9906fc4
--- /dev/null
+++ b/docs/docs/users/guides/monitoring/best_practices.md
@@ -0,0 +1,19 @@
+---
+title: Best Practices
+---
+
+### Node
+
+- **monitor disk space usage**, especially the database size - it can grow quickly, especially around network upgrades
+- **monitor the memory usage** - the node can use a lot of memory, especially during sync. Don't let it run too close to the limit
+- **monitor the chain sync status** - on average, the node should be able to sync two epochs per minute
+- **monitor the number of peers** - the more peers, the better, If a node has no peers, it cannot sync
+- **monitor the logs for errors and warnings** - they can indicate potential issues
+
+### Monitoring
+
+- **monitor the monitoring system** - if the monitoring system goes down, you won't know if the node is down
+- **set up alerts for critical metrics** - disk space, memory usage, sync status, etc.
+- **ensure the persistence of the monitoring system** - if the monitoring system loses data, you won't be able to diagnose issues
+- **don't expose monitoring endpoints to the internet** - they are not secured and can leak sensitive information
+- **don't set the log levels too high** - this can generate a lot of data and slow down the node
diff --git a/docs/docs/users/guides/monitoring/health_checks.md b/docs/docs/users/guides/monitoring/health_checks.md
new file mode 100644
index 000000000000..9e4b0db01d68
--- /dev/null
+++ b/docs/docs/users/guides/monitoring/health_checks.md
@@ -0,0 +1,118 @@
+---
+title: Health Checks
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+All health check endpoints operate on port `2346` by default. This behavior can
+be changed via the `--healthcheck-address` flag. All endpoints expose a
+`verbose` optional query parameter that can be used to get more detailed
+information about the node's health status.
+
+Endpoints return a `200 OK` status code if the node is healthy and a
+`503 Service Unavailable` status code if the node is not healthy.
+
+
+
+
+### `/livez`
+
+Liveness probes determine whether or not an application running in a container
+is in a healthy state. The idea behind a liveness probe is that it fails for
+prolonged period of time, then the application should be restarted. In our case,
+we require:
+
+- The node is not in an error state (i.e., boot-looping)
+- At least 1 peer is connected (without peers, the node is isolated and cannot
+ sync)
+
+If any of these conditions are not met, the node is **not** healthy. If this
+happens for a prolonged period of time, the application should be restarted.
+
+Sample _lively_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/livez?verbose"
+[+] sync ok
+[+] peers connected⏎
+```
+
+Sample _not lively_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/livez?verbose"
+[+] sync ok
+[!] no peers connected
+```
+
+
+
+
+### `/readyz`
+
+Readiness probes determine whether or not a container is ready to serve
+requests. The goal is to determine if the application is fully prepared to
+accept traffic. In our case, we require:
+
+- The node is in sync with the network
+- The current epoch of the node is not too far behind the network
+- The RPC server is running
+- The Ethereum mapping is up to date
+
+If any of these conditions are not met, the node is **not** ready to serve
+requests.
+
+Sample _ready_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/readyz?verbose"
+[+] sync complete
+[+] epoch up to date
+[+] rpc server running
+[+] eth mapping up to date⏎
+```
+
+Sample _not ready_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/readyz?verbose"
+[!] sync incomplete
+[!] epoch outdated
+[+] rpc server running
+[!] no eth mapping⏎
+```
+
+
+
+
+### `/healthz`
+
+This endpoint is a combination of the `/livez` and `/readyz` endpoints, except
+that the node doesn't have to be fully synced. Deprecated in the Kubernetes
+world, but still used in some setups.
+
+Sample _healthy_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/healthz?verbose"
+[+] sync complete
+[+] epoch up to date
+[+] rpc server running
+[+] sync ok
+[+] peers connected⏎
+```
+
+Sample _unhealthy_ response:
+
+```
+❯ curl "http://127.0.0.1:2346/healthz?verbose"
+[!] sync incomplete
+[!] epoch outdated
+[+] rpc server running
+[+] sync ok
+[!] no peers connected⏎
+```
+
+
+
diff --git a/docs/docs/users/guides/monitoring/logs.md b/docs/docs/users/guides/monitoring/logs.md
new file mode 100644
index 000000000000..ee398e2b9327
--- /dev/null
+++ b/docs/docs/users/guides/monitoring/logs.md
@@ -0,0 +1,20 @@
+---
+title: Logs
+---
+
+Logs are written to standard output by default. They can be written to rolling log files with the `--log-dir
` flag. The log level can be set with the `RUST_LOG` environment variable. The defaults are generally sufficient for most users but can be adjusted to provide more or less information. Different modules can have different log levels, and the log level can be set to `trace`, `debug`, `info`, `warn`, `error`, or `off`.
+
+```console
+❯ RUST_LOG=info,forest_filecoin=debug forest --chain calibnet
+
+2024-08-28T12:49:59.830012Z INFO forest_filecoin::daemon::main: Using default calibnet config
+2024-08-28T12:49:59.834109Z INFO forest_filecoin::daemon: Starting Forest daemon, version 0.19.2+git.74fd562acce
+2024-08-28T12:49:59.834123Z DEBUG forest_filecoin::daemon: Increased file descriptor limit from 1024 to 8192
+2024-08-28T12:49:59.834164Z DEBUG forest_filecoin::libp2p::keypair: Recovered libp2p keypair from /home/rumcajs/.local/share/forest/libp2p/keypair
+```
+
+:::tip
+Enabling `trace` or `debug` logging can generate gargantuan log files (gigabytes per minute). Make sure to adjust the log level to your needs.
+:::
+
+Sending logs to Loki is also possible. Pass `--loki` to the Forest daemon to enable it. The logs are sent to Loki via the HTTP API. The Loki endpoint can be set with the `--loki-endpoint` flag. The default endpoint is `http://localhost:3100`.
diff --git a/docs/docs/users/guides/monitoring/metrics.md b/docs/docs/users/guides/monitoring/metrics.md
new file mode 100644
index 000000000000..9825d2459260
--- /dev/null
+++ b/docs/docs/users/guides/monitoring/metrics.md
@@ -0,0 +1,35 @@
+---
+title: Metrics
+---
+
+Prometheus metrics are exposed on localhost's port `6116` by default, under `/metrics`. They are enabled by default and can be disabled with the `--no-metrics` flag. The metrics endpoint can be modified with the `--metrics-address` flag.
+
+```console
+❯ curl localhost:6116/metrics
+# HELP lru_cache_miss Stats of lru cache miss.
+# TYPE lru_cache_miss counter
+lru_cache_miss_total{kind="tipset"} 7199
+lru_cache_miss_total{kind="sm_tipset"} 181
+# HELP lru_cache_hit Stats of lru cache hit.
+# TYPE lru_cache_hit counter
+lru_cache_hit_total{kind="sm_tipset"} 913
+lru_cache_hit_total{kind="tipset"} 971846
+...
+```
+
+The metrics include:
+
+- networking metrics (e.g., number of peers, number of blocks received),
+- database metrics (e.g., database size),
+- RPC metrics (e.g., number of requests, response times),
+- internal metrics (e.g., cache sizes, number of tasks).
+
+Those can be used to monitor the node's health and create alerts. A sample Grafana dashboard is available in the [monitoring](https://github.com/ChainSafe/forest/tree/main/monitoring) directory in the Forest repository. It includes the entire Docker Compose setup to run monitoring locally. See the instructions in the [README](https://github.com/ChainSafe/forest/blob/main/monitoring/README.md) file. Note that [Loki](https://grafana.com/oss/loki/) is not enabled by default. To allow it, pass `--loki` to the Forest daemon.
+
+:::tip
+Because of the high cardinality of some of the metrics, a high retention period, together with high sampling rates, can lead to a large amount of data being stored. Make sure to adjust the retention period and sampling rates to your needs.
+:::
+
+:::info
+If you need additional metrics, contact the Forest team. We can help you add new metrics to the node or expose additional information.
+:::
diff --git a/docs/docs/users/guides/running_with_curio.md b/docs/docs/users/guides/running_with_curio.md
new file mode 100644
index 000000000000..2ae0ad305d49
--- /dev/null
+++ b/docs/docs/users/guides/running_with_curio.md
@@ -0,0 +1,12 @@
+---
+title: Running Forest With Curio
+sidebar_position: 1
+---
+
+:::note
+
+[Curio](https://curiostorage.org/) is the successor to Lotus-miner under active development by Curio Storage Inc. Compatibility with Forest is being worked on but has not yet been released. Check back in Q4 2024 for more updates.
+
+:::
+
+Coming soon!™
diff --git a/docs/docs/users/introduction.md b/docs/docs/users/introduction.md
new file mode 100644
index 000000000000..f5b386794e7b
--- /dev/null
+++ b/docs/docs/users/introduction.md
@@ -0,0 +1,59 @@
+---
+title: Introduction
+hide_title: true
+sidebar_position: 1
+slug: /
+---
+
+
+
+
+
+## What Is Forest?
+
+Forest is a Filecoin full node written in Rust, by [ChainSafe Systems](https://chainsafe.io).
+
+Forest focuses on four key properties:
+
+- **Stability**: Forest is engineered for dependability. We prioritize stable interfaces, low maintenance, and consistent reliability, ensuring that node operators can trust in Forest's performance day in and day out.
+- **Performance**: Understanding the importance of accessibility in the Filecoin network, we've optimized Forest for efficiency. Our goal is to lower the barriers to entry for network participants, making it more inclusive and expanding the ecosystem.
+- **Security**: As a fundamental component of the network's infrastructure, the security of both the application and its development process cannot be overstated. Forest is developed with the highest security standards in mind, ensuring a secure environment for all users.
+- **Ease of Use**: While managing a node comes with inherent complexities, we strive to make the experience as straightforward as possible. Our aim is for Forest to be approachable for both newcomers and advanced users, minimizing the learning curve and making node operation less cumbersome.
+
+## Features
+
+With Forest you can:
+
+- Sync with a Filecoin chain (mainnet/calibnet/etc.)
+- Import/export snapshots
+- Submit transactions to the network
+- Run a JSON-RPC server
+- Act as a bootstrap node
+
+## Interacting with Forest
+
+Forest consists of multiple binaries:
+
+- `forest` - runs the Forest daemon, which synchronizes with the chain
+- `forest-cli` - Interact with the daemon via RPC interface
+- `forest-tool` - Utilities for maintaining and debugging Forest
+- `forest-wallet` - Manage the built-in wallet
+
+Check out the [CLI docs](./reference/cli.md) for more details.
+
+## Roadmap Updates
+
+Checkout [Github Discussions](https://github.com/ChainSafe/forest/discussions/categories/announcements) for monthly updates and roadmap announcements.
+
+## Connect with Us
+
+- Bug reports and feature requests: [Open an issue on Github](https://github.com/ChainSafe/forest/issues/new/choose)
+- Questions, Comments, Feedback:
+ - [Filecoin Slack](https://filecoin.io/slack): `#fil-forest-help`, `#fil-forest-dev` or `#fil-forest-announcements`
+ - [Forest Github Discussions](https://github.com/ChainSafe/forest/discussions)
+- Partnerships or Hand-on Support: forest (at) chainsafe [dot] io
+
+## Contributing
+
+Forest welcomes external contributions. Please review the contributing guidelines, and the [developer
+documentation](/developers).
diff --git a/docs/docs/users/knowledge_base/_category_.json b/docs/docs/users/knowledge_base/_category_.json
new file mode 100644
index 000000000000..bb520d2bcb9e
--- /dev/null
+++ b/docs/docs/users/knowledge_base/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Knowledge Base",
+ "position": 5
+}
diff --git a/docs/docs/users/knowledge_base/docker_tips.md b/docs/docs/users/knowledge_base/docker_tips.md
new file mode 100644
index 000000000000..055b904ec85e
--- /dev/null
+++ b/docs/docs/users/knowledge_base/docker_tips.md
@@ -0,0 +1,136 @@
+---
+title: Docker Tips & Tricks
+sidebar_position: 3
+---
+
+# Forest in Docker🌲❤️🐋
+
+## Prerequisites
+
+- Docker engine [installed](https://docs.docker.com/get-started/get-docker/) and running. Forest containers are confirmed to run on
+ the following engines:
+ - Docker Engine (Community) on Linux,
+ - Docker for macOS
+ - Docker on Windows Subsystem for Linux 2(WSL2)
+
+Native images are available for the following platform/architecture(s):
+
+- `linux/arm64`
+- `linux/amd64`
+
+The images will work out-of-the box on both Intel processors and macOS with
+M1 / M2.
+
+## Tags
+
+For the list of all available tags please refer to the
+[Forest packages](https://github.com/ChainSafe/forest/pkgs/container/forest).
+
+Currently, the following tags are produced:
+
+- `latest` - latest stable release,
+- `latest-fat` - latest stable release with necessary downloadable files preloaded,
+- `edge` - latest development build of the `main` branch,
+- `edge-fat` - latest development build of the `main` branch with necessary downloadable files preloaded,
+- `date-digest` e.g., `2023-02-17-5f27a62` - all builds that landed on the
+ `main` branch,
+- `date-digest-fat` e.g., `2023-02-17-5f27a62-fat` - all builds that landed on the
+ `main` branch with necessary downloadable files preloaded,
+- release tags, available from `v0.7.0` or `v0.7.0-fat` onwards.
+
+## Security recommendations
+
+- We strongly recommend running the docker daemon in rootless mode
+ ([installation instructions](https://docs.docker.com/engine/security/rootless/)),
+ or running the daemon-less docker alternative `podman`
+ ([installation instructions](https://podman.io/getting-started/installation))
+ with non-root user and put `alias docker = podman` (or manually replace the
+ `docker` commands with `podman` in below instructions)
+
+## Performance recommendations
+
+- We recommend lowering the swappiness kernel parameter on Linux to 1-10 for
+ long running forest node by doing `sudo sysctl -w vm.swappiness=[n]`.
+
+References: [1](https://en.wikipedia.org/wiki/Memory_paging#Swappiness)
+[2](https://linuxhint.com/understanding_vm_swappiness/)
+
+## Example usages
+
+### List available flags and/or commands
+
+```shell
+# daemon
+❯ docker run --init -it --rm ghcr.io/chainsafe/forest:latest --help
+# cli
+❯ docker run --init -it --rm --entrypoint forest-cli ghcr.io/chainsafe/forest:latest --help
+# tool
+❯ docker run --init -it --rm --entrypoint forest-tool ghcr.io/chainsafe/forest:latest --help
+# wallet tool
+❯ docker run --init -it --rm --entrypoint forest-wallet ghcr.io/chainsafe/forest:latest --help
+```
+
+Also see the [CLI documentation](../reference/cli.md) for more details about commands and
+their usage.
+
+### Run a Forest node with custom environment variables
+
+```shell
+❯ docker run --init -it --rm --name forest --env = ghcr.io/chainsafe/forest:latest --chain calibnet --auto-download-snapshot
+```
+
+Check [Forest environment variables documentation](../reference/env_variables.md) for more details.
+
+### Create a Forest node running calibration network. Then list all connected peers.
+
+```shell
+# interactive mode
+❯ docker run --init -it --rm --name forest ghcr.io/chainsafe/forest:latest --chain calibnet --auto-download-snapshot
+# non-interactive mode
+❯ docker run --init --name forest ghcr.io/chainsafe/forest:latest --chain calibnet --auto-download-snapshot
+```
+
+Note: watchtower is a great tool for keeping the forest image up-to-date, automagically, check [instructions](https://containrrr.dev/watchtower/#quick_start).
+
+then in another terminal (sample output)
+
+```shell
+❯ docker exec forest forest-cli net peers
+12D3KooWAh4qiT3ZRZgctVJ8AWwRva9AncjMRVBSkFwNjTx3EpEr, [/ip4/10.0.2.215/tcp/1347, /ip4/52.12.185.166/tcp/1347]
+12D3KooWMY4VdMsdbFwkHv9HxX2jZsUdCcWFX5F5VGzBPZkdxyVr, [/ip4/162.219.87.149/tcp/30141, /ip4/162.219.87.149/tcp/30141/p2p/12D3KooWMY4VdMsdbFwkHv9HxX2jZsUdCcWFX5F5VGzBPZkdxyVr]
+12D3KooWFWUqE9jgXvcKHWieYs9nhyp6NF4ftwLGAHm4sCv73jjK, [/dns4/bootstrap-3.calibration.fildev.network/tcp/1347]
+```
+
+### Use a shared volume to utilize across different Forest images
+
+Create the volume
+
+```shell
+docker volume create forest-data
+```
+
+Now, whenever you create a new Forest container, attach the volume to where the
+data is stored `/root/.local/share/forest`.
+
+```shell
+❯ docker run --init -it --rm \
+ --ulimit nofile=8192 \
+ --volume forest-data:/root/.local/share/forest \
+ --name forest ghcr.io/chainsafe/forest:latest --chain calibnet
+ --auto-download-snapshot
+```
+
+### Export the calibnet snapshot to the host machine
+
+Assuming you have `forest` container already running, run:
+
+```shell
+❯ docker exec forest forest-cli --chain calibnet snapshot export
+Export completed. Snapshot located at forest_snapshot_calibnet_2023-02-17_height_308891.car
+```
+
+Copy the snapshot to the host
+
+```shell
+❯ docker cp forest:/home/forest/forest_snapshot_calibnet_2023-02-17_height_308891.car .
+```
diff --git a/docs/docs/users/knowledge_base/jwt_handling.md b/docs/docs/users/knowledge_base/jwt_handling.md
new file mode 100644
index 000000000000..bf960c3ac873
--- /dev/null
+++ b/docs/docs/users/knowledge_base/jwt_handling.md
@@ -0,0 +1,99 @@
+---
+title: JWT Authentication
+---
+
+# JWT Authentication :key:
+
+## What are JWTs?
+
+JWTs (JSON Web Tokens) are the means Forest uses to authorize certain operations on the node. To read more about JWTs, see the [JWT.io website](https://jwt.io/introduction/).
+
+## Lotus compatibility
+
+The security model of JWTs in Forest is inspired and compatible with [Lotus](https://github.com/filecoin-project/lotus). This means that calls to the RPC API can be authorized using JWTs like in Lotus.
+
+## How does Forest use JWTs?
+
+During its initialization, the node generates a JWT private key. Then, the `admin` token is generated and printed at startup. Alternatively, use `--save-token ` to save the token to a file. This token grants full access to the node and its available methods. More fine-grained access can be granted by creating additional tokens, which will be explained later in this document.
+
+:::info
+The token is only printed once at startup. If you lose it, you can generate a new one by restarting the node. :::
+:::
+
+:::info
+Technically, tokens have an expiration date, the default is 100 years, so there's no need to handle token expiration.
+:::
+
+:::danger
+**Keep your tokens safe!** Anyone with access to the admin token can control your node if the RPC API is exposed to the internet. The private key is stored in an optionally encrypted file in the node's data directory. The default location on Linux is `$HOME/.local/share/forest/keystore` or `$HOME/.local/share/forest/keystore.json` if encryption is disabled.
+:::
+
+```bash
+❯ forest --chain calibnet --encrypt-keystore=false
+2024-08-21T11:26:37.608429Z INFO forest_filecoin::daemon::main: Using default calibnet config
+2024-08-21T11:26:37.611063Z INFO forest_filecoin::daemon: Starting Forest daemon, version 0.19.2+git.76266421b1e
+2024-08-21T11:26:37.611140Z WARN forest_filecoin::daemon: Forest has encryption disabled
+### Admin token is printed here
+2024-08-21T11:26:37.611185Z INFO forest_filecoin::daemon: Admin token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXSwiZXhwIjo0ODc3ODM5NTk3fQ.lnlboKjZhidbH177hWAD8m61MGwCu6w9AYCWaUZoepM
+2024-08-21T11:26:37.611211Z INFO forest_filecoin::db::migration::db_migration: No database migration required
+```
+
+Alternative, with `--save-token `:
+
+```bash
+❯ forest --chain calibnet --encrypt-keystore=false --save-token /tmp/token --exit-after-init 2>&1 > /dev/null && cat /tmp/token
+
+eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXSwiZXhwIjo0ODc3ODM5NzM5fQ.Ra0u-js9GA0d7hHtJZ-7U4MGOMol5gkMveVeIQtgggw
+```
+
+## How to use JWTs
+
+:::note
+The admin token is assumed to be stored in `/tmp/token` for the following examples
+:::
+
+### via `forest-cli`
+
+The most straightforward way to use tokens is to pass them to the `forest-cli` tool. This can be done either by passing it via the `--token` flag or by setting the `FULLNODE_API_INFO` environment variable.
+
+```bash
+forest-cli --token $(cat /tmp/token) shutdown
+```
+
+```bash
+# FULLNODE_API_INFO=":/ip4//tcp//http
+❯ FULLNODE_API_INFO="$(cat /tmp/token):/ip4/127.0.0.1/tcp/2345/http" forest-cli shutdown
+```
+
+### via HTTP headers
+
+The token can be passed as a bearer token in the `Authorization` header when using the raw JSON-RPC API. Note the `Bearer` prefix, optional in Forest but required in Lotus.
+
+```bash
+❯ curl --silent -X POST \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer $(cat /tmp/token)" \
+ --data '{"jsonrpc":"2.0","id":2,"method":"Filecoin.Shutdown","param":"null"}' \
+ "http://127.0.0.1:2345/rpc/v0"
+{"jsonrpc":"2.0","id":2,"result":null}⏎
+```
+
+## Permissions
+
+The admin token grants full access to the node. All exposed methods can be called, including `Filecoin.Shutdown`. There are different scopes for tokens:
+
+- `admin` - _One token to rule them all, one token to find them, one token to bring them all, and in the darkness bind them._ - This token grants full access to the node and all its methods. It can also be used to create new tokens.
+- `read` - read-only access. This grants access to methods that do not modify the state of the node, for example, `Filecoin.EthGasPrice`.
+- `write` - `read` + `write` access. This grants, in addition to `read` access, access to methods that modify the state of the node, for example, `Filecoin.NetConnect`.
+- `sign` - `read` + `write` + `sign` access. This grants, in addition to `read` access, access to methods that require signing, for example, `Filecoin.WalletSignMessage`.
+
+## Creating new tokens
+
+The tool for creating new tokens is `forest-cli auth create-token`. The `--perm` flag specifies the new token's permissions. They can be `admin`, `read`, `write`, or `sign`.
+
+```bash
+❯ forest-cli --token $(cat /tmp/token) auth create-token --perm admin
+eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXSwiZXhwIjoxNzI5NTAzOTUzfQ.iRrbKNsujJsi89JauFPmFXM5DhgFc4hurtoncxN4pl8
+```
+
+Alternatively, you can use JSON-RPC method `Filecoin.AuthNew` to create new tokens, and `Filecoin.AuthVerify` to verify them.
diff --git a/docs/docs/users/knowledge_base/network_upgrades_state_migrations.md b/docs/docs/users/knowledge_base/network_upgrades_state_migrations.md
new file mode 100644
index 000000000000..e7f68285174a
--- /dev/null
+++ b/docs/docs/users/knowledge_base/network_upgrades_state_migrations.md
@@ -0,0 +1,51 @@
+---
+title: Network Upgrades & State Migrations
+sidebar_position: 2
+---
+
+## Network upgrades
+
+Network upgrades happen periodically in Filecoin. They bring new features to the network, proposed via [FIPs](https://github.com/filecoin-project/FIPs) and are announced via several channels, including the [filecoin-project/community discussions](https://github.com/filecoin-project/community/discussions) and the Filecoin Slack. Also, all Filecoin implementations make the announcements on their own. In Forest's case, it's on [Forest's Discussions](https://github.com/ChainSafe/forest/discussions) and the `#fil-forest-announcements` channel in the Filecoin Slack.
+
+Some preparation is required for a smooth transition from one network version to another for node operators. Usually, this entails upgrading the node version only to a specified one before the upgrade - teams do their best to offer a final binary at least a week before the upgrade date.
+
+## State migrations
+
+State migration is part of the network upgrade. Given the size of the Filecoin state, it usually requires the node to go through every Actor, which takes several seconds. If more changes are required, the migration might take significantly more time and resources. The implementation teams announce the expected upgrade duration and requirements beforehand so that the node can be prepared accordingly.
+
+:::tip
+On average, ~3-4 network upgrades are performed annually. This number varies based on the FIPs proposed and implementer capacities. This means that the node shouldn't need all the resources that state migrations require. For example, during the NV22 network upgrade, Forest required 64 GiB memory. The following update needed at most 16 GiB memory. It may make sense to upgrade the node only around specific network upgrades.
+:::
+
+## Avoiding migrations / node recovery
+
+Sometimes, it is not feasible to perform a network migration. If a node is hosted on a bare-metal server and not on a VPS, it might not be easy to have it upgraded. Fortunately, there is a way to avoid the painful migrations - Filecoin snapshots. The same applies when encountering an issue with your node (failing to follow the chain errors, consensus issues) - you should bootstrap the node from a fresh snapshot.
+
+Forest snapshots are available in the [forest-archive](https://forest-archive.chainsafe.dev/list/) (they can also be used with Lotus). Latest snapshots for mainnet are offered by ChainSafe [here](https://forest-archive.chainsafe.dev/list/mainnet/latest). The link to the latest produced snapshot is [here](https://forest-archive.chainsafe.dev/latest/mainnet/). To avoid the network migration, stop it before the network upgrade and wait until a snapshot is generated **after** the upgrade.
+
+:::info example
+You read that in the [Forest NV23 support announcement](https://github.com/ChainSafe/forest/discussions/4488) the mainnet is going to be upgraded to NV23 at the epoch `4154640`, which corresponds to `2024-08-06T12:00:00Z`. You stop your note at least a minute before the upgrade, so before `2024-08-06T11:59:00Z` and wait until the latest snapshot at the [forest-archive](https://forest-archive.chainsafe.dev/latest/mainnet/) is newer than the epoch `4154640`.
+You use `curl` to check the latest snapshot.
+
+```console
+❯ curl --no-progress-meter --head https://forest-archive.chainsafe.dev/latest/mainnet/ | egrep 'height_(\d+)'
+location: /archive/mainnet/latest/forest_snapshot_mainnet_2024-08-06_height_415650.forest.car.zst
+```
+
+You see that the snapshot is past the upgrade epoch by ten epochs. You download the snapshot with `aria2c` because it's significantly faster than a raw `curl`.
+
+```console
+❯ aria2c -x5 https://forest-archive.chainsafe.dev/latest/mainnet/
+```
+
+You start your node with `--import-snapshot ` and enjoy the new, fancy NV23 features. Hooray!
+
+Alternatively, if you are fine with purging the current database, you can do it and use Forest's `--auto-download-snapshot` feature after confirming that the latest snapshot is past the upgrade epoch.
+
+:::
+
+:::warning
+While the state migration can be avoided, this approach comes with significant downtime.
+
+Depending on your network bandwidth, this can easily be over one hour after the upgrade occurs. The snapshot service needs to produce, then upload a snapshot, and only then users can fetch it. Given the snapshot size of over 70 GiB, this takes a non-negligible amount of time.
+:::
diff --git a/docs/docs/users/knowledge_base/snapshot_service.md b/docs/docs/users/knowledge_base/snapshot_service.md
new file mode 100644
index 000000000000..de74dcfe05c7
--- /dev/null
+++ b/docs/docs/users/knowledge_base/snapshot_service.md
@@ -0,0 +1,46 @@
+---
+title: Snapshot & Archival Data Service
+---
+
+# Snapshot service
+
+## Latest snapshots
+
+ChainSafe provides a snapshot service for the Filecoin network. The latest snapshots are generated approximately hourly and are available for the mainnet and calibration networks. The snapshots are stored on the [ChainSafe Filecoin Snapshot Service](https://forest-archive.chainsafe.dev/list). They store the last 2000 tipsets and are enough to bootstrap a new node. A checksum is provided for each snapshot to ensure its integrity.
+
+:::info
+The snapshots are compressed with the `zstd` algorithm. Both Forest and Lotus can read them, so there's no need for a manual decompression. On top of that, the snapshots include an index (hence the extension `.forest.car.zstd`) that allows them to be read-in place without importing it to a database (only Forest supports this feature). See the [Forest CAR format documentation](https://docs.rs/forest-filecoin/latest/forest_filecoin/db/car/forest/index.html) for more details. You might also want to watch [Filecoin Snapshots Explained](https://www.youtube.com/watch?v=GZ9VhCveRdA).
+:::
+
+## Archival snapshots
+
+Archival snapshots are available free of charge. Note that they are not actively generated and are provided on a best-effort basis. Two types of archival snapshots are available:
+
+- **Lite snapshots**: historical snapshots containing the last 2000 tipsets. They are available at 30,000 epoch intervals. Lite snapshots are useful for bootstrapping a node with historical data. They must be complemented with _diff_ snapshots for a complete historical chain.
+- **Diff snapshots**: incomplete snapshots containing the new key-value pairs since the last diff snapshot.
+
+# Snapshot generation details
+
+The snapshot service is no longer open-source and not under Forest team's aegis. For past implementation, see the service [docker image](https://github.com/ChainSafe/forest-iac/tree/c928f5f9892cfd4b38ba718347ef28141dc667f9/images/snapshot-service) and the [Terraform module](https://github.com/ChainSafe/forest-iac/tree/c928f5f9892cfd4b38ba718347ef28141dc667f9/tf-managed/modules/daily-snapshot).
+
+That said, the general algorithm for snapshot generation should stay the same. The service generates snapshots by:
+
+1. Download the latest snapshot from the network (or use the last one it generated).
+2. Import the snapshot into the node and wait for it to sync.
+3. Export the snapshot.
+4. Upload the snapshot.
+
+# Snapshot generation performance
+
+Forest produces snapshots compatible with Lotus, with much faster generation times and smaller memory usage. Below are the results of a recent comparison between Forest and Lotus snapshot generation.
+
+This benchmark was performed on a bare metal server with the following specifications:
+
+- `AMD EPYC 7F32 8-Core Processor`
+- `512 GiB RAM`
+- `4 TiB NVMe SSD`
+
+| | Generation time [min] | Avg. CPU usage [%] | Peak CPU usage [%] | Avg. memory usage [GiB] | Peak memory usage [GiB] |
+| ------ | --------------------- | ------------------ | ------------------ | ----------------------- | ----------------------- |
+| Forest | 28 | 1.64 | 1.97 | 11 | 14 |
+| Lotus | 93 | 6.15 | 10.6 | 122 | 276 |
diff --git a/docs/docs/users/openrpc.json b/docs/docs/users/openrpc.json
new file mode 100644
index 000000000000..ed2e5b0075b0
--- /dev/null
+++ b/docs/docs/users/openrpc.json
@@ -0,0 +1,2244 @@
+{
+ "openrpc": "1.2.6",
+ "info": {
+ "title": "forest",
+ "version": "0.19.2"
+ },
+ "methods": [
+ {
+ "name": "Filecoin.ChainGetEvents",
+ "params": [
+ {
+ "name": "cid",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.ChainGetEvents.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.ChainGetTipSetAfterHeight",
+ "params": [
+ {
+ "name": "height",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ {
+ "name": "tsk",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.ChainGetTipSetAfterHeight.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Tipset"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.Version",
+ "params": [],
+ "result": {
+ "name": "Filecoin.Version.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/PublicVersion"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthAccounts",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthAccounts.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthAddressToFilecoinAddress",
+ "params": [
+ {
+ "name": "eth_address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthAddress"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthAddressToFilecoinAddress.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthBlockNumber",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthBlockNumber.Result",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthCall",
+ "params": [
+ {
+ "name": "tx",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthCallMessage"
+ }
+ },
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthCall.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBytes"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthChainId",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthChainId.Result",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthEstimateGas",
+ "params": [
+ {
+ "name": "tx",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthCallMessage"
+ }
+ },
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthEstimateGas.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthFeeHistory",
+ "params": [
+ {
+ "name": "block_count",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ {
+ "name": "newest_block_number",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrPredefined"
+ }
+ },
+ {
+ "name": "reward_percentiles",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "number",
+ "format": "double"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthFeeHistory.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthFeeHistoryResult"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGasPrice",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthGasPrice.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetBalance",
+ "params": [
+ {
+ "name": "address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthAddress"
+ }
+ },
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetBalance.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetBlockByHash",
+ "params": [
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ },
+ {
+ "name": "full_tx_info",
+ "required": true,
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetBlockByHash.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Block"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetBlockByNumber",
+ "params": [
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ },
+ {
+ "name": "full_tx_info",
+ "required": true,
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetBlockByNumber.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Block"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetBlockTransactionCountByHash",
+ "params": [
+ {
+ "name": "block_hash",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Hash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetBlockTransactionCountByHash.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetBlockTransactionCountByNumber",
+ "params": [
+ {
+ "name": "block_number",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Int64"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetBlockTransactionCountByNumber.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetCode",
+ "params": [
+ {
+ "name": "eth_address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthAddress"
+ }
+ },
+ {
+ "name": "block_number_or_hash",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetCode.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBytes"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetMessageCidByTransactionHash",
+ "params": [
+ {
+ "name": "tx_hash",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Hash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetMessageCidByTransactionHash.Result",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Cid"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetStorageAt",
+ "params": [
+ {
+ "name": "eth_address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthAddress"
+ }
+ },
+ {
+ "name": "position",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBytes"
+ }
+ },
+ {
+ "name": "block_number_or_hash",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetStorageAt.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBytes"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetTransactionByHash",
+ "params": [
+ {
+ "name": "tx_hash",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Hash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetTransactionByHash.Result",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ApiEthTx"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetTransactionCount",
+ "params": [
+ {
+ "name": "sender",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthAddress"
+ }
+ },
+ {
+ "name": "block_param",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BlockNumberOrHash"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetTransactionCount.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthGetTransactionHashByCid",
+ "params": [
+ {
+ "name": "cid",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.EthGetTransactionHashByCid.Result",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Hash"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthMaxPriorityFeePerGas",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthMaxPriorityFeePerGas.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthProtocolVersion",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthProtocolVersion.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Uint64"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.EthSyncing",
+ "params": [],
+ "result": {
+ "name": "Filecoin.EthSyncing.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/EthSyncingResultLotusJson"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.Web3ClientVersion",
+ "params": [],
+ "result": {
+ "name": "Filecoin.Web3ClientVersion.Result",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.MarketAddBalance",
+ "params": [
+ {
+ "name": "wallet",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ {
+ "name": "address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ {
+ "name": "amount",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BigInt"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.MarketAddBalance.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.NetListening",
+ "params": [],
+ "result": {
+ "name": "Filecoin.NetListening.Result",
+ "required": true,
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.NetProtectList",
+ "params": [],
+ "result": {
+ "name": "Filecoin.NetProtectList.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.NetProtectRemove",
+ "params": [
+ {
+ "name": "peer_id",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.NetProtectRemove.Result",
+ "required": true,
+ "schema": {
+ "type": "null"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.NetVersion",
+ "params": [],
+ "result": {
+ "name": "Filecoin.NetVersion.Result",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateGetAllocationForPendingDeal",
+ "params": [
+ {
+ "name": "deal_id",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateGetAllocationForPendingDeal.Result",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Allocation"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateGetAllocationIdForPendingDeal",
+ "params": [
+ {
+ "name": "deal_id",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateGetAllocationIdForPendingDeal.Result",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateGetBeaconEntry",
+ "params": [
+ {
+ "name": "epoch",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateGetBeaconEntry.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BeaconEntry"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateGetRandomnessDigestFromBeacon",
+ "params": [
+ {
+ "name": "rand_epoch",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateGetRandomnessDigestFromBeacon.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateGetRandomnessDigestFromTickets",
+ "params": [
+ {
+ "name": "rand_epoch",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateGetRandomnessDigestFromTickets.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateLookupRobustAddress",
+ "params": [
+ {
+ "name": "address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateLookupRobustAddress.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateMinerAllocated",
+ "params": [
+ {
+ "name": "address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateMinerAllocated.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/BitField"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateSectorPreCommitInfo",
+ "params": [
+ {
+ "name": "miner_address",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ {
+ "name": "sector_number",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ },
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateSectorPreCommitInfo.Result",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SectorPreCommitOnChainInfo"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.StateWaitMsg",
+ "params": [
+ {
+ "name": "message_cid",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Cid"
+ }
+ },
+ {
+ "name": "confidence",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ {
+ "name": "look_back_limit",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ {
+ "name": "allow_replaced",
+ "required": true,
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.StateWaitMsg.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/MessageLookup"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.F3GetCertificate",
+ "params": [
+ {
+ "name": "instance",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.F3GetCertificate.Result",
+ "required": true,
+ "schema": true
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.F3GetECPowerTable",
+ "params": [
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.F3GetECPowerTable.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/F3PowerEntry"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.F3GetF3PowerTable",
+ "params": [
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.F3GetF3PowerTable.Result",
+ "required": true,
+ "schema": true
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.F3GetLatestCertificate",
+ "params": [],
+ "result": {
+ "name": "Filecoin.F3GetLatestCertificate.Result",
+ "required": true,
+ "schema": true
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetHead",
+ "params": [],
+ "result": {
+ "name": "F3.GetHead.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSet"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetParent",
+ "params": [
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.GetParent.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSet"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetParticipatingMinerIDs",
+ "params": [],
+ "result": {
+ "name": "F3.GetParticipatingMinerIDs.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetPowerTable",
+ "params": [
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.GetPowerTable.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/F3PowerEntry"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetTipset",
+ "params": [
+ {
+ "name": "tipset_key",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.GetTipset.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSet"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.GetTipsetByEpoch",
+ "params": [
+ {
+ "name": "epoch",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.GetTipsetByEpoch.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/F3TipSet"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.ProtectPeer",
+ "params": [
+ {
+ "name": "peer_id",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.ProtectPeer.Result",
+ "required": true,
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "F3.SignMessage",
+ "params": [
+ {
+ "name": "pubkey",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ },
+ {
+ "name": "message",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ ],
+ "result": {
+ "name": "F3.SignMessage.Result",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/Signature"
+ }
+ },
+ "paramStructure": "by-position"
+ },
+ {
+ "name": "Filecoin.GetActorEventsRaw",
+ "params": [
+ {
+ "name": "filter",
+ "required": true,
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ActorEventFilter"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+ ],
+ "result": {
+ "name": "Filecoin.GetActorEventsRaw.Result",
+ "required": false,
+ "schema": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/ActorEvent"
+ }
+ }
+ },
+ "paramStructure": "by-position"
+ }
+ ],
+ "components": {
+ "schemas": {
+ "ActorEvent": {
+ "type": "object",
+ "required": [
+ "emitter",
+ "entries",
+ "height",
+ "msgCid",
+ "reverted",
+ "tipsetKey"
+ ],
+ "properties": {
+ "emitter": {
+ "$ref": "#/components/schemas/Address"
+ },
+ "entries": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EventEntry"
+ }
+ },
+ "height": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "msgCid": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "reverted": {
+ "type": "boolean"
+ },
+ "tipsetKey": {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_Cid"
+ }
+ }
+ },
+ "ActorEventBlock": {
+ "type": "object",
+ "required": ["codec", "value"],
+ "properties": {
+ "codec": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "value": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ },
+ "ActorEventFilter": {
+ "type": "object",
+ "properties": {
+ "addresses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Address"
+ }
+ },
+ "fields": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ActorEventBlock"
+ }
+ }
+ },
+ "fromHeight": {
+ "type": ["integer", "null"],
+ "format": "int64"
+ },
+ "tipsetKey": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_Cid"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "toHeight": {
+ "type": ["integer", "null"],
+ "format": "int64"
+ }
+ }
+ },
+ "Address": {
+ "type": "string"
+ },
+ "Allocation": {
+ "type": "object",
+ "required": [
+ "Client",
+ "Data",
+ "Expiration",
+ "Provider",
+ "Size",
+ "TermMax",
+ "TermMin"
+ ],
+ "properties": {
+ "Client": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Data": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "Expiration": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "Provider": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Size": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "TermMax": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "TermMin": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "ApiEthTx": {
+ "type": "object",
+ "required": [
+ "blockHash",
+ "blockNumber",
+ "chainId",
+ "from",
+ "gas",
+ "hash",
+ "input",
+ "nonce",
+ "r",
+ "s",
+ "transactionIndex",
+ "type",
+ "v",
+ "value"
+ ],
+ "properties": {
+ "accessList": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/Hash"
+ }
+ },
+ "blockHash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "blockNumber": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "chainId": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "from": {
+ "$ref": "#/components/schemas/EthAddress"
+ },
+ "gas": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "gasPrice": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "hash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "input": {
+ "$ref": "#/components/schemas/EthBytes"
+ },
+ "maxFeePerGas": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "maxPriorityFeePerGas": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "nonce": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "r": {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ "s": {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ "to": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthAddress"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "transactionIndex": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "type": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "v": {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ "value": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ }
+ },
+ "Base64String": {
+ "type": ["string", "null"]
+ },
+ "BeaconEntry": {
+ "type": "object",
+ "required": ["Data", "Round"],
+ "properties": {
+ "Data": {
+ "$ref": "#/components/schemas/Base64String"
+ },
+ "Round": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ }
+ },
+ "BigInt": {
+ "type": "string"
+ },
+ "BitField": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "integer",
+ "format": "uint8",
+ "minimum": 0.0
+ }
+ },
+ "Block": {
+ "type": "object",
+ "required": [
+ "baseFeePerGas",
+ "difficulty",
+ "extraData",
+ "gasLimit",
+ "gasUsed",
+ "hash",
+ "logsBloom",
+ "miner",
+ "mixHash",
+ "nonce",
+ "number",
+ "parentHash",
+ "receiptsRoot",
+ "sha3Uncles",
+ "size",
+ "stateRoot",
+ "timestamp",
+ "totalDifficulty",
+ "transactions",
+ "transactionsRoot",
+ "uncles"
+ ],
+ "properties": {
+ "baseFeePerGas": {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ "difficulty": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "extraData": {
+ "$ref": "#/components/schemas/EthBytes"
+ },
+ "gasLimit": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "gasUsed": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "hash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "logsBloom": {
+ "$ref": "#/components/schemas/Bloom"
+ },
+ "miner": {
+ "$ref": "#/components/schemas/EthAddress"
+ },
+ "mixHash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "nonce": {
+ "$ref": "#/components/schemas/Nonce"
+ },
+ "number": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "parentHash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "receiptsRoot": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "sha3Uncles": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "size": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "stateRoot": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "timestamp": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "totalDifficulty": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "transactions": {
+ "$ref": "#/components/schemas/Transactions"
+ },
+ "transactionsRoot": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "uncles": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Hash"
+ }
+ }
+ }
+ },
+ "BlockHash": {
+ "type": "object",
+ "required": ["blockHash", "requireCanonical"],
+ "properties": {
+ "blockHash": {
+ "$ref": "#/components/schemas/Hash"
+ },
+ "requireCanonical": {
+ "type": "boolean"
+ }
+ }
+ },
+ "BlockHeader": {
+ "type": "object",
+ "required": [
+ "BeaconEntries",
+ "ForkSignaling",
+ "Height",
+ "Messages",
+ "Miner",
+ "ParentBaseFee",
+ "ParentMessageReceipts",
+ "ParentStateRoot",
+ "ParentWeight",
+ "Parents",
+ "Timestamp",
+ "WinPoStProof"
+ ],
+ "properties": {
+ "BLSAggregate": {
+ "$ref": "#/components/schemas/Nullable_Signature"
+ },
+ "BeaconEntries": {
+ "$ref": "#/components/schemas/Nullable_Array_of_BeaconEntry"
+ },
+ "BlockSig": {
+ "$ref": "#/components/schemas/Nullable_Signature"
+ },
+ "ElectionProof": {
+ "$ref": "#/components/schemas/Nullable_ElectionProof"
+ },
+ "ForkSignaling": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Height": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "Messages": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "Miner": {
+ "$ref": "#/components/schemas/Address"
+ },
+ "ParentBaseFee": {
+ "$ref": "#/components/schemas/BigInt"
+ },
+ "ParentMessageReceipts": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "ParentStateRoot": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "ParentWeight": {
+ "$ref": "#/components/schemas/BigInt"
+ },
+ "Parents": {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_Cid"
+ },
+ "Ticket": {
+ "$ref": "#/components/schemas/Nullable_Ticket"
+ },
+ "Timestamp": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "WinPoStProof": {
+ "$ref": "#/components/schemas/Nullable_Array_of_PoStProof"
+ }
+ }
+ },
+ "BlockNumber": {
+ "type": "object",
+ "required": ["blockNumber"],
+ "properties": {
+ "blockNumber": {
+ "$ref": "#/components/schemas/Int64"
+ }
+ }
+ },
+ "BlockNumberOrHash": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "#/components/schemas/Int64"
+ },
+ {
+ "$ref": "#/components/schemas/Hash"
+ },
+ {
+ "$ref": "#/components/schemas/BlockNumber"
+ },
+ {
+ "$ref": "#/components/schemas/BlockHash"
+ }
+ ]
+ },
+ "BlockNumberOrPredefined": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "#/components/schemas/Int64"
+ }
+ ]
+ },
+ "Bloom": {
+ "type": "string"
+ },
+ "Cid": {
+ "type": "object",
+ "required": ["/"],
+ "properties": {
+ "/": {
+ "type": "string"
+ }
+ }
+ },
+ "ElectionProof": {
+ "type": "object",
+ "required": ["VRFProof", "WinCount"],
+ "properties": {
+ "VRFProof": {
+ "$ref": "#/components/schemas/Base64String"
+ },
+ "WinCount": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "EthAddress": {
+ "type": "string"
+ },
+ "EthBigInt": {
+ "type": "string"
+ },
+ "EthBytes": {
+ "type": "string"
+ },
+ "EthCallMessage": {
+ "type": "object",
+ "required": ["data", "gas", "gasPrice", "value"],
+ "properties": {
+ "data": {
+ "$ref": "#/components/schemas/EthBytes"
+ },
+ "from": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthAddress"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gas": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "gasPrice": {
+ "$ref": "#/components/schemas/EthBigInt"
+ },
+ "to": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EthAddress"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "value": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ }
+ },
+ "EthFeeHistoryResult": {
+ "type": "object",
+ "required": ["baseFeePerGas", "gasUsedRatio", "oldestBlock"],
+ "properties": {
+ "baseFeePerGas": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ },
+ "gasUsedRatio": {
+ "type": "array",
+ "items": {
+ "type": "number",
+ "format": "double"
+ }
+ },
+ "oldestBlock": {
+ "$ref": "#/components/schemas/Uint64"
+ },
+ "reward": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EthBigInt"
+ }
+ }
+ }
+ }
+ },
+ "EthSyncingResultLotusJson": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "object",
+ "required": ["currentblock", "highestblock", "startingblock"],
+ "properties": {
+ "currentblock": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "highestblock": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "startingblock": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ ]
+ },
+ "Event": {
+ "type": "object",
+ "required": ["Emitter", "Entries"],
+ "properties": {
+ "Emitter": {
+ "description": "Actor ID",
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Entries": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EventEntry"
+ }
+ }
+ }
+ },
+ "EventEntry": {
+ "type": "object",
+ "required": ["Codec", "Flags", "Key", "Value"],
+ "properties": {
+ "Codec": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Flags": {
+ "type": "integer",
+ "format": "uint8",
+ "minimum": 0.0
+ },
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ },
+ "F3PowerEntry": {
+ "description": "PowerEntry represents a single entry in the PowerTable, including ActorID and its StoragePower and PubKey.",
+ "type": "object",
+ "required": ["ID", "Power", "PubKey"],
+ "properties": {
+ "ID": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Power": {
+ "type": "string"
+ },
+ "PubKey": {
+ "type": "string"
+ }
+ }
+ },
+ "F3TipSet": {
+ "type": "object",
+ "required": ["beacon", "epoch", "key", "timestamp"],
+ "properties": {
+ "beacon": {
+ "description": "The verifiable oracle randomness used to elect this block's author leader",
+ "type": "string"
+ },
+ "epoch": {
+ "description": "The period in which a new block is generated. There may be multiple rounds in an epoch.",
+ "type": "integer",
+ "format": "int64"
+ },
+ "key": {
+ "$ref": "#/components/schemas/F3TipSetKey"
+ },
+ "timestamp": {
+ "description": "Block creation time, in seconds since the Unix epoch",
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ }
+ },
+ "F3TipSetKey": {
+ "description": "TipSetKey is the canonically ordered concatenation of the block CIDs in a tipset.",
+ "type": "string"
+ },
+ "Hash": {
+ "type": "string"
+ },
+ "Int64": {
+ "type": "string"
+ },
+ "MessageLookup": {
+ "type": "object",
+ "required": ["Height", "Message", "Receipt", "ReturnDec", "TipSet"],
+ "properties": {
+ "Height": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "Message": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "Receipt": {
+ "$ref": "#/components/schemas/Receipt"
+ },
+ "ReturnDec": true,
+ "TipSet": {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_Cid"
+ }
+ }
+ },
+ "NonEmpty_Array_of_BlockHeader": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BlockHeader"
+ },
+ "minItems": 1
+ },
+ "NonEmpty_Array_of_Cid": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "minItems": 1
+ },
+ "Nonce": {
+ "type": "string"
+ },
+ "Nullable_Array_of_BeaconEntry": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/BeaconEntry"
+ }
+ },
+ "Nullable_Array_of_PoStProof": {
+ "type": ["array", "null"],
+ "items": {
+ "$ref": "#/components/schemas/PoStProof"
+ }
+ },
+ "Nullable_Array_of_uint64": {
+ "type": ["array", "null"],
+ "items": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ }
+ },
+ "Nullable_Cid": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Cid"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Nullable_ElectionProof": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ElectionProof"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Nullable_Signature": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Signature"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Nullable_Ticket": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Ticket"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "PoStProof": {
+ "type": "object",
+ "required": ["PoStProof", "ProofBytes"],
+ "properties": {
+ "PoStProof": {
+ "$ref": "#/components/schemas/int64"
+ },
+ "ProofBytes": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ },
+ "PublicVersion": {
+ "description": "Represents the current version of the API.",
+ "type": "object",
+ "required": ["APIVersion", "BlockDelay", "Version"],
+ "properties": {
+ "APIVersion": {
+ "$ref": "#/components/schemas/ShiftingVersion"
+ },
+ "BlockDelay": {
+ "type": "integer",
+ "format": "uint32",
+ "minimum": 0.0
+ },
+ "Version": {
+ "type": "string"
+ }
+ }
+ },
+ "Receipt": {
+ "type": "object",
+ "required": ["ExitCode", "GasUsed", "Return"],
+ "properties": {
+ "EventsRoot": {
+ "default": null,
+ "$ref": "#/components/schemas/Nullable_Cid"
+ },
+ "ExitCode": {
+ "type": "integer",
+ "format": "uint32",
+ "minimum": 0.0
+ },
+ "GasUsed": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "Return": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ },
+ "SectorPreCommitInfo": {
+ "type": "object",
+ "required": [
+ "DealIDs",
+ "Expiration",
+ "SealProof",
+ "SealRandEpoch",
+ "SealedCID",
+ "SectorNumber",
+ "UnsealedCid"
+ ],
+ "properties": {
+ "DealIDs": {
+ "$ref": "#/components/schemas/Nullable_Array_of_uint64"
+ },
+ "Expiration": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "SealProof": {
+ "$ref": "#/components/schemas/int64"
+ },
+ "SealRandEpoch": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "SealedCID": {
+ "$ref": "#/components/schemas/Cid"
+ },
+ "SectorNumber": {
+ "type": "integer",
+ "format": "uint64",
+ "minimum": 0.0
+ },
+ "UnsealedCid": {
+ "$ref": "#/components/schemas/Nullable_Cid"
+ }
+ }
+ },
+ "SectorPreCommitOnChainInfo": {
+ "type": "object",
+ "required": ["Info", "PreCommitDeposit", "PreCommitEpoch"],
+ "properties": {
+ "Info": {
+ "$ref": "#/components/schemas/SectorPreCommitInfo"
+ },
+ "PreCommitDeposit": {
+ "$ref": "#/components/schemas/BigInt"
+ },
+ "PreCommitEpoch": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "ShiftingVersion": {
+ "description": "Integer based value on version information. Highest order bits for Major, Mid order for Minor and lowest for Patch.",
+ "type": "integer",
+ "format": "uint32",
+ "minimum": 0.0
+ },
+ "Signature": {
+ "type": "object",
+ "required": ["Data", "Type"],
+ "properties": {
+ "Data": {
+ "$ref": "#/components/schemas/Base64String"
+ },
+ "Type": {
+ "$ref": "#/components/schemas/SignatureTypeLotusJson"
+ }
+ }
+ },
+ "SignatureType": {
+ "description": "Signature variants for Filecoin signatures.",
+ "type": "string",
+ "enum": ["Secp256k1", "Bls", "Delegated"]
+ },
+ "SignatureTypeLotusJson": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "format": "uint8",
+ "minimum": 0.0
+ },
+ {
+ "$ref": "#/components/schemas/SignatureType"
+ }
+ ]
+ },
+ "Ticket": {
+ "type": "object",
+ "required": ["VRFProof"],
+ "properties": {
+ "VRFProof": {
+ "$ref": "#/components/schemas/Base64String"
+ }
+ }
+ },
+ "Tipset": {
+ "$ref": "#/components/schemas/TipsetInner"
+ },
+ "TipsetInner": {
+ "type": "object",
+ "required": ["Blocks", "Cids", "Height"],
+ "properties": {
+ "Blocks": {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_BlockHeader"
+ },
+ "Cids": {
+ "$ref": "#/components/schemas/NonEmpty_Array_of_Cid"
+ },
+ "Height": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "Transactions": {
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApiEthTx"
+ }
+ }
+ ]
+ },
+ "Uint64": {
+ "type": "string"
+ },
+ "int64": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+}
diff --git a/docs/docs/users/reference/_category_.json b/docs/docs/users/reference/_category_.json
new file mode 100644
index 000000000000..9b5c74a02005
--- /dev/null
+++ b/docs/docs/users/reference/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Reference",
+ "position": 4
+}
diff --git a/docs/docs/users/reference/cli.md b/docs/docs/users/reference/cli.md
new file mode 100644
index 000000000000..aaece2cb7610
--- /dev/null
+++ b/docs/docs/users/reference/cli.md
@@ -0,0 +1,1579 @@
+---
+title: Command Line Options
+sidebar_position: 1
+---
+
+
+
+This document lists every command line option and sub-command for Forest.
+
+## `forest`
+
+```
+forest-filecoin 0.19.2+git.71e23ae6a0d
+ChainSafe Systems
+Rust Filecoin implementation.
+
+USAGE:
+ forest [OPTIONS] [CMD]
+
+SUBCOMMANDS:
+
+
+OPTIONS:
+ --config
+ A TOML file containing relevant configurations
+ --genesis
+ The genesis CAR file
+ --rpc
+ Allow RPC to be active or not (default: true) [possible values: true, false]
+ --no-metrics
+ Disable Metrics endpoint
+ --metrics-address
+ Address used for metrics collection server. By defaults binds on localhost on port 6116
+ --rpc-address
+ Address used for RPC. By defaults binds on localhost on port 2345
+ --no-healthcheck
+ Disable healthcheck endpoints
+ --healthcheck-address
+ Address used for healthcheck server. By defaults binds on localhost on port 2346
+ --p2p-listen-address
+ P2P listen addresses, e.g., `--p2p-listen-address /ip4/0.0.0.0/tcp/12345 --p2p-listen-address /ip4/0.0.0.0/tcp/12346`
+ --kademlia
+ Allow Kademlia (default: true) [possible values: true, false]
+ --mdns
+ Allow MDNS (default: false) [possible values: true, false]
+ --height
+ Validate snapshot at given EPOCH, use a negative value -N to validate the last N EPOCH(s) starting at HEAD
+ --head
+ Sets the current HEAD epoch to validate to. Useful to specify a smaller range in conjunction with `height`, ignored if `height` is unspecified
+ --import-snapshot
+ Import a snapshot from a local CAR file or URL
+ --import-mode
+ Snapshot import mode. Available modes are `copy`, `move` and `symlink` [default: copy]
+ --halt-after-import
+ Halt with exit code 0 after successfully importing a snapshot
+ --skip-load
+ Skips loading CAR file and uses header to index chain. Assumes a pre-loaded database [possible values: true, false]
+ --req-window
+ Number of tipsets requested over one chain exchange (default is 8)
+ --tipset-sample-size
+ Number of tipsets to include in the sample that determines what the network head is (default is 5)
+ --target-peer-count
+ Amount of Peers we want to be connected to (default is 75)
+ --encrypt-keystore
+ Encrypt the key-store (default: true) [possible values: true, false]
+ --chain
+ Choose network chain to sync to
+ --detach
+ Daemonize Forest process
+ --auto-download-snapshot
+ Automatically download a chain specific snapshot to sync with the Filecoin network if needed
+ --color
+ Enable or disable colored logging in `stdout` [default: auto]
+ --tokio-console
+ Turn on tokio-console support for debugging. Memory leak, see
+ --loki
+ Send telemetry to `grafana loki`
+ --loki-endpoint
+ Endpoint of `grafana loki` [default: http://127.0.0.1:3100]
+ --log-dir
+ Specify a directory into which rolling log files should be appended
+ --exit-after-init
+ Exit after basic daemon initialization
+ --save-token
+ If provided, indicates the file to which to save the admin token
+ --track-peak-rss
+ Track peak physical memory usage and print on exit
+ --no-gc
+ Disable the automatic database garbage collection
+ --stateless
+ In stateless mode, forest connects to the P2P network but does not sync to HEAD
+ --dry-run
+ Check your command-line options and configuration file if one is used
+ --skip-load-actors
+ Skip loading actors from the actors bundle
+ -h, --help
+ Print help
+ -V, --version
+ Print version
+```
+
+## `forest-wallet`
+
+```
+forest-filecoin 0.19.2+git.71e23ae6a0d
+ChainSafe Systems
+Rust Filecoin implementation.
+
+USAGE:
+ forest-wallet [OPTIONS]
+
+SUBCOMMANDS:
+ new Create a new wallet
+ balance Get account balance
+ default Get the default address of the wallet
+ export Export the wallet's keys
+ has Check if the wallet has a key
+ import Import keys from existing wallet
+ list List addresses of the wallet
+ set-default Set the default wallet address
+ sign Sign a message
+ validate-address Validates whether a given string can be decoded as a well-formed address
+ verify Verify the signature of a message. Returns true if the signature matches the message and address
+ delete Deletes the wallet associated with the given address
+ send Send funds between accounts
+ help Print this message or the help of the given subcommand(s)
+
+OPTIONS:
+ --token Admin token to interact with the node
+ --remote-wallet Use remote wallet associated with the Filecoin node. Warning! You should ensure that your connection is encrypted and secure, as the communication between the wallet and the node is **not** encrypted
+ --encrypt Encrypt local wallet
+ -h, --help Print help
+ -V, --version Print version
+```
+
+### `forest-wallet new`
+
+```
+Create a new wallet
+
+Usage: forest-wallet new [SIGNATURE_TYPE]
+
+Arguments:
+ [SIGNATURE_TYPE] The signature type to use. One of SECP256k1, or BLS [default: secp256k1]
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet balance`
+
+```
+Get account balance
+
+Usage: forest-wallet balance [OPTIONS]
+
+Arguments:
+ The address of the account to check
+
+Options:
+ --no-round Output is rounded to 4 significant figures by default. Do not round
+ --no-abbrev Output may be given an SI prefix like `atto` by default. Do not do this, showing whole FIL at all times
+ -h, --help Print help
+```
+
+### `forest-wallet default`
+
+```
+Get the default address of the wallet
+
+Usage: forest-wallet default
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet export`
+
+```
+Export the wallet's keys
+
+Usage: forest-wallet export
+
+Arguments:
+ The address that contains the keys to export
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet has`
+
+```
+Check if the wallet has a key
+
+Usage: forest-wallet has
+
+Arguments:
+ The key to check
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet import`
+
+```
+Import keys from existing wallet
+
+Usage: forest-wallet import [PATH]
+
+Arguments:
+ [PATH] The path to the private key
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet list`
+
+```
+List addresses of the wallet
+
+Usage: forest-wallet list [OPTIONS]
+
+Options:
+ --no-round Output is rounded to 4 significant figures by default. Do not round
+ --no-abbrev Output may be given an SI prefix like `atto` by default. Do not do this, showing whole FIL at all times
+ -h, --help Print help
+```
+
+### `forest-wallet set-default`
+
+```
+Set the default wallet address
+
+Usage: forest-wallet set-default
+
+Arguments:
+ The given key to set to the default address
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet sign`
+
+```
+Sign a message
+
+Usage: forest-wallet sign -m -a
+
+Options:
+ -m The hex encoded message to sign
+ -a The address to be used to sign the message
+ -h, --help Print help
+```
+
+### `forest-wallet validate-address`
+
+```
+Validates whether a given string can be decoded as a well-formed address
+
+Usage: forest-wallet validate-address
+
+Arguments:
+ The address to be validated
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet verify`
+
+```
+Verify the signature of a message. Returns true if the signature matches the message and address
+
+Usage: forest-wallet verify -a -m -s
+
+Options:
+ -a The address used to sign the message
+ -m The message to verify
+ -s The signature of the message to verify
+ -h, --help Print help
+```
+
+### `forest-wallet delete`
+
+```
+Deletes the wallet associated with the given address
+
+Usage: forest-wallet delete
+
+Arguments:
+ The address of the wallet to delete
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-wallet send`
+
+```
+Send funds between accounts
+
+Usage: forest-wallet send [OPTIONS]
+
+Arguments:
+
+
+
+Options:
+ --from optionally specify the account to send funds from (otherwise the default one will be used)
+ --gas-feecap [default: 0.0]
+ --gas-limit In milliGas [default: 0]
+ --gas-premium [default: 0.0]
+ -h, --help Print help
+```
+
+## `forest-cli`
+
+```
+forest-filecoin 0.19.2+git.71e23ae6a0d
+ChainSafe Systems
+Rust Filecoin implementation.
+
+USAGE:
+ forest-cli [OPTIONS]
+
+SUBCOMMANDS:
+ chain Interact with Filecoin blockchain
+ auth Manage RPC permissions
+ net Manage P2P network
+ sync Inspect or interact with the chain synchronizer
+ mpool Interact with the message pool
+ state Interact with and query Filecoin chain state
+ config Manage node configuration
+ snapshot Manage snapshots
+ send Send funds between accounts
+ info Print node info
+ attach `[REMOVED]` Attach to daemon via a JavaScript console
+ shutdown Shutdown Forest
+ healthcheck Print healthcheck info
+ help Print this message or the help of the given subcommand(s)
+
+OPTIONS:
+ -t, --token Client JWT token to use for JSON-RPC authentication
+ -h, --help Print help
+ -V, --version Print version
+```
+
+### `forest-cli chain`
+
+```
+Interact with Filecoin blockchain
+
+Usage: forest-cli chain
+
+Commands:
+ block Retrieves and prints out the block specified by the given CID
+ genesis Prints out the genesis tipset
+ head Prints out the canonical head of the chain
+ message Reads and prints out a message referenced by the specified CID from the chain block store
+ read-obj Reads and prints out IPLD nodes referenced by the specified CID from chain block store and returns raw bytes
+ set-head Manually set the head to the given tipset. This invalidates blocks between the desired head and the new head
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli chain block`
+
+```
+Retrieves and prints out the block specified by the given CID
+
+Usage: forest-cli chain block -c
+
+Options:
+ -c
+ -h, --help Print help
+```
+
+### `forest-cli chain message`
+
+```
+Reads and prints out a message referenced by the specified CID from the chain block store
+
+Usage: forest-cli chain message -c
+
+Options:
+ -c
+ -h, --help Print help
+```
+
+### `forest-cli chain read-obj`
+
+```
+Reads and prints out IPLD nodes referenced by the specified CID from chain block store and returns raw bytes
+
+Usage: forest-cli chain read-obj -c
+
+Options:
+ -c
+ -h, --help Print help
+```
+
+### `forest-cli chain set-head`
+
+```
+Manually set the head to the given tipset. This invalidates blocks between the desired head and the new head
+
+Usage: forest-cli chain set-head [OPTIONS] ...
+
+Arguments:
+ ... Construct the new head tipset from these CIDs
+
+Options:
+ --epoch Use the tipset from this epoch as the new head. Negative numbers specify decrements from the current head
+ -f, --force Skip confirmation dialogue
+ -h, --help Print help
+```
+
+### `forest-cli auth`
+
+```
+Manage RPC permissions
+
+Usage: forest-cli auth
+
+Commands:
+ create-token Create a new Authentication token with given permission
+ api-info Get RPC API Information
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli auth create-token`
+
+```
+Create a new Authentication token with given permission
+
+Usage: forest-cli auth create-token [OPTIONS] --perm
+
+Options:
+ -p, --perm Permission to assign to the token, one of: read, write, sign, admin
+ --expire-in Token is revoked after this duration [default: "2 months"]
+ -h, --help Print help
+```
+
+### `forest-cli auth api-info`
+
+```
+Get RPC API Information
+
+Usage: forest-cli auth api-info [OPTIONS] --perm
+
+Options:
+ -p, --perm permission to assign the token, one of: read, write, sign, admin
+ --expire-in Token is revoked after this duration [default: "2 months"]
+ -h, --help Print help
+```
+
+### `forest-cli net`
+
+```
+Manage P2P network
+
+Usage: forest-cli net
+
+Commands:
+ listen Lists `libp2p` swarm listener addresses
+ info Lists `libp2p` swarm network info
+ peers Lists `libp2p` swarm peers
+ connect Connects to a peer by its peer ID and multi-addresses
+ disconnect Disconnects from a peer by it's peer ID
+ reachability Print information about reachability from the internet
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli net peers`
+
+```
+Lists `libp2p` swarm peers
+
+Usage: forest-cli net peers [OPTIONS]
+
+Options:
+ -a, --agent Print agent name
+ -h, --help Print help
+```
+
+### `forest-cli net connect`
+
+```
+Connects to a peer by its peer ID and multi-addresses
+
+Usage: forest-cli net connect
+
+Arguments:
+ Multi-address (with `/p2p/` protocol)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli net disconnect`
+
+```
+Disconnects from a peer by it's peer ID
+
+Usage: forest-cli net disconnect
+
+Arguments:
+ Peer ID to disconnect from
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli sync`
+
+```
+Inspect or interact with the chain synchronizer
+
+Usage: forest-cli sync
+
+Commands:
+ wait Display continuous sync data until sync is complete
+ status Check sync status
+ check-bad Check if a given block is marked bad, and for what reason
+ mark-bad Mark a given block as bad
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli sync wait`
+
+```
+Display continuous sync data until sync is complete
+
+Usage: forest-cli sync wait [OPTIONS]
+
+Options:
+ -w Don't exit after node is synced
+ -h, --help Print help
+```
+
+### `forest-cli sync check-bad`
+
+```
+Check if a given block is marked bad, and for what reason
+
+Usage: forest-cli sync check-bad -c
+
+Options:
+ -c The block CID to check
+ -h, --help Print help
+```
+
+### `forest-cli sync mark-bad`
+
+```
+Mark a given block as bad
+
+Usage: forest-cli sync mark-bad -c
+
+Options:
+ -c The block CID to mark as a bad block
+ -h, --help Print help
+```
+
+### `forest-cli mpool`
+
+```
+Interact with the message pool
+
+Usage: forest-cli mpool
+
+Commands:
+ pending Get pending messages
+ stat Print mempool stats
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli mpool pending`
+
+```
+Get pending messages
+
+Usage: forest-cli mpool pending [OPTIONS]
+
+Options:
+ --local Print pending messages for addresses in local wallet only
+ --cids Only print `CIDs` of messages in output
+ --to Return messages to a given address
+ --from Return messages from a given address
+ -h, --help Print help
+```
+
+### `forest-cli mpool stat`
+
+```
+Print mempool stats
+
+Usage: forest-cli mpool stat [OPTIONS]
+
+Options:
+ --basefee-lookback
+ Number of blocks to look back for minimum `basefee` [default: 60]
+ --local
+ Print stats for addresses in local wallet only
+ -h, --help
+ Print help
+```
+
+### `forest-cli state`
+
+```
+Interact with and query Filecoin chain state
+
+Usage: forest-cli state
+
+Commands:
+ fetch
+ compute
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli state fetch`
+
+```
+Usage: forest-cli state fetch [OPTIONS]
+
+Arguments:
+
+
+Options:
+ -s, --save-to-file The `.car` file path to save the state root
+ -h, --help Print help
+```
+
+### `forest-cli state compute`
+
+```
+Usage: forest-cli state compute --epoch
+
+Options:
+ --epoch Which epoch to compute the state transition for
+ -h, --help Print help
+```
+
+### `forest-cli config`
+
+```
+Manage node configuration
+
+Usage: forest-cli config
+
+Commands:
+ dump Dump default configuration to standard output
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli snapshot`
+
+```
+Manage snapshots
+
+Usage: forest-cli snapshot
+
+Commands:
+ export Export a snapshot of the chain to ``
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli snapshot export`
+
+```
+Export a snapshot of the chain to ``
+
+Usage: forest-cli snapshot export [OPTIONS]
+
+Options:
+ -o, --output-path `./forest_snapshot_{chain}_{year}-{month}-{day}_height_{epoch}.car.zst`. [default: .]
+ --skip-checksum Skip creating the checksum file
+ --dry-run Don't write the archive
+ -t, --tipset Tipset to start the export from, default is the chain head
+ -d, --depth How many state-roots to include. Lower limit is 900 for `calibnet` and `mainnet`
+ -h, --help Print help
+```
+
+### `forest-cli send`
+
+```
+Send funds between accounts
+
+Usage: forest-cli send [OPTIONS]
+
+Arguments:
+
+
+
+Options:
+ --from optionally specify the account to send funds from (otherwise the default one will be used)
+ --gas-feecap [default: 0.0]
+ --gas-limit In milliGas [default: 0]
+ --gas-premium [default: 0.0]
+ -h, --help Print help
+```
+
+### `forest-cli info`
+
+```
+Print node info
+
+Usage: forest-cli info
+
+Commands:
+ show
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli shutdown`
+
+```
+Shutdown Forest
+
+Usage: forest-cli shutdown [OPTIONS]
+
+Options:
+ --force Assume "yes" as answer to shutdown prompt
+ -h, --help Print help
+```
+
+### `forest-cli healthcheck`
+
+```
+Print healthcheck info
+
+Usage: forest-cli healthcheck
+
+Commands:
+ ready Display ready status
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-cli healthcheck ready`
+
+```
+Display ready status
+
+Usage: forest-cli healthcheck ready [OPTIONS]
+
+Options:
+ --wait Don't exit until node is ready
+ --healthcheck-port Healthcheck port [default: 2346]
+ -h, --help Print help
+```
+
+## `forest-tool`
+
+```
+forest-filecoin 0.19.2+git.71e23ae6a0d
+ChainSafe Systems
+Rust Filecoin implementation.
+
+USAGE:
+ forest-tool
+
+SUBCOMMANDS:
+ backup Create and restore backups
+ benchmark Benchmark various Forest subsystems
+ state-migration State migration tools
+ snapshot Manage snapshots
+ fetch-params Download parameters for generating and verifying proofs for given size
+ archive Manage archives
+ db Database management
+ car Utilities for manipulating CAR files
+ api API tooling
+ net Network utilities
+ shed Miscellaneous, semver-exempt commands for developer use
+ help Print this message or the help of the given subcommand(s)
+
+OPTIONS:
+ -h, --help Print help
+ -V, --version Print version
+```
+
+### `forest-tool backup`
+
+```
+Create and restore backups
+
+Usage: forest-tool backup
+
+Commands:
+ create Create a backup of the node. By default, only the peer-to-peer key-pair and key-store are backed up. The node must be offline
+ restore Restore a backup of the node from a file. The node must be offline
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool backup create`
+
+```
+Create a backup of the node. By default, only the peer-to-peer key-pair and key-store are backed up. The node must be offline
+
+Usage: forest-tool backup create [OPTIONS]
+
+Options:
+ --backup-file Path to the output backup file if not using the default
+ --all Backup everything from the Forest data directory. This will override other options
+ --no-keypair Disables backing up the key-pair
+ --no-keystore Disables backing up the key-store
+ --backup-chain Backs up the blockstore for the specified chain. If not provided, it will not be backed up
+ --include-proof-params Include proof parameters in the backup
+ -d, --daemon-config Optional TOML file containing forest daemon configuration. If not provided, the default configuration will be used
+ -h, --help Print help
+```
+
+### `forest-tool backup restore`
+
+```
+Restore a backup of the node from a file. The node must be offline
+
+Usage: forest-tool backup restore [OPTIONS]
+
+Arguments:
+ Path to the backup file
+
+Options:
+ -d, --daemon-config Optional TOML file containing forest daemon configuration. If not provided, the default configuration will be used
+ --force Force restore even if files already exist WARNING: This will overwrite existing files
+ -h, --help Print help
+```
+
+### `forest-tool benchmark`
+
+```
+Benchmark various Forest subsystems
+
+Usage: forest-tool benchmark
+
+Commands:
+ car-streaming Benchmark streaming data from a CAR archive
+ graph-traversal Depth-first traversal of the Filecoin graph
+ unordered-graph-traversal
+ forest-encoding Encoding of a `.forest.car.zst` file
+ export Exporting a `.forest.car.zst` file from HEAD
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool benchmark car-streaming`
+
+```
+Benchmark streaming data from a CAR archive
+
+Usage: forest-tool benchmark car-streaming [OPTIONS] ...
+
+Arguments:
+ ... Snapshot input files (`.car.`, `.car.zst`, `.forest.car.zst`)
+
+Options:
+ --inspect Whether or not we want to expect [`libipld_core::ipld::Ipld`] data for each block
+ -h, --help Print help
+```
+
+### `forest-tool benchmark graph-traversal`
+
+```
+Depth-first traversal of the Filecoin graph
+
+Usage: forest-tool benchmark graph-traversal ...
+
+Arguments:
+ ... Snapshot input files (`.car.`, `.car.zst`, `.forest.car.zst`)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool benchmark unordered-graph-traversal`
+
+```
+Usage: forest-tool benchmark unordered-graph-traversal ...
+
+Arguments:
+ ... Snapshot input files (`.car.`, `.car.zst`, `.forest.car.zst`)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool benchmark forest-encoding`
+
+```
+Encoding of a `.forest.car.zst` file
+
+Usage: forest-tool benchmark forest-encoding [OPTIONS]
+
+Arguments:
+ Snapshot input file (`.car.`, `.car.zst`, `.forest.car.zst`)
+
+Options:
+ --compression-level
+ [default: 3]
+ --frame-size
+ End zstd frames after they exceed this length [default: 8192]
+ -h, --help
+ Print help
+```
+
+### `forest-tool benchmark export`
+
+```
+Exporting a `.forest.car.zst` file from HEAD
+
+Usage: forest-tool benchmark export [OPTIONS] ...
+
+Arguments:
+ ... Snapshot input files (`.car.`, `.car.zst`, `.forest.car.zst`)
+
+Options:
+ --compression-level
+ [default: 3]
+ --frame-size
+ End zstd frames after they exceed this length [default: 8192]
+ -e, --epoch
+ Latest epoch that has to be exported for this snapshot, the upper bound. This value cannot be greater than the latest epoch available in the input snapshot
+ -d, --depth
+ How many state-roots to include. Lower limit is 900 for `calibnet` and `mainnet` [default: 2000]
+ -h, --help
+ Print help
+```
+
+### `forest-tool state-migration`
+
+```
+State migration tools
+
+Usage: forest-tool state-migration
+
+Commands:
+ actor-bundle Generate a merged actor bundle from the hard-coded sources in forest
+ generate-actors-metadata Generate actors metadata from required bundles list
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool state-migration actor-bundle`
+
+```
+Generate a merged actor bundle from the hard-coded sources in forest
+
+Usage: forest-tool state-migration actor-bundle [OUTPUT]
+
+Arguments:
+ [OUTPUT] [default: actor_bundles.car.zst]
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool snapshot`
+
+```
+Manage snapshots
+
+Usage: forest-tool snapshot
+
+Commands:
+ fetch Fetches the most recent snapshot from a trusted, pre-defined location
+ validate-diffs Validate the provided snapshots as a whole
+ validate Validate the snapshots individually
+ compress Make this snapshot suitable for use as a compressed car-backed blockstore
+ compute-state Compute the state hash at a given epoch
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help
+```
+
+### `forest-tool snapshot fetch`
+
+```
+Fetches the most recent snapshot from a trusted, pre-defined location
+
+Usage: forest-tool snapshot fetch [OPTIONS]
+
+Options:
+ -d, --directory [default: .]
+ --chain Network chain the snapshot will belong to [default: mainnet]
+ -v, --vendor Vendor to fetch the snapshot from [default: forest] [possible values: forest]
+ -h, --help Print help
+```
+
+### `forest-tool snapshot validate-diffs`
+
+```
+Validate the provided snapshots as a whole
+
+Usage: forest-tool snapshot validate-diffs [OPTIONS] ...
+
+Arguments:
+ ... Path to a snapshot CAR, which may be zstd compressed
+
+Options:
+ --check-links
+ Number of recent epochs to scan for broken links [default: 2000]
+ --check-network
+ Assert the snapshot belongs to this network. If left blank, the network will be inferred before executing messages
+ --check-stateroots
+ Number of recent epochs to scan for bad messages/transactions [default: 60]
+ -h, --help
+ Print help
+```
+
+### `forest-tool snapshot validate`
+
+```
+Validate the snapshots individually
+
+Usage: forest-tool snapshot validate [OPTIONS] ...
+
+Arguments:
+ ... Path to a snapshot CAR, which may be zstd compressed
+
+Options:
+ --check-links
+ Number of recent epochs to scan for broken links [default: 2000]
+ --check-network
+ Assert the snapshot belongs to this network. If left blank, the network will be inferred before executing messages
+ --check-stateroots
+ Number of recent epochs to scan for bad messages/transactions [default: 60]
+ --fail-fast
+ Fail at the first invalid snapshot
+ -h, --help
+ Print help
+```
+
+### `forest-tool snapshot compress`
+
+```
+Make this snapshot suitable for use as a compressed car-backed blockstore
+
+Usage: forest-tool snapshot compress [OPTIONS]