From f7ee4b0ad1ad1f82b95f379ad0be082c7ce1d997 Mon Sep 17 00:00:00 2001 From: Michele Modolo Date: Tue, 29 Oct 2024 13:42:04 +0100 Subject: [PATCH 01/89] add development branch for preview releases --- .github/workflows/pages-deployment.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pages-deployment.yaml b/.github/workflows/pages-deployment.yaml index df7572d..4a6db89 100644 --- a/.github/workflows/pages-deployment.yaml +++ b/.github/workflows/pages-deployment.yaml @@ -1,8 +1,10 @@ -name: Pages Deployment +name: Erigon Docs Deployment on: push: branches: + - development + - main - testmichele env: @@ -14,6 +16,7 @@ jobs: permissions: contents: read deployments: write + environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'preview' }} steps: - name: Checkout uses: actions/checkout@v4 From b216062ecbb9d230c0018f2afff59d15809f5a3f Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 30 Oct 2024 20:42:45 +0100 Subject: [PATCH 02/89] updated tls --- src/advanced/tls-authentication.md | 123 ++++++++++++++++++++++++++++- 1 file changed, 122 insertions(+), 1 deletion(-) diff --git a/src/advanced/tls-authentication.md b/src/advanced/tls-authentication.md index 538d539..2b64800 100644 --- a/src/advanced/tls-authentication.md +++ b/src/advanced/tls-authentication.md @@ -1,4 +1,125 @@ # TLS Authentication -work in progress \ No newline at end of file +TLS authentication can be enabled to ensure communication integrity and access control to the Erigon node. + +At a high level, the process consists of: + +1. Generate the Certificate Authority (CA) key pair. +2. Create the Certificate Authority certificate file +3. Generate a key pair +4. Create the certificate file for each public key +5. Deploy the files to each instance +6. Run Erigon and RPCdaemon with the correct tags + +The following is a detailed description of how to use the **OpenSSL** suite of tools to secure the connection between a remote Erigon node and a remote or local RPCdaemon. + +The same procedure applies to any Erigon component you wish to run separately; it is recommended to name the files accordingly. + +
+ +**Warning** + +To maintain a high level of security, it is recommended to create all the keys locally and then copy the 3 required files remotely to the remote node. +
+ +To install openssl open your terminal and paste: + +```bash +sudo apt install openssl +``` + +## 1. Generating the key pair for the Certificate Authority (CA) + +Generate the CA key pair using Elliptic Curve (as opposed to RSA). The generated CA key will be in the `CA-key.pem` file. +
+ +**Warning** + +Access to this file will allow anyone to later add any new instance key pair to the “cluster of trust”, so keep this file safe. +
+ +```bash +openssl ecparam -name prime256v1 -genkey -noout -out CA-key.pem +``` + +## 2. Creating the CA certificate file + +Create CA self-signed certificate (this command will ask questions, the answers aren’t important for now, but at least the first one needs to be filled in with some data). The file created by this command will be called ``CA-cert.pem``: + +```bash +openssl req -x509 -new -nodes -key CA-key.pem -sha256 -days 3650 -out CA-cert.pem +``` + +## 3. Generating a key pair + +Generate a key pair for the Erigon node: + +```bash +openssl ecparam -name prime256v1 -genkey -noout -out erigon-key.pem +``` + +Also generate a key pair for the RPC daemon: + +```bash +openssl ecparam -name prime256v1 -genkey -noout -out RPC-key.pem +``` + +## 4. Creating the certificate file for each public key + +Now create the Certificate Signing Request for the Erigon key pair, and from this request, produce the certificate (signed by the CA) that proves that this key is now part of the “cluster of trust”: + +```bash +openssl x509 -req -in erigon.csr -CA CA-cert.pem -CAkey CA-key.pem -CAcreateserial -out erigon.crt -days 3650 -sha256 +``` + +Then create the certificate signing request for the RPC daemon key pair: + +```bash +openssl req -new -key RPC-key.pem -out RPC.csr +``` + +From this request, produce the certificate (signed by CA), proving that this key is now part of the “cluster of trust”: + +```bash +openssl x509 -req -in RPC.csr -CA CA-cert.pem -CAkey CA-key.pem -CAcreateserial -out RPC.crt -days 3650 -sha256 +``` + +## 5. Deploy the files on each instance + +These three files must be placed in the /erigon folder on the machine running Erigon: + +``CA-cert.pem`` + +``erigon-key.pem`` + +``erigon.crt`` + +On the RPCdaemon machine, these three files must also be placed in the /erigon folder: + +``CA-cert.pem`` + +``RPC key.pem`` + +``RPC.crtv`` + +## 6. Run Erigon and RPCdaemon with the correct tags + +Once all the files have been moved, Erigon must be run with these additional options: + +```bash +--tls --tls.cacert CA-cert.pem --tls.key erigon-key.pem --tls.cert erigon.crt +``` + +While the RPC daemon must be started with these additional options: + +```bash +--tls.key RPC-key.pem --tls.cacert CA-cert.pem --tls.cert RPC.crt +``` + +
+ +**Warning** + +Normally, the "client side" (in our case, the RPCdaemon) will check that the server's host name matches the "Common Name" attribute of the "server" certificate. At this time, this check is disabled and will be re-enabled when the instructions above on how to correctly generate Common Name certificates are updated. For example, if you are running the Erigon instance in the Google Cloud, you will need to specify the internal IP in the -private.api.addr option. You will also need to open the firewall on the port you use to connect to the Erigon instances. +
\ No newline at end of file From c2197dcc209d30e42184ee20ed22065629d8533f Mon Sep 17 00:00:00 2001 From: bloxster Date: Thu, 31 Oct 2024 23:23:21 +0100 Subject: [PATCH 03/89] updates --- src/advanced/block-prod.md | 27 ++++++--- src/advanced/options.md | 11 ++-- src/basic-usage.md | 6 +- src/basic/disk-space.md | 11 ++-- src/installation/docker.md | 29 +++++----- src/installation/upgrading-md | 74 ++++++++++++------------ src/installation/windows.md | 2 +- src/nodes/ethereum.md | 106 +++++++++++++++++++++++++++++++++- 8 files changed, 194 insertions(+), 72 deletions(-) diff --git a/src/advanced/block-prod.md b/src/advanced/block-prod.md index bc8f276..0ce0390 100644 --- a/src/advanced/block-prod.md +++ b/src/advanced/block-prod.md @@ -4,7 +4,7 @@ How to propose and validate blockswith Erigon Only remote miners are supported. -To enable, add +To enable, add the flags: ```bash --mine --miner.etherbase=... @@ -12,37 +12,48 @@ To enable, add or ```bash ---mine --miner.miner.sigkey=... flags +--mine --miner.miner.sigkey=... ``` Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget` -JSON-RPC supports methods: eth_coinbase , eth_hashrate, eth_mining, eth_getWork, eth_submitWork, eth_submitHashrate +JSON-RPC supports methods: `eth_coinbase` , `eth_hashrate`, `eth_mining`, `eth_getWork`, `eth_submitWork`, `eth_submitHashrate` -JSON-RPC supports websocket methods: newPendingTransaction +JSON-RPC supports websocket methods: `newPendingTransaction` # Using Caplin as validator +
+ +**Information** + Only Lighthouse, Lodestar and Teku are supported as Validator Clients. -To enable block production and Caplin's beacon API when using Caplin as the Consensus Layer (CL) engine, the flag --beacon.api must be added. For example: +
+ +To enable block production and Caplin's beacon API when using Caplin as the Consensus Layer (CL) engine, the flag `--beacon.api` must be added. For example: ```bash --beacon.api=beacon,builder,config,debug,node,validator,lighthouse ``` +
+ +**Information** Enabling the Beacon API will lead to a 6 GB higher RAM usage. +
+ -For example, if you want to run Erigon + Caplin as a validator here following is the Erigon command: +For example, if you want to run Erigon and Caplin as a validator here is an example of configuration: ```bash ./build/bin/erigon --chain=holesky --prune.mode=full --beacon.api=beacon,builder,config,debug,node,validator,lighthouse ``` -While here the command for Lighthouse would look like*: +While here the command for Lighthouse* would look like: ```bash lighthouse validator_client --network holesky --beacon-nodes http://localhost:5555 ``` -*For adding validators and specific command syntax, refer to the documentation of your chosen Validator Client. \ No newline at end of file +**For adding validators and specific command syntax, refer to the documentation of your chosen Validator Client.* \ No newline at end of file diff --git a/src/advanced/options.md b/src/advanced/options.md index 6bfaad4..4519a20 100644 --- a/src/advanced/options.md +++ b/src/advanced/options.md @@ -13,7 +13,7 @@ The `--help` flag listing is reproduced below for your convenience. # Commands -```pre +``` NAME: erigon - erigon @@ -21,7 +21,7 @@ USAGE: erigon [command] [flags] VERSION: - 3.00.0-alpha4-c0d9a2b9 + 3.00.0-alpha5-78f3647d COMMANDS: init Bootstrap and initialize a new genesis block @@ -52,7 +52,7 @@ GLOBAL OPTIONS: --txpool.commit.every value How often transactions should be committed to the storage (default: 15s) --prune.distance value Keep state history for the latest N blocks (default: everything) (default: 0) --prune.distance.blocks value Keep block history for the latest N blocks (default: everything) (default: 0) - --prune.mode value Choose a pruning preset to run onto. Avaiable values: "archive","full","minimal". + --prune.mode value Choose a pruning preset to run onto. Available values: "archive","full","minimal". Archive: Keep the entire indexed database, aka. no pruning. (Pruning is flexible), Full: Keep only blocks and latest state (Pruning is not flexible) Minimal: Keep only latest state (Pruning is not flexible) (default: "archive") @@ -196,6 +196,8 @@ GLOBAL OPTIONS: --caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000) --caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001) --caplin.checkpoint-sync-url value [ --caplin.checkpoint-sync-url value ] checkpoint sync endpoint + --caplin.subscibe-all-topics Subscribe to all gossip topics (default: false) + --caplin.max-peer-count value Max number of peers to connect (default: 128) --sentinel.addr value Address for sentinel (default: "localhost") --sentinel.port value Port for sentinel (default: 7777) --sentinel.bootnodes value [ --sentinel.bootnodes value ] Comma separated enode URLs for P2P discovery bootstrap @@ -211,7 +213,7 @@ GLOBAL OPTIONS: --silkworm.rpc.log.response Dump responses in interface logs for embedded Silkworm RPC service (default: false) --silkworm.rpc.workers value Number of worker threads used in embedded Silkworm RPC service (zero means use default in Silkworm) (default: 0) --silkworm.rpc.compatibility Preserve JSON-RPC compatibility using embedded Silkworm RPC service (default: true) - --beacon.api value [ --beacon.api value ] Enable beacon API (avaiable endpoints: beacon, builder, config, debug, events, node, validator, lighthouse) + --beacon.api value [ --beacon.api value ] Enable beacon API (available endpoints: beacon, builder, config, debug, events, node, validator, lighthouse) --beacon.api.addr value sets the host to listen for beacon api requests (default: "localhost") --beacon.api.cors.allow-methods value [ --beacon.api.cors.allow-methods value ] set the cors' allow methods (default: "GET", "POST", "PUT", "DELETE", "OPTIONS") --beacon.api.cors.allow-origins value [ --beacon.api.cors.allow-origins value ] set the cors' allow origins @@ -226,6 +228,7 @@ GLOBAL OPTIONS: --caplin.backfilling.blob.no-pruning disable blob pruning in caplin (default: false) --caplin.checkpoint-sync.disable disable checkpoint sync in caplin (default: false) --caplin.archive enables archival node in caplin (default: false) + --caplin.snapgen enables snapshot generation in caplin (default: false) --caplin.mev-relay-url value MEV relay endpoint. Caplin runs in builder mode if this is set --caplin.validator-monitor Enable caplin validator monitoring metrics (default: false) --caplin.custom-config value set the custom config for caplin diff --git a/src/basic-usage.md b/src/basic-usage.md index 85f05bc..36a5807 100644 --- a/src/basic-usage.md +++ b/src/basic-usage.md @@ -15,9 +15,9 @@ The default Consensus Layer utilized is [Caplin](./advanced/caplin.md), the Erig # Basic Configuration​ * Default data directory is `/home/admin/.local/share/erigon`. If you want to store Erigon files in a non-default location, add flag: -```bash ---datadir= -``` + ```bash + --datadir= + ``` * Based on the [type of node](basic/node.md) you want to run you can add ```--prune.mode=full``` to run a full node or ```--prune.mode=minimal``` to run a minimal node. The default node is archive node. diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md index ce7802e..cc4489d 100644 --- a/src/basic/disk-space.md +++ b/src/basic/disk-space.md @@ -17,17 +17,18 @@ | Network | Archive Node | Full Node | Minimal Node | |----------|--------------|-----------|--------------| -| Ethereum | 1.7 TB | 900 GB | 310 GB | -| Gnosis | 511 GB | 354 GB | 200 GB | -| Polygon | 4.3 TB | 2 TB | 873 GB | +| Ethereum | --- TB | --- GB | --- GB | +| Gnosis | --- GB | --- GB | --- GB | +| Polygon | --- TB | --- TB | --- GB | # Testnets +## Erigon with Caplin | Network | Archive Node | Full Node | Minimal Node | |----------|--------------|-----------|--------------| -| Holesky | 170 GB | 110 GB | 53 GB | -| Sepolia | ... GB | ... GB | ... GB | +| Holesky | 170 GB | 110 GB | 53 GB | +| Sepolia | 186 GB | 116 GB | ... GB | | Chiado | ... GB | ... GB | ... GB | | Amoy | ... GB | ... GB | ... GB | diff --git a/src/installation/docker.md b/src/installation/docker.md index 219db7c..6220d82 100644 --- a/src/installation/docker.md +++ b/src/installation/docker.md @@ -23,22 +23,22 @@ Here are the steps to download and start Erigon 3 in Docker: * Check the Erigon Docker Hub page to see the available releases. * Download the latest version: -```bash -docker pull erigontech/erigon:main-latest -``` + ```bash + docker pull erigontech/erigon:main-latest + ``` * List the downloaded images to get the IMAGE ID: -```bash -docker images -``` + ```bash + docker images + ``` * Check which Erigon version has been downloaded: -```bash -docker run -it --v -``` + ```bash + docker run -it --v + ``` * If you want to start Erigon add the options according to the usage page or the advanced customization page. For example: -```bash -docker run -it a3867a12bd23 --chain=holesky --prune.mode=minimal -``` -* When done, exit the container or press `Ctrl+C`. The container will stop. + ```bash + docker run -it a3867a12bd23 --chain=holesky --prune.mode=minimal + ``` +When done, exit the container or press `Ctrl+C`. The container will stop. ## Optional: Setup dedicated user @@ -117,5 +117,8 @@ sudo -u ${ERIGON_USER} DOCKER_UID=$(id -u ${ERIGON_USER}) DOCKER_GID=$(id -g ${E If your docker installation requires the docker daemon to run as root (which is by default), you will need to prefix the command above with `sudo`. However, it is sometimes recommended running docker (and therefore its containers) as a non-root user for security reasons. For more information about how to do this, refer to this [article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).
+ +**Information** + Windows support for docker-compose is not ready yet.
\ No newline at end of file diff --git a/src/installation/upgrading-md b/src/installation/upgrading-md index 1f806b7..db2e26f 100644 --- a/src/installation/upgrading-md +++ b/src/installation/upgrading-md @@ -5,24 +5,24 @@ To upgrade Erigon to a newer version when you've originally installed it via Git * **Terminate your Erigon** session by pressing CTRL+C * *Navigate to your Erigon directory* * **Fetch the latest changes from the repository**: You need to make sure your local repository is up-to-date with the main GitHub repository. Run: -```bash -git fetch --tags -``` + ```bash + git fetch --tags + ``` * **Check out** the [latest version](https://github.com/ledgerwatch/erigon/releases) and switch to it using: -```bash -git checkout -``` -Replace `` with the version tag of the new release, for example: + ```bash + git checkout + ``` + Replace `` with the version tag of the new release, for example: -```bash -git checkout v3.0.0-alpha4 -``` + ```bash + git checkout v3.0.0-alpha5 + ``` * **Rebuild Erigon**: Since the codebase has changed, you need to compile the new version. Run: -```bash -make erigon -``` + ```bash + make erigon + ``` This process updates your installation to the latest version you specify, while maintaining your existing data and configuration settings in the Erigon folder. You're essentially just replacing the executable with a newer version. @@ -31,43 +31,43 @@ If you're using Docker to run Erigon, the process to upgrade to a newer version * **Pull the Latest Docker Image**: First, find out the tag of the new release from the Erigon Docker Hub page. Once you know the tag, pull the new image: -```bash -docker pull erigontech/erigon: -``` -Replace `` with the actual version tag you wish to use. For example: + ```bash + docker pull erigontech/erigon: + ``` + Replace `` with the actual version tag you wish to use. For example: -```bash -docker pull erigontech/erigon:3.0.0 -``` + ```bash + docker pull erigontech/erigon:3.0.0 + ``` * **List Your Docker Images**: Check your downloaded images to confirm the new image is there and get the new image ID: -```bash -docker images -``` + ```bash + docker images + ``` * **Stop the Running Erigon Container**: If you have a currently running Erigon container, you'll need to stop it before you can start the new version. First, find the container ID by listing the running containers: -```bash -docker ps -``` -Then stop the container using: + ```bash + docker ps + ``` + Then stop the container using: -```bash -docker stop -``` + ```bash + docker stop + ``` -Replace `` with the actual ID of the container running Erigon. + Replace `` with the actual ID of the container running Erigon. * **Remove the Old Container**: (Optional) If you want to clean up, you can remove the old container after stopping it: -```bash -docker rm -``` + ```bash + docker rm + ``` * **Run the New Image**: Now you can start a new container with the new Erigon version using the new image ID: -```bash -docker run -it -``` + ```bash + docker run -it + ``` * **Verify Operation**: Ensure that Erigon starts correctly and connects to the desired network, verifying the logs for any initial errors. diff --git a/src/installation/windows.md b/src/installation/windows.md index fc4647a..cca3677 100644 --- a/src/installation/windows.md +++ b/src/installation/windows.md @@ -59,7 +59,7 @@ Then click on the "**New**" button and paste the path here: Open the Command Prompt and type the following: ```bash -git clone --branch 3.0.0 --single-branch https://github.com/ledgerwatch/erigon.git +git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git ``` ### Compiling Erigon diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index 92a5ea2..98ed03c 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -1,3 +1,107 @@ # Ethereum -work in progress \ No newline at end of file +Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. + +Check which [type of node](/basic/node.md) you might want torun and the [disk space](/basic/disk-space.md) needed. + +
+ +**Information** + +**Do not use HDD**: Hard Disk Drives (HDD) are not recommended for running Erigon, as it may cause the node to stay N blocks behind the chain tip and lead to performance issues. + +**Use SSD or NVMe**: Solid State Drives (SSD) or Non-Volatile Memory Express (NVMe) drives are recommended for optimal performance. These storage devices provide faster read/write speeds and can handle the demanding requirements of an Erigon node. +
+ +## Install Erigon​ + +For MacOS and Linux, run the following commands to build from source the latest Erigon version: + +```bash +git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +cd erigon +make erigon +``` + +This should create the binary at ./build/bin/erigon + +
+ +**Information** + +If you are using [Windows](/installation/windows.md) follow the dedicated installation guide or use [Docker](/installation/docker.md). + +
+ + +## Start Erigon​ + +If you want to be able to send transactions with your wallet and access the Ethereum network directly, contribute to the network decentralization it is advised to run Erigon with [Caplin](/advanced/caplin.md), the internal Consensus Layer (CL). + +Alternatively you can also run Prysm, Lighthouse or any other Consensus Layer client alongside with Erigon by adding the `--externalcl` flag. This will also allow you to access the Ethereum blockchain directly and give you the possibility to stake your ETH and do block production. + +### Erigon with Caplin + +The basic command to run Erigon with Caplin on Ethereum mainnet is: + +```bash +./build/bin/erigon +``` + +### Erigon with Prysm as the external consensus layer + +1. Start Erigon with the `--externalcl` flag: + + ```bash + ./build/bin/erigon --externalcl + ``` + +2. Install and run **Prysm** by following the official guide: . + + Prysm must fully synchronize before Erigon can start syncing, since Erigon requires an existing target head to sync to. The quickest way to get Prysm synced is to use a public checkpoint synchronization endpoint from the list at . + +3. To communicate with Erigon, the **execution endpoint** must be specified as :8551, where is either `//localhost` or the IP address of the device running Erigon. + +4. Prysm must point to the **[JWT secret](/advanced/jwt.md)** automatically created by Erigon in the datadir directory. In the following example the default data directory is used. + + ```bash + ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --mainnet --jwt-secret=/home/admin/.local/share/erigon/jwt.hex --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info + ``` + + If your Prysm is on a different device, add `--authrpc.addr 0.0.0.0` (Engine API listens on localhost by default) as well as `--authrpc.vhosts ` to your Prysm configuration. + +### Erigon with Lighthouse + +1. Start Erigon: + + ```bash + ./build/bin/erigon --externalcl + ``` + +2. Install and run Lighthouse by following the official guide: + +3. Because Erigon needs a target head in order to sync, Lighthouse must be synced before Erigon may synchronize. The fastest way to synchronize Lighthouse is to use one of the many public checkpoint synchronization endpoints at . + +4. To communicate with Erigon, the **execution endpoint** must be specified as :8551, where is either `//localhost` or the IP address of the device running Erigon. + +5. Lighthouse must point to the **[JWT secret](/advanced/jwt.md)** automatically created by Erigon in the datadir director. In the following example the default data directory is used. + + ```bash + lighthouse bn \ + --network mainnet \ + --execution-endpoint http://localhost:8551 \ + --execution-jwt /home/admin/.local/share/erigon/jwt.hex \ + --checkpoint-sync-url https://mainnet.checkpoint.sigp.io \ + ``` + + +## Basic Configuration​ + +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- Default chain is `--chain=mainnet` for Ethereum mainnnet. Add the flag `--chain=holesky` for Holesky testnet, `--chain=sepolia` for Sepolia testnet. Goerli chain is no longer supported. +- `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). +- To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) +- To stop the Erigon node you can use the `CTRL+C` command. + +Additional flags can be added to [configure](/advanced/configuring.md) Erigon with several options. \ No newline at end of file From 90d3916349462afee908cc5a9c62d7bbb404f6a3 Mon Sep 17 00:00:00 2001 From: bloxster Date: Thu, 31 Oct 2024 23:56:36 +0100 Subject: [PATCH 04/89] update --- src/basic/disk-space.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md index cc4489d..e97eb9b 100644 --- a/src/basic/disk-space.md +++ b/src/basic/disk-space.md @@ -1,5 +1,5 @@ # Disk Space Required -*How much space your Erigon node is taking* +*How much space your Erigon node will take* # Mainnets From 9013f20b2760a2233724308ec43c3b1acf3e72c5 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 10:22:49 +0100 Subject: [PATCH 05/89] updates and corrections --- src/about/donate.md | 14 +++++- src/about/reachus.md | 9 ++-- src/advanced/downloader.md | 2 +- src/advanced/prysm.md | 2 +- src/advanced/rpc_daemon.md | 2 + src/advanced/sentry.md | 2 +- src/advanced/txpool.md | 2 +- src/basic/disk-space.md | 6 ++- src/basic/optimizing-storage.md | 22 +++++----- src/basic/wallet | 2 +- src/faq.md | 2 + src/getting-started/hw-requirements.md | 2 +- src/getting-started/sw-requirements.md | 12 +++--- src/getting-started/tips.md | 2 +- src/images/InstallingChocolatey.avif | Bin 59690 -> 0 bytes src/images/PowerShell4.avif | Bin 76155 -> 0 bytes src/images/choco-v.png | Bin 0 -> 11151 bytes src/images/logo.svg | 14 ------ src/images/{PowerShell.png => powershell.png} | Bin src/images/powershell2.avif | Bin 359710 -> 0 bytes src/images/powershell2.png | Bin 0 -> 12709 bytes .../{PowerShell3.png => powershell3.png} | Bin src/images/powershell4.png | Bin 0 -> 10272 bytes src/images/powershell5.avif | Bin 96049 -> 0 bytes src/images/powershell5.png | Bin 0 -> 12193 bytes src/installation/docker.md | 6 +-- src/installation/windows.md | 40 +++++++++++------- src/nodes/gnosis.md | 2 +- src/nodes/polygon.md | 2 +- src/tools.md | 2 + src/welcome.md | 5 +++ 31 files changed, 86 insertions(+), 66 deletions(-) delete mode 100644 src/images/InstallingChocolatey.avif delete mode 100644 src/images/PowerShell4.avif create mode 100644 src/images/choco-v.png delete mode 100644 src/images/logo.svg rename src/images/{PowerShell.png => powershell.png} (100%) delete mode 100644 src/images/powershell2.avif create mode 100644 src/images/powershell2.png rename src/images/{PowerShell3.png => powershell3.png} (100%) create mode 100644 src/images/powershell4.png delete mode 100644 src/images/powershell5.avif create mode 100644 src/images/powershell5.png diff --git a/src/about/donate.md b/src/about/donate.md index b1c8fe0..3f995a8 100644 --- a/src/about/donate.md +++ b/src/about/donate.md @@ -1,3 +1,15 @@ # Donate -To support our work you can donate to [0x8BFBB529A9E85fDC4b70A4FCdC0D68Bb298B8816](https://etherscan.io/address/0x8BFBB529A9E85fDC4b70A4FCdC0D68Bb298B8816#multichain-portfolio). \ No newline at end of file +*Driving Ethereum progress through community-supported research and development* + +Erigon Technologies AG is a non-profit project dedicated to advancing Ethereum technology for the public good. Our work is funded entirely by grants from blockchain companies and donations from our community. + +Your contribution will help us to: + +- Advance the Ethereum protocol for a more secure, efficient, and user-friendly experience +- Foster innovation, collaboration, and open-source development +- Empower individuals and organizations to harness blockchain technology + +Every donation brings us closer to a more decentralized, equitable, and connected world. + +Support Erigon's mission today and help shape the future of Ethereum by donating to our Gitcoin grant address [0x8BFBB529A9E85fDC4b70A4FCdC0D68Bb298B8816](https://etherscan.io/address/0x8BFBB529A9E85fDC4b70A4FCdC0D68Bb298B8816). \ No newline at end of file diff --git a/src/about/reachus.md b/src/about/reachus.md index b36e80c..f9f8ee1 100644 --- a/src/about/reachus.md +++ b/src/about/reachus.md @@ -1,13 +1,14 @@ # How to reach us -Erigon office is located in the CV Labs in Zug +The Erigon Technologies AG office is located in the CV Labs in Zug: -Erigon Ag / Damstrasse 16 - +``` +Erigon Technologies AG +Damstrasse 16 6300 Zug - Switzerland +``` ## Erigon Discord Server diff --git a/src/advanced/downloader.md b/src/advanced/downloader.md index 3fcaad8..d332b92 100644 --- a/src/advanced/downloader.md +++ b/src/advanced/downloader.md @@ -1,3 +1,3 @@ # Downloader -work in progress + diff --git a/src/advanced/prysm.md b/src/advanced/prysm.md index 3435ad7..2843643 100644 --- a/src/advanced/prysm.md +++ b/src/advanced/prysm.md @@ -1,4 +1,4 @@ # Prysm -work in progress \ No newline at end of file + \ No newline at end of file diff --git a/src/advanced/rpc_daemon.md b/src/advanced/rpc_daemon.md index 8ffe3ff..8704530 100644 --- a/src/advanced/rpc_daemon.md +++ b/src/advanced/rpc_daemon.md @@ -1 +1,3 @@ # RPC Daemon + + \ No newline at end of file diff --git a/src/advanced/sentry.md b/src/advanced/sentry.md index 1b94d81..ca5c837 100644 --- a/src/advanced/sentry.md +++ b/src/advanced/sentry.md @@ -1,4 +1,4 @@ # Sentry -work in progress \ No newline at end of file + \ No newline at end of file diff --git a/src/advanced/txpool.md b/src/advanced/txpool.md index 5063e45..2de6a2a 100644 --- a/src/advanced/txpool.md +++ b/src/advanced/txpool.md @@ -1,4 +1,4 @@ # TxPool -work in progress \ No newline at end of file + \ No newline at end of file diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md index e97eb9b..6592eb6 100644 --- a/src/basic/disk-space.md +++ b/src/basic/disk-space.md @@ -9,8 +9,9 @@ |----------|--------------|-----------|--------------| | Ethereum | 1.7 TB | 900 GB | 310 GB | | Gnosis | 511 GB | 354 GB | 200 GB | -| Polygon | 4.3 TB | 2 TB | 873 GB | +| Polygon | 4.3 TB | 2 TB | 873 GB | + # Testnets ## Erigon with Caplin @@ -28,7 +30,7 @@ | Network | Archive Node | Full Node | Minimal Node | |----------|--------------|-----------|--------------| | Holesky | 170 GB | 110 GB | 53 GB | -| Sepolia | 186 GB | 116 GB | ... GB | +| Sepolia | 186 GB | 116 GB | 63 GB | | Chiado | ... GB | ... GB | ... GB | | Amoy | ... GB | ... GB | ... GB | diff --git a/src/basic/optimizing-storage.md b/src/basic/optimizing-storage.md index 6dd1c84..6e7a22a 100644 --- a/src/basic/optimizing-storage.md +++ b/src/basic/optimizing-storage.md @@ -7,27 +7,27 @@ For optimal performance, it's recommended to store the datadir on a fast NVMe-RA Place the `datadir` on the slower disk. Then, create symbolic links (using `ln -s`) to the **fast disk** for the following sub-folders: -- chaindata -- domain +- `chaindata` +- `domain` This will speed up the execution of E3. On the **slow disk** place `datadir` folder with the following structure: - - chaindata (linked to fast disk) - - snapshots - - domain (linked to fast disk) - - history - - idx - - accessors - - temp + - `chaindata` (linked to fast disk) + - `snapshots` + - `domain` (linked to fast disk) + - `history` + - `idx` + - `accessors` + - `temp` ## Step 2: Speed Up History Access (Optional) If you need to further improve performance, follow these steps: -1. Store the accessors folder on the fast disk. This should provide a noticeable speed boost. -2. If the speed is still not satisfactory, move the idx folder to the fast disk. +1. Store the `accessors` folder on the fast disk. This should provide a noticeable speed boost. +2. If the speed is still not satisfactory, move the `idx` folder to the fast disk. 3. If performance is still an issue, consider moving the entire history folder to the fast disk. By following these steps, you can optimize your Erigon 3 storage setup to achieve a good balance between performance and cost. \ No newline at end of file diff --git a/src/basic/wallet b/src/basic/wallet index c8db933..7613ceb 100644 --- a/src/basic/wallet +++ b/src/basic/wallet @@ -1,5 +1,5 @@ # Web3 Wallet -*How to configure your we3 wallet to use your Erigon node RPC* +*How to configure your web3 wallet to use your Erigon node RPC* Whatever network you are running, it's easy to connect your Erigon node to your local web3 wallet. diff --git a/src/faq.md b/src/faq.md index 318b08d..6532520 100644 --- a/src/faq.md +++ b/src/faq.md @@ -1 +1,3 @@ # Frequently Asked Questions + + diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index eaef18f..28b796b 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -2,7 +2,7 @@ ## Disk type -A locally mounted **SSD** (Solid-State Drive) or **NVMe** (Non-Volatile Memory Express) disk is recommended for storage. Hard Disk Drives (HDD) are not recommended, as they can cause Erigon to lag behind the blockchain tip, albeit not fall behind. +A locally mounted **SSD** (Solid-State Drive) or **NVMe** (Non-Volatile Memory Express) disk is recommended for storage. **Avoid Hard Disk Drives (HDD)**, as they can cause Erigon to lag behind the blockchain tip, albeit not fall behind. Additionally, SSDs may experience performance degradation when nearing full capacity. diff --git a/src/getting-started/sw-requirements.md b/src/getting-started/sw-requirements.md index ed16845..1b1185a 100644 --- a/src/getting-started/sw-requirements.md +++ b/src/getting-started/sw-requirements.md @@ -1,6 +1,6 @@ # Software Requirements -Before we start, please note that building software from source can be complex. If you're not comfortable with technical tasks, you might want to check the [Docker](./docker.md) installation. +Before we start, please note that building software from source can be complex. If you're not comfortable with technical tasks, you might want to check the [Docker](/installation/docker.md) installation. Erigon works only from command line interface (CLI), so it is advisable to have a good confidence with basic commands. @@ -18,14 +18,14 @@ sudo apt install build-essential cmake -y Git is a tool that helps download and manage the Erigon source code. To install Git, visit: -[https://git-scm.com/downloads](https://git-scm.com/downloads). + ### Go Programming Language -Erigon utilizes Go (also known as Golang) version 1.22 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the /usr/local/go folder (you may need to use sudo) and re-extract the new version in its place. +Erigon utilizes Go (also known as Golang) version 1.22 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the `/usr/local/go` folder (you may need to use `sudo`) and re-extract the new version in its place. -To install the latest Go version, visit the official documentation at [https://golang.org/doc/install](https://golang.org/doc/install). +To install the latest Go version, visit the official documentation at . For Linux users, use the following command in your terminal: @@ -44,7 +44,7 @@ source ~/.profile This turns the C++ part of Erigon's code into a program your computer can run. You can use either **Clang** or **GCC**. -- For **Clang** follow the instructions at [https://clang.llvm.org/get_started.html](https://clang.llvm.org/get_started.html). Only in Linux, place your terminal to directory where you want to install Clang and copy-paste this code: +- For **Clang** follow the instructions at . Only in Linux, place your terminal to directory where you want to install Clang and copy-paste this code: ```bash git clone --depth=1 https://github.com/llvm/llvm-project.git @@ -54,6 +54,6 @@ git clone --depth=1 https://github.com/llvm/llvm-project.git cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm ``` -- For **GCC** (version 10 or newer): [https://gcc.gnu.org/install/index.html](https://gcc.gnu.org/install/index.html) +- For **GCC** (version 10 or newer): You can now proceed with Erigon installation. \ No newline at end of file diff --git a/src/getting-started/tips.md b/src/getting-started/tips.md index 23ff8ee..d8bf1d6 100644 --- a/src/getting-started/tips.md +++ b/src/getting-started/tips.md @@ -3,7 +3,7 @@ ## Optimize for Low Latency -Use a machine with low latency (not throughput) disk and RAM for faster initial sync. +Use a machine with low latency storage (not throughput) and high RAM for faster initial sync. ## Memory Optimized Nodes diff --git a/src/images/InstallingChocolatey.avif b/src/images/InstallingChocolatey.avif deleted file mode 100644 index e6df1c38f3945e6bdb2c5a92a3d12abb8a9e483c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59690 zcmXuIV{k4^(={5~wr$(CZQHhOJK3>qJK3>q+sTfu;M~u9>g%cLwN}q`&HS61ZXh5a zEDJYpCu0w53!wkZ-r9oM-rD$oe97M2&G>(@|BTqm%+BTir$9hX)~0U%kN-bJaI$u@ z|33lzpC_=kb2R;*5(5GP{%`!x0|7k&0bOwYhosil4*z%9|3%UN6XqcQh5x6FJ(!sP zM>VXST%7(xE^8-K$Nvz`+SSSYe+xiBp#O7e|4le!4`$I|L81R?BqwVx>;Dl@7#NuU z0K?kJ-uQp|Kl|?jpui#jrCkWwn;E;I0Kq^Dp5A}3JRmLDvs5gAT7rRL0f7O5{I@YE zDCmC)U`YQtB_Nf0C@jU0=@q5a2pom8liq)Hzq>zgc7X%G_L9H9FP2yV$%T>!?Sbba zR9A1qKOBPJzu#e0w#!@x^J$a@)%MFTX!fc4&2d12 zX6Q%PXc-g8xkx+=YTL%vJ42y4I*^%X*=Pd6WDjBQ*Nxc>sQvR)svRumNM-FhMQ-0W zf_baIzdyxQ$$fYHU;r5ovLYZwm9EVLzTU>(X`f*+hO3P!8w3CjE^>G%JGJ0}6*2li z+d3>h_$!k6n?SZvZ{xi221#jCt6+sS?3@oRJ{fUBkY7c;Z9&EhQ~d`G;(RTShYJ+R zh6tS-tA+iUNElUtUz#5ule0+R@<}>P^PK;g!tb_3G;HI!Xj!MXp-bdZpcOxQsz2z| zQgkCuA+*Hs@b82kHJX!32pc~FUiSWnIf(mnuLwc^xY$e7V|PTA*kF*Dknf2vIgT3Z90ZM8)dfda!mn!T@DJsmd=h z3j&%oh-l^9-gCIuW0t5#kvo!fX?jBL-+#$Uqvd%52{ORR(nrHO1jf@m9hgjp7=*=f z_#AT$Y^#n!Fj=efY}9Xol<{LVdAQ~c9g;2{m0COsM|07^C~J4pJ$L2cIa zPMZFPriSRhF1DXO}#!3ePJ?_m(A)pXQbgVDb7-=X1f`;GUP1Z7{gkRU6 z?}WJTSguXM;O}Ho|J!Cx85GGIO%_5r0#_sUT-zPr5zPm@bo1ekfRIY87m)Fm zr3WZ%1DY0(?Zb`0ZsELitrrNGPED}}tn+&R?8gilPv1M_!uMyE+neHU97;viNS11& zv>4J7L3zDjoxqUXWV&2GyVF`D*r)egvR=OLcxxF4`{WP^oG&*!9{N}N`iZhEv*HPv zeALXp@*6kjJQD*QJDsAq;LjrAlNi~@&ub3SyEGJVP-MC5it89xD2US>Y8hSCOg;AY zDUCnGA&DUtnL2(?Z{=%tmGGKZySE2oHsd%wp^%u2WO}~Ho3+%#&_LRgo}*=q{&xDu zRLzqkyQKe&(y)<13nL)%6-=RqJ>Gakz^!rj%g3zqR*@ln{#2b!*{qVMt&O-KZ69sG z0wsbp-;2>rd_Q%{)N6zbZ@$c{@U!<-28g_?fxg;d^VKt7)-hKZ zW2N@I89R{tf$R2uo;PUD9#6?y_YzMl$XM5+5L&D9ZE;$JBWAJ!H92^FB|--W>v$GmoiiXs zt$CLH)KrxYhe`Etn;Kq`%3@=nd8+(<(}A_o#0ne`G5g}|m<)e{fUN4o%Kh5LFND1M zO!wYuP9Q(*3Geq+OdYtGtu)iiw%^>aowVkKsPrG~GI z3!+5=^P8GAVmuRiZt5D)Xs&Y*h#l|GgFLyorPsPL#k=I70BeX&UB;E8 zo%oKpI?-HF0CEWM1Jo|_bMoZ9BCGNQ-$tU893H;kYgbfqrd>~RQ%-%c`%bo_=d(VO z3vP#!dy;Eds|z>J93E^bJ&g>jHQhS?x$7w7*%cO&`B?_)T%O-P*b?G!de0jykelgI z>Uj2n1*1&s#G}Sd2~8?Z?&@DQp{*ygimTJ!pSmt+F{`(&zLVMKVO*G+$cl|WX9|g- zRQu`T^4-uP^e&nas}FUg(si5JSvVprf{corL=f5~xG_zF?|$AQb@yQ&5#+s|DtN_? zH=+RVweJ+!a*!N3`+{nVt6ZO~fbXUYyQIClXAuD9k4U`w4j9im-`W zlVxqahUzu^3USPV0GRdGIrg@qgoMvc>{!5zdFt{GS=`f)IkLbBzh+7-#Ey~^x3MYhh#ymg4=RDMyXtq-ZRL@_JuaKMaWS;@gbq1-i z>cgCERPPZ6rR*v!PfeBhHR9}Eyc;~ENj$+&lFYJ4NTBg|c-XgT=r-B`F`QgV+U`EG z1P#V;ww2>lde+{ z8`%E%3u&C-FxgF<_&Z*_Acb~P01~M1xDg*ZRQmFxH_QT1*W@X0ow=_R@slV<3<|5I zcH@1i0i%N6s+1F!@M2_TnXdx0a47rRg~NLuj&cJG#4~E{uGPF;-!SoF4X0JKO)L;> zdL0wV9dr`;N|^AW7134a4lMfzlLm?0Ca_Rzy~_#qSLU zw=X15Ia+E(TCKuhgoL(^kLLk!8eL)1U^}pvwB9MO+3lJ>?CZ6-y`l$w)-7PefLV25snBFq}>t3#j?oE&YIAIfQ*Fd8UD`zKtr z(G*tV(4&qI0PUnleG+le|5+)(2;VAtovS)6U!H=T*tM>#Xo@pxSonS>3+j$B-+yx* ztvH$iIxU|DI5ldSvgY(c5k?Z?rII}5nEzOo;U0`$j1@&)uCDqsi?k`bhwt{h_@ew{ zwqp%Oe3z;P!ojWeRQ`0+&Ar|ewvUPJzKDa!CT-KYq=k$57pZ)rtA$noZXVTd)~-5C zfAM|2n?iYzTV!Fx8ryK`*{F#h?iqSnEnWjqrV;J!I*+MW{G*q-u7{?E15k{cjt?hd zly;xoAYfnt{{17EI1d~1=Y*#-mFw%aM5ay_R{~b2n2R;nt`E&kN}Oh@!_q@{;%2)< zn_(5}EK7>jXh005kwqc;2%h;3kiGb;9tLVA(&*#3uk!@k$MLFK*-$#4Gqd=;;{W=g zq;*knUQv(&Hh4rp9>EuC+*mzZz7)4Ddbs*_>ml_x3F*F8B}&-ACkgzb8iv`pC~sX! zmLf}!Ob+jn7zCX@o1(Uxfy9o9Ez}lrYxJAaZ99WbF;-2jUR0gM$1r)iAn<@VIlA0- zg$eTVsFGS{P2_`x#V9@er9zU8{2q!ZqpSQV`qXKsilkyM?rW8#zJHh$SS>T3(Dr2@ zYSJ6c$6k2{KIbg=d=hi4N8-#ui`Q_!o;eT#3_S#TE_`+U1&MNwY5IX<+2~cqgeK6< z!BrF-^?eF$o79wd)?H+&`}i-orGvwmUx-4>JCyHO7G#wPC&CICFCVQcUgwXV=~SND z@`#Jy29Ge3W5fypA?!8gZ$O#(bVsy>epfbxcYGW6iu%gnUlM*1#)T^oUA{g%S@!Sm zjuvjMQlL+SAx^GuNVM|yDGT0a0X$Oz0-g99nb92FJ6dUqjn>gG7}MUhDwG_~VEAA= zVhPhjaIm5!nor<~LmS9|;tF=XR?GB_E?CU`9$AXa`Fm4i`dXvE z?C5+qJ;k(9&`<9aL@mSq5J#qGayhJ9wfRXMJi`}bh32FuV&b!fK$Q0+7NTY3oT@6a z>mX`(#17rAqU#jc5GgGutEr86*NDCpmKj2#QHn;a6n|8&kaU!+F}HSQ{{)n(cvrXNqUSv5Pq&k_|q%lDS0rbf$1+DEd$6& z^~?G7T$j(=#TZI;6XO2_JtBG<8~T~5CdFP?RmBB5_XE$h>Bcl0T|n;xJ8kj67;|a# z1K#xpb2L*01@1_kb1+Q3vK)Y8V@6$?)QpZwvX5_?M$8#tkFc@t00;@zs9qNPe$-9L6 z{;hb`b@3!vFh|6Hr+@U^S23ET0&npge2UAMe^&8JYv+)Hc(cvz*usseb->cuV{hoo z>BvMTdiR$MZ?n@+^16EC76La+Kw$|s>zz@x79@JF>gAKnA<6rw8DTgQ&0AlaCjYKV z&bwC%{k6z<#8NC){-)w}U`;IKf;VM2r?5kbuqKnv<>?<_SLsOOwuOiw5iwrp6isy- z+wdtiOhVX-?kwlugA;T~07$lbI!PI+d^+EGuXoy*UIK;usQ*3NjbZS*DIX^>9`v%> z0gT+5z)*@%!Eub`rS0ic$G5Pnj|E_8qe(EVz5bSXne5LGjHF(p?lKZQQ|6^+gRtZ& zzTA8IDBT4;G7T|zo;E*N-aYo&!JT}*$4u7k&~*H{)8kGN_o-|`b$F=4_yEc z30P@t+~RRUk_=z;+4NzOPQvHDXLf5(P#&7;Y-GCQU%+ZA0K9)T*b;U7h9QjWC65*p z7V-PS-w%jZ_y)Rv3&ZveCqJMmIa?@@ab49eg`|+){iE zQZOUNMu95UnN0j;>4Yi$d(Rg>Avph#`YB`Blc$WXe08`J@WIgx3(c1X@jbV*s(a8L z7#kk>XAq&8B*ZN>lm7YcuA@GJJcYvU7NIh!Cwf@8T}V_sqnS`qe$zW4!EB(xFk6jk zn6Wu|Nmwc4sj`@>KJpFwn(ZyI?bJsGtH5$~uYAiq%udvn%1zYq9z9p@0PE|jl!+~# z(cat4Aq<)L*OY)lBbu(U5Wm@n)i?Nr#V|KDsw`)FWX+kV#Yhpwky4{fq9N-^IYv52 zm-R#5;Xy*)A+}NTPUV{F0|h$K=2Zd#tF?Qhbkputx-$+}J!p9=3KIQQrLqJRM-TW& zerKt~^~N>O=y4{_v=uFePjix*_2AB2v2N>Hj+#G+78;RkscwravZ^oQ(-qSgZ0DYFhZro9r9ue2Gqu^cQeeOTk4<4`W+ zNATDw=gy03+P9mMG)uoroT59HW)fc8Atw#MT0YVs-R_?#JnYbN37++OE-1MJNyM(Q ztyn{!C$wMKfTRy~fNU?-$j3NI*aOh!f&A=Zh+mR+ZuA>wG0c?hk7`PPQNTaB8xEV5 zQqlpB5c)~4Ei09!>h6hEFC+mai+uj#-A76{k&5 z<1O#j>i=wtRvyHhX_D(d537-p8yEl5lp$L2=f5zJ8Hcp7=c zk6Ys)I!jJ=eU6T?TXy$$r!yN#hW<_XVge;d)59A<=BK9c)G9`0^RbaNb%1l_LE5E*Q&Z)-Lf6u?{e*Vchxgq^q? zcC;fh5*G^cmuRbV;kRmqc(u2Rf@ zpuH?FaHWE|&?`!$Y^ptKZUaA6M+ zTukjK{PU{e-&Q3a+>blIAb5#&#!DCvmUzc zp4Jc)D111@U|5`z0;;FrNqq6d) z0h7XE)U(0(`NH|!zu84>t4y?hmt7lFJsoz5$3D<Vd zCT=?i9-&DPfk3vZnrwhiI7Um3Zle)dq|i2Fb0CKF8#&oAMs34#tAV;kD|vLp;b*IF zK4eL=7V`=JCceKgC9h}cbfoo1SW`ngflXFDH?_p%qG1al91ovvB{ES7?*L^G1o21| z*s#-tla$(_GHHv~W*2i(DPmgQKylc|A`D75K<}7|xB3EzKQWt0wQt#+x>KwhP-_&F ztNdj5by$X8gDTNNhU~F?{W%?_Tv@pb1#dqlC3+m}N`*Op=dbB~Y<$*1AVL~+fMg94 z-@;BX1dFas<}uoC!XJ)40c$|M=Fl@Wtu?MbG}sQ%+X0QtTz*c|c>~__Gg4Vve-j~=o$12{NkMsz9@p3;(jMR!^fsFw||LRIoqlbm?0RhuRzTL_6 zEwyUMpG8*pidMykP1vj0B0_bPrEXK3bCDAAL8C*3E!Qa;+lgIk^@H%4Cgm6A@q0=F^R&aA56Uq&&KIq|kzI;;qbx0RKxB>q=y2PPZHB`@N9S7%(L zo26OnXSUo?>@!mNc@r!BE;$r;0Cw=U1Dv&qDZcJoUYOC|&je1Qt2?k2-}n=~%Kf(j zu3if^mTt=1Rw-wO#lruuVwYYr?~9T84`)!NZa-Az;|`xEoF%pv1-X21$+FpOEavin zY|NWY8^V>0n{lkWfZLaCiO~inS-sLZ?Y5`>9x-!Bu5bTlvp0PqTqY@QrZEEEY*gnC z;RS;}V=N%2kP2t|VO5sQf2Es;nT+|Az4j*oo1^ZS{Wq57Cg|vxZttPrS7?<`&`BsU z;%|_{JXN&jRJ;FJ(bw{U2W(1c#l~JW(9>)boM-7ho?^>JsKfHgrMP@{>y$&{bfLR1 zG^Jf(*}x2>kT+XlHnlzf?-klbB)R7YXv1L4&hx!3J{2U`J?1{AeKfV%B#G4rZnzr<)BfLqhLZazfiS(HPPxB+?9fowDKCY}WY=arTb`)H?QPx) zGJHj~J(&Y7okP@T$5)fvi;5BpKz0!TT!H-B_p}iYO%S1>(b7F^7>m?D0N9ZwDUo%@ zGPs)Q9Xmr&3}8yY?o&CjK8#-ZKRyR_V`NujfsVlxs%Rda)LmvMp#*V6YsgshQw?h_ zlyH#7J7l8)h-tCG$f3;`=^q?R$@l8yq`NSmC*NafGDP()W9Ky=RW+~xiZNys9!3;? ziWgJ!-ioB1f!@$;gZiszYf|q40Xv8jN$E5k3$t8t^*4uLxjbQEf8Ezy00l8HzOV!C zZc;-=i`%r2q@3Q`)}LRV^FO<8y5@wit^U2X(N0ROh!6vo<)8<(9TDkwyA zL#;y{3sU;mUei*{QoLA`woU!T;m7uE9?qUp_ccH)S%PaWLp$AGhkowOkLalL2`y`N2|UwM4}>z{T&<)ui ziRfn<3Rm+(*}W6q9@cEgD6d$Jzlt1enLqAIqh|afwcC*RTK_#tJN@H*;?vqQxWZ$2 z5P-QR=Z&2izXaGiN8m`*I>VX3H|RZ2S&!^4Kft2vNse-*Be?%my8UYP$fTUUwB?&X zY_iH-nHp9eWpW?;i?4Z;-r6TmVkWIJ6c5P)!NpL)FJ;TvL!EVe(p(t(Eb@q08@*0R z<^BPZp^T9(N~=uL$ml3p%1Mp$0*k+tqSt09)zV<&m1MOt+4S!8(kUz!#0ut;A}hio z!w6}hZeilPbvJZ?K#qjOoY&0?@sXi>h_UCv_z*_0+s_o8I6F9&&NQ_Ls^@qneQZOtjM7Mo4_L-#yAbBaEm9m{|Il zoXzgUh@X^VZKkS5!$QN26Q)4sT(H=ycc~QiO^x^QwH|>BrdZkwTH)e>qC z{oy%_1=thD|LBhDEzxsDomZ+im3ue!A7qfclONSlpfEw&O{W+5N|wAIVIj2v6Xo{CB1{-#%zMwdv!)N!W33+|pPpHbW#cLV|LF zk^Rd;ixt8O-{RmTvBNQY@jOHdwPX^R^MPc4*Aw{`n-jD$-UnMgvgR?Vzud8#xM;Mh-J%D(E(lEqu%P3 z2A9$c*40QBvj&UQ=U=uks6**xvolom|ZQ5-bUKZXd=iyRI+LDP09aIQr?W;hB}Z}k$W~vYk)&<-ciSPla+7? zbtFyxcJ3;BakMRjaaVV}XA_#aP#`rVpJI@{(XETnV% zJ3OSw28;ZR%ISJn3{c?HT?^(4EE;Xt#PB)K2?p8^&T-OO&k5jRtgh)I$>AwEkuM4* zbPV?DDTf&Bqaa0Z({X`wrixZjtAWquU75YKcQ%cQF#A{E;5`>k${e6HArfk0(TmFh!Xwv=nNVeY>oqv__{s5hAG`d2GQWidx-2>)&Q@ zr746@S#|9^BmWTbabgWyv0NiZN@mbHi$fhwLVFbnqE_Bxh^-qi#U<`(x#}4&Jd?F% zjFKF`p9!&nD=r}U1T1xdibnA!+_tlIe8~^|#)o#Uk01k$4Rx-dxE-H=0?1PYxc!T3 z^UnXu6#>a;h^5%TdMQx&vC_mf%fKm<$A-kB`LetwM$z^_P!@|i%orFrW+m&DPQ5Ar zMcv1e_R2P{rmXMSHFc=e>AT!7+}i}_Hdc)+h|}(%423k|*4Kt`*T1v7{|lDG%Vk5m zNAiY+JY7;KQGh7X+*9#NP7CsQ50-wd8tTP5W40`ABPW*K;X4AKO?LNQq5{MdL*;@8bBOf<@T z(1Pt4vniuY=OL*2jx3B&P>UBrJJfI)RI-NB!T3uZm1)-@sM zor6|Vlg@bkuBGeWm(``n{8g<>zO)&DI((OPW9;ERVirv6?$Jld?2sTV6B6GX$D3K9 zY1;FrOOE$G?IRA7Tb3iu0J2A3YEyWwM&jt;!QTeh*UHS50?0w5qw1KH%{UtDsFq+{ z9Tc}7xKRZTr@D}zBKL$(a?taqvym|FD`>~*K@}!n0LrOAZpJp;!>qDF-g_$=uAm z49`^jnM^WpLWI%4AD0ZWhTiRva-j$de;Fi=FEjl^M5F0&U4&)eWaowvVy$(wM8mXa z=2Yjpt5hDn5AJ&WAhyNrwHbxD{)a_sq=Ldh3ef}@!I!9; zO$nZ9#RB>eV9qPg8AsVpV=_VzioP{LvJY!fr+5|de+tLwUEK{jgNidFMYkH_L!!bd zLqQBgzfj&78UB|f($wU*a$>+pSpojP+ZtsckN--(uzISTr$q92Et;>%7{LJq2gS-j zpXZh(H~StuH++JYYz;4P1H*a&yjNskhsoMu(*}8M+S{1Ra2nmwg*qieh`E17ZpbrM zu=aOOfe7=wBLlRDp+KD7F#+G@! zm(>I4;yn?S+dN>M;VnCtuD4G>X)Nw5Fc3aI#1ZFerksLsgG*IDk@5wluEQ1wo>|QX z-8ganZHGqfRu=bd6RQti7uHc7oSEBRWrCmzV&7Wh#gkjz$Cq0F*^P5aW4KwOnfe%S z1T3p2>MC{zsdW^^upV~24a?jy(Uds+MRn`H5^)-0gl9aX!>&C9JQE*R!j-!%Ha|z; zArlO6VyxxLN*Qb-Z>lbcuY#WNOmG)WZD4a2xt;=}35Qccj=k^Dq0EUJ%V*v-VE~=h z@|9cW@yb5y5I>}C&#pxyUu$*jYrQL zNkD7OL!(sEN2o0LM`h8sUKDUiukXaiqMDAsb!-l7voP^RPpXIR&>iUZ0|zVB@en? zyhpSqeKIWp8onrlxTUi1aZ0y4WTt+2r->AruA?B`u_k^~_n+t-8Fzx<3?=%gJeYhb znZF?=h&0KRsSjZqER?)GExSSa- zaQE_8b3kAG7#Z|V_;q1njCG5aC2B6Wja*$Vdx#cdG_)?J76qp8aAp?P*J0ge&B+QB zbhAtNotM#=i~56i2QF1`bX|D5A&eK@j?)uW-Pa`?i%+kIhFP@j<6+2exuc?~ z2}f)DxyuUs#7JiU_bZJR@njKBeC5@U7+7r%`pbE#kX&NQJxlFN}P}ouQx<=)jfz z*CZPx(QhjFCIi8ERiLlyEV;qCsN+erB2YRRkCDeZQ1P?zA^DkVnhMvhJCcC&3zjx{ zi!A61PXgRck1(-SUW$tVUg_k)8lCCW{s3>HN}@V**{4tLBR3+JR{LW!_)=U;<|{o-pZ5 z*O0C+qTK%TgqQviw$;dE$rIWj`e+NJ1^b&{2AoEn?LjPSeSNfKU^rki-N$<#3lTbB zFRNoZMttWKx2L&@d{05I$(R~GOI1&^pojq5{tTyFr;G2{bGzT#9@jY)w4JcyU+^XF zoub~sCoy45IQ`fve~w&R7mqP{NTw%_ro5M@nM(62v+%d3Yzt=ya;ykUx;Im_hw9>E zRnd#6aptW;X*X$ev>C83A`~#nqm}b_6yDP;=2tFb1;Vz6U3 z@s|hRus)~S{RCNq-v&nWtC>T^rmd=XcaM%J%fn4xo21}%@|z5(jxBeB&-i7+H9m{V zI#zr8&P5g!OW<&RtZlcZ{$cuoCUsh7-r1WH%4T1!EALt_y1DL_mi^+UyEnlx6Wq8& zD7AWy4(Dc(0^ig7w#!+>N<_)5ayombf3bZCbY<1&qfiW+ zu+UAhQ&zgmQ)m~y6gP;kx4@)ip|>al5RGHo0age(gkc_oW(|7{QF*Ia)g+uAmo2c= zqSH&kI7-O%4R{!arc{}q;4TJ7cWG3X9~QZqb^unP!X~yvjn%X4NW-4`LzDtOGaCQ> zmE*)RGBuS&ET*5m9@JnjtNQ-eSEq&)E83>**km(((NWfti8OG18WCx-44@jd(Xi!% zs+D>vOvVH_8F2F~eaaUb-Gv*hfT@yaYEWRJ1hb{5+4GQxFtnRgn*>1I{QGOno1OsG zv?Ihfg%b98bWDo1jON_SXR9Xbb`i;djA58GZp&7+1{5rkk`O&fNYke!#W@tSW5~Ba zbr2rudVadHQ62<0rw3U1#xxt?G-Ne z*!sJ)8nBrIUfE9M(X}h8?%-=*%pXd_?xOOXKO0ZuEMaV0dRP?WL41DL%WRkh2t%0zdLCbf?oPu)vDc zFq!hc5ehZv&2aX?SJ`MCWT}8**{K+RNm46b!=qBI)@aHld2zE_;-1oZLZdM3STZAD zu*Z6ciM=}5r_TcX!pn!4hRq-5z$DBj|E4(^-V24UIDM>g{z9xQHHFoP1~5~m>j2!{ zo_^442g-??>z{WFO7eUb%W0b)oVDl5QI__WrtUlMs6$S&Cah%7i&*!^sk8}V#XF>M zHHl9)$@+l6&nA(9fVyfIal`D}42(h{R>NoER`pK1+ny?Tih%_p*BK79CFx+hn@7JO z4dX2yNan}k(U78_<5$vB^3cGnDnb4&?aa?CRO|Ut+EaJ}U4qdq*O3Ea7Ec_M-o-td zfS8e;K_EtIl_t+$nDigS4G`pl9NKR96tx8XOl^_>_eUU^lD+Ji34_jqZ&OV~ed9gZ z^C%KJMyP!YoEOeN%N31}zN2?nxb!FeMM?q>toq>_*1eQ>zebV*vECZ^to``{g^|h# zC6acD83oZ;ia?Vja}>6pzt5Bt%#}g;nY1RKod6C2==-`4k+NXn@rP$Ie%@8*PXAR1I>sviFvMgJT zISzlRHj{i|x)&qvdsRasnbPhzltj9>SGLW5xw5?*N&><(y~Yyv{nYr0$4paK9ppmQ!1_wz z9>xHPxw82Bqn4WnVKA!41ZBO_ymZ7m)&8V6qxmbvplx=9gZ-aQ$<+U^5UF z1h(Lc@lkZ_LsR+W^oEhGNa2xH8{eeP-qW(w+#Hu}5`v{_BXb4KUQs-dke)>665b-M zxO@PU0op&q%H;Q-Ml!}-DbK-lv*IhG7ZL03C~X73EGcC-Y<6f31z1<+dDSa! z^y~2g|HvfaJ#Jbrly8-cHNI5Qbbvv3yp(PE1}j+uNQX_|a{>b&T5I}X%Jt)GFH&#e zIWvqz0fd@uYeU`*o`F=YI0Y7P{845sRbhXg?ScU`Xh~GOGSODRXQjKJb=#?Cp7pSC zN?j$)F5zV2e4{u>h%~qNPcvVi)j#WE)3Ai!I{7s49*hEebJewux^yj5>~dq1DSLi{ zNaf8&PLWBJYPA?E@0(-Ct=fI2>Ibc^y|PZ?6#gL7#{)Hq*1+DfCf}Os0oP4OyBY95 zp$f}3^_eq|I7We&nC*vp|G=kRfAD>o7ZT_yS|tsGWV=!AFETplg$U<*%bgV6>|SZz zu*-n>1MWiErep$p1q52Z20eKH$oe)+Bj*l%*n$P-t)T$?I5-H{bSgrWcI-rVRJk%M z#4y|u)K89&F5m}5MXf4p94x+lgFW7(g?imf&QycAc2*0QxC^g@zTOM-8J+YBx`&W- ze+JEU1{WnHCeQvx3~qR>LCQLS9hf&#=H)T&D@5$r#{lw6g>Ai3HK4bSswzdhX%l>*SJM(XI(Q_?=3#*sB3uImM8mR z*%nR1X8QLg0w<$5S57g1JMGB6CgoQy(KtL2=Rp*pXYJ<6#1OTB3_oPLQ+f)xK>Y zj7ULIUsA)G5 z$})LS=bQ!Fal4Nb3{RW3VTM5-LOdHiDQ>5!gET?yVqw$PxE17YoHX8@}xL@H> z#TwaGV5vFxO#@s^PzN;{me4>OWUs|ook?O4I^P}z&HB}$8E}BmRaG4WLRn@Hz-cRu zG(`}^KaL_jihX)YBL`}s!$Elc0HC#ig6k;Z-@KtTk!&rObA8WX0qBWLb%=OEen zO!kN)1P>+pPOWrN3{GgE)6__g5}1-A;r3%qc74mTV_ug(-iEAg7{ciTVoh!po* za*Tj!M8RR5(#9%szoHM$zUy3BAA+X0 z`>_k%5`9!Y5t-2%$7$Ruof4EbRhm*dXrHID!L8Qt^vitaZS&laPB5l4h)oh~=+nPv zEFn+VT}%xm&$Ni^NjHdz+8Fna-i69wCxxstmrMKb;9}c40=-_AD~wei9m--e>+gL! zqK~OpHzFGx9N%j9f{oi zWvyaD28Q&$gFi?cKL8Z_Kr7H{wc-yKeQ%I$^YzPs&+1*ZTuu)WZ1_H`G)I3F zd}TXAQ&4tAbuu&s1%+vcCNO#X1l6HaFju}~LHUL{ZwpnTupAM})60juGSTw;z4w^U z#paCVOYV&4aV*T_C%g&zWS36<^d%I$|C4(KZ`)eNL;mUGi}+20a@}PNoSzX@7Z-^X zrEn2hAYzf>ke_vmIoyB8s4;}=T<2mfOKRM6q8jh&)WoY-PrCW5s0c=73A z0arl@9qX69&o(5eoJ^fTO^k~0rO?kYg5>F%T1h&;TWuT2RY0Zdo@FSM;3y>fv%lM4 zlze}T$v#Jc+5-j(GQfKvMr%#LRgCmp7Mcv=;aFzB%ovrE zz2EQ1x-=Mcxa-L598zzl-OQ;7ZA*syrICT-ACDl~RHVmpH|d|=zpK^7Bg{?Cf z+Ero^@GG7_;x;AUvvBnYW)x5HMypMc>M;%3HeZve=vWD2OMIt^C#Y=PvMMebVm>Mm zK}~j91m7Dc7{) z`EnW+uS=|m%@pU#F;z8d5cyfRl-`58+7;!S`ru9eU7FHHEuMOh&@UZQZa`a5k8S;u zrzmsNMo&;RyTfab_X+E$NpTo5t-THqk~%<3(ST}P$FyxkKL3Q+L$n1?UK#gU%B80m^#kBXj5s zEDJLYv}SVFBM9kUGLDDLPRH%AIY3BMC<#(6cBlrJp23rXs_u)5W)Exbuie(v@r-Ty z-{=1iFF?@0#_#q{OR+Y~T8G+yiIDg|cn?FJvx$mHDo-j8t?39tfR7%(@@_k&*fJm9 z6{|mdkCOh_G%9t1WsDb_#n4&rd=$rt{NP-78Nro4~HF!bgF!m4j`)zR@m8! z)Gefj_sN!xj~V-Y6`}Xqw{6Vvq2f`&st;|}O<9a;0I(M7Wz(eN*Z`c9BHfdbwYw_u z0jrKxeoF3fm5hc|(qudC)>`rGge{!5^tYty5)o(r55g4wQMt8}N9xI?p%|jl{zm$% zLJ$|2ipCF0yJ^imzg2wisO}g=<7i&Nfbfv`gA^1t|C{Jk(meS|$p=Y{z7#>|)k>US zo&qWk9UDe^1w2GQqt%7{Al9qfUOnR=2h4$k>Fy)2)K%Rx%3-98Lv8ri6-4)SD$h$l8(V-W zjZ(6leQIZ+WdX4L*$fsD*C@3y17W4LJF3+;ryjSQL5Mf}H&ae2Dwo;3N`Vkp5V_0& z5SoXE`xwleYr#h1wAt*M0*hMGNpTPrO4I9JZOzVPlWAI|Dj3Jafzm3^MLP1AHpZao z{2pWOWWFFR6A&aVlHSYyl6dSmiFX)Njh0!aODf**vy$^qGnd{_(4T@Tx(0EOB8 zT#X5fB8L%?I5tI^GVZ#)`OpDPf|tsMkM*5QfI^v1>9z)%P!ZTh@%}&LD=XZXuGp59FuTmEOIS(ZLSL_}LvNOiUW0S`%oUFJgoabp2a zByYY)ZO9#*0Z;&u<^sD0t}!gL!i3hn*64w={`+<2HN~FD?E)xM+pYi39K&8(7dcE< zT-pwtE=71j()i${OTYfqH4Isk((tiQK^1Es8ag?Z+hoI4afc&JG6&eVM*Gua>P^@< zFy}MHP!LNICbQ@`jOwwK^APl~dhD{EX42yx`5xE#c|n@Oe|thTi9*M1yZ==dCr&i!oG*vQ0I|P<yj+8J-zeu{+EjM(C%~sICzt485KtOLI?Db?bRQ&Ronh*?ZSlC z&HHe~gOaG{brO{S!52c=x=9nfc3KDPdl!r-b|V=)+2-uFf&&`TWn$MeXHQ`JzIoH1 z7tz!4`V&uXXCj_ibwr?*x_3S9O^^5kEpDy0wm7J+EIZ_%hT;F}k)^LYy!%o>Qw>I( zEmnSACv47b#L>T49S2U^QgR?hTnus!+w*N1j|%ylA*9zUp9#0n5lsSD1CzfXY;Us3 z0)CKHBCXy{q5LgHqqlSlxX8=w&<#uKI_W$AtAZ&&8{)wg#HFNoOPSQ zgp>hlIJX{+d7i$ryq)?^Y6YW~X!6ENbc=X0?OC-|CQhFS3FluFd(xW5C0xw4GD?km#c62Ta z2#ta1uX&uOX6kLGcKB;}ataH8eF%oUY6MLc)xkj4U>O4G^>NS*i;B#!>fHQ$5>B=> z&7Y@018VnX^Y-_SpRy201tP|41&4^Ej|Y-|=d;sMjj%%nt@-C(uT)E{ueVjzoK=xC zH$-tngGc437PgNS@HJdW9_}ZZZ?JLZ8@}f+C{tf>+rkySBm{&TJ^DfdBhlRNULmuP{LfjhJoDBA0m4;Vc7 zpU5hE1&Gf|PEc2#Qy~Kv)Diq($=9c?5o+fM9!O3op)d3KtvumlR)tA>DE`=DIVIsR z^VX zd#wB~AgfXb0+^h(S0g1lXM{}b+`qUY*M4pZSn0ndsBVz*B$7!8U5r`dZZ--Xwd;gl zDYQ7UNqHpB5A!n|>(e_0;xoLhvff*uG~DA%6{94bA@M$wjoLj5DeTo)TqdvqaCpxV zdm2lu3h>>$6zNTc;4@3YiPxH#D>quV%EFCZzkTABCLi0R$2D(cmupk@)-9s!(xB|n z9O^5pruPp=Pu;(oAlFR?$`S+mLH?`Ek5ha|Hpf^eZxQ!A3mf7w?|9Oy@t7up@~quu z@_r2L5KjXq=x3-js)S?(qS*cn0)szUjkYGd1_23K+Sv`|=i>1;Xo?Dy42ER>pTsxf zr1&;sxCbgzOIV>D(Ml;TdP(K&!mGUOihnC*17*Y3)UzG~zBBWTW?$y9=Oe(((}z74 zeSP=0r;U8hscGVCF&;SVFKtb9h^_(i=_<-(JNTFi-ONCjXjEm~z;^9*Qf1geGsKDA z#tf+OuME+_o(^PT;cF`5O%;#fsr140oifLx}F3d)n{!yv4|u|=U%bA={bDtEENn8x$c|; z)FEH{;NK}d<|cPlBPD{ch5d}q!EQ>Ftumn`y&O+~1ebj4H3zPyqYNv7ZWZK@W#^SA zZOVJ))SWHs9LdeAJ*oE4>@NM`ZyP)H&M%;*nzBBfFCmC zBN$`YH>1Gj4-}yE=g2#}3S%0BMDsVrt2An32bgB=-JII4cw~}le3JbzXDxF~-e9CI zDA#R!po!0o+4nb9K*jFJ7N4}`b!Q_4y**O@g~>F?(tK5Xd6k?CJ#*np#Ei8oH7d6CzGR5?tC57bXa6-7@~%YOwq#fPaoNTrbG6C6*oJ$ zeU>StouK|pD{b6Y8(H>MHCf^~8ZaJqL}}P~o`AOsyx}hhYvf5ZcLsI_7#6?J<`bkG zqdc{N(;_UJ$=sxBj=T|Dm`~aNZE5dk!$Ld=r!@hmPzm_KB;JhVbl@d%o8{3~iF?SEgs53N}S{ z17o}0!^_wAswE9hH}yT6!xtJ;bsz(Q*Vd}5h-4)CDMC7vHlVxJbXZfOX?qW|R->x- zyr-PsGa17&G8W-nqvxYCDGPtZ3@4jYXDJufE2p#58Lx4OS>=$b>Mbrn&>rAVz6W@% z+}AJ{vRQS@L|cO`tyTupI22}8*DcNpFfaO`5VeK8TwYx7I8gg)A(FzS7jo+>5U2WK zJ9YGhrhwC#{`x?@W_ ziL&GB)NH8l|Nof@h%>q%OxBXX#DQa_x}~?>2Q)0LcNq*GXo}uOAO><2EL9ODvXsU0 zQC01QeT4gjWjKYx&3Yu$gei7Dy1-qK;f_P6a}G)rTJgN)RIqx6kfP|~RV{zF(P(jeu|s$XoOyuAsAiIG<7KL7YR9!3n*rP6@dFPS<}~lUTjwza82%?Mv*M{gU%IRy zTw(|b6^UXu$p1o`3aHoS! zH;uR3C+o!m1qE-MG3i6b!=oYCdd3#wiWCXqyQN~AcU)PnZfs)GC@u39oe)z{(*Aih zrj%zT3_tTOevl5VW#36VgwF>G54frAN@GlUu(yI>LO44XCDjkSik*{WkDdoQ8(O*i zd_=*I*bQX~Xu(a2Y0m?IsOw;Ch-b)#FDfjzg3)3KT*leevl&Px(NB{xRJ#apDbpA` zPp3SLtkwjXxa&8-Y`)jjT6MB#35=RKq5$aWLQUic)NOP zV>fvrIl{`mb%|!KlapH~ujryIP-1kak#N1?Viu-HHIl_4et;`@qEm4ws4%yo$e^Tg z*t_D_=)=ymshh>`Y|9^x|HY6bp2>zOakWQ%|B>7pSpPihv^*+l3Km~ee|4e&NH|6d3uop`(0tuu)U5`e^3=dz|eR{DXI@N{Af&m}9aAZ52in!|#Q^Y8D@L>gz`y`Zx zHSdC_2E<_G?{7&w`y3MWQ?Qs0vH9Pb^I7O?Cw_8_fLwL4xlNrMVao8A?g%b(a;1QR$(6~3w zP?&j9%=U?b8LsrvKwD3b7!!fTUyTp>|3s*J#FIDzuY)f^VLVE;2lo062W^J zBUZ^NUA4;h9PbCK$VZDVeVgAF<{|!qoq)<@$7k9QZ6Tiumd#=!D=D5b%iRoYjc@Rm z^hOM8wO5mAh1*a#c{xCvg%<4tb2c|ei~HjJ`#D)ZwS)$@rr5eQx`tPKgfNlOv`QIw zqjvoRo=<#(avf|%)N39KQgdz&2nMjQ_?XBbgOx_Y>4pT9eurCGq-t^*`IxX>@AMwP zK%dNZg|hG2$Ivte7{YD^j1bj}se7Vi;f+;%RJhQxM&}eaa*IWMH0drxtbD_(XFc?8%Bz zTf{0$egl!38MH&Da%eHBGw}!yJZd%~Gf>dRYl=NUNA1f~h|9bz%|<7MbXq6RSYC$j zZs(U_a{Neyc|zZ)0{`IB2=aA=eSa#7<*~jw7wG3o}adZXD*9wpJU$;`GR;lXBp8eHDiq7cJ*@puPnJzLnI% z5>%p{h8E#{C{q)uJI$>iJ-GhD6sfO9ZcL;^4$=Z8^1}VCMbSKcCHBx+^yMxKxR@im z_up2GZ`f8Prnd!UgxzB}nS|a3Xdg&9$%0$5DA1lpTeQD7d{5qA8vUAR6zLLkJ2l8G zRJn0=Iocujn@5!*EbM5M>g|)*U-yn9+Zf>0$PQ>rahVH9Sn!~|V|q$~;UKxmt(6Ob za{OEfAerrY9!uuILqrpVIZnr~J%Z0_DMtqEW|6wSiayKF_x-vN5X8aHwp?TJl7*?I z1NN%lukl`6Ca*&pRU5q-c&=aMU?z%i7X`?53f<=-gVCL zz0}SY6>Gf|`>G2*E2T*u^X^cWM3a2wo7+k@CDZf7O;)ltO@X^s%%PA-R5Byb@jFsb zLrS)JKk@0Zv`=(t4!D6!-~|wE_E2MQy0Pu#TCn6GU@`LqHz3Fif;EKgQ8G@Pk@m3^ z^;K?kD!`Z>!F=xi{pWqle*|kX@qB926Ro&6ork^X$kJm4UKV@+HZ+Xr2_SMlMZSJg zjzuv!qxvr?v_yD9VMiY(ziUQ|ytmhG8`D20E9#rvP)kT*+(3|N14CBn7M)EeZ4mE>xa zuhZ;F&e`!(NprRlvOgFZ!*~?sjOgMgU?g9NjxK*^sg^ki#{|@_3(}9*q`;7J^U|Jb z;cP$_jeU`c;)W>lxW-QMn3DH{Q#r^m6bB+b;^H_tKFh zT5lDrM3o*G?i-i^dH*DTmz1~ss`m6-c@?25Y^4wcoxaMBqkgO&Z54~G&!of#8V^@5 zk1-6D5>Y%M$?;ya^-1UQ2M>hK38E6a{Lg(isU=2;Qt``Y4$89cAQmdQR@KLv%!F`+ z1^n-T??T4DR#JIYt6B&nM!F;Z78x@9dv!*%QR2UdBZv>ZJnv>(Q*P%WdSXV_-NSY< z4a$KqLc45fO8P0pCTpyEw4MD6-TJo!i(}|nCtQLL-l{JqH2m;JzE1F}zG=KZ;Cb|t z7{kMt&XmFl_Kg)$PQ;?Ad`9)+%~#DMt&MRA!V1jlsTk~&k|w~TY=onXDlL&drF>Jo zYy%Q%ZQe}s1V90YN{viNhS}Z#ZU1q|pWn4Gg!prpX8i=*IND+wZ({}P>Wcr~8ctEpMKG}jHAYJ(OSwXazMcA@q}o=C*sY``yp7QXeEf9 z;F)2bKi&iT8iuqCFn<8xZlvP7;;IpdKsbA+lYu0W0oM5mptlJcUJzmi{eb5?``_T& zO<0CXkYQSy7MCSzXWbNtMZ3=OQGA6oCBy?o%nJ$ZaU<_Divo?B%atemhXg9*9Ur^MeiRJ3*?%BH7G)x#c| zXYeg#u8VS=Z4qwRk>KgPx6NFunS8`e0mF9|_5=Xpo48waGK==2>O#{xCkOC1Xcj+q zrT<&}&q`RkyhJR7cSN}_Uu`qt_(*(r(K&NXD^{-JZ|Yg-yYzPMW??GNoP*R zxEUww1ndvWn1fl&zBU49)fl>;V7tzxxN{yT!8RP{D(LL=P-0B8Xe{{%7n#N=CLBdX zG-S%x?(~dJ^Nw^z+QUq}tCK2ctm0uu@H!ucn8|36YeV1Lm&gl!`YAu9Is@M}fY&NW z$tW|fRU|=XEslegi$SE%Pxo&Be9;Z;E!l8J0Z`4YA>KJasl=2VWrjy zXHK8cpQXHVtGaS<`G|S5EP(5p_x|WbSXRYe z&V~qi_wfSOPPvB4&{khMb0n)V-dE*A9cC9QWxtdM1K5itE|eY^XZLD!bqV{R%~c$3 z70tBUZ#XYTkSNZ%>&}hOMnXp%JcE0~YBLB?Nh=^$S`cdf=#%b9HB&2j-IU5Is13Uq ze;D$1)>4`27MV2%lC~+ZKtL_11opRfgTCv4rjp0QtwztcT8d=C`65p;Y%6&GFFLW9 z<$|{Yil5Pz$EkuSTpRWZhC8Zqu|-pENn^dM(x${@#jmcZF=cPc7PM+a@YcK$8`p6D zW&A3%wUz64vwNh&%yU==XM`vlEJ%U#!Fk!)2&uy_a7O3 zlp;jvzL%vf^_ysMN{DGL`<*=$(TGe*#^Vuc_$g$pe2+}V_IY9o8=6j0#4UipwbFu) zTjSZFP=suCIYKi*Vi`S^mKmWTCkXrcsFk)v&S9Wi1p@k+jZu2v(${dV!gs8>yf7&p zDHO2btUDZClSp?S#s?VXl6%wQ*BA&8_p$8W|LIq~46WzS$^!@KW+S{QeNAi%2xqWl zmwvc5nv<`pG%zepUX*f7752$*g33||(a`Hpt97Km zR)>)U-wnb1rKo-5r1HzS@;GH|-U?_bz8(*V!v5i@t7Wxw(>(znW@J8yd0zv=Z!Jfpsl*h`_EAC4y%abKp85!W^PnhlARm zn{4lW!{eSBz<|&i1z3ub?0JY=s0Prb!qqqo7%V`|v&hIJEa{C|UMUA$Ykoii_q*kx zeSI$!%x$9df@8h56j6`B5N%3>=i-zIa_woxek;5jo0XKWdJY*Mc~!x8>LQ~Q&3Lq$ zscW=H|A@{|5bcjIyRD33tL?Q(MVk-?dzcwTn)VmCo@lP$+R7GR#*%SZiWp&?XsE8! zGHx|zyeE$Bf7B}wuEA~o*%PMy>JZXOfdU=|)i&dBfMDA`4kPvRGzcj2j?Ks9`Y+D2 z2TeCnX-O?8O!qPq;KJxcmxWPAr0szdTzfqmEKo6Y0~}>n?9)<5V{P%kGoiU*0}$UU z;yT|1KE8?Kn}IbM=MyR=(Nvk`oX0oxkb~}s=C9wR;rc0?j4ePgPUPwbt9k7uJ9)bgfQ9F_{EDt;~$vFL*uMf{9CIou(YoM=n{t`Ka_yM8Kj`*jIvDz98N+v8xhAA z{F?vwfvJ!RxUhBap6mJBV=M7<@}iN9zqHCbjl@bUP_pX1oM}lr5#ZJmeq6!daXi-k z#3?ARJl8QrUr{<6eIFyEea0EZ0}VN@mQvU$864-}UxeYdC z>!OO9#V{6DO=~1o8+UHUfL?b90yUIL)Fz$(Ei{+0bDDQJc|RvDsX2mp4XJr(d)u4b zgcy0>?16vJMi(`-zrL(EG5m)Sxz5q zQ~*>ASEGe_0I~IhD{yFIYn>L7r!{o)0m#meD|h@sn%fw9gR#n#1l~?cXI* z==7u@#XA!sB35>@QazsHZt@ILg#X68PYw89 znbh_U)D~vNtU?BiHBsHAj#8NY1fw2fO{nl#wdfug-ZK)aw979T_mvEI$HhO;^uWo_ zC^ijlGZE?ml zzCm3%8oi1g77q@p%JqlYkmOX($u`GBJ$on{FC@V5-nj^ZYxj0i%H^rC?(Ednh%&aI@_y#bQB!8e>VG|Mjssvj}Hv3rIYQdqItHG^m6iUL5p4*F{zrp0%2y` z>Z@jpmII>4>W(U}w5aqC9njigf}@xQZI?YY?GZ}Yc;+NAlNB*}Fy-?5$dz4rYO%^7 z^{eghqQ6j!UL`6=N>YV$tC)bw9-3<}usBeD#)v@XJ^J{6IBR$E&XztPy6%fX z7Ihb(BYs9wt<`wLzADz6q2_A8|Nr{$a~#IkH zsaIb5tBSe!$%Jo2@91kJ5>RJuME$fC(I8is2!>5SJ(tktBp@<*i)ny=#qLvkWDBd$ zo|VOJGX8hAW+kB;h@7?F$hid)N9#=!C56Q{+D3l|v*5xHJrN;5OEYf_T z6zgN%)Hj^BR{O=PL51AqRSw*HowlIV{0jg?z?=H9e0c5j*wmxEzVlw@4sr&ZtLK8z zVP)%_ow>9+P)f(+<9!LkNsZ4~Z(>}BV-ws77su;pD;{}r`|yyFq$Qa8(*V-q*b3SX z*nex`il(2#!IaFH7nE)w0BtTxZF$<7R-lGj6AW{3G>zGMLv-&6(|Mcg;q}MGOrcW9 z-bEAe!F&yvzGB|4;<2w}TG5?cOl*gv{|H@XI*%A6s))-*@Y&-4qual$C0@aH5bQiH zt$=L`S{suFR3}%OKFWHTyiY)a6a21Khm!>1-v}-5l8ae_T_zf0Fojl23<05H=L89q zv9{Ig4&p0ZHxLfWBEL1bj~{CH2$o&C2mQ`m)J0JYU%Iao7B+ZVCqEGv6wb{SDK}4I zPIE(2kqOb~Y%Hzc9X43P@Mi~d0=kSn&Z8`XgE3S7v8`QNxVLMZIN!l@O? zh4MXY&3#Nkn26b>z!6fy`gRsMrIHX}ezREtX?1;4tR2~Rdmrkl{kW$O*5FRmS(#@S9PJ)Y2M`g$~`_8|@ShQ$T7 zNyy1R#IQ*O`MGc-0KFucoM9FWB_ML71HXnB(GKZ8AWAXpI5^w2r-t40C)R7awwFW^ zdi11mZ5#jDUgD5Sl@_yz?t;pb2FXLDriTNq+{M#@t{WNc$3H<607#R76 za2N+fWe9ZET!rktQ2hut&~>Nk)zUSeiG}xdG+8DnR;tN0Ugj(-qs_eb@u&d7*~Q&^ z2ie;JPtxLPt3eJdmR4i$2}Jr*&SP07N~zFFW%5`CC1~g$8$8+RcOc#0^Cj`LejH%=#GzF4FuzhK1e#VGJp1%BR~`K^0ClL!H<82@J=})v7$);2 zb=yJK_9fhei#I4Cb)aUgtxL3v$B{M*BLv_Q)G$|!DTLKIVF|XdJEsz!y_^aT1m-44 zzmBrzo|oQq;`zZkN8N(k5jWzS&*d_CD3;}a%gWZ&wQe+7Kvol%War}ELoSYPv)u70 zYAQc=`T@!1yS59Z!m;!Fv)2^8umb+c)5j8U~tpzXEH#!X%132M6%8_p{HViU>`>Pqu}UgV}=%cY~cDS>j2vX9B;lbaz|eo9FDwz@}zE| zMXL?98HJ-xdrVpWErRd$@HI=N+!eL#;Xz;Ke{72%=OiKVLu7ggw64(GD`6hN3yVdzD~Gk^3r+ zjw}5zfL717Dis}(F+GFbv+*vojGXhxDyz#}!Ei?FHoNuoVIK#v6!9f3y@PUt@RKt( z#y)l?k<3SkWQF$+@z$veq&}5r2Cl9X6*-lp0Zggk6EL*^1G=p`=-q8#wxBK5A4*~g&_@S{ zV+<5Kqc}%BSnDs_9B_Y{Z)9d#CJMe6#T~2*Qsm2n-;p3zs1+U;&IlV}ed3`z@&}Om zcO88(@=~qhAONOj7U$hhIARFrbjfgJv0DD5SzGlo5sX!tPuQV_G%uhpTL>+%{YdrD zjpZu15&7X%ltKZce9brME7)}MAIZoCT5T0Y?=%f+r^SX1>>^f?d)Y;T2N>ferN$3_ zZP7q$#}Uol6VN1v5-Di3{Ei$oor)I2q=jP#IM!9YTME0$`W9ct(W`lZ=bWfgW#ezC zw4)yWVc%U|7==~0h$=etp;`3*9wA=CyaFn z*DYDg;@t8KV87nCi+clXL43PdA|!f1=6AhqUhGH3Lw=HTeLXa+ZtRr!p2<#OQ5KCv z^BioipHTB-BIArwybNoIwBho$*w=T~lIIxJ+Xz?jCD=3_O|EfT1Sy>4F)`RGr>Da4 zqqvyRvjjBS_YHsjXF~Oq$0+5X+@Yr1)i~}u;E4kOWfG2|2zHGKIy%CtUT2KL?wSML@F|@IN6V| z|$zJcx+xH?~@cLrlH8xIs59Wzy+pqERY>mo9y6fL(Q*_`RiP? zC8jQcBv+22%;frMMQ%#y>dDrW+_$nf=qj*)G3nmvkrj>(LSJ7DIduqO4b_Z5CJ zhdqs;_2MM9F~B{Ab8E}XbpLX`;*E+Zc@Q50@bF`H?gx zAT%#5$+)8fS$NhBWKV4cS)|zHrIBj3j)Rc`GxuR#@Qg! zEj#DjQm~tj2(}T!TH)6{naY3v|NsB;&VRz$a;ete|G*F$ z)Tw)9FcLB``T{&-@}hvkOE74cm(aGS7tZ!6tcKf7{tGh6}y zAW%s_T*86-tf3Q+Eb+U8P4BblrK|`kYhVH6p<{#0V)gTWMET7A2#s$rj7Y<5(TL$ZORWGrKp}?iRGX-5C*RloMm{2^%eu`?<(A%-j}8W;$2t*y zpY{!{7@cv2tPu{9+ASYlT{>5lD#KH$-D-hQg6!8+BCwbjV&L*>w zF(v>%T;BM;?+*rSKj9^c6R$Yy#37vtsUfI);`AqfrN$sFKCM|$_rJy$A*tEB?1^#x znA~|=e?4ng{$ka8CBNjhO2o%#Ov(JzzR7$#p9K#h_IrU?kg^oTUs7EJEHA7#$de9jKhW|qbnom#Ijgpk_O;lHa5!bY- zeT{}09st2)bOQtm$64HD4n_C9Q_Zt7q<2TH8$(1NRnI2gx(;VZ3nSjcR9Qu;7n-e) zJJ~>Y`)e3HcF{Ia2cj9->GvZWb*1O1a1(SUjawVV1}sa+lZPnGn~&TF*8^z3P+XH^ zQiP0}Dn|)>_qr~)=};s80$nMeX;QE4GU5>3sB13*;{N9%+-4!(yaEz^NoLz?pG5eU zRsMZKC*sP|k@g>4wY-XNlpUm}bD2a@fx;+{V*r2Z-6bI+MJW2!#&6FF5WWrB3R&x= z&G?8$rt=&1lL9370JG{>_i_LQ2eM-(BYSSP@;*<)C)s8W5)QQyLe(h4KLKQwVv(z` z508f{negis%)TAmu;-HzQbO}rFN!$&3mN^gJ%aj~>ZINqnV5ZSxzN+GpUMVGYRhFix^ zPecFuh7{>ea<~r1XIEB6zuZIN_dmN;dd+qB2~Y0@KR!8hg;NsOiEsP%TNTlPZx?xER?fVh}#%_ z>4Q51aM*~>f|WD3?v(C|p+GNC^W6r5^`KJ&NhOFr&ME-np1WNleU@rdgl^ngc;Cp=Kk8B3cl^ zi|Hl|BhD2W8zaZz+fp5J-y(ckpDtNWt23tGk6`d)bE^NFeyzORUHqR$)UGYLWXq7ng49SGWNC4R1(xgooRW6$ypqL8#qiZ zG(N*2iFCzCvCAcq&?G8aHTR+v4cDBjMvd?hg%vY_47d8qpDDs5z(8R1{~8Gd*ScRk zezwwX56CWzQLu{3^0aH_u0-TrB0dAS7pW<07?W(R42B?w>ksjIX^ZCFoVNS=k-!Yf ztcj#C!%1&our+Xa?*Ci1&Fz0P5nYt9S zFmobXG>fD8qDI93X^fmm6Pj}u5mml#k(Ap zk|2r=AYdyHqK74}FPSL9wx5{7S2-(iYt@!PU5t#+FO|xP-jw^ zs?K7B!it>WeKe3)Dw4qbcp5PIBw!%f!%v?4aFjHAT_% zI>#fJmWRXu2gP0{O`gWV>C*B5M3+|@>CJW{K-Ce7!K5MbBE1 zW5%!+t-L0Lo%(d;BlRQZUgpfesCe$9jamLLW1yyu;DS&o{?cnfeHE>H;-%h1G2{z; z;|6i~c-{Qfx#G|uM*A+m-`dsqlQ4E4C+p=3)aZSeS>@@cP z)ys=VGEUn${V@uop|RoY_1499bD2b8h&daQzt%#?5GgE!FdfCG-TiQGIt`YnfieXG zt^drUnJ`|DZoFK$%w=)G+gt1JQZ*qhs8XOV{nzfH)nrAu-aLn(zbS0iSJ0wJp^ZgJ zhiWvg7iOto3Vxj!RnH0!*X&`mxPVnY065ULg%Bm@!;#VSa4)vDtAnGz{NRaHUARzo zGS$fWgYnBZ_xnKU7N;g(Ue%tN9Y*2@mXKhy=v@o6zS-#~e1p9_r>=0s~ehyIYeXWf!f=i|CCRdB*>SW9M`EJGzW|vg3IEj=v@c~uWve7#^6S?V6SXxB(9ggM>xNkGw#L{{tUZJf^&I{) z%0J^c9?p9cs=OiylE1`Yy@;QLya$w?*4K!Urt8 z{Rt6mHX{5sM)Mxpb8d<|feArvQ{Ivmoo{L=eNLay( z?b$bCCO&}tc?s@xGml!&c;P8XYC!7@?3;)K}gwL<%| z;f7WwePnTOiG;WUNNnOf{3ch@!{i+A!AR;&zdU0V*X8%g7R%rY97 z^y=dcH}xs2-CLbh!nlt)JEF(7P<4cZ)QD5`{R?MOqPMM^?suqH(L;|$ZIHe6)x1(T zVCe7Rv60_MGaIXFKAmjPMSX82=YB~DBEyWC>e?RTC>=nDK=8JX%G3U&5MH91_G%R% z0E@eVhySLW8AzqhmY-2X%SS9vn5LgbWQEu{3th@M<_3RgUT^^KVajCbF;vKPNknku zbY95F#Z0+Xh4_v6uj>TV8mPHw)u~vbIj9TU>I{UD9-D|Ro1KFY7}^!ULX?V|DqmQJ zH#U)(FKA)*?_%Lq*-gW>$pZ9sIAfKY2*mjQNa}nlyQu~;RMcG?Z+LMs^b(55Y-|9# zWga<`MzHakh?VHp4z>7XNhjg^`&NgSDp5hjW6)SP8=nBns|BgP=1y#Rp_S>90=ggf zD3u)SviWmKA9Czq$yw{IL7n-iD0yF*Q&#Nt9y9?l#!n?)pAH5CjN1X!&hQBSZciNs z8Za`=_Z`}RTja4}=n5l;M4{QBaRB*GN)!~DOh}PQyYBNPr^KbA_j{!izXr2%{*k~_ z0S&@R;H(LMU;7|C0!pyhPWn0dhrPCz-VAl;coX!qr|g3&=ktk=v2N(b1r3Iq*SNi4hIC^L@b5M*}X-()&@}+m1Jq)=q-hF zxDwkTLF92CS~J&jf58_3cCT%BDxx1MvdV|@Z8;*;3enGQ|@T8iM-WU@# zY25h%1UwN!?Q+dC1H|x9{61_Qj4Y<%Au#C%H>Vp# zQogHH$2JY7e)*kj8c6#p3t&py{AKEKQ|pEGnzKPlUZVZPnZ@w5B-5b)IU-gsIoss& zGLfiYjODNzH9u(IHCaol2K<>iZr2K%o=LUTfeK&nblZn<72)>$arL;&%q1n*ok8XE z`lB=G0B3A#lE%O}exUH5{^YCe@5?qmkApe4d+lStMXw}TjIYI$K!!&j_r*1v7hJ1B zs{y*UGi{&pSJA13W)J!5m`QhtU_EfbRA|=;>*XB6jwWs*a+`pf&HeZb+KzDE8&V&U zQM#9r>n}#`0@?CUmyPQl!H@B{Kb(iUkh6{C&{by2SC_8Q`=!owMI51r-aJj4;uMlH zfs5n)-+G9q!R%Zq{C!wYx0?n(%|o;k3uHQn-LvdC?~*>wLXRbdcfW%X_n?3;@q{yT zE8rZUgFo!9Fj|w`oUw1)|AE?WAI+a4cNAC z7XPhE0_ZZxtibv~j7nf=QNj`I^J~?!$!xzz3*AY0=s@UclN0^6{nG>H224@(?mnE- z*TxP5i4$G!i0^pNwsfM2ai0&lPeIgd*{h2>bK$1fIe8SU+#bB!yf4cePYk%e2E+Q* zX$@?~>~e@l-Owf&&rwp}0t)i#{uBGtdWtXEV*4oo?ACsp$)ts#yG<}FkG?*=t4>#WR0&9nvO{8lInm$J8m z-%= z32NrGv{k1A>2M8vOFm+)jSNgjP7;eLusaLQ<_&3GHiFxyFzh@nLyE=83<5v0fGj&N zK%Rw?Rsmmr`-X)eS;mg*SqkjYW-saM+W}G5B;R%!qi+~K!9W*2@2CnxScJ#HWRPf$ z#Gl`agL|2@Qs+w3H_f7lo=hdD_{p=8wL<93QMUS+zj&SsazfI&++o!KOc-MmPZXnL zb!6^X*ERfOh%N4YVnv2E)VH7fsM+6wiYY~M=2G=U#KV#XIj(!k)qDkLCy)*KymMSW zehv6B3xI0;y?{S=>Fw5u3|gQe2_#{`4bt1-R0txM5RF=2=x1hgKZTiOgY%I+y)XRS zT(@8@uKcX+rWYe`Vpmw4#`ginX6Tnq()bKncp;oT+Kj#g0&}6I+P+vpb39qFtfRGU z8t#ne8KiY%JAlz?+O%$#5Vy#kLO&C$w^<-qlN3zEOsRKRbz3#GJ|wOv@CZED)NKk& zr|Lm%Uel7`oJ>TlG(UDLs0#Nh?-v zS&Il6rASQg_I3E`FHWgv>;{I5iO29^v!p5iby-9ijY%b0D1CC?sw{lG5Fky~fIz;o zabinuWnruiZ+nS`oNEWua%`e^zJJ||vi1#9%kr&VN{r1cSsc;C`0TFIWN~3dw3bn)Mv9*I+I+=g0N5((^>d}z)Z}Zd&U<)s znX487U>PpTfEEXrNGyXRP3>4ZgjM@fz@@)q|0!+ku>zFh_W|h`LAgpKL-Lq*(5{Z9 zq7^pwafuD1>y?uG-A-@vo@jx^aEg`Ff&-_2zU=fN*vCi1LjCEoiIIwa*4T}t? zp4BVCbNSe>WEaHzsO>k~8>|+K5$lnW99(}Wxr1+!Ncnv(Sy2tBh0yB#4ne5ayW-#c zXJlwpr^Gov_#g}W)3ZvH0={U7xh@K(i+lVE-kjX81}|X!1YmzeK=MOXlyN|k>LRf# zqYW9I1a;3}%|cU-5FkYIDXK|pH$IO&5}!*2qs-P*V^4;g)5_Mwh96I$DS65ynS*bh z{%3|qmz94zLKeY&YnW$~cb>TQ=~R!$QHv*bdWigg0c#4R+w7vAc#Psh(I+p}EY_eQux7>~g3i3{2lfE%9!~K-&-;QnH+jyqexebR5nOhFnuziViT}jquGEP5` z5sS$bT&5cw_e1Fxo>y=+(C@4LaV+d{{=KVp37}zHn{zk5Ius1#NROaM^@i|7lz~k2 zM+~rAb^E#l$*?a+(~ZEET{`td0bYp^t6L`ql$Iv2`k+#73F@D0FcpR@!OLC=9%~1j z)O*Q;?Ulf>ox(E8Ag_#k{L9(>>)Ca4Vc$#DA!03E*Et>@0<&Qu#xZt!eg>5bRO}Pc z&c_>;a&?MF084VTs)98C?0x3x!4eVfw>jUfvcaFfC`eE};(%DJlcZ>8jq zkcB727OCzOVgR}?pf4YZ*`iy?GAkzmvh31T*2wQG>R?n?oR2U9Z$GYNByBljsHr6y ztGx~Y+d`N~(5_ZoWXS!BOYm|{@=#JIyzP4)65spWF5&}lf?-JVBjLq=4f592iLlU_ z8tBY>R{CH^+7?P-q}1yJn1rzmj8{!{>rQL?RAJ9flwNFcel|f?2TfvzJ2y;g?0p*c z*jLah=(=<@oB8wL03n$?$>65yeye=2(=X$Nk!DI(63K$z)KdFat)&Xg_Qu)dWMsw( z&fSVx{QXhSzZ>`I?DIHQm;f<{qL6!S$C-W`;KE_R5^KsGkj$RY+C6?!2$Vs2zS*c} zV!wC7xw90ShpvSS?1N3pqF|v@jR{m9G7>0`(;`6Bm7Gu(Z^lsgJ1~B(9#}M9h?j9X zfx_Eo0 H*7_F`Tzs=O&Yx!&O(46fghk}RTyWIz=0-%&Q;B`;FlC#~lCq(emEWYhgkQjY~PMmE|EB>pJD{Lg5cc1P2oR#{B= zysvs0-s)}ZFhNzF;$8{ll#LZ%x$I7j1KU6uk%I|VOJy+g)sVHMi)Y?^qdD%c#Mt`H z_`2znXWn0gV^txr24r4S&V8f&{@eij=bV!aA`e;4IG5mTrA5N}Kvg0TMaEzdgTMI2k*MCz0_*$lm960 z%)#HHF4NwSl4XY)ISQ3tj$%k+mIVzj@(KGvMLbvifu&mG$T~&d|AB2!hHB-lk_qFgw%-cqPZ49bhav zk$V!*u8rY}Z%iSQ^dY?LxFD}W7&b+iFT_k>%L}k}#Ck=Xd(}a*4Du%6z!YJ)4s(*! znkxpfi2M(@m!JY02}O#G9{fW&BoFwGhDb6vuLGPmY{QVWSLQK`V_x0&eo!202m zW~RA~%E~4q>t$7hSau>WnboRjQY_K*^NafSpS^?jtc1)f-Ae^@wC)pYa3;h*mkJGy z7ixiMTmve0Nk|i7STmE$496ls0vBm#U3*Mb%LTDAe}i(6H-0(3w{Wd_2_6C;ey zk8NqWRpxU;_v4Y_4;gl9R7u+%D(?cxf_!nxkjm+{#2HOg zU+}dBt>8t1QFr*vHH|YA}`M*&9r7j1UO#xiRnzWTdMkA>= z0Grc^Hjg>h7`$fO&#{>EvwPLubsTkA5?Jo?L1LRyHe+c*JU7{FPOY@36WUy@7o*;PA~uW7 z`6OIz;<%^fsYM$ISKor>s2)>A!|r1@8&~d50q-T~qjyMMiJFaNy!fo-r(*;%*X4Cg z)pUsrtOsyzcphZSt!;frRk9Uvw_*^JzDEpt=a@9}Hplz~F&bz+rz#zJJd+PnCKOtp z9O%y9od+EK7pxOH;?;^oRxf(4Q|*WRQ4WpHr)D>5=YI=Q1c#b5<9VWLNOG1S zhiA^irkk-9+(&x;z338DwfN3yQc!A1h|&N0t-*&m?HUAJDM@5&%$Lrg29CDU?BH@F zWs+BH8#4r0?F3Q8((tq;f9|+@hqFFUMV{12c5i99f-@P72+W>e$uu%QS4P3x@il*T z#(^Kn>5%sKUQtfZP4j&jt&8cQ@>_XD9!Me@hGPFc+ch$zim zn#{K`)5TQ!pvF0GNTrB&?2EA?$)`v{m#Gq4w3k&k401WHb3&$-vH%OMn(7V_X`vr4 zaY>7qNNhNrF+!lp%*Z2h;kk;4wbspo{mIp{u{@tQ?DC0|x? z{ra3H_4koR%7?~O1Z|QZ$@Y@N!4)x;AG&g>j0O9rmy?$;W$u;iA5-^LywGaF- zF%t?1D2*W2bdAu5GGYrjWrSoIP_776AtTWh5+}siRfrhu4ZxfVkktv%E3pneO|bWe zP`+udhv`Bq#IRWh*}B#fqOg`^u6iT~_ezN%MRI5Cw|#!L+pU*4fKzQY{BjmA7E#$+ zS6VpCuOC6>`Hj%^gW}q=J6~ko0v$-X6qOiP%GB2?2Y%j&YFBpLBAKD;2?1gp->P1f z{`Kf>Fy?tr>^X0yB_{g#3AGtZ`$VuEdu0j_Lk5aT-71iSO7qH-VZ>%+Iab@-W+@od zxC|&@yvW_Jgl@?HUUY-y8L9FR|C?NdT!#}ZPC716#zSuK`|{|)1738a=BPcZdbw_N z5Td`poZ07$G-3l`O8X3}s>~fT5tqV|P!Q2rv5kuH!5Fv+fS({@hs1o_Fseg$@3on7 z#F=4o970&9w()Kdkp;3Bi?wrk(PfRp|Er$P{t}8!i@vPy3CC4@cX%hIYbwgc(dD9p zFG?dT1D4YTgp-I8bk8&!En#ckerBcJFK(cE0$wZWTCBk5tw@r3R#_0vB6qgScKql> zeNw(B@&^HYenQ&8PZstfQU4Sm_9P()!yP2sP(5-^O+XbliVCgIpt?Hn?f9$^65rrf zCCyK73b$+cuOChAP><=@ciBT6VSrvWD!XR2jIWnOgF_7*`|lBj%7)$Z-Nhx|kyqab z-#Y684;zvI3Rvp5rm&G}s5PYC4_ z{|XX1_8PwlEYK|>dGF8IH!PH$T zjY&Vcn0HZ34Iq**kBm1Wha3|V7zg@9xst~jslLA26x4m@?}>SM(=jzQRji>!k1*w% zai*NY_$|M7=1Jhrig;ql`~xoGly8IDz_K1>z%&l)186K3wSIkO$+PMpnc`?tEczh1 z_WWXcHn48viM12R__Ml|3a(&;v$Sg90o@lZ@SF_kh*&{#w?c69kg*TTij)qysWbR3 z6#-W=mtE;}Y!MB$DBRo3ltPYLvk2X_ls8foB?8o5yE1Pc5Wl+&5a@;w{Anb)r|`lq zCCdQ8_Zz#0i1#?tn`Z;tr;bLBKu_!O%kO0QhvROq9A@9r@&66pcDzO&hqo)Vxqd(* zo309c1Efv~x!~ZO;H0VN)=~eF$_8&1g@3|KM$=%&d9<>BiqZATX}ODGTvPk401_wqB+TQ$#WW}FG#NtQQtW9QSV`gI7RlQs(toY{r`Rfm{+epQUX%K;tEI8q z674E~%|D=Tn$yTRsQbI46l^Jz*YwC)uuoUC3UWA$>}-u!{91wgw3&EeeGeg%mo6(X zaPHMwx0$XtC37!w>$kBrt#K`K2^GN>kPMbzDOON%LYB%!2&w(ndrms;8k2~>z&SW{ z1lP+iDPRLbRY1E*YNto0{YtN8=|Yr@J^e1afUJMn)4tK8xVbU@A&M>X_sSkJAYR^M z@~MWNgNMYMG)Y7|tz$VRz8#a?)Z~q>a@WN1Bvr~`xD7I&XWSr@K+ezd($}iflY!79 zp}ZbkK+LjiKxg-#baapK{<_a*QAl`9(i})$UMb_F5+GUS0YN95K&qWjq@W;~ZYPzN zt;y&Rg3Gn)>dqIN+)mK0W0E@ZAP7O#r|s3J4yJa&J`4Gs(s!QWOilMKB(^hd`NY?c z*CUktYf=B}_p#RAKOJ&=fLc*Ndg#*nr;{weeb z1rCC%=KfCH@hir5Bm&(WXW+>u)C#wxq^L(@#ghJ2QfoYFu)IOA!vjM-C9jRWnNrnM z-*}+tGUipffO=G2h^Rj@f?u-#3d4(?h6%rf>qyz**{wr75?dZjUSn+wUeM9L5YaHO z-;8*#z9z9|B{J5fwO=KgPT64JqnDn#jBt5_T4VfBOGHeVb&|J~*@(!KqI z|K~=B>1Nl4&gHZR0M!RnN}q^-10C3KC(l0@p0OTf-<)WAk}xV@l@lH8n2 zKeLvW6IHdyoL36xbO#;4i?!l1&QRBEv^CUF6^iaiNyb-;HzBUfqK@|9CTb9#PB{kd zoW>_EZ1|>s@&`egbDF*4*j$SWhDi=-DQuc~>rk-htp;H{;jS^@HgGEfBC45sdz7q{ zAAgzwfZmi@CpaM}L_^J{Vh-*b*?#Dm7XQklNFU>8Vf0E$_Clr52+5 zn#jb&kg2o66qyag9=o^z2ZY3Mv-zMFF3k$+VPz>oMR^d6juKro6Z6cj*i}sNzQ|(f zw-WvvM!~+>czbEKx$k`T_9A3l@%6z{zMCU--eO~am;jYMSO>y^V6EgYT>dg*|BBi? z49cGPNx=XdisN^Pq4>l|>huz>*C^{(tlcPhq5rf>;Rs@My>;%DUY=%64_>$Z3%$;7 zy-9y5tP#ek*QpBPSFP%DoM+HN5i_hq6zM8jS*x7UO=0wiOME*Pc|PZmf51K~DL`U5 z3(j{72ThUk;R8GfCl;S}KW2Pfog}jB7fK7VnN^@S-}vYgD7BN*T&wS_YAXko!@4Qv zA~+mXZX@4Yer&>Q8D9C*D`(#k7FN!&-mAHIW2@TJU+DqKf3xCru~ntrEow%KBgB%|SB z?5X3I`VV8aoyXn-hh&NhNz}oz3qs~+PdeO-<>@jflD=8JV|7g9vQ1ONN zT3`K9x1-y! z5`q~qYF1p-Mio=4fFu786-y+hwpq)Pe9Ml`cu+m=J>ekH^Y5tedJW*d5CzF$87P6X5CKr>CoATz{QG$Ss5^(oKLz}qiAue&CuGeXwmqH*YZ zm@P~`c{jD3nZ~sAIvAQ)+pyn8MN*l88kEHhqdmx7-YfK(%Yy)rF2XSmrl9N1dv%QR4Z-gSbkAmNeHfrT|dwlj4q?6_@|wsUhVK;<<2QuST3G9r}t-)bLBp#j1?}>nXPdp>CKVPdD)D^mzA>ne~_` zOxKgs%Ukb`kkU4r>Xc_8R$90)7^qB^s_w%8e?%%&aky_7Aakf03?jA!s5cyNX;>v6 zsH0ILo@Xl$vhb!h0vO|798eO0Uep~YGcJ8Q=e1$VyMgZG%oF1m0G~^rTM>un|9SOo zW?*sM+*NqQ=K11H)SVBiMsGN-U!9zaCS9jXdZvD?ot~F2=Q%wa{ZWU{d}rgojINdZ zY5vVEi5Qfjv;?O=4qbB~_jyS?+LLT`3c33eN(1DF4XQf@fm1jEXSrl0FLq>Z#HTfG zENIpZgcrJpe|cFBVb?Fp1hE(i<3q5>4rg}#xvwm~T8*_#IlwJ4eQ~2(asB1GT)rmX z=BaZ(T_lz*%j9X{;G)Q$WqEkw`Gk*fIMg#!Y;MdGp|Wdsqf~0D8`cj+Ye#O<5wHb~ z{tDsoWI(z#!%Z-hf|+|y$`Wr~$~wVD=O2?3Z}(GyIa4F;H_UTMe1~tV@hqMUECd6s zVpPAgZ2J}4HA2DlMglC{_wnRo@9~XK`tIYpPzn-fu%u+frpqA(Qs{hCD!B0IDX(%m z`TiR-Eh6q}f)kx??(sngshz$C)0T3|5S3jeC zC_56iNHn_UG5U>u4g`TcBi!iqCS_tP#x4t}s&$??AB!0z40&LdGiuKB!CuQ&V#gc~9ZsOF8^6j0asf(}z9V0vI9EvVjRL)~SR zM0N%hi&VfVm8O#!`=sT_p6oW&2`@z-c9*vbojliV(m9&69oOOf3Gqg$aE6Gro`U~~ ziL7}s_M6Y}fQhEXIgr`(Q7SuaIc~lubnxz91AEnL7jgVQg}6gd`H6V~ zw|lNKob8VCi*xP$^PX{&Y7~uBw)x8bF_KcAgp}H8dP10rguFwdNg|dB%uXj~k#rv( z;K&+KTMy>CZ^(xYezWc}xI&d~L6$QbL-BEzz0XuHL#>`Q&z;(_6SHBhCBi}#Nv-eU zo4`Bu$yoCa0Uk?zQfW4wuMTmV)Hb%_(nv2-A#s*O`OPZjM{|VE_D6SwO$5V!y}aUy zBg8tjh%OGk_5w-$63l(>dWTvJ18GZ)Tzl}R$J;PjORXR#U`@`B@2D?qVbe!Eh@<-5 zi6?TI{q72^xfFdfPb^kwG>qs$B#K%-uF39!Pj&-2tE4_F8KJWBtr*if?TA1o-^sF$ zc%C^-FQTmxibFxrkO8cG`gGUpSu6Vtu+4|Dd;41uD<&Z-S>yR#vyu;D5{Xx8 zYH*D|PH3K1UT+2@01Uls(d5OhGw}bB6@xOP(?ti_13G@Gx76$5UQu9AO4KH=KB}A1 zOT5;6zz*!BEId$sAM~Rs>hB;R@bJs`kyzJlbm7yKxs4k_O;z~1xcDQ9KKwY;LR?8%NSIxu-M4tzoj3Bgc2mMkO${Q03aobiY{E&rlkI%|-=Fwvvs{zAiY7F*e`&}ecK z4dhdTy|t$mT{*~!ZYQ*t;({vo{Qs>8#9d;9qbfDTv+&YGLPribGo#KVCco@DMEwi9 zo1ay267sUKd#TV~+oMg!(3)I$5NYV8*xVODmvXOOEr3trIxY29$gD+L)raB;P4221F8mg942!VY80O#@6jlx5`f}b0IV+jZeD(O3o z$Y}TBXuGLtr!5gbJFQ?nXx+DBlxN+|yKsJWwQB+3B)V?QbdR7aRlvDM zNxR@Jww8dP*;*^lY?y~sU3LrwMlzFrk~AUD2Pa%x0Qq3egJ_1BBc&QNgZEQuUYoKl zPdtdQvwP?B(?+kI$0~%Grqpy632Me}&rl&i8A!omLsB7Pj;@F3FKBz^4r43GCz&Uv zi7q(wC?egJ`riVP1l;;~=M1FXYMn+aHO1(Alz{*x&zqeht9Xf9E1Jz8$*5XPlO!5ASU0m&F1cLrh7-76KqDJ_ zhPlNfAa*l`zDjoDA8 z%qh>yc@s|~&inv>50NYy>71h|%jXrZx~J_KQ{ndnc3yK60JHk^ouS8)7X*+o|9Dkl z+k`u`OG{QtC6E6Iaf1EF-*%#&E@#Y zbFBbnnU*jEi)9%y1x*c>@?X<`voJ5@n<_rD###g)-$?A8`SVoR&xRFsLPoUE42s((T2 zhkQ^KPx2l31O@5CE!#1Amqc9xJ=mpgz^{<;F(8NsOHF<+c894aoFkF*@8 z#4m>0-u42f_*$Q@732x9J*-Cy1cNbePqSkj+%d^Q+{|7Mlzz|Q+G4J=J=2d`9Of!u z`V~gRuQaA1^eI4l$W#;2R|l{gsh|sl?eKkbA^teoY@ANj`BaKwf#@keJY=qulbT$- zGhf_ne-R|>Ejhd=3D4>a;4C2f%#?P=QwObT$t`Z*6mB&1*qNlw?Pl5f?Du-AoRM>O zL=6Pr7_|~F_uP__1)E2~@#u0qrjPm%GzE{3pvU3-d-wG^p=<{z>y>N8R+WpSi$$=< z{GHiqFfQJH`lkrZrJir;_3I2Bls>7Q%5p1u8!HvwbH|x14`dn}kHyugtnM#w7Frg} zOmul}FONrir-#FQTo#)P3?0p-2Sa6n9xYnPBEzIB#E>q>NswEF^*%(iPb|NpY3TH| zw_vfFXDOP>L=bkjHMA&SjXVRJ1JJl}b=b;2%5_jOxIirBfKIJ@fab_Tk^#|;s-@eh z{AVM4S;B*qVkJu=|gf+0I4 z*SJ4r>FON${l!aJzL;OKQQ0NZqkY`KY=06Iza0bqSW=^kX^_dcb<|ZY(~31#8VE=e zDOcR{By_{PypFdtr^-O6>8H9CtuSQPt4Qa~-viw7kPU)d06jZW9ndCQh~^v#7K+>Q z&Jl2l{qo)g&i7w}VY;4TMQ$WaH z#QbMdm|fu>3Gn>o|HsA>uwf(v)>vgy3+11{GAE|RI?D5aA-_`y#@K_0Bm3C9E9Y|%`q!|wp3|9LWId(z z0G6o5gL3U=v}LmbnBTHgEtIr}Dva%Gc3RvCWZ>6PPFSuj?|KT07hcuqxT+-bx6dTB zU|mr?!N-c-&=61O#|;SL7mA_k2MlvKE+CqD*&O98KX$u+2^x=Fs5*ja>>DMMpvHDTX=`=FE5W^3VGs?FyxJg6OaP=8!epW<=~ zjW^|%_&|$WuJNTA(b9^DYwY1>Tv%YzknSjDcR2kvjoCXEi>rvC4&F+aTY6D++?Gh2 zUm+|W$Rj&qT7zxwm!i9oZilRq#mUqaqA?_3`_ZK_)n=+*_@rxXb`3+4m+!QzP35=M z_Uh!-lh%(ZA;}>DFSj_?kpvAfs^IPkFQ{|t03H)akMESUZm+3W0GR z0AY#}%e|IfId-pB(?9)RJrW6qw#WaGb#K4Kobbw-Jx1)Wp|CYLF<^r9#)EQh)RLUJ zZzEbb)G(NMvU|zZz5U6)|HCdcx=hnQe30#EBK?KFZzqwNTBUI>XVIoFRFE(ep?yUw zFa2!tt28w=s1;uJ>-G;cmc^I%K6(IopRtds;*vW?+Pt>`xWOnxKd>s94OMrMTcxc? zkYy0?fYROXEV>Tmgt>4-q&%`YsEKIgmHvqIyTl<1bD=2R>V1U8k&W%M zuNN;nu(qrlTEK7AuZhli0{dTA+N&YOEB@h!$MTP}b1Psl&4dpuukO@qmj-aj{4=qD zTt`?tOSzD%GTV`(C4vt2KWcBX3{Me`s_Hd^tF`cz6@vyhvrQgd86IqPW>{Rnqi|@u{#n< zueXuHk5RXpG7z&Y*kR}CDi(L@(Vg+$IR6r)Hf1S;oBnML`e>Y+eV~ZNQgq^6Zh09Y zTp=A1RB^u&qpS#itb#!=6}1 zc!=$U^#uDh_P@4)k$`Yt24jiqZ!Z8Q!x^|adE0uto zPm_vqXF6r1^|QqPm6oV4y1%e2{o;E9y-#Cf7)KE;=L_fxLWa5%4o@hV%h*bNOAI34=<9TUgjY!FIO-GB|tX70W3TfX_fbwL;VY<(7!UhXJ_wj&*>oUP>eM=yUhIb6XQo9aHBpD$~N z>hS(A(z4A@_#_5bThz7H4imLrM1Q>*K$6h9 ze#cLM7(E9|*d!FgAY=K*AMC?d)LK_02dK(U#+^BUts_tV8h6MPez4msK=R|=+X!v^ z3vjvtkMwlIDwtKnCh1=90i^>VR~K@N&H#EJZXi+#B>owq&@vl3V^w|Viyeup2uH2R z*Y#y4wh0uvP%`GRvL0fM_up<`VFtXK9}Cq{9>|Abn$qrJTfvzGHh&$|bs9`xm)Baz zS8B@PfaB4CZD?S}>}N`}>Qpnknh*)cYv=BGnLq0Qigz-HnmGhTtb_L4nOU3yJIs8{9EJ@P#VDGr$9!CedyKhoArNPdI%OM{5h!3|76vijwA`0$vLz> zlM8oQ=QKu-`Mh7jxU2>0T!m1>OfHL_q2YmV)_HTcbAa$;3n-nweSR35K;WuHhfjA5 z%;YgPBZDlOQ)7+m+s}<53GDnCrPvl^S7l4J7o=GX$qO|9>OoC-#U&?Q6G+}N+uSY< z1%a*=36u_9+!It=)~H_g9)&oZz_cMO6{kh-V{ZcVkA67&^K>-4aOfe?E{j zt|`vx=`r6PKyDzqReOJt#kM*{A||%;h0iHA(}NWc0bGNm0$_+LyrIa`9XfX?qTc38 z?}Bc7HH;}Agw6Jf56sLu2v^kKc-b}I`H~?&+-^hxi6;QA=byxD>L(VEkw5CBKz}x@w*pq^d-^Uv0L5OLOTh! zhz6)}^p&>0eAXgTNwT86s_jAy*>k2s2%}l45lg%1}zrshq`gwy!wFcQzdi zb=FQ=Y4}|aLmH69Z3;nKBX8op;5v!7)rbKkN+?6M_+S&C<<(~#4?HA$SWvfKZkOI( zjNXVBn;<5QV8t|r@aN8PUHQjhv1sva{wqm1cEc#m6!?g>=dm}ydy?=$K16n_8|d;t zSbFJh2zqv-D*I(C6cy$OGKj|&37v0W9_6vUZW?thaDUuaN>eD$Fy;E6a{`IaXj^g{ zS#)q@L}|vHWgT1Y^mL4TbOJ}P3c+0j&WJipjlD!Ez+@Uxf4Rvba~`^SoJ#Jb4 zcigqew&}Yn;TT7Zf!XH5j zp}aGdxq6^7gX*uXV~YmWRtHb3_QQ!4X_C8mW`^>H+4O50k#>_l1W^yeNTCh*Xd$)= zsz}0@DBQgGOE6vVm5SE{`2#H0y9BY_C&g8DR=vUaLwWij;Yu`FT-a_XbVReuYpsUU zq;ds&)+A=OdX+we}# zS;#jlKyi_qc9fU?S&o#UWrni?q6fR+Fk+I|0Twq&a^saz#lWI@K65Dy-}7fRtCx@1 ze1kb$=I)|==fmcTl2pUnpAe(c&nlTpkI4g=ZgKBVz#q? z;-n<*AEQzlr3(8Pg7MVPi4rSlzpc3CTThPRy*qAv&EoX0YXHfsA%a4N|qGw6sd3p0Sz79bv~5)XM)erAl- z2w4ZjfOdAJ!?_`pe?+&;=v__a+1!ILs7M`ZXp)@PrFQ47u6ta&QZU@|f)cg!T3e@< zv=}q+o`6#2)`r#DRFMj<0j;2k37Mq!xcJD5gS}_tbzLfr>%x8$VY7}*vNJgv(4qhG7Kf@7>1VBD$bBXnO=VFOG+w_ui8coeOGGA z6MCw3gEKQ&6t=S8`HS8 zAh9tGNz(PlIGxz}8hUdFoMzX}JY&IU8O10XdR!vObmsZBu;O1rSE=VBIQ4vb#wo?x z7O~-FCX*n4(?j6HEf%GHNK-qf{SYV7j1n282RhFG#wUyblsV^Gj|dm{a4J1{-ZPjH zxbwF>e{zvKKDHc*55dwA+tV0P*ulLiLId!P>#i*idM)eERK!b#`}-T3v5-t!l&M5| zqRS#XE}rCNzFUrd(%AMD!PRV_#VZZXL&s|)b{^t1u8arQS?L5xjWaY#>tE|-u4e|J1&{jYv)Q?*wt zhZO<`c>z?~hG`;2vWz+p@D0IE(sACmkDr#@ml|@iMC(PWv0RlTQ>Q?0A@94~1IZ-s zX`Rm(CH{#)&8(jrxudiEOimrWm4_@9B&T_(Yb>mKm3SvqJ^CX0t^m>4kvc_%2YrwE zJ6V}Bs_0Ebihc|lqCzcpu9uM*ZB8m>rPWX>{u^}B&i{cA;~}&xo1q;K!+ePCd9~mv zmtWsdZmQ$ostSdY0Mq~lLv|lFJ_W;rB}t2Fehe`3eRmQ2itNu8hn>!@4~wc)k@GbE z#OmqKf;CCOS;#Bu9TXCbO+h(fIDW$+S0ByTmnjWlB)_IY$z>#e#NTWso=!aWb6FQ& zDNt43cPt>2QFsY}EdD=lok4a&k){ESkcPawQ_U5*RK<#NPwu%G&K3ZtKN!otsXz2R ztM+t%D%HWWG?eK-8qrNdLt#dnKlsk9Xm-kR4Om+ME){bXXO`IO`w35KqMf@X_CrSK z9v#9NFeSIZh1VKS385$CEt}Saqjo|}J!Tyu9vDa@qsZ8p&U<)+$R~b~^)Tm0*@L)`wSqj`wfFGG;laF3C6R^Y%5E~Qj#)s z_WU(o&%B3&4W2Dx7fZ;N_R6?#Mp1F$vwZV*?w32WZAfORzL3L0ewe?UjSo>0nK}S# zob4m{9jeY5{))yE9s6WTLp?D}xa=-v&3BlxjU$tFhHH>Eps}N0)%{loi!`67)D_ix zx#ip@ukVOwS+Q~?PCc&)_+T`XM=i4qU`c_8{L}(dpeXp;H!Q2a1NIIh6i+EI3d_sJ zBfG?RCo`{?w~_65=bC7RQ^k+kZxo;GS^hh-Q$L7&&|mZmg*Ux@YyevmT4wg8X8P>} z0vK*Y1J%a;lijlpDX(a^nn=SffC+kftc}QB2vCB@jE6>0(40>Cgv1}Z;!^6JL&ppSCCN;H2U;#za)+ZwX!hiDPJ|-5*pzmV12r_5L3|82n<&IZ~yCsQ6(9xLie7*!g=0%AsbhWFLR1tZ3i+ zuMU&GRlcjWz;zeuJz%eEbxH7^E0jU-Z@QznOt54r%hyeB5%&OGJFRk>_A@gZVhYWZ zG1{D}gY804Xg<#NUdQ(jr@G|&Ae83~#}gLgkn@B}>NDa;13o?r%N%-^P7GaCLp6%g z2xPEOBcf?Fuhrj2kjb%O03_3-yu*Q(MPY6WmP^xo#SJWKb)2AR6GoXkYu4oUPX;&h z{j)s68VD~BR}5jH{l>d_bQIc955$kb)IH5ffpiT1=3CnVRkw2Lh?>OM4P7GS9p54q zujjYk5$?o1PIg+*?#!&njer6V`8K+R%5tK88v@U|`gZ87taNWELs1h-{9fnmn>8@7=#iR$818N$syuvbf*lRHBJs>L_R8>XtVK0^&W$DXj@) z_IvB}Va+WjWiwr!e>Ik0s@i}gDFRFwik=^G(Un%$jBaed_(gDi*LQPTf9kuH1E>9)$Q(ej^%LUZp5#;^%O_$f9Tm?UP;K z9NrkjUmr&s_xce}lW19e?ZwLs#aj)LRn*>}MJ=#{Q;MS7y{4}olM7vYEtQ>vawb~4 z2EW+0ZBA_4w(VqM+qTV#ZQHhO+sVJrC7hdBRqv{Py2ErE3|#9QJ4XHZH+?}_{|-`r zD}==F-*HNAq_YEG1~8x&M>fVP9JE14J;$V}{Iv-vXl@*{wV@0>lb zb21#VX2tv_5u+tz$6vD^EA+o z9p2GBB@2P_MIR`UxjWs4!qu?eAS8?VyK=Av+Z#38koU|sv4zy3dk|sk^4EoL*JUOdB!oi`&a#Pp&>#v-$Sh6CFp^qU|_wZ4L) zowtRQ6h%WLEP!(#O6~l zIbw+!p)LE_ARKhaP8WCCLOo!!^(MdZOdFZhIT#P#IMg4aD7QGGBADA9=>$e6e!2XP zoQU1}xI1pr^`PYgKi|l(tFc-_Y$zwOo zq|c}QS6wd&LJCOx)9kV#nRrxBRVVtE&;2suABSCod3uNurNt(wloVm5+d)#A@K=k+l=zhDq8V1bW=+c&!ev`^L<(=c@a(LoF z(9Tl!i_V{5#yl3yp>s85#J5S^`nDQZb)tGVxg^AA z`0p%#;(tE{?X4L-YbW}d=q1rZGwIJzt84n4VxI0!7E~<1ru~!cshEc}gQ{b>c7CNd zJ8*q*p}5Q})>LXQ0pp>M@17z+JwUavENStNAX7{XcW>jkgL*4Rs@s`H>OeIN1yWmN zXc6Ag9-)ld1f~4024h}k_eE*O+v8#@G<-IO$K@Mmq9grOVM~&JE#ji!ol6n^!f^dr zXl_2CM*rSKq_B+CfT?ZqotoJ;xMWMpVkE5(4Ng9pUwPBxz*O+x;tjOdMzZS zgd=ac!3ABAEy1209KE$}C+O28Pek%G)r7JYVgIHo!dBTJCKdM(aM)y7DjH%CF{@PE zmC8y|$hBm((P-xpgEn&v;uN;8=NXxSXG$-O++jw6sd5Mnw}MM(ltf*EYgA*{WjvGc zhS&=3tiBMhw$ss$S7KE2Dk^IH(up!y!A}ejB91+Afh13rQjJFrnoW)cyETdGinED& zskEe8SgR%nu9Da&4i^fi9Lx=SFu={8yg}L(#4P)68q@+CS=(gd;6zr+7eHpzqQYiQ zntI!mMBadTHW@nFccIS~#lX`X(#`7hZg0c38D8)cMFBpN^VL~>9{;z0ih|sw^PaNh z!Zve_=#UYPu{^XV17A^s#0xnd{0!a^lWY%haM$A>_g{*rLe?>;x>0z@G~tSMFtS+c zylg*s=Qzr8fm|N{7H0|tf@o^*pNuNaiSht_o29?D1E$9PEB|l5sw&H*mkFZd&kh1| zl&=kS$7uI+X1jq0QIy}4*Z2Vl(BU|$6Ch;tLBne^f*dRPol)f4Y3LbBvZ4a}YxF>P5Hg$JXu z&%cV!dxY9dadE&-mk!5hLm);grQg4`oZZ#2vv+Hvwm%Tv%exJo{Cz%8K&$8=^M?Tx z;_JDweT{DOOQ!IhR2P8sX4U+mf*APt-tHV_dS%L6KK^6%I&7!uRik{C!M z^UfADv+u(PUuCts(BqH#{)~&;UC!(%w($zw3zbz-6v%~49o2A<3{{c8c>@XVB@Wu1 z-)~h~)`+j8u26${0;?h)bH1QiyNMdZ*5k2O) z-6hCeAy?L87jq^be@v(O2l}0RV%){snNE!6=n10{?AftD2;`6<)Cu?MXvTPkC2i(k-Sju&~h% zS7Djl+0srtXzP0a8HMJN_nv*I56(ndx>??46~`jAelV|h(KG>AH~O%U&uPamh7~@F z=yVCg#2aV;2EBb4C(SBQME)zH51CquZmbvgk3Eh`y#GjT@-rV{j2%^Jx$q0j3uQUD za+6O90sJZk>vGH*vi$zNPq5=;IeE_`l8dhB&^w?#XKIGYpH1ZN<*=fVRd~9Ue#L2f z;i3%FfyL{ShC1>k@keHZP_I37r>v zq!FuZyptGYNYT@+oc1|=KEJ#-J=})cFqx?|3F|J;WF?ei8hGsuOM0N}76madtNyhf ztgB}F`hb%;VH?}C#%Qs)&2+qqj7cGPr=G~)!IPo&O zTl;D9995N+^0Jd~9hU~xOAp=fZ4SOnpZCA$3_ZBxiu{gIy7_I%>I`B5 z{3O7l(FSMOfb88%d-JmC{~nU9P$+kMFl?7FCUu&^tY|l_ughIvRM<)Bl7Fjyp`D0f zm~PLN{k$=huIgcr5%x^;8eukdbb&A}qq%#Ria|`gqh87HR(oYp_zkl$55TEMV1xME0V~%`%6A4OuPDFn%4n zgKG>bGi-8}UFo6ut)SHwZYJWjm zRgtyYRfV(3-45+yeRqA|CV-&#gttr!`{A*9njPUE_p7Nsu|>%f1z32F+J6Q)9gCk9 zeY)wUy*MyPuj(XuTWhLB6O_^Ojr235F%5|OkFr&kfrx}M+q@x%D+^S_pB*ULgoRYS zlAjM74jnE_)qySGIbdy25taq)C6o0FU#cXR`reEo`%N=1{qevpkF1S09gZ)|ig9&6V z$7d03oSI_%6>fWz>Cal=lmTM`@-_fM(wtGUy;?+q$)4jLCJ)12FrBvd{0RRpG@GRb zWQ>*Qi@zvv`{@JN|23d<^H}01bc7_EYn&nbne-ME-wbL03H4^${Ks-==4WYZ+A#lc z7XftqJjLl&?##>x%~`QvpgO>|eFw2TLYotxb~zZUOre=to9c);!w+{;jG4X3cuqH3 z`n>-BLGn`w@cfa=VA)`~Fvx{jtiN?948VTQZo|R

&z$rpuX2?Ekcs!EnORn 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 Ch|8h? diff --git a/src/images/PowerShell4.avif b/src/images/PowerShell4.avif deleted file mode 100644 index 3fd596ce6124fc3fb1d05fb3ddbcd33bbc276159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76155 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 diff --git a/src/images/choco-v.png b/src/images/choco-v.png new file mode 100644 index 0000000000000000000000000000000000000000..895630d01e10e0d2b8566b00ab2cc2514dfd159b GIT binary patch literal 11151 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 - - - - - - - - - - - - - diff --git a/src/images/PowerShell.png b/src/images/powershell.png similarity index 100% rename from src/images/PowerShell.png rename to src/images/powershell.png diff --git a/src/images/powershell2.avif b/src/images/powershell2.avif deleted file mode 100644 index 19460c7871d14d104000cba32b239842f6d461b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359710 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⁡*;`nX)na*G`gP4omM>TxnQgneoQE>)5 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 z�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 PaXaJzr1*5L3OW8C`e5Su diff --git a/src/images/powershell5.png b/src/images/powershell5.png new file mode 100644 index 0000000000000000000000000000000000000000..0726638cd4dc24370f0edf5d0f217bb74d51c364 GIT binary patch literal 12193 zcmdsdXH-*7xGsu-is)xSJ^?Axl&T;gT@(bQN{iGWRl2lL0}6@-=_Q0Jy@Vp6CxoC# z4K;K^0@8aA0Ycygzth(`_niCp{zzu;td*HPvuEC?yzgf{9W|zltQTo$XqYtARrG0S zXiccs`RD1W-*-h+t*Ol!FMYKqG-W;POVpcl4$9ifG&B{_j7P8NsP`A%sGE4v&|Gdl z{hVoYFSMnh5tGtTQ8x6mT*F^+xw(`+x|OLRRgam=1bHbmUt{?Gn;`A>vE?*2%KKowhY_SdVk_BUwn=V_@jj?k9 zs)bf;=A2e5Dc^WH@Wk~vpG+l*4RTk5#7+;n(Z;5kR4F$Nb|4&(x+H=#Cyz3qwQlPZ z_3>w^4@=Xog3p~soz9JB@O2bP?DT?*_T1@|X=1oTg-_e|zm#vDwzi+R7*AVqm6+3s z(%ib!e%i;|OL@oXCC9Mq+dobYLkLJ&BARs&?Q;l}Ts)Z|1?;anDDnj!AFy<@pZ;l6 zSpBxGD@814n+1LN0oe-^b9Jmv_4G1Z>JkduP&kXueHUyL? zCjKXr;1;t#!;N+E8tSXxvesfl;lskhuvqMLZ1^^hR%pll&FeJM3gOx`(Y+`hAwnS_A5q|W>vsMQqk*Zz zn{wNpDF@hKH~PLgX5q3=@TEy>Ow}@_7~TNO9ei9QFY_z0k+1*B{+J*$5E|A=buk zmk)Qvmdlq{zLaf(Lt&dMbCH>(q`#ihoe6XYX^eEE3dpy-jGlN3M5b z!;DG8alo~>MpD{c=l!UO1R+l;pn1n;dg?Y7+pj#XbmrRa zuZ?%M8&BF^y)K%#$3mi|p|Kk7yH&yo_O9pc+oly(5D~=~MH(s(XX4312fw_~_Gb%` z*F(hIDgC{6Jpzh+A$?n^@J;E3!nd8h_RJDyKACdWHw4uI;`WTPEaSX9{cX6RF?E>c4nZlovW6 zJ&qcoZVEra_q3%&7r$3gpQ4oETDxAP)=}xI0!cl1W@Nsd)BBkA0ErHsr2{zKC)rS* zD;^Y0#@GRm-`Bps+hXv@tmx@~M- zBQxsLZvn|(cyPUW&QYMicmRPK`EU@1r(v|i9~WO-1*sR9ag=3Ei%)l!)VWY6-(~3b zP15L0lCe}fmShuooLly{N|CZdd1EC3MAzWsYkoZMFvDj-&(eF+aMW7Rt(MKSU{v`1 zh1O5LzaG6VzS`jTQ8;iCG$~t@PxLnsX0BUhmMKDlP?LP%@fJOXg6LMi_T zY#vE;+Fm#$VWR9daJ_}UUj`!CQ-gqrBT?73qZ@6^_4S73JIRX=*4kDV1c(k~Z&F*~ zK`2>L##`O3arzuXmfbVwI6h37-)A9aJ*c<~1b}qwyp2jbCgql|3?(1T>?svB%+$*C z`MfA4&1<%N&F#=%7LDMWbL4Mh4R$EsMa>RHn2xy41FE}Lz7$^mxGHj^#%%cTB~wRh zWrTLqjZ5dkd_-Q_dtj&`>29xOp@@>z-aR&3N^fi?Mj(T%#r^iMKuAgCBbpK_d|0|L zyLO$kv*s!7HdL%j`Uk*cKTjB#cC-k>8Qm{0ou&1Zyy zmtMTXbV#o@$TDUTSP*Scl4aA2C*2ET57)gAa+Z@qKfbE+I;5Na{&7Jzkhyt6X^5}< z@ZGZkHh2N%O7cTrrKpZsHG*RJjkA|->xr0IE9OYy&fWSzuDH{(8lvwn;95E0Q*nYy zg?mJ2#(E=!^96Oqa0Q+2TTyn~jp)hhGF%tX9E2AFd*jb24uxrr9>K@VpH%DSjfFLUv?Mpdf_F+X5&)l_dy8uB<)rwv?9@+Xz5K^|EEs z)CKV?5q)E6I+YebN}gT9yOwNDz2}zMjgt;8_B-HfeM4dJ?J0?cJC>ErSfpn%)GU{>|Q4d;BxN*1MYlcOlOWaDn=_o0^(ct&RR{Z}|tm z1HbMl#7wtI6`jsY_~xAY^| zQv2^!aFKpoK*W|$x2Ol82QzMrZwNlZ;TCM2%soi9j{Hrd+~upA0WDCE!^V=^@SHbF z#&mI=avrI!^xG~Ami3PCxI>Dzzx#=ZfTp97VMe3r$XYkBh7EWkrvuSWzkrO3VcN~L zkfI*jjJmpy=2}MIjHKETBo?Xm!+16&i1x{GHv8Ji=b+_-klg&ijv^)hyJjZ?SL`sH zN1t5|uCUAjR}bDDjVPhSG#igvevvBd*wbRut2LwxO+ZJ(jul0)w;Stp#iK3EY9v>Wzjk&eW>7 z9pI0bZ>9#eD+(gh??ITTD4lSx3Tzz?RX^!_^QdY2;9b(Omhm#b59>YU4Nipw^r0NO z$xzF_QyWDBrvALt>I6J#113yTib;Q{LELdh7@Jucb=Vg zO>?Jv>5(3*y!L!er|y-KJ;IQizA*+0Gs|lZR7zh(kY@{eHhIHTm8?Wuq5(ZaN&UH9 z5b(m$9NmI$%IP$$oVw~IWw|3G<^$bxhVY7FLIB^6+HJxolZEhAL)=LyYsSVRq&35G zY-CkC<(X`ZY@pKz^TqEt>u?JIs%WSvp1eKm?1VPvglG~T0kIEHAIgBI204Z5XRw3w zO6|bi&B~=wy7aZoVUp4|JB!OJ@E*4E50x^(_Kta`Nytmxw^=g8j>Zh#uC#xs2yk?Q zyTb@cdf{E&Q9kT?%H};L>-9`J}_Eda*2@gBsH>10~>3llj%(TXB$bM zFFq`fs|ja|>m8{RSuo|@aQ#S7TJi|%3s@ouW7o7NWrjtOMtZptq4 zc)BcFB1%nyEU%fxP12oJw~=L^OS;$Ju^2ff3#6|sbZ&lLxf5Zm=@lkzxka1cwgkt| z>no+@_~{Na!UD6y(04E3?$}VU#xLzZV2pMflP>|CMe&qZl4Vz@T|XxNd}pNpO|s42 z#gtcIWH!M(u^|AZ%;F|F>8AFU!6^e3a&2*{e~6wWiAAnbv?wj&{ zsoS<%6w=zyFh5t?Pkk}A8y#>G&jEg*VcjW~bd7E-FnYOrfzx6wHvf7{AbhtfiEtqh z7?j!{y=TO5wqi^#pIU zL*8h?p{r!{_g<`)5R2_c8@5PKY7D7-!QH<6XiA41LR0h7y&dsC55|NxpSlZ{UHEB@t3>2+u4{_Iq@@kfggDF zihBf7r*v#AX&UiFsTIZ`RvGtfVSLVWDa>jtK}ce<e`D0Ao@-}t0f1Sj zyJB~;`2JQpzrkPayN}2$fML^#ilLta6P`LLx@Ogdmh1jXZfmf;M+rhJxvrnf9kzS` zFncJ-)PsZiz~J(#9x_I__KK0SC7-L!$n5N9U3-er(u!N6J$5p5Q+y!FVOqvM%D@Ba zX7St!avJxQ=WM!ebAGYHm?klD3pIW1&t(PS2-mpzJNnJ^dUL1 zK_qMY>s_kJpa-300M44);^%^XTk_(47T$bgOig{|$JM;dXsJ8Elq;<}5#wVyQrja+ zq$9An=mGx;k%%pWKwmBgGdHD#*s34h30|xUc8jaMO)VadxZLT=gt;s>_4?rpGOU6? zfUSuDyBYYXC!~VQ=<|n+Rsm zLX#r=BgbG(@O9Y>z6Bt?kEQf4>5{9rI7Elf)MBO#p%+3JudM`Kj3s{yOAEIi?y~>1 zIvMth$k(+HVG7(&UV3Yy$o@T3)6~8&;|$H)@$T5)9`z8D$KtP8Ux)WhSJkM0ynL3m z40FJWZX!1GZWq5RV<??c>qm@lP=_w7>3&3b@rk6t&%}Qib!&ttkSTU>%4WC z(hV_L-ZHUQjl8sK+v3(yP*m;u_tZ$3CzKlhJiU&}zzjL8HxTb|DMH@5Sjt{)ZR^8l z#OBMaUn0S{zf48zX+`ez7>zhVeWdFm-&=FV=^TF5kL`K$2+sl5u$y0)CJHIRnAhGVEte^Aw+|mEg#tl1!{whV@5~<5p_RjY_pZwmY3ukwSH$zkY7Ct_81!aC_j3Uo2U!{eniz-DchWOi$b09hAR#Y0C zqMo`EB{aP8r68!(sE9qFCVG!S+{A-yS=IwUha^^5(5=|bx;@x=Me4A$RUhy1Bv!J{ zb@HwJIYg!b7HmX?R|+k2;TT~ju*OcF$2P5zL%`rza%8h%F~`crhLPXTe*U4LOQhXlWbuJ6 z^+2Mc4k^V&Z#)6z<}YUyWFF8Bd>R?MdRCY#P=N<t}!y9;N@fF zUpJByhCJt&jh8kFCsvo^AK*TqN0Fu4zLRL2T)+dd<)@>8%UN zE(ETy^*uj3{k4M_@1tUcnz?A_qg^Kw52H{mv2&{CfPnm#>nLhwZ$Or=Fm)uo;=dR~ zO2cspp|)sf_@3Udmn#nN1)Om?cHZEI%&UtlN_ZdKLr$z5{6kzrlso^0egNX|)~; zVM+TW;r!s`jW0~j{I&w`m}#c&B~53P{KNb$JSI-5KM|7Wm@EoOJNbZXcs|}5g`o-~ z^4|rZ50&=6g-DpZKxM*L>09C5mSLvg2O%4$sOG;bo-5$Wk~<}C*If+9u-D0PGqNr z)(3>(b<7ks+J>dH$g@B515E0Q+MN9k$Smj$W3AhUH*3DI53jhqhSc<1I?5?fHQaNy z+|S;4*E(*0Bj5NMz9OB3^2~m+o-et(vN(AzWVQq z$niW&c{mO>L&Tcz!*%sr#6PypWgK+L$5sSf*Alh(_Uy_^?3Q;9?}#k7+V##m#qxY3 zcUD9f7@4H;`-(wh_5g2_%#%K;U(J!RxsEBE6QkS{`(B-@9PQuZyEUc>np=y8Na5X9 zfm`xe8&)#}xBrHBxoi6Y)6jb`Ni_)yI!H--DCTB3>e?x@o`3bAtouB#tEPUs`U|C* zy(~Q`&f>Mc9R_&FpT)8_bGl~1fEjYu=1fiWut?Re9h~;K^a+||UT$I6tmV`h8mpSZwWZJlXV0Q)Rmq7Vh9`Br3uibl2^TB}sgIL#DME=g@|7p4i7%Cgswf22aM^mn z1HCDFnkE;3L5v-m9iqAZIO3C+q(u6~azv`oLW`RnV*ry?+aI;hYD>!JHXzjI@?cU(Ewu9(-CFOTxClD#zvN&B)dTq)kjl*BSIOYC7>6cAfw%6pqM zD;sOhKmo&YEqy`N81*jI%sR&aw)o|0U8Tq&dQ+*_&*gx8ooj*EVJnIdL5^y~=a&RL-{0Goh%(f3V*$zNm( zB}7K{irqZEq{4uI%68^V<{y*UH|1+FRMrcX7$DE35{)I^OqVa>b z(60ehtIxhzCLV6uQyAW`ebVWI3#w*!if??i%8xCu@-B~*qEn~SL z)&6_~Y>sEjyz+bN#fqkETikLr^kzzLsljj8U5L#}ft*M^hrO$QE1%NCyOUc4YK}_Y zxj}1~X{;WhX{pz|bDO#^4P4kW6sn(ydXGAuVtbE%xEl>e!c5D-;AUxq^n+*V6A)=# zEvk;TqV>zaSDTKAMZW5Ozq;BD0xr8{LK5$FJ}4PKut!x~a5Q(OjW$|QeI`1hX%OGu zVbNx1YXIQh>^sxnuf6Pt0$I`zk?Rm_ikuT(EuTy>nZZ$fMHsZR68f;tT(E1B#~r_? z_|1G-#LZ@NA}uC|0IEs9xkO;Q#MP`k@3Px9OtnGo&m@9a8Wgx#S{qtl?Z`V;*$8E` zmEz2da_)0;d6n-n%$66?Z%PaHfcBy1PL@%)PnR679SMgHdpvf1+5;Wwu;&$#@Q_Od zXy8UAWn|<<;r2$a{8Nx!Y5*X_=Xig@_?G-PdIfFQW<@d0SK_Six>W98pLO`S2knAV zzM|7Lb{sv(1#G`TxFn2n2qNB9L$LA;^=fM7@jpy5Eez$KbogDh5UK6D3ua zD_L)JehpUU?wqHpC;dF-q|1M?x~VGyT~t7s`jJspOlGByWy0)i5HkYq`6&GxluP-y zcR6eplQ_1nx>9*h^rN*u8d+9|OTn$V#1bJ51MlWQPS7-|x?C_b>;aJ=o(+M48p71!*{;~lt;ZhVQj-1$^SNfsdG z;(WEgt@**5T-_+C22qEaqHo1nKm^4mRnHe9S_sknJ@=2#DvWHTSzw0^Au_C+{$jbY zcv!c&EqPtVDH!#dt-I*pd04_D*(OPDc2bu@7qbSGV1=l%-B3y6m{3;SABCxbEK=)@rsnc~>nESge`bTb86dwt!j!2}<9bhp zX&s&pA3?+axSvIB@KAKIiTjR3LGRi^psFi`?X}9lyFr*Unsa3=9v99O(`ixYaT&0%bXyzdW8 zOrc&JS$(IH1)fPJ`nJQo((fT#&bw43`Kr`)JEj>PU4zj_KRq2tExAj>-4 zm(GV;(rjHUw5;j3gxi4<(CWvJ6ZCxDBgeb4orkgmuA3iBj{uI@2YwO}0ecz3>9O@A zhXJ-+rJQ?Pg=&MKJULDkMX_2zrrge=?TN28JsQl94i+-U(4T0oQ(baFYLL*1+v5=N z>h189N$z`HOM3PTsH`+LA{LpNF8T$rg&WsjeSTwLuJc?N;?>x{#1wp3Qz^qVTCzuGxM0A6>rxU_;b2t_3=UuIqqLYi+-N#+?d!s@}{!0>A zPZ_|ua$NpxcMfY?|I_6CS`OtMCBiIUq2_wa>eJ2uDdxCkw_Q*^qy9AS(8|M!K=^c2 z?D}x=#?DSJ-)$=@?a-#=>H#N{$~*dM$(kHNFMPc!yn|01JiFv~vw=zM+P=ERr3?0k zsJ&jbf$IAEqY*L^MW?n@f!ROC0r6{2Si`AD&>dK{rzL4tbKP%TH9aC&?^c5Y6=1pk zL$<1Gky=6{m{n=+pdF6!IPhyRp)!%p)qmv#c2{kU_NM+6**w1UZ^bvm!q%LDz%c{X zYNrKSL1l%fe1&4v(Z|v@a~gk z!Fr1>y((Ri^0fRoCue39K52RsnS0Atu*OxEBt7xAa${|)kH~*C(=hKR6MZEbhWx$5 zEw4!RP8MG3qof9&?9}@RHbfqKx=_3em=`n*d^1%KNvO+~M~^Ry?mW|~Sh57lfC5)@ z4t6GYpPi+7TkH=lp{99Gw#;{sk}a*jO?J%0kFNw4bI%zdylFSTv5WN-gu5pmyffNi zQx)LPbp?MvBR`OU(;)|%T!&XmO?^nnNU-I}H=kF>Qya1t{}G{=Ci!tIl&HZQ z88!nZy}J)CGIUlK#`kta?D&*AK znfm+ll9y8#G;(g6UB$n~6N*_sTsQ*_%v0hD(UyFRe&JEm+{?QU*uc}jd=x+BaJ4Fm z)``utr$I-G#}WD&H+HI#%Q`xKd&Ek@&MK8Hiw+zo7fUPF8qr@VRMs`XeecESCx3m$ zC2_Uu+`(8DnBU7@X~x|F8)Q0hyhQIZ_0f_zWos7KDV%1pg+WY+H{;^={^nyvin7>d z9IiTzp{BA{In(dwFe-hSup5~iqZW-FGVFaU9RmFt!W-c{;p?7_f6XpFv#vGO;kNp0 z0=z(CPo<}2DaWAxc;1Ud6nWytwGW zjh*^c`7qBuVNB108)+8KjZDvSlx>=*4=!D;b0iqs)(o;x>+8%MWAbRW88=>=~e#?5#ai7iGb+{*ng!O+sh(CO_us2yP}StSV0~FvB&A-bG-&# zjpr(P`|a|V{3&x|Un50Ua_y25G&S-Cg25Huw-Y{k278yej1J$)j{ayfrJl*|>Sxj8 zVxVmF6zxrJlge5bwa^oT{KVA%V|swVXL@9eVLl2i^bY1Z`Xg;0Amval{RkLxC_|`& zDD3SL=$<@TiuEZy@`x@QNkRA2^rwxJu;Brc)S$ddIqtRfz55LzzU%L3y31INlKQk2 z_B|`B7aEc}{ACq*B)J6iv+(rA&CP9uXxtR5!R$ASu-Wxk%MH4|!RiU;&jvv#?mV(OGU@bOck zU0LXlxbS?(K3TE@{2n!q4I~yDF{)ZhkH=dBo+-&7W}(#5!NF zee%38d{bj*I-DJJ7O|byg<1P3K5Z{zojZo+ePNehPr9lgJ5+Wy`o@#F?3LEvj{(Si zB454q;bVHyC`}yyy$i2*kJ0|q;U&01QJx;Sb8J;(u2;!TH(zDaowtrt%Mm5IY zi3Dhbd|RIjSH z>m3&-cYaGm-U826NCFxkNXT=nW*BmV^Av#mW?5m-dHM}%X<8T_YuC6*`(x@Qx{7&E zESR(T8l*_Yt-#Um5z~Y=5&kCJ@`XrkNTN8^5Ljj;omI6c%5alP7NdVCEAcW0Z7=Tp z?(N;IbpmTORCT0SmB?SW-BMnDB$NMP#fP}6U~>577&Sbid3I^ktEAJ5FUlm^={$L% zIfp}I^_lrSO4GHtsLCYu59Gp2m-1)GjeKb9C^EcXjrvNTeYe*PbBMe|9#YtbMA)A+BMM!x3#Xl zH|>J|*>?BVM3Z^f6inwc;^#c?XZ5?0hueT)#s5s0zFhmygsFS>ZE0GZo$OCs5z@Y6 ziSQ(+`5bF-4t|UQH}nj60N$P^iTN2J^wSx#_r$EB`Q~4KAj{ZrW&;1pn6701Ul`M; zOS_sq6_s z9xv&l-hH*mvo`@#Z8KRudXwL3>Nq!@xpKplvX|w=lt9ag1N^f$GWkNEyz(s2?ho*x z6Rs7&CfTrQLXd0zS_R&4H?cob@a=2wbqfuz5EHDp#X4xbER-njDebpme7x=1QM6R^ z!_0l}cmEKFqin3`z>K@*)Q_vot4{}m=Js^mYyBU+_f?hAP7(@Y4j{h{u{xPfa*SS6 z*;@AbH@am!+;l~=c*L=eWZQC^2QR5NxxnIf3F$M^P`+jUx!B=YRtqrm(@Lyt&~w7) zZ8f+`nmC{%bV|Keuh>?4*CLVF#>L8Qo`bZBYg9wde9l@po|)VPx-fXAe;q0G1S$+$ zkET4v&}#=Y0=g(>AVmpt@6bjS9qHy;)f!>Tdm)9b;heb-{EvJ2PRKP8*(dvZ9a+K5 z37@M{iAiV%7pb8?sPo@3xbvyY2)61VrNM1?EfGBZm)8z. -If your docker installation requires the docker daemon to run as root (which is by default), you will need to prefix the command above with `sudo`. However, it is sometimes recommended running docker (and therefore its containers) as a non-root user for security reasons. For more information about how to do this, refer to this [article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user). +If your Docker installation requires the Docker daemon to run as root (which is the default), you will need to prefix the above command with `sudo`. However, it is sometimes recommended to run Docker (and therefore its containers) as a non-root user for security reasons. For more information on how to do this, see this [article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).

\ No newline at end of file diff --git a/src/installation/windows.md b/src/installation/windows.md index cca3677..a959422 100644 --- a/src/installation/windows.md +++ b/src/installation/windows.md @@ -24,7 +24,7 @@ Once your Windows machine has the above installed, open the **Command Prompt** b choco -v ``` -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FAqRNiSe3JRMH48RnpU4M%252Fimage.png%3Falt%3Dmedia%26token%3Dd4bf4d87-59cd-4e49-b1d2-73b0f7343e79&width=768&dpr=4&quality=100&sign=1819d0c1&sv=1) + Now you need to install the following components: `cmake`, `make`, `mingw` by: @@ -32,27 +32,34 @@ Now you need to install the following components: `cmake`, `make`, `mingw` by: choco install cmake make mingw ``` -**Important note about Anti-Virus:** During the compiler detection phase of MinGW, some temporary executable files are generated to test the compiler capabilities. It's been reported that some anti-virus programs detect these files as possibly infected with the `Win64/Kryptic.CIS` Trojan horse (or a variant of it). Although these are false positives, we have no control over the 100+ vendors of security products for Windows and their respective detection algorithms and we understand that this may make your experience with Windows builds uncomfortable. To work around this, you can either set exclusions for your antivirus software specifically for the`build\bin\mdbx\CMakeFiles` subfolder of the cloned repo, or you can run Erigon using the other two options below. +
+ +**Important note about Anti-Virus:** + +During the compiler detection phase of **MinGW**, some temporary executable files are generated to test the compiler capabilities. It's been reported that some anti-virus programs detect these files as possibly infected with the `Win64/Kryptic.CIS` Trojan horse (or a variant of it). Although these are false positives, we have no control over the 100+ vendors of security products for Windows and their respective detection algorithms and we understand that this may make your experience with Windows builds uncomfortable. To work around this, you can either set exclusions for your antivirus software specifically for the`build\bin\mdbx\CMakeFiles` subfolder of the cloned repo, or you can run Erigon using the other two options below. + +
Make sure that the Windows System Path variable is set correctly. Use the search bar on your computer to search for “**Edit the system environment variable**”. -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FuIzFzKRHIJea46qAGYyK%252Fimage.png%3Falt%3Dmedia%26token%3D6941fac4-f496-4c99-a8f2-06e28a276132&width=768&dpr=4&quality=100&sign=6724aff&sv=1) + Click the “**Environment Variables...**” button. -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FFJQDBBaCqwxlu74Rj7Gk%252Fimage.png%3Falt%3Dmedia%26token%3D721c97df-5f99-4057-88de-6d86f1ccc827&width=768&dpr=4&quality=100&sign=358f342b&sv=1) + Look down at the "**System variables**" box and double click on "**Path**" to add a new path. -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252F8J83HtpBXEbK8JlCaQ57%252Fimage.png%3Falt%3Dmedia%26token%3Dd1914858-11e6-43cd-bd78-51825a4c8e62&width=768&dpr=4&quality=100&sign=a87846e9&sv=1) + -Then click on the "**New**" button and paste the path here: +Then click on the "**New**" button and paste the following path: ```bash C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin ``` -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FcxwhuppIN2sOfYg3HUcT%252Fpath2.png%3Falt%3Dmedia%26token%3D090c5597-2359-4bba-8f0b-009d8c82a92d&width=768&dpr=4&quality=100&sign=91f964&sv=1) + + ### Clone the Erigon repository @@ -75,17 +82,17 @@ To compile Erigon there are two alternative methods: This is the fastest way which normally works for everyone. Open the File Explorer and go to the Erigon folder, then right click the `wmake` file and choose "**Run with PowerShell**". -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FfcOUUMOW0CBtqd7WxEHM%252FImmagine%25202023-09-25%2520162444.png%3Falt%3Dmedia%26token%3D7875e451-f979-424f-9e64-a4ab4ffa0afc&width=768&dpr=4&quality=100&sign=c7b8d74e&sv=1) + -PowerShell will compile Erigon and all of its modules. All binaries are placed in the `.\build\bin\` subfolder. +PowerShell will compile Erigon and all of its modules. All binaries will be placed in the `.\build\bin\` subfolder. -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FK58q89hk9IXqScpJzhkG%252Fimage.png%3Falt%3Dmedia%26token%3D29a9e074-789a-4000-b581-094e212e4660&width=768&dpr=4&quality=100&sign=165ad893&sv=1) + #### Using the PowerShell CLI In the search bar on your computer, search for “**Windows PowerShell**” and open it. -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252FEmMVQg8OI9d0Wm0wxzrG%252Fimage.png%3Falt%3Dmedia%26token%3D822abe0e-3ecb-4e29-8a98-ae4306cf37f8&width=768&dpr=4&quality=100&sign=20a0e02f&sv=1) + Change the working directory to "**erigon**" @@ -93,9 +100,10 @@ Change the working directory to "**erigon**" cd erigon ``` -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252F3lMY5KBR6nnYpOOL0XtN%252Fimage.png%3Falt%3Dmedia%26token%3D51c370f0-1582-4062-b84e-7deecfce5319&width=768&dpr=4&quality=100&sign=38e16017&sv=1) + -Before proceeding make sure that the [Set-Execution Policy](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.3) PowerShell execution running policies are correct for your Windows account. +Before proceeding make sure that the [Set-Execution Policy] +(https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.3) - PowerShell execution running policies are correct for your Windows account. Now you can compile Erigon and/or any of its component: @@ -109,7 +117,7 @@ For example, to build the Erigon executable write: .\wmake.ps1 erigon ``` -![](https://erigon.gitbook.io/~gitbook/image?url=https%3A%2F%2F2414554083-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Feeqc6D5KqkgOsOW7j4k6%252Fuploads%252Fwaw42ktWXUvjGGlpXMES%252Fimage.png%3Falt%3Dmedia%26token%3Dc09b3df7-521a-4dd6-ac69-f5592f544cb8&width=768&dpr=4&quality=100&sign=21fcbbb5&sv=1) + You can use the same command to build other binaries as RPCDaemon, TxPool, Sentry and Downloader. @@ -129,7 +137,7 @@ WSL Version 2 is the only version supported. -Under this option you can build Erigon as you would on a regular Linux distribution (see detailed instructions [here](/installation/linux.md). +Under this option you can build Erigon as you would on a regular Linux distribution (see detailed instructions [here](/installation/linux.md)). You can also point your data to any of the mounted Windows partitions ( e.g. `/mnt/c/[...]`, `/mnt/d/[...]` etc..) but be aware that performance will be affected: this is due to the fact that these mount points use `DrvFS`, which is a network file system, and additionally MDBX locks the db for exclusive access, meaning that only one process at a time can access the data. @@ -137,7 +145,7 @@ You can also point your data to any of the mounted Windows partitions ( e.g. `/m **Warning** -the remote db RPCdaemon is an experimental feature and is **not recommended**, it is extremely slow. It is highly preferable to use the embedded RPCdaemon. +The remote db RPCdaemon is an experimental feature and is **not recommended**, it is extremely slow. It is highly preferable to use the embedded RPCdaemon. diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index 86e1045..27f1ede 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -1,3 +1,3 @@ # Gnosis -work in progress \ No newline at end of file + \ No newline at end of file diff --git a/src/nodes/polygon.md b/src/nodes/polygon.md index e1c91d0..a4f83b0 100644 --- a/src/nodes/polygon.md +++ b/src/nodes/polygon.md @@ -1,3 +1,3 @@ # Polygon -work in progress \ No newline at end of file + \ No newline at end of file diff --git a/src/tools.md b/src/tools.md index 40986fa..e9924b0 100644 --- a/src/tools.md +++ b/src/tools.md @@ -1 +1,3 @@ # Tools + + \ No newline at end of file diff --git a/src/welcome.md b/src/welcome.md index ae42c9b..1b9bc51 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -14,7 +14,12 @@ **WARNING** + + *The Erigon 3 book is under construction: you may find broken links, empty pages and inexact informations.* + +*For instructions regarding Erigon 2 please refer to * + Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. From 46c6d21780609e88dd15b04e117529d316d3a037 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 11:19:49 +0100 Subject: [PATCH 06/89] added staking to minimal node --- src/basic/node.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/basic/node.md b/src/basic/node.md index f7353c0..ae8a0da 100644 --- a/src/basic/node.md +++ b/src/basic/node.md @@ -2,7 +2,7 @@ Erigon 3 introduces a flexible approach to node configuration, offering three distinct types to suit various user needs. Depending on your need, you can choose from three different node types. -If you are looking for more **privacy** during your interaction with EVM, like for example sending transactions with your node, you can use a [minimal node](#minimal-node), which is fast to set up and uses a minimal amount of [disk space](disk-space.md). +If you are looking for more **privacy** during your interaction with EVM, like for example sending transactions with your node, you can use a [minimal node](#minimal-node), which is fast to set up and uses a minimal amount of [disk space](disk-space.md). Minimal node is also suitable for staking. If you want to do extensive **research**, like for example searching for old states of the EVM, or implementing Otterscan, you will need an [archive node](#archive-node). @@ -13,7 +13,7 @@ If you want to run a validator and produce blocks, **staking** is achievable alr |--------------|--------------|-----------|--------------| | Privacy, RPC | **Yes** | **Yes** | **Yes** | | Research | No | No | **Yes** | -| Staking | No | **Yes** | **Yes** | +| Staking | **Yes** | **Yes** | **Yes** | To switch type of node, you must first delete the ```/chaindata``` folder in the chosen ```--datadir``` directory. From b0bcdfedb1354f8655c12dae0f1dfec5c5007047 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 12:07:04 +0100 Subject: [PATCH 07/89] updated Polygon quicknode page --- src/nodes/polygon.md | 58 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/nodes/polygon.md b/src/nodes/polygon.md index a4f83b0..e10c66d 100644 --- a/src/nodes/polygon.md +++ b/src/nodes/polygon.md @@ -1,3 +1,59 @@ # Polygon - \ No newline at end of file + +Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. + +Check which [type of node](/basic/node.md) you might want torun and the [disk space](/basic/disk-space.md) needed. + +
+ +**Information** + +**Do not use HDD**: Hard Disk Drives (HDD) are not recommended for running Erigon, as it may cause the node to stay N blocks behind the chain tip and lead to performance issues. + +**Use SSD or NVMe**: Solid State Drives (SSD) or Non-Volatile Memory Express (NVMe) drives are recommended for optimal performance. These storage devices provide faster read/write speeds and can handle the demanding requirements of an Erigon node. +
+ +## Install Erigon​ + +For MacOS and Linux, run the following commands to build from source the latest Erigon version: + +```bash +git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +cd erigon +make erigon +``` + +This should create the binary at ./build/bin/erigon + +
+ +**Information** + +If you are using [Windows](/installation/windows.md) follow the dedicated installation guide or use [Docker](/installation/docker.md). + +
+ +# Start Erigon + +To start a Erigon archive node for **Polygon mainnet** with remote Heimdall: + +```bash +./build/bin/erigon --chain=bor-mainnet --bor.heimdall=https://heimdall-api.polygon.technology/ +``` + +For a **Amoy testnet** archive node with remote Heimdall: + +```bash +./build/bin/erigon --chain=amoy --bor.heimdall=https://heimdall-api-amoy.polygon.technology/. +``` + +## Basic Configuration​ + +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). +- To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) +- To stop the Erigon node you can use the `CTRL+C` command. + +Additional flags can be added to [configure](/advanced/configuring.md) Erigon with several options. From c092d6b85960dca08c1634b5c2e1f4bba5325c47 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:23:30 +0100 Subject: [PATCH 08/89] updated Gnosis Chain quick node --- src/basic-usage.md | 5 +- src/basic/networks.md | 30 ++++++------ src/nodes/ethereum.md | 4 +- src/nodes/gnosis.md | 111 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 128 insertions(+), 22 deletions(-) diff --git a/src/basic-usage.md b/src/basic-usage.md index 36a5807..40d06cd 100644 --- a/src/basic-usage.md +++ b/src/basic-usage.md @@ -21,11 +21,8 @@ The default Consensus Layer utilized is [Caplin](./advanced/caplin.md), the Erig * Based on the [type of node](basic/node.md) you want to run you can add ```--prune.mode=full``` to run a full node or ```--prune.mode=minimal``` to run a minimal node. The default node is archive node. - -* ```--chain=mainnet```, add the flag --chain=goerli for Goerli testnet, --chain=sepolia for Sepolia testnet or --chain=holesky for Holesky testnet. - +* ```--chain=mainnet```, add the flag `--chain=sepolia` for Sepolia testnet or `--chain=holesky` for Holesky testnet. * ```--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool``` to use RPC and e.g. be able to connect your [wallet](basic/wallet.md). - * To increase download speed add ```--torrent.download.rate=512mb``` (default is 16mb) To stop the Erigon node you can use the ```CTRL+C``` command. diff --git a/src/basic/networks.md b/src/basic/networks.md index 5e213bb..2efd57b 100644 --- a/src/basic/networks.md +++ b/src/basic/networks.md @@ -9,32 +9,32 @@ Utilize the flag `--chain=` to synchronize with one of the supported networ # Mainnets -|Chain | Tag| ChainId| -|---- |----|----| -|Ethereum| mainnet| 1| -|Polygon| bor-mainnet| 137| -|Gnosis| gnosis| 100| +|Chain | Tag | ChainId | +|---- | ---- | ---- | +|Ethereum| mainnet | 1 | +|Polygon | bor-mainnet | 137 | +|Gnosis | gnosis | 100 | # Testnets ## Ethereum testnets -|Chain | Tag| ChainId| +|Chain | Tag| ChainId | |----------|-------|-----------| -|Holesky |holesky| 17000 | -|Sepolia | sepolia| 11155111| +|Holesky |holesky| 17000 | +|Sepolia |sepolia| 11155111| ## Polygon testnets -|Chain | Tag| ChainId| -|----------|-------|-----------| -|Polygon Amoy | amoy| 80002| +| Chain | Tag | ChainId | +|---------- |------|---------| +| Polygon Amoy| amoy | 80002 | -## Gnosis Testnets +## Gnosis Chain Testnets -|Chain | Tag| ChainId| -|----------|-------|-----------| -|Chiado | chiado| 10200| +|Chain | Tag | ChainId| +|-------|------- |--------| +|Chiado | chiado | 10200 | diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index 98ed03c..3219462 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -99,7 +99,9 @@ The basic command to run Erigon with Caplin on Ethereum mainnet is: - If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. - Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. -- Default chain is `--chain=mainnet` for Ethereum mainnnet. Add the flag `--chain=holesky` for Holesky testnet, `--chain=sepolia` for Sepolia testnet. Goerli chain is no longer supported. +- Default chain is `--chain=mainnet` for Ethereum mainnet: + - add the flag `--chain=holesky` for Holesky testnet; + - `--chain=sepolia` for Sepolia testnet. - `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). - To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) - To stop the Erigon node you can use the `CTRL+C` command. diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index 27f1ede..4d63c88 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -1,3 +1,110 @@ -# Gnosis +# Gnosis Chain - \ No newline at end of file +Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. + +Check which [type of node](/basic/node.md) you might want torun and the [disk space](/basic/disk-space.md) needed. + +
+ +**Information** + +**Do not use HDD**: Hard Disk Drives (HDD) are not recommended for running Erigon, as it may cause the node to stay N blocks behind the chain tip and lead to performance issues. + +**Use SSD or NVMe**: Solid State Drives (SSD) or Non-Volatile Memory Express (NVMe) drives are recommended for optimal performance. These storage devices provide faster read/write speeds and can handle the demanding requirements of an Erigon node. +
+ +## Install Erigon​ + +For MacOS and Linux, run the following commands to build from source the latest Erigon version: + +```bash +git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +cd erigon +make erigon +``` + +This should create the binary at ./build/bin/erigon + +
+ +**Information** + +If you are using [Windows](/installation/windows.md) follow the dedicated installation guide or use [Docker](/installation/docker.md). + +
+ + +## Start Erigon​ + +If you want to be able to send transactions with your wallet and access the Gnosis Chain network directly, contribute to the network decentralization it is advised to run Erigon with [Caplin](/advanced/caplin.md), the internal Consensus Layer (CL). + +Alternatively you can also run Prysm, Lighthouse or any other Consensus Layer client alongside with Erigon by adding the `--externalcl` flag. This will also allow you to access the Ethereum blockchain directly and give you the possibility to stake your ETH and do block production. + +### Erigon with Caplin + +The basic command to run Erigon with Caplin on Gnosis Chain is: + +```bash +./build/bin/erigon --chain=gnosis +``` + +### Erigon with Lighthouse + +1. Start Erigon: + + ```bash + ./build/bin/erigon --externalcl + ``` + +2. Install Lighthouse, another popular client that can be used with Erigon for block building. Follow the instructions until the chapter **Build Lighthouse**, skipping the `make` instruction.: + +3. Now compile Lighthouse in order to run Gnosis Chain using the feature flags : + +```bash +cd lighthouse +env FEATURES=gnosis make +``` + +4. Because Erigon needs a target head in order to sync, Lighthouse must be synced before Erigon may synchronize. The fastest way to synchronize Lighthouse is to use one of the many public checkpoint synchronization endpoints: + - https://checkpoint.gnosischain.com for Gnosis Chain + - https://checkpoint.chiadochain.net for Chiado Testnet + + +5. To communicate with Erigon, the **execution endpoint** must be specified as :8551, where is either `//localhost` or the IP address of the device running Erigon. + +6. Lighthouse must point to the **[JWT secret](/advanced/jwt.md)** automatically created by Erigon in the datadir director. In the following example the default data directory is used. + +Below is an example of Lighthouse running **Gnosis Chain**: + + ```bash + lighthouse \ + --network gnosis beacon_node \ + --datadir=data \ + --http \ + --execution-endpoint http://localhost:8551 \ + --execution-jwt /home/admin/.local/share/erigon/jwt.hex \ + --checkpoint-sync-url "https://checkpoint.gnosischain.com" + ``` + +And an example of Lighthouse running Chiado testnet: + + ```bash + lighthouse \ + --network chiado \ + --datadir=data \ + --http \ + --execution-endpoint http://localhost:8551 \ + --execution-jwt /home/admin/.local/share/erigon/jwt.hex \ + --checkpoint-sync-url "https://checkpoint.chiadochain.net" + ``` + +## Basic Configuration​ + +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- Add the flag `--chain=chiado` for Chiado testnet. +- `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). +- To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) +- To stop the Erigon node you can use the `CTRL+C` command. + +Additional flags can be added to [configure](/advanced/configuring.md) Erigon with several options. \ No newline at end of file From 87cdf9374f12e32b3273ababb2723a4907fd73e6 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:27:46 +0100 Subject: [PATCH 09/89] Gnosis quicknode formatting error correction --- src/nodes/gnosis.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index 4d63c88..a7e1640 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -60,14 +60,14 @@ The basic command to run Erigon with Caplin on Gnosis Chain is: 3. Now compile Lighthouse in order to run Gnosis Chain using the feature flags : -```bash -cd lighthouse -env FEATURES=gnosis make -``` + ```bash + cd lighthouse + env FEATURES=gnosis make + ``` 4. Because Erigon needs a target head in order to sync, Lighthouse must be synced before Erigon may synchronize. The fastest way to synchronize Lighthouse is to use one of the many public checkpoint synchronization endpoints: - - https://checkpoint.gnosischain.com for Gnosis Chain - - https://checkpoint.chiadochain.net for Chiado Testnet + - `https://checkpoint.gnosischain.com` for Gnosis Chain + - `https://checkpoint.chiadochain.net` for Chiado Testnet 5. To communicate with Erigon, the **execution endpoint** must be specified as :8551, where is either `//localhost` or the IP address of the device running Erigon. From 704ff94f4fbdf5cb8f38d3f4dd45d3386045901e Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:46:08 +0100 Subject: [PATCH 10/89] updated disclaimer on welcome page --- src/welcome.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/welcome.md b/src/welcome.md index 1b9bc51..98aa1c1 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -10,23 +10,22 @@ d####P -
- -**WARNING** +> +> The Erigon 3 book is under construction: you may find broken links, empty pages and inexact information. +> For instructions regarding Erigon 2 please refer to - -*The Erigon 3 book is under construction: you may find broken links, empty pages and inexact informations.* -*For instructions regarding Erigon 2 please refer to * -
+> **Erigon 3 is still in alpha phase and it is not recommended to be used in production environments.** +The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. For further information on liability, please refer to the applicable software license agreement.". Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity.
**Information** + If you wanto to test Erigon in minutes, go straight to the [quick nodes](quick_nodes.md) section.
From 4acd8351f37292ae86c53c915ac581f2208c6530 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:50:28 +0100 Subject: [PATCH 11/89] updated disclaimer on welcome page --- src/welcome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome.md b/src/welcome.md index 98aa1c1..4ab6f4b 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -18,7 +18,7 @@ > **Erigon 3 is still in alpha phase and it is not recommended to be used in production environments.** -The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. For further information on liability, please refer to the applicable software license agreement.". +The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. From b22816585e2e35e7646b8187465874ef71653db9 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:51:45 +0100 Subject: [PATCH 12/89] updated disclaimer on welcome page --- src/welcome.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/welcome.md b/src/welcome.md index 4ab6f4b..bdf9d00 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -11,14 +11,10 @@ > -> The Erigon 3 book is under construction: you may find broken links, empty pages and inexact information. +> **NOTE**:The Erigon 3 book is under construction: you may find broken links, empty pages and inexact information. > For instructions regarding Erigon 2 please refer to - - - -> **Erigon 3 is still in alpha phase and it is not recommended to be used in production environments.** -The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. +> **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. From ee56b8a237e607dae76cebaa3c2edc6e6881f910 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:55:38 +0100 Subject: [PATCH 13/89] typo correction --- src/welcome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome.md b/src/welcome.md index bdf9d00..3b77654 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -11,7 +11,7 @@ > -> **NOTE**:The Erigon 3 book is under construction: you may find broken links, empty pages and inexact information. +> **NOTE**:The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. > For instructions regarding Erigon 2 please refer to > **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. From 66ee79382bb9219d079cbaded13f7bb4a8c7c65c Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:56:39 +0100 Subject: [PATCH 14/89] typo correction on welcome page --- src/welcome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome.md b/src/welcome.md index 3b77654..f6c4a9b 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -11,7 +11,7 @@ > -> **NOTE**:The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. +> **NOTE**: The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. > For instructions regarding Erigon 2 please refer to > **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. From 8225c3a2bf66a72064fb9bdf914da6cd4e05405b Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 14:57:12 +0100 Subject: [PATCH 15/89] typo correction on welcome page --- src/welcome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome.md b/src/welcome.md index f6c4a9b..60740c6 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -12,7 +12,7 @@ > > **NOTE**: The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. -> For instructions regarding Erigon 2 please refer to +> For instructions regarding Erigon 2 please refer to . > **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. From d85fd00df8de018bfcadf0be4efcf9c7692277b5 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 15:12:15 +0100 Subject: [PATCH 16/89] updates and corrections --- src/advanced/block-prod.md | 39 ++------------------------ src/getting-started/hw-requirements.md | 2 +- src/getting-started/sw-requirements.md | 2 +- src/welcome.md | 19 ++++++------- 4 files changed, 13 insertions(+), 49 deletions(-) diff --git a/src/advanced/block-prod.md b/src/advanced/block-prod.md index 0ce0390..ad72370 100644 --- a/src/advanced/block-prod.md +++ b/src/advanced/block-prod.md @@ -15,45 +15,10 @@ or --mine --miner.miner.sigkey=... ``` -Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget` +Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget`. JSON-RPC supports methods: `eth_coinbase` , `eth_hashrate`, `eth_mining`, `eth_getWork`, `eth_submitWork`, `eth_submitHashrate` -JSON-RPC supports websocket methods: `newPendingTransaction` - -# Using Caplin as validator - -
- -**Information** - -Only Lighthouse, Lodestar and Teku are supported as Validator Clients. - -
- -To enable block production and Caplin's beacon API when using Caplin as the Consensus Layer (CL) engine, the flag `--beacon.api` must be added. For example: - -```bash ---beacon.api=beacon,builder,config,debug,node,validator,lighthouse -``` -
- -**Information** - -Enabling the Beacon API will lead to a 6 GB higher RAM usage. -
- - -For example, if you want to run Erigon and Caplin as a validator here is an example of configuration: - -```bash -./build/bin/erigon --chain=holesky --prune.mode=full --beacon.api=beacon,builder,config,debug,node,validator,lighthouse -``` - -While here the command for Lighthouse* would look like: - -```bash -lighthouse validator_client --network holesky --beacon-nodes http://localhost:5555 -``` +JSON-RPC supports websocket methods: `newPendingTransaction`. **For adding validators and specific command syntax, refer to the documentation of your chosen Validator Client.* \ No newline at end of file diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 28b796b..4448a2a 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -23,7 +23,7 @@ Please refer to [disk space required](/basic/disk-space.md) for details. To ensu ## RAM Requirements -* **Minimum**: 32GB +* **Minimum**: 64GB ## Kernel Requirements diff --git a/src/getting-started/sw-requirements.md b/src/getting-started/sw-requirements.md index 1b1185a..b3b936f 100644 --- a/src/getting-started/sw-requirements.md +++ b/src/getting-started/sw-requirements.md @@ -23,7 +23,7 @@ Git is a tool that helps download and manage the Erigon source code. To install ### Go Programming Language -Erigon utilizes Go (also known as Golang) version 1.22 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the `/usr/local/go` folder (you may need to use `sudo`) and re-extract the new version in its place. +Erigon utilizes Go (also known as Golang) version 1.23 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the `/usr/local/go` folder (you may need to use `sudo`) and re-extract the new version in its place. To install the latest Go version, visit the official documentation at . diff --git a/src/welcome.md b/src/welcome.md index 60740c6..9d3667a 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -1,4 +1,11 @@ # Welcome to Erigon 3! + +> +> **NOTE**: The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. +> For instructions regarding Erigon 2 please refer to . + + + ########b oo d####b. ## '## @@ -7,14 +14,11 @@ ## ## ## ##. .## ##. .## ## ## .## ########P dP dP '####P## '#####P' dP dP d#####P .## - d####P + d####P +> **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. -> -> **NOTE**: The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. -> For instructions regarding Erigon 2 please refer to . -> **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. @@ -62,8 +66,3 @@ Erigon 3 also introduces changes to the release process, including: * New Docker Image Repository: Erigon images are now available on Dockerhub repository "erigontech/erigon". * Multi-Platform Support: The docker image is built for linux/amd64/v2 and linux/arm64 platforms using Alpine 3.20.2. * Release Workflow Changes: Build flags are now passed to the release workflow, allowing users to view previously missed build information in released binaries. - -# Known Issues - -While Erigon 3 offers many improvements over its predecessor, there are still some known issues and limitations: -- don't `rm -rf` downloader, it will cause re-downloading of files (#10976). From acb12cb6259569295f06ff80611545c1a1dc1244 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 6 Nov 2024 15:29:29 +0100 Subject: [PATCH 17/89] updates and correction --- src/advanced/block-prod.md | 31 +++++++++++++++++++++++++++++-- src/welcome.md | 22 +--------------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/advanced/block-prod.md b/src/advanced/block-prod.md index ad72370..1d2cb7d 100644 --- a/src/advanced/block-prod.md +++ b/src/advanced/block-prod.md @@ -15,10 +15,37 @@ or --mine --miner.miner.sigkey=... ``` -Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget`. +Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget` JSON-RPC supports methods: `eth_coinbase` , `eth_hashrate`, `eth_mining`, `eth_getWork`, `eth_submitWork`, `eth_submitHashrate` -JSON-RPC supports websocket methods: `newPendingTransaction`. +JSON-RPC supports websocket methods: `newPendingTransaction` + +# Using Caplin as validator + +
+ +**Information** + +Only Lighthouse, Lodestar and Teku are supported as Validator Clients. + +
+ +To enable block production and Caplin's beacon API when using Caplin as the Consensus Layer (CL) engine, the flag `--beacon.api` must be added. For example: + +```bash +--beacon.api=beacon,builder,config,debug,node,validator,lighthouse +``` +For example, if you want to run Erigon and Caplin as a validator here is an example of configuration: + +```bash +./build/bin/erigon --chain=holesky --prune.mode=full --beacon.api=beacon,builder,config,debug,node,validator,lighthouse +``` + +While here the command for Lighthouse* would be: + +```bash +lighthouse validator_client --network holesky --beacon-nodes http://localhost:5555 +``` **For adding validators and specific command syntax, refer to the documentation of your chosen Validator Client.* \ No newline at end of file diff --git a/src/welcome.md b/src/welcome.md index 9d3667a..55ea5a7 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -38,27 +38,7 @@ Built with modularity in mind, it also offers separate components such as the JS Erigon 3 is a major update that introduces several significant changes, improvements, and optimizations. Some of the key features and differences include: -**Sync Improvements** - -* **Sync from scratch** doesn't require re-executing **all history**. Instead, it leverages **snapshots** to download the latest state and its history. -* **ExecutionStage** now includes multiple E2 stages, such as ``stage_hash_state``, ``stage_trie``, ``stage_log_index``, ``stage_history_index``, and ``stage_trace_index``, for faster execution. -* **E3 can execute a single historical transaction** without executing its corresponding block, thanks to its **transaction-granularity indexing system**, which differs from a block-granularity approach. -* **E3 doesn't store Logs** (aka Receipts) - it always re-executes historical transactions (but it's cheaper than in E2 - see point above). Known performance issues: #10747 -* **--sync.loop.block.limit** is enabled by default, with a default value of 5,000. To increase sync speed on good hardware, set ``--sync.loop.block.limit=10_000 --batchSize=2g``. - -**Storage and Performance** - -* **datadir/chaindata is small now** - to prevent its growth: we recommend setting ``--batchSize <= 2G``. It's also fine to remove the chaindata directory. -* Symlink or mount the latest state to a fast drive and history to a cheaper drive. - -**Node Configuration** - -- Archive Node is default. For full node and minimal node see [type of node](/basic/node.md). - -**Other Features** - -* **New User Guide**: A dedicated user guide for Erigon 3 provides detailed information on how to set up and configure your node. -* **Higher RAM Requirement**: Erigon 3 requires at least 64GB of RAM. +The main changes from Erigon 2 are listed [here](https://github.com/erigontech/erigon?tab=readme-ov-file#erigon3-changes-from-erigon2). # Release Process From e8a5215d281cbfae941bf396a34424879ce8297e Mon Sep 17 00:00:00 2001 From: bloxster Date: Sun, 10 Nov 2024 15:50:41 +0100 Subject: [PATCH 18/89] updates --- src/basic/networks.md | 4 ++-- src/basic/optimizing-storage.md | 10 +++++----- src/nodes/ethereum.md | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/basic/networks.md b/src/basic/networks.md index 2efd57b..5341d26 100644 --- a/src/basic/networks.md +++ b/src/basic/networks.md @@ -1,7 +1,7 @@ # Supported Networks The default flag is `--chain=mainnet`, which enables Erigon 3 to operate on the Ethereum mainnet. -Utilize the flag `--chain=` to synchronize with one of the supported networks, for example: +Utilize the flag `--chain=` to synchronize with one of the supported networks. For example, to synchronize Holesky, one of the Ethereum testnets, use: ```bash ./build/bin/erigon --chain=holesky @@ -29,7 +29,7 @@ Utilize the flag `--chain=` to synchronize with one of the supported networ | Chain | Tag | ChainId | |---------- |------|---------| -| Polygon Amoy| amoy | 80002 | +| Amoy | amoy | 80002 | ## Gnosis Chain Testnets diff --git a/src/basic/optimizing-storage.md b/src/basic/optimizing-storage.md index 6e7a22a..08530cf 100644 --- a/src/basic/optimizing-storage.md +++ b/src/basic/optimizing-storage.md @@ -1,5 +1,5 @@ # Optimizing Storage -*Using fast disk and cheap disks* +*Using fast disks and cheap disks* For optimal performance, it's recommended to store the datadir on a fast NVMe-RAID disk. However, if this is not feasible, you can store the history on a cheaper disk and still achieve good performance. @@ -24,10 +24,10 @@ On the **slow disk** place `datadir` folder with the following structure: ## Step 2: Speed Up History Access (Optional) -If you need to further improve performance, follow these steps: +If you need to further improve performance: -1. Store the `accessors` folder on the fast disk. This should provide a noticeable speed boost. -2. If the speed is still not satisfactory, move the `idx` folder to the fast disk. -3. If performance is still an issue, consider moving the entire history folder to the fast disk. +- Store the `accessors` folder on the fast disk. This should provide a noticeable speed boost. +- If the speed is still not satisfactory, move the `idx` folder to the fast disk. +- If performance is still an issue, consider moving the entire history folder to the fast disk. By following these steps, you can optimize your Erigon 3 storage setup to achieve a good balance between performance and cost. \ No newline at end of file diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index 3219462..36e46dc 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -36,9 +36,9 @@ If you are using [Windows](/installation/windows.md) follow the dedicated instal ## Start Erigon​ -If you want to be able to send transactions with your wallet and access the Ethereum network directly, contribute to the network decentralization it is advised to run Erigon with [Caplin](/advanced/caplin.md), the internal Consensus Layer (CL). +If you want to be able to send transactions with your wallet and access the Ethereum network directly, contribute to the network decentralization it is advised to run [Erigon with Caplin](#erigon-with-caplin), the internal Consensus Layer (CL). -Alternatively you can also run Prysm, Lighthouse or any other Consensus Layer client alongside with Erigon by adding the `--externalcl` flag. This will also allow you to access the Ethereum blockchain directly and give you the possibility to stake your ETH and do block production. +Alternatively you can also run [Prysm](#erigon-with-prysm-as-the-external-consensus-layer), [Lighthouse](#erigon-with-lighthouse-as-the-external-consensus-layer) or any other Consensus Layer client alongside with Erigon by adding the `--externalcl` flag. This will also allow you to access the Ethereum blockchain directly and give you the possibility to stake your ETH and do block production. ### Erigon with Caplin @@ -70,7 +70,7 @@ The basic command to run Erigon with Caplin on Ethereum mainnet is: If your Prysm is on a different device, add `--authrpc.addr 0.0.0.0` (Engine API listens on localhost by default) as well as `--authrpc.vhosts ` to your Prysm configuration. -### Erigon with Lighthouse +### Erigon with Lighthouse as the external consensus layer 1. Start Erigon: From 2e05c01ec7a48316acd02940769b212c40c5f6df Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 13 Nov 2024 06:56:31 +0100 Subject: [PATCH 19/89] updates --- src/advanced/configuring.md | 76 ++++++++++++++++----------------- src/advanced/consensus_layer.md | 6 +-- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/advanced/configuring.md b/src/advanced/configuring.md index ee36e9e..2a7c40b 100644 --- a/src/advanced/configuring.md +++ b/src/advanced/configuring.md @@ -23,67 +23,67 @@ The Erigon 3 CLI has a wide range of flags that can be used to customize its beh ## Pruning Presets -* `--prune.mode`: Choose a pruning preset: `archive`, `full`, or `minimal` (default: `archive`) +* `--prune.mode`: Choose a pruning preset: `archive`, `full`, or `minimal` (default: `archive`) see also [Type of node](/basic/node.md) * `--prune.distance`: Keep state history for the latest N blocks (default: everything) (default: `0`) -* `--prune.distance.blocks`: Keep block history for the latest N blocks (default: everything) (default: 0) +* `--prune.distance.blocks`: Keep block history for the latest N blocks (default: everything) (default: `0`) ## Performance Optimization -* `--batchSize`: Set the batch size for the execution stage (default: "512M") -* `--bodies.cache`: Limit the cache for block bodies (default: "268435456") -* `--private.api.addr`: Set the internal grpc API address (default: "127.0.0.1:9090") -* `--private.api.ratelimit`: Set the amount of requests the server can handle simultaneously (default: 31872) +* `--batchSize`: Set the batch size for the execution stage (default: `512M`) +* `--bodies.cache`: Limit the cache for block bodies (default: `268435456`) +* `--private.api.addr`: Set the internal grpc API address (default: `127.0.0.1:9090`) +* `--private.api.ratelimit`: Set the amount of requests the server can handle simultaneously (default: `31872`) ## Txpool -* `--txpool.api.addr`: Set the txPool api network address (default: use value of --private.api.addr) -* `--txpool.disable` Experimental external pool and block producer, see ./cmd/txpool/readme.md for more info. Disabling internal txpool and block producer. (default: false) -* `--txpool.pricebump` Price bump percentage to replace an already existing transaction (default: 10) -* `--txpool.pricelimit` Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: 1) +* `--txpool.api.addr`: Set the txPool api network address (default: use value of `--private.api.addr`) +* `--txpool.disable` Experimental external pool and block producer, see `./cmd/txpool/readme.md` for more info. Disabling internal txpool and block producer. (default: `false`) +* `--txpool.pricebump` Price bump percentage to replace an already existing transaction (default: `10`) +* `--txpool.pricelimit` Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: `1`) * `--txpool.locals`: Comma separated accounts to treat as locals (no flush, priority inclusion) -* `--txpool.nolocals`: Disables price exemptions for locally submitted transactions (default: false) -* `--txpool.accountslots`: Set the minimum number of executable transaction slots guaranteed per account (default: 16) -* `--txpool.blobslots`: Set the max allowed total number of blobs (within type-3 txs) per account (default: 48) -* `--txpool.blobpricebump`: Price bump percentage to replace existing (type-3) blob transaction (default: 100) -* `--txpool.totalblobpoollimit`: Set the total limit of number of all blobs in txs within the txpool (default: 480) -* `--txpool.globalslots`: Set the maximum number of executable transaction slots for all accounts (default: 10000) -* `--txpool.globalbasefeeslots`: Set the maximum number of non-executable transactions where only not enough baseFee (default: 30000) -* `--txpool.accountqueue`: Set the maximum number of non-executable transaction slots permitted per account (default: 64) -* `--txpool.globalqueue`: Set the maximum number of non-executable transaction slots for all accounts (default: 30000) -* `--txpool.lifetime`: Set the maximum amount of time non-executable transaction are queued (default: 3h0m0s) +* `--txpool.nolocals`: Disables price exemptions for locally submitted transactions (default: `false`) +* `--txpool.accountslots`: Set the minimum number of executable transaction slots guaranteed per account (default: `16`) +* `--txpool.blobslots`: Set the max allowed total number of blobs (within type-3 txs) per account (default: `48`) +* `--txpool.blobpricebump`: Price bump percentage to replace existing (type-3) blob transaction (default: `100`) +* `--txpool.totalblobpoollimit`: Set the total limit of number of all blobs in txs within the txpool (default: `480`) +* `--txpool.globalslots`: Set the maximum number of executable transaction slots for all accounts (default: `10000`) +* `--txpool.globalbasefeeslots`: Set the maximum number of non-executable transactions where only not enough baseFee (default: `30000`) +* `--txpool.accountqueue`: Set the maximum number of non-executable transaction slots permitted per account (default: `64`) +* `--txpool.globalqueue`: Set the maximum number of non-executable transaction slots for all accounts (default: `30000`) +* `--txpool.lifetime`: Set the maximum amount of time non-executable transaction are queued (default: `3h0m0s`) * `--txpool.trace.senders`: Set the comma-separated list of addresses, whose transactions will traced in transaction pool with debug printing -* `--txpool.commit.every`: Set the how often transactions should be committed to the storage (default: 15s) +* `--txpool.commit.every`: Set the how often transactions should be committed to the storage (default: `15s`) ## Remote Procedure Call (RPC) * `--rpc.accessList`: Specify granular (method-by-method) API allowlist -* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: false) -* `--rpc.batch.concurrency`: Limit the amount of goroutines to process 1 batch request (default: 2) +* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: `false`) +* `--rpc.batch.concurrency`: Limit the amount of goroutines to process 1 batch request (default: `2`) * `--rpc.streaming.disable`: Disable json streaming for some heavy endpoints * `--rpc.accessList`: Specify granular (method-by-method) API allowlist -* `--rpc.gascap`: Set a cap on gas that can be used in eth_call/estimateGas (default: 50000000) -* `--rpc.batch.limit`: Set the maximum number of requests in a batch (default: 100) -* `--rpc.returndata.limit`: Set the maximum number of bytes returned from eth_call or similar invocations (default: 100000) -* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: false) -* `--rpc.maxgetproofrewindblockcount.limit`: Set the max GetProof rewind block count (default: 100000) -* `--rpc.txfeecap`: Set a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 1) +* `--rpc.gascap`: Set a cap on gas that can be used in eth_call/estimateGas (default: `50000000`) +* `--rpc.batch.limit`: Set the maximum number of requests in a batch (default: `100`) +* `--rpc.returndata.limit`: Set the maximum number of bytes returned from eth_call or similar invocations (default: `100000`) +* `--rpc.allow-unprotected-txs`: Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC (default: `false`) +* `--rpc.maxgetproofrewindblockcount.limit`: Set the max GetProof rewind block count (default: `100000`) +* `--rpc.txfeecap`: Set a cap on transaction fee (in ether) that can be sent via the RPC APIs (`0` = no cap) (default: `1`) ## Network and Peers -* `--chain`: Set the name of the network to join (default: "mainnet") -* `--dev.period`: Set the block period to use in developer mode (0 = mine only if transaction pending) (default: 0) -* `--maxpeers`: Set the maximum number of network peers (network disabled if set to 0) (default: 100) -* `--nodiscover`: Disable the peer discovery mechanism (manual peer addition) (default: false) +* `--chain`: Set the name of the network to join (default: `mainnet`) +* `--dev.period`: Set the block period to use in developer mode (0 = mine only if transaction pending) (default: `0`) +* `--maxpeers`: Set the maximum number of network peers (network disabled if set to 0) (default: `100`) +* `--nodiscover`: Disable the peer discovery mechanism (manual peer addition) (default: `false`) * `--netrestrict`: Restrict network communication to the given IP networks (CIDR masks) * `--trustedpeers`: Set the comma-separated enode URLs which are always allowed to connect, even above the peer limit ## Miscellaneous -* `--externalcl`: Enables the external consensus layer (default: false) -* `--override.prague`: Manually specify the Prague fork time, overriding the bundled setting (default: 0) -* `--pprof`: Enable the pprof HTTP server (default: false) -* `--metrics`: Enable metrics collection and reporting (default: false) -* `--diagnostics`: Disable diagnostics (default: false) +* `--externalcl`: Enables the external consensus layer (default: `false`) +* `--override.prague`: Manually specify the Prague fork time, overriding the bundled setting (default: `0`) +* `--pprof`: Enable the pprof HTTP server (default: `false`) +* `--metrics`: Enable metrics collection and reporting (default: `false`) +* `--diagnostics`: Disable diagnostics (default: `false`) * `--config`: Set erigon flags from YAML/TOML file * `--help`: Show help * `--version`: Print the version \ No newline at end of file diff --git a/src/advanced/consensus_layer.md b/src/advanced/consensus_layer.md index 05b7caa..5ce4683 100644 --- a/src/advanced/consensus_layer.md +++ b/src/advanced/consensus_layer.md @@ -19,6 +19,6 @@ By default, Erigon is configured to run with Caplin, the embedded Consensus Laye A Consensus Layer (CL) client needs to run alongside Erigon to run a full Ethereum node, a Gnosis Chain node and a Polygon node and its respective testnets. Basically, without a CL client the EL will never get in sync. See below which Beacon node for which chain you can run along with Erigon -- Ethereum -- Gnosis Chain -- Polygon \ No newline at end of file +- [Ethereum](./src/nodes/ethereum.md) +- [Gnosis Chain](/nodes/gnosis.md) +- [Polygon](/nodes/polygon.md) \ No newline at end of file From b7da3259d3c2da6f557a21346cf75065f3f1c716 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 20 Nov 2024 22:41:34 +0100 Subject: [PATCH 20/89] updates --- src/about.md | 6 +- src/advanced/downloader.md | 237 ++++++++++++++++++++++++++++++++++++- src/advanced/txpool.md | 79 ++++++++++++- src/welcome.md | 4 +- 4 files changed, 320 insertions(+), 6 deletions(-) diff --git a/src/about.md b/src/about.md index c65cefb..b458cad 100644 --- a/src/about.md +++ b/src/about.md @@ -1,4 +1,8 @@ # About -This is the official Erigon 3 documentation, built on [mdbook](https://rust-lang.github.io/mdBook/). +This book is open source, contribute at . + +The Erigon CI/CD system maintains a hosted version of the `unstable` branch at . + +This book is built on [mdbook](https://rust-lang.github.io/mdBook/). diff --git a/src/advanced/downloader.md b/src/advanced/downloader.md index d332b92..9744b31 100644 --- a/src/advanced/downloader.md +++ b/src/advanced/downloader.md @@ -1,3 +1,238 @@ # Downloader +*Seeding/downloading historical data* - +The Downloader is a service responsible for seeding and downloading historical data using the BitTorrent protocol. Data is stored in the form of immutable `.seg` files, known as **snapshots**. The Ethereum core instructs the Downloader to download specific files, identified by their unique info hashes, which include both block headers and block bodies. The Downloader then communicates with the BitTorrent network to retrieve the necessary files, as specified by the Ethereum core. + +
+ +**Information**: + +While all Erigon components are separable and can be run on different machines, the downloader must run on the same machine as Erigon to be able to share downloaded and seeded files. + +
+ +Like many other Erigon components (txpool, sentry, rpc daemon) `downloader` can be running [integrated into Erigon](#start-erigon-with-snapshots-support) or as a [separate process](#running-downloader-as-a-separate-process). + +## Start Erigon with snapshots support + + +Downloader is running by default inside Erigon, where it can be configured with the `--snapshots` flag: + +```bash +./build/bin/erigon --snapshots +``` + +The `--snapshots` flag is compatible with the `--prune.mode` flag. + +When you start the Erigon node with the --snapshots flag, it allows you to control the behavior of the Downloader component, such as: + +- Enabling or disabling the Downloader component +- Configuring the Downloader to use specific snapshots or directories +- Controlling the seeding and downloading of snapshots + +## Running downloader as a separate process + +Before using a separate downloader process the executable must be built: + +```bash +cd erigon +make downloader +``` +Downloader can then be started as independent process, for example: + +```bash +./build/bin/downloader --downloader.api.addr=127.0.0.1:9093 --torrent.port=42068 +``` + +- `--downloader.api.addr` is for internal communication with Erigon; +- `--torrent.port=42068` is for public BitTorrent protocol listen; +- The default download speed is 16mb/sec. You can increase/limit the network usage by adding the flags `--torrent.download.rate=512mb --torrent.upload.rate=512mb` +- On startup Erigon sends list of `.torrent` files to Downloader and waits for 100% download completion + ```bash + ./build/bin/erigon --snapshots --downloader.api.addr=127.0.0.1:9093 + ``` +- Use `--snap.keepblocks=true` to not delete retired blocks from DB. +- Any network/chain can start with snapshot sync: + - The node will only download snapshots that are registered in the next repository, which can be found at . + - The node will periodically clear out old blocks from the database by copying them into snapshots of 1,000-block size. It will then merge these snapshots into larger ranges until it reaches snapshots of 500,000 blocks. Once this process is complete, the node will automatically begin creating new snapshots.". + +## Creation of a new network or bootnode + +When creating a new network or bootnode, it's possible that new snapshots may need to be created and seeded. To do this, you'll need to create the snapshots using the following command: + +```bash +erigon snapshots retire --datadir= +``` + +This will create .torrent files that the Downloader can use to seed the new snapshots. The output format is compatible with . + +To change the size of the snapshots, add the following flags: + +```bash +--from=0 --to=1_000_000 --segment.size=500_000 +``` + +Then, use the downloader command to rebuild the snapshots: + +```bash +./build/bin/downloader torrent_hashes --rebuild --datadir= +``` + +The Downloader will automatically seed the new snapshots. + +Note that while Erigon is not required to seed snapshots, running Erigon with the --snapshots flag will also enable seeding. + +## Additional info + +When creating snapshots, you don't need a fully-synced Erigon node. In fact, you only need to complete a few initial stages of syncing. This allows you to start seeding snapshots without having to wait for a full sync. + +To take advantage of this, you can use the following flags to start syncing, but only seed the first few stages: + +- `STOP AFTER STAGE=Senders`: this flag tells Erigon to stop syncing after reaching the "Senders" stage. This allows you to seed the snapshots without waiting for the full sync. +- `./build/bin/erigon --snapshots=false --datadir=`: this command starts the Erigon node in snapshot-only mode, which allows it to seed the snapshots without waiting for the full sync. + +However, for security reasons, it's highly recommended to have a fully-synced Erigon node. This ensures that all data is up-to-date and secure. + +### Indexing Snapshots Before Seeding + +Before seeding snapshots, they must be indexed by Erigon. While indexing is not required for seeding, it's recommended to run the following command to ensure that snapshots are properly indexed: + +```bash +./build/bin/erigon snapshots index --datadir= +``` + +This step is not required for seeding, but it's essential for using snapshots effectively. + +## Architecture + +Snapshots can be created in four ways: + +1. **Automated creation**: Erigon can create new .torrent files using the downloader.Download RPC method. +2. **Manual creation**: Erigon can create new .seg files, which are then scanned by the Downloader to create .torrent files. +3. **Manual seeding**: .torrent files can be manually copied from another server or restored from backup. +4. **Manual indexing**: .seg files can be manually copied and indexed by the Downloader. + +**Erigon**'s role in the snapshot creation process: +- Connects to the Downloader and shares the list of hashes. +- Waits for the download of all snapshots. +- Creates `.idx` files (secondary indices) when .seg files are available. +- Switches to normal staged sync after downloading all snapshots. +- Ensures that snapshot downloading happens only once, even if new Erigon versions are released. + +**Downloader**'s role in the snapshot creation process: +- Reads .torrent files and downloads the contents described by them. +- Uses a list of trackers to download files (see ./trackers/embed.go). +- Automatically seeds the downloaded files. + +# Technical Details + +To prevent attacks, `.idx` files are created with random seeds, ensuring that each node has a unique `.idx` file (but the same `.seg` file). +If `.seg` files are manually added or removed, the `/snapshots/db` folder must also be updated. + +## Verifying .seg file checksums + +Use the `downloader --verify` command to check the checksums of the `.seg` files. Compare the checksums with those of the current `.torrent` files. + +## Faster Rsync + +Use the following command to perform a faster rsync: +```bash +rsync -aP --delete -e "ssh -T -o Compression=no -x" +``` + +## Release Details + +To start automatic commits of new hashes to the master branch: +```bash +crontab -e @hourly cd && ./cmd/downloader/torrent_hashes_update.sh 1>&2 2>> ~/erigon_cron.log +``` + +This command pushes the changes to the master branch automatically before each release. + +# Command line options + +To display available options for downloader digit: + +```bash +./build/bin/downloader --help +``` + +The `--help` flag listing is reproduced below for your convenience. + +``` +snapshot downloader + +Usage: + [flags] + [command] + +Examples: +go run ./cmd/downloader --datadir --downloader.api.addr 127.0.0.1:9093 + +Available Commands: + completion Generate the autocompletion script for the specified shell + help Help about any command + manifest + manifest-verify + torrent_cat + torrent_clean Remove all .torrent files from datadir directory + torrent_create + torrent_hashes + torrent_magnet + +Flags: + --chain string name of the network to join (default "mainnet") + --datadir string Data directory for the databases (default "/home/admin/.local/share/erigon") + --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default true) + --diagnostics.disabled Disable diagnostics + --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") + --diagnostics.endpoint.port uint Diagnostics HTTP server listening port (default 6062) + --diagnostics.speedtest Enable speed test + --downloader.api.addr string external downloader api network address, for example: 127.0.0.1:9093 serves remote downloader interface (default "127.0.0.1:9093") + --downloader.disable.ipv4 Turns off ipv6 for the downloader + --downloader.disable.ipv6 Turns off ipv6 for the downloader + -h, --help help for this command + --log.console.json Format console logs with JSON + --log.console.verbosity string Set the log level for console logs (default "info") + --log.delays Enable block delay logging + --log.dir.disable disable disk logging + --log.dir.json Format file logs with JSON + --log.dir.path string Path to store user and error logs to disk + --log.dir.prefix string The file name prefix for logs stored to disk + --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") + --log.json Format console logs with JSON + --metrics Enable metrics collection and reporting + --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") + --metrics.port int Metrics HTTP server listening port (default 6061) + --nat string NAT port mapping mechanism (any|none|upnp|pmp|stun|extip:) + "" or "none" Default - do not nat + "extip:77.12.33.4" Will assume the local machine is reachable on the given IP + "any" Uses the first auto-detected mechanism + "upnp" Uses the Universal Plug and Play protocol + "pmp" Uses NAT-PMP with an auto-detected gateway address + "pmp:192.168.0.1" Uses NAT-PMP with the given gateway address + "stun" Uses STUN to detect an external IP using a default server + "stun:" Uses STUN to detect an external IP using the given server (host:port) + + --pprof Enable the pprof HTTP server + --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") + --pprof.cpuprofile string Write CPU profile to the given file + --pprof.port int pprof HTTP server listening port (default 6060) + --seedbox Turns downloader into independent (doesn't need Erigon) software which discover/download/seed new files - useful for Erigon network, and can work on very cheap hardware. It will: 1) download .torrent from webseed 2) download new files after upgrade 3) we planing add discovery of new files soon + --torrent.conns.perfile int Number of connections per file (default 10) + --torrent.download.rate string Bytes per second, example: 32mb (default "128mb") + --torrent.download.slots int Amount of files to download in parallel. (default 128) + --torrent.maxpeers int Unused parameter (reserved for future use) (default 100) + --torrent.port int Port to listen and serve BitTorrent protocol (default 42069) + --torrent.staticpeers string Comma separated host:port to connect to + --torrent.upload.rate string Bytes per second, example: 32mb (default "4mb") + --torrent.verbosity int 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (must set --verbosity to equal or higher level and has default: 2) (default 2) + --trace string Write execution trace to the given file + --verbosity string Set the log level for console logs (default "info") + --verify Verify snapshots on startup. It will not report problems found, but re-download broken pieces. + --verify.failfast Stop on first found error. Report it and exit + --verify.files string Limit list of files to verify + --webseed string Comma-separated URL's, holding metadata about network-support infrastructure (like S3 buckets with snapshots, bootnodes, etc...) + +Use " [command] --help" for more information about a command. +``` \ No newline at end of file diff --git a/src/advanced/txpool.md b/src/advanced/txpool.md index 2de6a2a..7e6bb8e 100644 --- a/src/advanced/txpool.md +++ b/src/advanced/txpool.md @@ -1,4 +1,81 @@ # TxPool +*Memory pool management* +In Erigon, `txpool` is a specific API namespace that keeps pending and queued transactions in the local memory pool. It is used to store transactions that are waiting to be processed by miners. Default is `4096` pending and `1024` queued transactions. However, the number of pending transactions can be much higher than this default value. - \ No newline at end of file +The transaction pool (txpool or mempool) is the dynamic in-memory area where pending transactions reside before they are included in a block and thus become static. Each node on the Ethereum mainnet has its own pool of transactions and, combined, they all form the global pool. + +The thousands of pending transactions that enter the global pool by being broadcast on the network and before being included in a block are an always changing data set that’s holding millions of dollars at any given second. There are many ways to use txpool such as yield farming, liquidity providing, arbitrage, front running and MEV . + +Erigon has a separate executable that allow to run TxPool as a separate process. +Running with TX pool as a separate process + +Before using a separate TxPool process the executable must be built: + +```bash +cd erigon +make txpool +``` + +If Erigon is on a different device, add the flag `--pprof.addr 0.0.0.0` or TxPool will listen on localhost by default. + +```bash +./build/bin/txpool --pprof.addr 0.0.0.0 +``` + +Erigon must be launched with options to listen to external TxPool + +```bash +./build/bin/erigon --pprof --pprof.addr 123.123.123.123 +``` + +## Command line options + +To display available options for sentry digit: + +```bash +./build/bin/txpool --help +``` + +The `--help` flag listing is reproduced below for your convenience. + +```bash +Launch external Transaction Pool instance - same as built-into Erigon, but as independent Process + +Usage: + txpool [flags] + +Flags: +--datadir string Data directory for the databases (default "/home/admin/.local/share/erigon") +-h, --help help for txpool +--log.console.json Format console logs with JSON +--log.console.verbosity string Set the log level for console logs (default "info") +--log.dir.json Format file logs with JSON +--log.dir.path string Path to store user and error logs to disk + --log.dir.prefix string The file name prefix for logs stored to disk + --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") + --log.json Format console logs with JSON + --metrics Enable metrics collection and reporting + --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") + --metrics.port int Metrics HTTP server listening port (default 6060) + --pprof Enable the pprof HTTP server + --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") + --pprof.cpuprofile string Write CPU profile to the given file + --pprof.port int pprof HTTP server listening port (default 6060) + --private.api.addr string execution service : (default "localhost:9090") + --sentry.api.addr strings comma separated sentry addresses ':,:' (default [localhost:9091]) + --tls.cacert string CA certificate for client side TLS handshake + --tls.cert string certificate for client side TLS handshake + --tls.key string key file for client side TLS handshake + --trace string Write execution trace to the given file + --txpool.accountslots uint Minimum number of executable transaction slots guaranteed per account (default 16) + --txpool.api.addr string txpool service : (default "localhost:9094") + --txpool.commit.every duration How often transactions should be committed to the storage (default 15s) + --txpool.globalbasefeeslots int Maximum number of non-executable transactions where only not enough baseFee (default 10000) + --txpool.globalqueue int Maximum number of non-executable transaction slots for all accounts (default 10000) + --txpool.globalslots int Maximum number of executable transaction slots for all accounts (default 10000) + --txpool.pricebump uint Price bump percentage to replace an already existing transaction (default 10) + --txpool.pricelimit uint Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default 1) + --txpool.trace.senders strings Comma separared list of addresses, whoes transactions will traced in transaction pool with debug printing + --verbosity string Set the log level for console logs (default "info") +``` \ No newline at end of file diff --git a/src/welcome.md b/src/welcome.md index 55ea5a7..1cfc21e 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -16,9 +16,7 @@ .## d####P -> **DISCLAIMER**: Erigon 3 is still in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. - - +> **DISCLAIMER**: Erigon 3 is in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. From 934c71b3b337373fba4a908f8b4361e6816f1b9d Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 20 Nov 2024 22:56:39 +0100 Subject: [PATCH 21/89] update --- src/getting-started/sw-requirements.md | 22 ++++++++++------------ src/installation.md | 6 +----- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/getting-started/sw-requirements.md b/src/getting-started/sw-requirements.md index b3b936f..9ddbc6d 100644 --- a/src/getting-started/sw-requirements.md +++ b/src/getting-started/sw-requirements.md @@ -6,22 +6,20 @@ Erigon works only from command line interface (CLI), so it is advisable to have Please ensure that the following prerequisites are met. -### Build essential (only for Linux) +## Install Build essential and CMake (Linux systems) -Install **Build-essential** and **Cmake**: +**Build-essential** and **Cmake** are software packages that are required for building and compiling software. Install them using the following command: ```bash sudo apt install build-essential cmake -y ``` -### Git +## Git -Git is a tool that helps download and manage the Erigon source code. To install Git, visit: +Git is a tool that helps download and manage the Erigon source code. To install Git, visit . - - -### Go Programming Language +## Go Programming Language Erigon utilizes Go (also known as Golang) version 1.23 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the `/usr/local/go` folder (you may need to use `sudo`) and re-extract the new version in its place. @@ -40,19 +38,19 @@ export PATH=$GOPATH/bin:$GOROOT/bin:$PATH source ~/.profile ``` -### C++ Compiler +## C++ Compiler This turns the C++ part of Erigon's code into a program your computer can run. You can use either **Clang** or **GCC**. -- For **Clang** follow the instructions at . Only in Linux, place your terminal to directory where you want to install Clang and copy-paste this code: +- For **Clang** follow the instructions at . In Linux, open your terminal in the directory where you want to install Clang and copy-paste the following code: -```bash -git clone --depth=1 https://github.com/llvm/llvm-project.git + ```bash + git clone --depth=1 https://github.com/llvm/llvm-project.git cd llvm-project mkdir build cd build cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm -``` + ``` - For **GCC** (version 10 or newer): diff --git a/src/installation.md b/src/installation.md index 29ab344..8481a20 100644 --- a/src/installation.md +++ b/src/installation.md @@ -4,11 +4,7 @@ In order to use Erigon, the software has to be installed first. There are severa The current version documented in these pages is Erigon 3. -
- -Always check the [list of releases](https://github.com/erigontech/erigon/releases) for release notes. - -
+> Always check the [list of releases](https://github.com/erigontech/erigon/releases) for release notes. _____________________________ From fc8fa2dcebd54d1f0bb927c07bbf57d30bea337e Mon Sep 17 00:00:00 2001 From: bloxster Date: Thu, 21 Nov 2024 18:14:22 +0100 Subject: [PATCH 22/89] updated --- src/about/contributing.md | 41 ++++++++++++++++++++------------------- src/advanced.md | 16 ++++++--------- src/advanced/options.md | 3 +++ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/about/contributing.md b/src/about/contributing.md index fada1be..cf93918 100644 --- a/src/about/contributing.md +++ b/src/about/contributing.md @@ -1,4 +1,4 @@ -# Contributing +# Contributing to Erigon 3 ## Development @@ -11,32 +11,33 @@ Begin by exploring the comprehensive [Programmer's Guide](https://github.com/led ### Dive Deeper into the Architecture For those interested in gaining a deeper understanding of Erigon's underlying architecture, visit the following resources: -- **DB Walk-through**: This document provides a detailed walk-through of Erigon's database structure. It explains how Erigon organizes persistent data into tables like PlainState for accounts and storage, History Of Accounts for tracking account changes, and Change Sets for optimized binary searches on changes. It contrasts Erigon's approach with go-ethereum's use of the Merkle Patricia Trie. -- **Database FAQ**: The Database FAQ addresses common questions and concerns related to Erigon's database design. It covers how to directly read the database via gRPC or while Erigon is running, details on the MDBX storage engine and RAM usage model, and points to further resources on the database interface rationale and architecture. +- **[DB Walk-through](https://github.com/erigontech/erigon/blob/release/2.60/docs/programmers_guide/db_walkthrough.MD)**: This document provides a detailed walk-through of Erigon's database structure. It explains how Erigon organizes persistent data into tables like PlainState for accounts and storage, History Of Accounts for tracking account changes, and Change Sets for optimized binary searches on changes. It contrasts Erigon's approach with go-ethereum's use of the Merkle Patricia Trie. +- **[Database FAQ](https://github.com/erigontech/erigon/blob/release/2.60/docs/programmers_guide/db_faq.md)**: The Database FAQ addresses common questions and concerns related to Erigon's database design. It covers how to directly read the database via gRPC or while Erigon is running, details on the MDBX storage engine and RAM usage model, and points to further resources on the database interface rationale and architecture. + ### Feature Exploration Erigon introduces several innovative features that contributors may find interesting to explore and contribute to: -- **DupSort Feature Explanation**: Erigon's DupSort feature optimizes storage and retrieval of duplicate data by utilizing prefixes for keys in databases without the concept of "Buckets/Tables/Collections" or by creating tables for efficient storage with named "Buckets/Tables/Collections." -- **/EVM without Opcodes** (Ether Transfers Only): Erigon explores a simplified version of the Ethereum Virtual Machine (EVM) focusing solely on ether transfers, offering an efficient execution environment for specific use cases. +- **[DupSort Feature Explanation](https://github.com/erigontech/erigon/blob/release/2.60/docs/programmers_guide/dupsort.md)**: Erigon's DupSort feature optimizes storage and retrieval of duplicate data by utilizing prefixes for keys in databases without the concept of "Buckets/Tables/Collections" or by creating tables for efficient storage with named "Buckets/Tables/Collections." +- **[EVM without Opcodes](https://github.com/erigontech/erigon/blob/release/2.60/docs/evm_semantics.md)** (Ether Transfers Only): Erigon explores a simplified version of the Ethereum Virtual Machine (EVM) focusing solely on ether transfers, offering an efficient execution environment for specific use cases. ## Wiki Visit also Erigon's [Wiki](https://github.com/ledgerwatch/erigon/wiki) to gain more important insights: -• Caplin downloader sync -• Choice of storage engine -• Consensus Engine separation -• Criteria for transitioning from Alpha to Beta -• Erigon Beta 1 announcement -• Erigon2 prototype -• EVM with abstract interpretation and backtracking -• Header downloader -• LMDB freelist -• LMDB freelist illustrated guide -• State sync design -• TEVM Trans-piled EVM: accelerate EVM improvement R&D, but learning from eWASM -• Transaction Pool Design -• Using Postman to test RPC. +- Caplin downloader sync +- Choice of storage engine +- Consensus Engine separation +- Criteria for transitioning from Alpha to Beta +- Erigon Beta 1 announcement +- Erigon2 prototype +- EVM with abstract interpretation and backtracking +- Header downloader +- LMDB freelist +- LMDB freelist illustrated guide +- State sync design +- TEVM Trans-piled EVM: accelerate EVM improvement R&D, but learning from eWASM +- Transaction Pool Design +- Using Postman to test RPC. # Documentation -To contribute to this documentation, commit your change to Github. You might want to run it locally to verify the output before committing. \ No newline at end of file +To contribute to this documentation, commit your change to the development branch on [Github](https://github.com/erigontech/docs/tree/development). You might want to run it locally to verify the output before committing, see how MdBook works [here](https://rust-lang.github.io/mdBook/index.html). \ No newline at end of file diff --git a/src/advanced.md b/src/advanced.md index 3d86713..6f8a9cc 100644 --- a/src/advanced.md +++ b/src/advanced.md @@ -2,16 +2,12 @@ Erigon is by default an "all-in-one" binary solution, but it's possible start any internal component as a separated processes: -- RPCDaemon, the JSON RPC layer -- TxPool, the transaction pool -- Sentry, the p2p layer -- Downloader, the history download layer -- Caplin, the novel Consensus Layer +- [RPCDaemon](./advanced/rpc_daemon.md), the JSON RPC layer +- [TxPool](./advanced/txpool.md), the transaction pool +- [Sentry](./advanced/sentry.md), the p2p layer +- [Downloader](./advanced/downloader.md), the history download layer +- [Caplin](./advanced/caplin.md), the novel Consensus Layer This may be for security, scalability, decentralisation, resource limitation, custom implementation, or any other reason you/your team deems appropriate. See the appropriate section to understand how to start each service separately. -
- -Don't start services as separated processes unless you have clear reason for it. - -
+> Don't start services as separated processes unless you have clear reason for it. diff --git a/src/advanced/options.md b/src/advanced/options.md index 4519a20..2d40804 100644 --- a/src/advanced/options.md +++ b/src/advanced/options.md @@ -10,6 +10,9 @@ The `--help` flag listing is reproduced below for your convenience. ```bash ./build/bin/erigon --help ``` +# Commands + + # Commands From 5c76c2650e6b59038933a4e1c7dec6a8ecbf9655 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 27 Nov 2024 18:30:27 +0100 Subject: [PATCH 23/89] restructured and improved Windows installation documentation --- src/SUMMARY.md | 2 + src/installation/build_exec_win.md | 131 +++++++++++++++++++++++++ src/installation/windows.md | 149 +---------------------------- src/installation/wsl.md | 27 ++++++ 4 files changed, 163 insertions(+), 146 deletions(-) create mode 100644 src/installation/build_exec_win.md create mode 100644 src/installation/wsl.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index a6d71e8..ca07ca0 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -10,6 +10,8 @@ - [Installation](installation.md) - [Linux and MacOS](installation/linux.md) - [Windows](installation/windows.md) + - [Build executable binaries natively for Windows](installation/build_exec_win.md) + - [Windows Subsystem for Linux (WSL)](installation/wsl.md) - [Docker](installation/docker.md) - [Upgrading from a previous version](installation/upgrading-md) diff --git a/src/installation/build_exec_win.md b/src/installation/build_exec_win.md new file mode 100644 index 0000000..3a0c20c --- /dev/null +++ b/src/installation/build_exec_win.md @@ -0,0 +1,131 @@ +# Build executable binaries natively for Windows + +Before proceeding, ensure that the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) requirements are met. + + +## Installing Chocolatey + +Install _Chocolatey package manager_ by following these [instructions](https://docs.chocolatey.org/en-us/choco/setup). + +Once your Windows machine has the above installed, open the **Command Prompt** by typing "**cmd**" in the search bar and check that you have correctly installed Chocolatey: + +```bash +choco -v +``` + + + +Now you need to install the following components: `cmake`, `make`, `mingw` by: + +```bash +choco install cmake make mingw +``` + +
+ +**Important note about Anti-Virus:** + +During the compiler detection phase of **MinGW**, some temporary executable files are generated to test the compiler capabilities. It's been reported that some anti-virus programs detect these files as possibly infected with the `Win64/Kryptic.CIS` Trojan horse (or a variant of it). Although these are false positives, we have no control over the 100+ vendors of security products for Windows and their respective detection algorithms and we understand that this may make your experience with Windows builds uncomfortable. To work around this, you can either set exclusions for your antivirus software specifically for the`build\bin\mdbx\CMakeFiles` subfolder of the cloned repo, or you can run Erigon using the other two options below. + +
+ +Make sure that the Windows System Path variable is set correctly. Use the search bar on your computer to search for “**Edit the system environment variable**”. + + + +Click the “**Environment Variables...**” button. + + + +Look down at the "**System variables**" box and double click on "**Path**" to add a new path. + + + +Then click on the "**New**" button and paste the following path: + +```bash + C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin +``` + + + + +### Clone the Erigon repository + +Open the Command Prompt and type the following: + +```bash +git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +``` + +## Compiling Erigon + +To compile Erigon there are two alternative methods: + +- [Compiling from the wmake.ps1 file in the File Explorer](#compiling-from-the-wmakeps1-file-in-the-file-explorer) +- [Using the PowerShell CLI](#using-the-powershell-cli) + +### Compiling from the wmake.ps1 file in the File Explorer + +This is the fastest way which normally works for everyone. Open the File Explorer and go to the Erigon folder, then right click the `wmake` file and choose "**Run with PowerShell**". + + + +PowerShell will compile Erigon and all of its modules. All binaries will be placed in the `.\build\bin\` subfolder. + + + +### Using the PowerShell CLI + +In the search bar on your computer, search for “**Windows PowerShell**” and open it. + + + +Change the working directory to "**erigon**" + +```bash +cd erigon +``` + + + +Before modifying security settings, ensure PowerShell script execution is allowed in your Windows account settings using the following command: + +```powershell +Set-ExecutionPolicy Bypass -Scope CurrentUser -Force +``` +This change allows script execution, but use caution to avoid security risks. Remember to only make these adjustments if you trust the scripts you intend to run. Unauthorized changes can impact system security. For more info read [Set-Execution Policy](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.3) documentation. + +Now you can compile Erigon and/or any of its component: + +```powershell +.\wmake.ps1 [-target] +``` + +For example, to build the Erigon executable write: + +```powershell +.\wmake.ps1 erigon +``` + + + +The executable binary `erigon.exe` should have been created in the `.\build\bin\` subfolder. + +You can use the same command to build other binaries as `RPCDaemon`, `TxPool`, `Sentry` and `Downloader`. + +## How to start Erigon + +To start Erigon place your command prompt in the `.\build\bin\` subfolder and use: + +```powershell +start erigon.exe. +``` + +or from any place use the full executable address: + +```powershell +start C:\Users\username\AppData\Local\erigon.exe +``` + +See [basic usage](/basic-usage.md) documentation on available options and flags to customize your Erigon experience. \ No newline at end of file diff --git a/src/installation/windows.md b/src/installation/windows.md index a959422..75c07ea 100644 --- a/src/installation/windows.md +++ b/src/installation/windows.md @@ -1,153 +1,10 @@ # Windows -*How to install and run Erigon 3 on Windows* +*How to install and run Erigon 3 on Windows 10 and Windows 11* There are 3 options for running Erigon 3 on Windows, listed from easiest to most difficult installation: -- [Build executable binaries natively for Windows](#build-executable-binaries-natively-for-windows): Use the pre-built Windows executables that can be natively run on Windows without any emulation or containers required. +- [Build executable binaries natively for Windows](/installation/build_exec_win.md): Use the pre-built Windows executables that can be natively run on Windows without any emulation or containers required. - [Use Docker](/installation/docker.md): Run Erigon in a Docker container for isolation from the host Windows system. This avoids dependencies on Windows but requires installing Docker. -- [Use Windows Subsystem for Linux (WSL)](#use-windows-subsystem-for-linux-wsl): Install the Windows Subsystem for Linux (WSL) to create a Linux environment within Windows. Erigon can then be installed in WSL by following the Linux build instructions. This provides compatibility with Linux builds but involves more setup overhead. - - -## Build executable binaries natively for Windows - -Before proceeding, ensure that the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) requirements are met. - -### Installing Chocolatey - -Install _Chocolatey package manager_ by following these [instructions](https://docs.chocolatey.org/en-us/choco/setup). - -Once your Windows machine has the above installed, open the **Command Prompt** by typing "**cmd**" in the search bar and check that you have correctly installed Chocolatey: - -```bash -choco -v -``` - - - -Now you need to install the following components: `cmake`, `make`, `mingw` by: - -```bash -choco install cmake make mingw -``` - -
- -**Important note about Anti-Virus:** - -During the compiler detection phase of **MinGW**, some temporary executable files are generated to test the compiler capabilities. It's been reported that some anti-virus programs detect these files as possibly infected with the `Win64/Kryptic.CIS` Trojan horse (or a variant of it). Although these are false positives, we have no control over the 100+ vendors of security products for Windows and their respective detection algorithms and we understand that this may make your experience with Windows builds uncomfortable. To work around this, you can either set exclusions for your antivirus software specifically for the`build\bin\mdbx\CMakeFiles` subfolder of the cloned repo, or you can run Erigon using the other two options below. - -
- -Make sure that the Windows System Path variable is set correctly. Use the search bar on your computer to search for “**Edit the system environment variable**”. - - - -Click the “**Environment Variables...**” button. - - - -Look down at the "**System variables**" box and double click on "**Path**" to add a new path. - - - -Then click on the "**New**" button and paste the following path: - -```bash - C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin -``` - - - - -### Clone the Erigon repository - -Open the Command Prompt and type the following: - -```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git -``` - -### Compiling Erigon - -To compile Erigon there are two alternative methods: - -- [Compiling from the wmake.ps1 file in the File Explorer](#compiling-from-the-wmakeps1-file-in-the-file-explorer) - -- [Using the PowerShell CLI](#using-the-powershell-cli) - - -#### Compiling from the wmake.ps1 file in the File Explorer - -This is the fastest way which normally works for everyone. Open the File Explorer and go to the Erigon folder, then right click the `wmake` file and choose "**Run with PowerShell**". - - - -PowerShell will compile Erigon and all of its modules. All binaries will be placed in the `.\build\bin\` subfolder. - - - -#### Using the PowerShell CLI - -In the search bar on your computer, search for “**Windows PowerShell**” and open it. - - - -Change the working directory to "**erigon**" - -```bash -cd erigon -``` - - - -Before proceeding make sure that the [Set-Execution Policy] -(https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.3) - PowerShell execution running policies are correct for your Windows account. - -Now you can compile Erigon and/or any of its component: - -```bash -.\wmake.ps1 [-target] -``` - -For example, to build the Erigon executable write: - -``` -.\wmake.ps1 erigon -``` - - - -You can use the same command to build other binaries as RPCDaemon, TxPool, Sentry and Downloader. - -All binaries are placed in the `.\build\bin\` subfolder. - -## Use Windows Subsystem for Linux (WSL) - -WSL enables running a complete GNU/Linux environment natively within Windows 10, providing Linux compatibility without the performance overhead of traditional virtualization. - -To install WSL, follow these instructions: . - -
- -**Information** - -WSL Version 2 is the only version supported. - -
- -Under this option you can build Erigon as you would on a regular Linux distribution (see detailed instructions [here](/installation/linux.md)). - -You can also point your data to any of the mounted Windows partitions ( e.g. `/mnt/c/[...]`, `/mnt/d/[...]` etc..) but be aware that performance will be affected: this is due to the fact that these mount points use `DrvFS`, which is a network file system, and additionally MDBX locks the db for exclusive access, meaning that only one process at a time can access the data. - -
- -**Warning** - -The remote db RPCdaemon is an experimental feature and is **not recommended**, it is extremely slow. It is highly preferable to use the embedded RPCdaemon. - -
- - -This has implications for running `rpcdaemon`, which must be configured as a remote DB, even if it is running on the same machine. If your data is hosted on the native Linux filesystem instead, there are no restrictions. Also note that the default WSL2 environment has its own IP address, which does not match the network interface of the Windows host: take this into account when configuring NAT on port 30303 on your router. +- [Use Windows Subsystem for Linux (WSL)](/installation/wsl.md): Install the Windows Subsystem for Linux (WSL) to create a Linux environment within Windows. Erigon can then be installed in WSL by following the Linux installation instructions. This provides compatibility with Linux builds but involves more setup overhead. \ No newline at end of file diff --git a/src/installation/wsl.md b/src/installation/wsl.md new file mode 100644 index 0000000..3b6f7e2 --- /dev/null +++ b/src/installation/wsl.md @@ -0,0 +1,27 @@ +# Windows Subsystem for Linux (WSL) + +WSL enables running a complete GNU/Linux environment natively within Windows 10, providing Linux compatibility without the performance overhead of traditional virtualization. + +To install WSL, follow Microsoft official instructions: . + +
+ +**Information** + +WSL Version 2 is the only version supported. + +
+ +Under this option you can build Erigon as you would on a regular Linux distribution (see detailed instructions [here](/installation/linux.md)). + +You can also point your data to any of the mounted Windows partitions ( e.g. `/mnt/c/[...]`, `/mnt/d/[...]` etc..) but be aware that performance will be affected: this is due to the fact that these mount points use `DrvFS`, which is a network file system, and additionally MDBX locks the db for exclusive access, meaning that only one process at a time can access the data. + +
+ +**Warning** + +The remote db RPCdaemon is an experimental feature and is **not recommended**, it is extremely slow. It is highly preferable to use the embedded RPCdaemon. + +
+ +This has implications for running `rpcdaemon`, which must be configured as a remote DB, even if it is running on the same machine. If your data is hosted on the native Linux filesystem instead, there are no restrictions. Also note that the default WSL2 environment has its own IP address, which does not match the network interface of the Windows host: take this into account when configuring NAT on port 30303 on your router. From 3af2c7a7f788f36161ad1f9d0261a9fd5070b145 Mon Sep 17 00:00:00 2001 From: bloxster Date: Wed, 27 Nov 2024 20:49:00 +0100 Subject: [PATCH 24/89] updated sentry and rpc_daemon --- src/advanced/rpc_daemon.md | 205 ++++++++++++++++++++++++++++- src/advanced/sentry.md | 63 ++++++++- src/basic/ports.md | 72 +++++----- src/installation/build_exec_win.md | 21 +-- 4 files changed, 316 insertions(+), 45 deletions(-) diff --git a/src/advanced/rpc_daemon.md b/src/advanced/rpc_daemon.md index 8704530..fb0f590 100644 --- a/src/advanced/rpc_daemon.md +++ b/src/advanced/rpc_daemon.md @@ -1,3 +1,206 @@ # RPC Daemon +*Remote Procedure Call* - \ No newline at end of file +Like any other Erigon component, the Remote Procedure Call (RPC) can run within the Erigon all-in-one client or as an independent process. This has many advantages, including easier development, the ability to run multiple RPC daemons at once, and the ability to run the daemon remotely. It is also possible to run the daemon locally (in read-only) if both processes have access to the data folder. + +## Built-in RPC daemon + +To enable RPC daemon as a built-in service in Erigon add the flags `--http` and `--ws` (sharing same port with http). For example: + +```bash +./build/bin/erigon --internalcl --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool +``` +
+ +**Warning**: The above example is a convenient but insecure snippet to allow users to connect their wallet from any host. To have a secure connection it is recommended to utilize [TLS Authentication](./tls-authentication.md). +
+ +This command run Erigon on a remote server allowing connection from any host, enabling http api for eth, web3, net etc. To connect a remote wallet use IP address of the remote machine on the RPC URL. Default port is 8545 e.g. `http://123.123.123.123:8545`. + +## Websocket + +Erigon supports also WebSocket protocol, just add the flag `--ws` to enable the WS-RPC server (default: `false`) or `--ws.compression` to enable compression over WebSocket (default: `false`). + +In order to specify websocket server listening port you can use the flag `--ws.port` (default: `8546`) + +## GraphQL + +GraphQL protocol is also supported, add flag `--graphql`. + +## RPC as a separate process + +To build the RPC daemon separately run the command: + +```bash +make rpcdaemon +``` + +The RPC daemon can use: +- The local database, with Erigon running or on a snapshot of a database +- A remote database running on another machine. + +### Running locally + +Running RPC daemon on the same computer along with Erigon is the default option because it uses Shared Memory access to Erigon's db, which is much faster than TCP access. Remember to always provide the following options: +- `--datadir` to specify where Erigon data are stored ,by default `/home/user/.local/share/erigon` +- `--private.api.addr` to provide private api network address (default `127.0.0.1:9090`) + +For example: + +```bash +./build/bin/erigon --internalcl --private.api.addr=localhost:9090 --http=false +./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,erigon,web3,net,debug,trace,txpool —-datadir=/home/admin/.local/share/erigon +``` + +With the above command it has also been specified which RPC namespaces to enable by `--http.api` flag. + +### Running Remotely + +In some cases, it is useful to run Erigon nodes in a different network (for example, in a public cloud), but RPC daemon locally. In this scenario the local machine requires no storing capacity and basic computing requirements. + +
+ +**Warning**: to ensure the integrity of communication and access control to the Erigon node, [TLS Authentication](./tls-authentication.md) is needed. + +
+ +This works regardless of whether RPC daemon is on the same computer with Erigon, or on a different one. They use TPC socket connection to pass data between them. To use this mode, run Erigon in one terminal window. + +To start RPC daemon remotely - just don't set the `--datadir` flag: + +```bash +./build/bin/erigon --internalcl --private.api.addr=localhost:9090 --http=false +./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.api=eth,erigon,web3,net,debug,trace,txpool +``` + +If the Erigon process is on one machine and RPC daemon is on another machine, use the `--private.api.addr` option for Erigon and open port `9090`: + +```bash +./build/bin/erigon --internalcl --private.api.addr=0.0.0.0:9090 --http=false --http.vhosts="*" --http.addr="0.0.0.0" +``` + +On the other machine: + +```bash +./build/bin/rpcdaemon --http.vhosts="*" --private.api.addr=123.123.123.123:9090 --http.api=eth,erigon,web3,net,debug,trace,txpool +``` + +For instance you can run also a number of different RPC daemon on different machines, attaching to the same Erigon process. + +The daemon should respond with something like: + +`INFO [date-time] HTTP endpoint opened url=localhost:8545...` + +When running remotely, RPC daemon by default maintains a state cache that is updated each time Erigon imports a new block. When the state cache is reasonably warm, it allows such a remote RPC daemon to execute queries related to the latest block (i.e. current state) with comparable performance to a local RPC daemon (about 2x slower vs. 10x slower without state cache). Since there can be multiple such RPC daemons per Erigon node, it may scale well for some workloads that are heavy on current state queries. + +## Healthcheck + +There are 2 options for running healtchecks +- POST request +- GET request with custom headers. + +Both options are available at the `/health` endpoint. + +### POST request + +If the health check is successful it returns `200 OK`. + +If the health check fails it returns `500 Internal Server Error`. + +Configuration of the health check is sent as POST body of the method. + +``` +{ +"min_peer_count": , +"known_block": +} +``` + +Not adding a check disables that. + +- `min_peer_count` checks for mimimum of healthy node peers. Requires net namespace to be listed in `http.api`. +- `known_block` sets up the block that node has to know about. Requires eth namespace to be listed in `http.api`. + +Example request: + +`http POST http://localhost:8545/health --raw '{"min_peer_count": 3, "known_block": "0x1F"}'` + +Example response: +``` +{ +"check_block": "HEALTHY", +"healthcheck_query": "HEALTHY", +"min_peer_count": "HEALTHY" +} +``` +### GET with headers + +If the healthcheck is successful it will return a `200` status code. + +If the healthcheck fails for any reason a status 500 will be returned. This is true if one of the criteria requested fails its check. + +You can set any number of values on the X-ERIGON-HEALTHCHECK header. Ones that are not included are skipped in the checks. + +Available Options: +- `synced` will check if the node has completed syncing +- `min_peer_count` will check that the node has at least many peers +- `check_block` will check that the node is at least ahead of the specified +- `max_seconds_behind` - will check that the node is no more than behind from its latest block + +Example Request: + +``` +curl --location --request GET 'http://localhost:8545/health' \ +--header 'X-ERIGON-HEALTHCHECK: min_peer_count1' \ +--header 'X-ERIGON-HEALTHCHECK: synced' \ +--header 'X-ERIGON-HEALTHCHECK: max_seconds_behind600' +``` + +Example Response: + +``` +{ +"check_block":"DISABLED", +"max_seconds_behind":"HEALTHY", +"min_peer_count":"HEALTHY", +"synced":"HEALTHY" +} +``` + +## Testing + +By default, the RPC daemon serves data from `localhost:8545`. You may send curl commands to see if things are working. + +Try `eth_blockNumber` for example. In a third terminal window enter this command: + +```bash +curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id":1}' localhost:8545 +``` + +This should return something along the lines of this (depending on how far your Erigon node has synced): + +``` +{ +"jsonrpc": "2.0", +"id": 1, +"result":" 0xa5b9ba" +} +``` + +Postman may also be used to test RPC daemon. + +## Command Line Options + +RPCdaemon is started and controlled using the command line and it is stopped by pressing `CTRL-C`. + +You can configure RPCdaemon using command-line options (a.k.a. flags), which you can use to specify also sub-commands to invoke other functionalities. + +The command-line help listing is reproduced below for your convenience. The same information can be obtained at any time from your own RPCdaemon instance by running: + +```bash +./build/bin/rpcdaemon --help +``` + +For more detailed on RPC daemon info refer to this page: + + \ No newline at end of file diff --git a/src/advanced/sentry.md b/src/advanced/sentry.md index ca5c837..99978a9 100644 --- a/src/advanced/sentry.md +++ b/src/advanced/sentry.md @@ -1,4 +1,65 @@ # Sentry +*P2P network management* +Sentry connects Erigon to the Ethereum P2P network, enabling the discovery of other participants across the Internet and secure communication with them. It performs these main functions: - \ No newline at end of file +- Peer discovery via the following: + - Kademlia DHT + - DNS lookup + - Configured static peers + - Node info saved in the database + - Boot nodes pre-configured in the source code + +- Peer management: + - handshakes + - holding p2p connection even if Erigon is restarted + +The ETH core interacts with the Ethereum p2p network through the Sentry component. Sentry provides a simple interface to the core, with functions to download data, receive notifications about gossip messages, upload data on request from peers, and broadcast gossip messages either to a selected set of peers or to all peers. + +## Running with an external Sentry or multiple Sentries + +It is possible to have multiple Sentry to increase connectivity to the network or to obscure the location of the core computer. In this case it is necessary to define address and port of each Sentry that should be connected to the Core. + +Before using the Sentry component the executable must be built. Head over to /erigon directory and type: + +```bash +make sentry +``` + +Then it can be launched as an independent component with the command: + +```bash +./build/bin/sentry +``` + +### Example + +In this example we will run an instance of Erigon and Sentry on the same machine. + +Following is the Sentry client running separately: + +```bash +screen ./build/bin/sentry --datadir=~/.local/share/erigon +``` + +And here is Erigon attaching to it + +```bash +./build/bin/erigon --internalcl --snapshots=true --sentry.api.addr=127.0.0.1:9091 +``` + +Erigon might be attached to several Sentry instances running across different machines. As per Erigon help: + +```bash +--sentry.api.addr value +``` + +Where `value` is comma separated sentry addresses ':,:' + +## Command line options + +To display available options for sentry digit: + +```bash +./build/bin/sentry --help +``` \ No newline at end of file diff --git a/src/basic/ports.md b/src/basic/ports.md index 61938df..06dd996 100644 --- a/src/basic/ports.md +++ b/src/basic/ports.md @@ -1,7 +1,6 @@ # Default Ports and Firewalls -Erigon Ports -------------- +## Erigon Ports | Component | Port | Protocol | Purpose | Should Expose | | --------- | ---- | -------- | ------- | -------------- | @@ -14,50 +13,53 @@ Erigon Ports | RPCdaemon | 8545 | TCP | HTTP & WebSockets & GraphQL | Private | | Diagnostics | 8080 | TCP & UDP| Diagnostic Tool | Private | -Caplin ports ------------- +## Caplin ports | Component | Port | Protocol | Purpose | Should Expose | | --------- | ---- | -------- | ------- | -------------- | | Sentinel | 4000 | UDP | Peering | Public | | Sentinel | 4001 | TCP | Peering | Public | -Shared ports ------------- +## Shared ports | Component | Port | Protocol | Purpose | Should Expose | | --------- | ---- | -------- | ------- | -------------- | | All | 6060 | TCP | pprof | Private | | All | 6060 | TCP | metrics | Private | -Optional flags can be enabled that enable pprof or metrics (or both) - however, they both run on 6060 by default, so you'll have to change one if you want to run both at the same time. - -Other ports ------------- - -* gRPC ports: 9092 consensus engine, 9093 snapshot downloader, 9094 TxPool - -Hetzner firewall rules ----------------------- - -| IP Range | Description | -| ------------------------------| -------------------------------------------------------------------------------------------------------------| -| 0.0.0.0/8 | "This" Network (RFC 1122, Section 3.2.1.3) | -| 10.0.0.0/8 | Private-Use Networks (RFC 1918) | -| 100.64.0.0/10 | Carrier-Grade NAT (CGN) (RFC 6598, Section 7) | -| 127.16.0.0/12 | Private-Use Networks (RFC 1918) | -| 169.254.0.0/16 | Link Local (RFC 3927) | -| 172.16.0.0/12 | Private-Use Networks (RFC 1918) | -| 192.0.0.0/24 | IETF Protocol Assignments (RFC 5736) | -| 192.0.2.0/24 | TEST-NET-1 (RFC 5737) | -| 192.88.99.0/24 | 6to4 Relay Anycast (RFC 3068) | -| 192.168.0.0/16 | Private-Use Networks (RFC 1918) | -| 198.18.0.0/15 | Network Interconnect Device Benchmark Testing (RFC 2544) | -| 198.51.100.0/24 | TEST-NET-2 (RFC 5737) | -| 203.0.113.0/24 | TEST-NET-3 (RFC 5737) | -| 224.0.0.0/4 | Multicast (RFC 3171) | -| 240.0.0.0/4 | Reserved for Future Use (RFC 1112, Section 4) | -| 255.255.255.255/32 | Limited Broadcast (RFC 919, Section 7) | -| 255.255.255.255/32 | RFC 922, Section 7 | +- You can optionally enable additional flags to configure the system to expose different ports for **pprof** or **metrics**. However, both **pprof** and **metrics** are configured to use the same default port of 6060/tcp. +- To run both **pprof** and **metrics** at the same time, you'll need to manually modify the port assignments or choose an alternative approach. + +# gRPC ports + +| Component | Port | +| ------------------- | ---- | +| http api | 9092 | +| Snapshots Downloader| 9093 | +| TxPool | 9094 | + + +# Hetzner firewall rules + + +| IP Range | Description | +|--------------------------------| ------------------------------------------| +| 0.0.0.0/8 | "This" Network (RFC 1122, Section 3.2.1.3)| +| 10.0.0.0/8 | Private-Use Networks (RFC 1918) | +| 100.64.0.0/10 | Carrier-Grade NAT (CGN) (RFC 6598, Section 7)| +| 127.16.0.0/12 | Private-Use Networks (RFC 1918)| +| 169.254.0.0/16 | Link Local (RFC 3927) | +| 172.16.0.0/12 | Private-Use Networks (RFC 1918) | +| 192.0.0.0/24 | IETF Protocol Assignments (RFC 5736) | +| 192.0.2.0/24 | TEST-NET-1 (RFC 5737) | +| 192.88.99.0/24 | 6to4 Relay Anycast (RFC 3068) | +| 192.168.0.0/16 | Private-Use Networks (RFC 1918) | +| 198.18.0.0/15 | Network Interconnect Device Benchmark Testing (RFC 2544)| +| 198.51.100.0/24 | TEST-NET-2 (RFC 5737) | +| 203.0.113.0/24 | TEST-NET-3 (RFC 5737) | +| 224.0.0.0/4 | Multicast (RFC 3171) | +| 240.0.0.0/4 | Reserved for Future Use (RFC 1112, Section 4)| +| 255.255.255.255/32 | Limited Broadcast (RFC 919, Section 7) | +| 255.255.255.255/32 | RFC 922, Section 7 | Same in [IpTables](https://ethereum.stackexchange.com/questions/6386/how-to-prevent-being-blacklisted-for-running-an-ethereum-client/13068#13068) syntax. \ No newline at end of file diff --git a/src/installation/build_exec_win.md b/src/installation/build_exec_win.md index 3a0c20c..a6d6a64 100644 --- a/src/installation/build_exec_win.md +++ b/src/installation/build_exec_win.md @@ -50,22 +50,26 @@ Then click on the "**New**" button and paste the following path: -### Clone the Erigon repository +## Clone the Erigon repository Open the Command Prompt and type the following: ```bash git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git ``` +You might need to change the `ExecutionPolicy` to allow scripts created locally or signed by a trusted publisher to run: +```powershell +Set-ExecutionPolicy RemoteSigned +``` ## Compiling Erigon To compile Erigon there are two alternative methods: -- [Compiling from the wmake.ps1 file in the File Explorer](#compiling-from-the-wmakeps1-file-in-the-file-explorer) -- [Using the PowerShell CLI](#using-the-powershell-cli) +1. [Compiling from the wmake.ps1 file in the File Explorer](#1-compiling-from-the-wmakeps1-file-in-the-file-explorer) +2. [Using the PowerShell CLI](#2-using-the-powershell-cli) -### Compiling from the wmake.ps1 file in the File Explorer +### 1. Compiling from the wmake.ps1 file in the File Explorer This is the fastest way which normally works for everyone. Open the File Explorer and go to the Erigon folder, then right click the `wmake` file and choose "**Run with PowerShell**". @@ -75,7 +79,7 @@ PowerShell will compile Erigon and all of its modules. All binaries will be plac -### Using the PowerShell CLI +### 2. Using the PowerShell CLI In the search bar on your computer, search for “**Windows PowerShell**” and open it. @@ -94,6 +98,7 @@ Before modifying security settings, ensure PowerShell script execution is allowe ```powershell Set-ExecutionPolicy Bypass -Scope CurrentUser -Force ``` + This change allows script execution, but use caution to avoid security risks. Remember to only make these adjustments if you trust the scripts you intend to run. Unauthorized changes can impact system security. For more info read [Set-Execution Policy](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.3) documentation. Now you can compile Erigon and/or any of its component: @@ -112,9 +117,9 @@ For example, to build the Erigon executable write: The executable binary `erigon.exe` should have been created in the `.\build\bin\` subfolder. -You can use the same command to build other binaries as `RPCDaemon`, `TxPool`, `Sentry` and `Downloader`. +You can use the same command to build other binaries such as `RPCDaemon`, `TxPool`, `Sentry` and `Downloader`. -## How to start Erigon +## Running Erigon To start Erigon place your command prompt in the `.\build\bin\` subfolder and use: @@ -122,7 +127,7 @@ To start Erigon place your command prompt in the `.\build\bin\` subfolder and us start erigon.exe. ``` -or from any place use the full executable address: +or from any place use the full address of the executable: ```powershell start C:\Users\username\AppData\Local\erigon.exe From deee31af29e154aaae644856b84a0c4bfee1b44a Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 12 Dec 2024 14:04:59 +0100 Subject: [PATCH 25/89] updated full node by default, staking, alpha6 etc. --- src/SUMMARY.md | 2 +- src/advanced/block-prod.md | 102 ++++++++++++++++++++----- src/advanced/caplin.md | 2 +- src/advanced/configuring.md | 2 +- src/advanced/consensus_layer.md | 2 +- src/advanced/options.md | 39 +++++----- src/basic-usage.md | 7 +- src/basic/disk-space.md | 10 ++- src/basic/node.md | 40 +++++----- src/basic/ports.md | 75 ++++++++++-------- src/getting-started/hw-requirements.md | 4 +- src/getting-started/sw-requirements.md | 42 ++++------ src/getting-started/tips.md | 12 ++- src/installation/build_exec_win.md | 2 +- src/installation/docker.md | 46 ++++++----- src/installation/linux.md | 2 +- src/installation/upgrading-md | 2 +- src/nodes/ethereum.md | 4 +- src/nodes/gnosis.md | 4 +- src/nodes/polygon.md | 6 +- src/tools/introduction.md | 11 +++ src/welcome.md | 5 +- 22 files changed, 256 insertions(+), 165 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ca07ca0..aafa071 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -49,7 +49,7 @@ --- - [Tools](tools.md) - - [Diagnostic Tool](tools/introduction.md) + - [Dagnostic Tools](tools/introduction.md) - [Installation](tools/installation.md) - [Setup](tools/setup.md) - [User Interface](tools/user_interface.md) diff --git a/src/advanced/block-prod.md b/src/advanced/block-prod.md index 1d2cb7d..9effb39 100644 --- a/src/advanced/block-prod.md +++ b/src/advanced/block-prod.md @@ -1,10 +1,12 @@ # Block production -How to propose and validate blockswith Erigon +*How to propose and validate blocks with Erigon* -Only remote miners are supported. +Both remote miners and Caplin are supported. -To enable, add the flags: +# Using remote miners + +To enable remote miners , add the flags: ```bash --mine --miner.etherbase=... @@ -15,37 +17,101 @@ or --mine --miner.miner.sigkey=... ``` -Other supported options: `--miner.extradata`, `--miner.notify`, `--miner.gaslimit`, `--miner.gasprice` , `--miner.gastarget` - -JSON-RPC supports methods: `eth_coinbase` , `eth_hashrate`, `eth_mining`, `eth_getWork`, `eth_submitWork`, `eth_submitHashrate` +Other supported options are: +- `--miner.notify`: Comma separated HTTP URL list to notify of new work packages +- `--miner.gaslimit`: Target gas limit for mined blocks (default: `36000000`) +- `--miner.etherbase`: Public address for block mining rewards (default: "`0`") +- `--miner.extradata`: Block extra data set by the miner (default: `client version`) +- `--miner.noverify`: Disable remote sealing verification (default: `false`) +- `--miner.noverify`: Disable remote sealing verification (default: `false`) +- `--miner.sigfile`: Private key to sign blocks with +- `--miner.recommit`: Time interval to recreate the block being mined (default: `3s`) +- `--miner.gasprice`: This option sets the minimum gas price for mined transactions +- `--miner.gastarget`: This option sets the maximum amount of gas that could be spent during a transaction. -JSON-RPC supports websocket methods: `newPendingTransaction` +Erigon supports [standard JSON-RPC methods](https://ethereum.org/en/developers/docs/apis/json-rpc/). # Using Caplin as validator +*Running Erigon with Caplin and Lighthouse Validator* + +Caplin is also suitable for staking, however, you will need to utilize either Lighthouse, Teku, or another validator client as your key manager, since Caplin does not offer a native key management solution. + +This guide explains how to use Erigon with its embedded Caplin consensus layer and Lighthouse as the validator client for staking on Ethereum. + +## 1. Start Erigon with Caplin +Run the following command to start Erigon with the embedded Caplin consensus layer with the beacon API on: + +```bash +erigon \ + --datadir=/data/erigon \ + --chain=mainnet \ + --prune.mode=full \ + --http \ + --http.addr=0.0.0.0 \ + --http.port=8545 \ + --http.api=engine,eth,net,web3 \ + --ws \ + --ws.port=8546 \ + --caplin.enable-upnp \ + --caplin.discovery.addr=0.0.0.0 \ + --caplin.discovery.port=4000 \ + --caplin.discovery.tcpport=4001 \ + --chain= + --beacon.api=beacon,validator,builder,config,debug,events,node,lighthouse +``` + +**Flags Explanation**: -
+- Execution Layer: + - `--http.api=engine,eth,net,web3`: enables the necessary APIs for external clients and Caplin. + - `--ws`: enables WebSocket-based communication (optional). +- Consensus Layer (Caplin): + - `--caplin.discovery.addr` and `--caplin.discovery.port`: configures Caplin's gossip and discovery layer. + - `--beacon.api=beacon,validator,builder,config,debug,events,node,lighthouse`: enables all possible API endpoints for the validator client. -**Information** +## 2. Set Up Lighthouse Validator Client -Only Lighthouse, Lodestar and Teku are supported as Validator Clients. +### 2.1 Install Lighthouse -
+Download the latest Lighthouse binary: -To enable block production and Caplin's beacon API when using Caplin as the Consensus Layer (CL) engine, the flag `--beacon.api` must be added. For example: +``` +curl -LO https://github.com/sigp/lighthouse/releases/latest/download/lighthouse +chmod +x lighthouse +sudo mv lighthouse /usr/local/bin/ +``` + +Or, use Docker: ```bash ---beacon.api=beacon,builder,config,debug,node,validator,lighthouse +docker pull sigp/lighthouse:latest ``` -For example, if you want to run Erigon and Caplin as a validator here is an example of configuration: + +### 2.2. Create Lighthouse Validator Key Directory ```bash -./build/bin/erigon --chain=holesky --prune.mode=full --beacon.api=beacon,builder,config,debug,node,validator,lighthouse +mkdir -p ~/.lighthouse/validators ``` -While here the command for Lighthouse* would be: +### 2.3. Run Lighthouse Validator Client + +Start the validator client and connect it to the Caplin consensus layer: +```bash +lighthouse vc \ + --network mainnet \ + --beacon-nodes http://127.0.0.1:5555 \ + --suggested-fee-recipient= +``` +**Flags Explanation**: +- `--network mainnet`: Specifies the Ethereum mainnet. +- `--beacon-nodes`: Points to the Caplin beacon API at `http://127.0.0.1:5555`. +- `--suggested-fee-recipient`: Specifies your Ethereum address for block rewards. + +### 2.4. Import Validator Keys + +If you have existing validator keys, import them: ```bash -lighthouse validator_client --network holesky --beacon-nodes http://localhost:5555 +lighthouse account validator import --directory ``` -**For adding validators and specific command syntax, refer to the documentation of your chosen Validator Client.* \ No newline at end of file diff --git a/src/advanced/caplin.md b/src/advanced/caplin.md index 64a4b39..16f4637 100644 --- a/src/advanced/caplin.md +++ b/src/advanced/caplin.md @@ -16,4 +16,4 @@ Caplin is enabled by default, at which point an external consensus layer is no l Caplin also has an archive mode for historical states and blocks, which can be enabled with the `--caplin.archive` flag. -Caplin can also be used for [block production](/advanced/block-prod.md). \ No newline at end of file +Caplin can also be used for [block production](/advanced/block-prod.md#using-caplin-as-validator), aka **staking**. \ No newline at end of file diff --git a/src/advanced/configuring.md b/src/advanced/configuring.md index 2a7c40b..57d1935 100644 --- a/src/advanced/configuring.md +++ b/src/advanced/configuring.md @@ -23,7 +23,7 @@ The Erigon 3 CLI has a wide range of flags that can be used to customize its beh ## Pruning Presets -* `--prune.mode`: Choose a pruning preset: `archive`, `full`, or `minimal` (default: `archive`) see also [Type of node](/basic/node.md) +* `--prune.mode`: Choose a pruning preset: `archive`, `full`, or `minimal` (default: `full`) see also [Type of node](/basic/node.md) * `--prune.distance`: Keep state history for the latest N blocks (default: everything) (default: `0`) * `--prune.distance.blocks`: Keep block history for the latest N blocks (default: everything) (default: `0`) diff --git a/src/advanced/consensus_layer.md b/src/advanced/consensus_layer.md index 5ce4683..1b31ce6 100644 --- a/src/advanced/consensus_layer.md +++ b/src/advanced/consensus_layer.md @@ -12,7 +12,7 @@ The consensus client, also known as the *Beacon Node* or *CL client*, implements **Information** -By default, Erigon is configured to run with Caplin, the embedded Consensus Layer. +By default, Erigon is configured to run with [Caplin](/advanced/caplin.md), the embedded Consensus Layer. ## Choosing the Consensus Layer client diff --git a/src/advanced/options.md b/src/advanced/options.md index 2d40804..f5e4aa9 100644 --- a/src/advanced/options.md +++ b/src/advanced/options.md @@ -24,18 +24,18 @@ USAGE: erigon [command] [flags] VERSION: - 3.00.0-alpha5-78f3647d + 3.00.0-alpha6-f22317ef COMMANDS: - init Bootstrap and initialize a new genesis block - import Import a blockchain file - snapshots, seg Managing snapshots (historical data partitions) - support Connect Erigon instance to a diagnostics system for support - help, h Shows a list of commands or help for one command + init Bootstrap and initialize a new genesis block + import Import a blockchain file + seg, snapshots, segments Managing historical data segments (partitions) + support Connect Erigon instance to a diagnostics system for support + help, h Shows a list of commands or help for one command GLOBAL OPTIONS: - --datadir value Data directory for the databases (default: /home/admin/.local/share/erigon) - --ethash.dagdir value Directory to store the ethash mining DAGs (default: /home/admin/.local/share/erigon-ethash) + --datadir value Data directory for the databases (default: /root/.local/share/erigon) + --ethash.dagdir value Directory to store the ethash mining DAGs (default: /root/.local/share/erigon-ethash) --externalcl Enables the external consensus layer (default: false) --txpool.disable Experimental external pool and block producer, see ./cmd/txpool/readme.md for more info. Disabling internal txpool and block producer. (default: false) --txpool.locals value Comma separated accounts to treat as locals (no flush, priority inclusion) @@ -55,10 +55,10 @@ GLOBAL OPTIONS: --txpool.commit.every value How often transactions should be committed to the storage (default: 15s) --prune.distance value Keep state history for the latest N blocks (default: everything) (default: 0) --prune.distance.blocks value Keep block history for the latest N blocks (default: everything) (default: 0) - --prune.mode value Choose a pruning preset to run onto. Available values: "archive","full","minimal". - Archive: Keep the entire indexed database, aka. no pruning. (Pruning is flexible), - Full: Keep only blocks and latest state (Pruning is not flexible) - Minimal: Keep only latest state (Pruning is not flexible) (default: "archive") + --prune.mode value Choose a pruning preset to run onto. Available values: "full", "archive", "minimal". + Full: Keep only blocks and latest state, + Archive: Keep the entire indexed database, aka. no pruning, + Minimal: Keep only latest state (default: "full") --batchSize value Batch size for the execution stage (default: "512M") --bodies.cache value Limit on the cache for block bodies (default: "268435456") --database.verbosity value Enabling internal db logs. Very high verbosity levels may require recompile db. Default: 2, means warning. (default: 2) @@ -93,7 +93,7 @@ GLOBAL OPTIONS: --state.cache value Amount of data to store in StateCache (enabled if no --datadir set). Set 0 to disable StateCache. Defaults to 0MB (default: "0MB") --rpc.batch.concurrency value Does limit amount of goroutines to process 1 batch request. Means 1 bach request can't overload server. 1 batch still can have unlimited amount of request (default: 2) --rpc.streaming.disable Erigon has enabled json streaming for some heavy endpoints (like trace_*). It's a trade-off: greatly reduce amount of RAM (in some cases from 30GB to 30mb), but it produce invalid json format if error happened in the middle of streaming (because json is not streaming-friendly format) (default: false) - --db.read.concurrency value Does limit amount of parallel db reads. Default: equal to GOMAXPROCS (or number of CPU) (default: 768) + --db.read.concurrency value Does limit amount of parallel db reads. Default: equal to GOMAXPROCS (or number of CPU) (default: 1408) --rpc.accessList value Specify granular (method-by-method) API allowlist --trace.compat Bug for bug compatibility with OE for trace_ routines (default: false) --rpc.gascap value Sets a cap on gas that can be used in eth_call/estimateGas (default: 50000000) @@ -153,7 +153,7 @@ GLOBAL OPTIONS: --bootnodes value Comma separated enode URLs for P2P discovery bootstrap --staticpeers value Comma separated enode URLs to connect to --trustedpeers value Comma separated enode URLs which are always allowed to connect, even above the peer limit - --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 100) + --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 32) --chain value name of the network to join (default: "mainnet") --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) --vmdebug Record information useful for VM and contract debugging (default: false) @@ -170,7 +170,7 @@ GLOBAL OPTIONS: --mine Enable mining (default: false) --proposer.disable Disables PoS proposer (default: false) --miner.notify value Comma separated HTTP URL list to notify of new work packages - --miner.gaslimit value Target gas limit for mined blocks (default: 30000000) + --miner.gaslimit value Target gas limit for mined blocks (default: 36000000) --miner.etherbase value Public address for block mining rewards (default: "0") --miner.extradata value Block extra data set by the miner (default = client version) --miner.noverify Disable remote sealing verification (default: false) @@ -199,8 +199,12 @@ GLOBAL OPTIONS: --caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000) --caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001) --caplin.checkpoint-sync-url value [ --caplin.checkpoint-sync-url value ] checkpoint sync endpoint - --caplin.subscibe-all-topics Subscribe to all gossip topics (default: false) - --caplin.max-peer-count value Max number of peers to connect (default: 128) + --caplin.subscribe-all-topics Subscribe to all gossip topics (default: false) + --caplin.max-peer-count value Max number of peers to connect (default: 80) + --caplin.enable-upnp Enable NAT porting for Caplin (default: false) + --caplin.max-inbound-traffic-per-peer value Max inbound traffic per second per peer (default: "256KB") + --caplin.max-outbound-traffic-per-peer value Max outbound traffic per second per peer (default: "256KB") + --caplin.adaptable-maximum-traffic-requirements Make the node adaptable to the maximum traffic requirement based on how many validators are being ran (default: true) --sentinel.addr value Address for sentinel (default: "localhost") --sentinel.port value Port for sentinel (default: 7777) --sentinel.bootnodes value [ --sentinel.bootnodes value ] Comma separated enode URLs for P2P discovery bootstrap @@ -242,6 +246,7 @@ GLOBAL OPTIONS: --sync.loop.block.limit value Sets the maximum number of blocks to process per loop iteration (default: 5000) --sync.loop.break.after value Sets the last stage of the sync loop to run --sync.parallel-state-flushing Enables parallel state flushing (default: true) + --chaos.monkey Enable 'chaos monkey' to generate spontaneous network/consensus/etc failures. Use ONLY for testing (default: false) --pprof Enable the pprof HTTP server (default: false) --pprof.addr value pprof HTTP server listening interface (default: "127.0.0.1") --pprof.port value pprof HTTP server listening port (default: 6060) diff --git a/src/basic-usage.md b/src/basic-usage.md index 40d06cd..812a5f2 100644 --- a/src/basic-usage.md +++ b/src/basic-usage.md @@ -8,22 +8,23 @@ The all-in-one client is the preferred option for most users: ./build/bin/erigon ``` -This CLI command allows you to run an Ethereum archive node where every process is integrated and no special configuration is needed. +This CLI command allows you to run an Ethereum **full node ** where every process is integrated and no special configuration is needed. The default Consensus Layer utilized is [Caplin](./advanced/caplin.md), the Erigon flagship embedded CL. # Basic Configuration​ * Default data directory is `/home/admin/.local/share/erigon`. If you want to store Erigon files in a non-default location, add flag: + ```bash --datadir= ``` -* Based on the [type of node](basic/node.md) you want to run you can add ```--prune.mode=full``` to run a full node or ```--prune.mode=minimal``` to run a minimal node. +* Based on the [type of node](basic/node.md) you want to run you can add ```--prune.mode=archive``` to run a archive node or ```--prune.mode=minimal``` for a minimal node. The default node is archive node. * ```--chain=mainnet```, add the flag `--chain=sepolia` for Sepolia testnet or `--chain=holesky` for Holesky testnet. * ```--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool``` to use RPC and e.g. be able to connect your [wallet](basic/wallet.md). -* To increase download speed add ```--torrent.download.rate=512mb``` (default is 16mb) +* To increase download speed add ```--torrent.download.rate=512mb``` (default is 16mb). To stop the Erigon node you can use the ```CTRL+C``` command. diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md index 6592eb6..a1118ab 100644 --- a/src/basic/disk-space.md +++ b/src/basic/disk-space.md @@ -22,6 +22,9 @@ | Gnosis | --- GB | --- GB | --- GB | | Polygon | --- TB | --- TB | --- GB | +| Chiado | ... GB | ... GB | ... GB | +| Amoy | ... GB | ... GB | ... GB | + # Testnets @@ -30,8 +33,7 @@ | Network | Archive Node | Full Node | Minimal Node | |----------|--------------|-----------|--------------| | Holesky | 170 GB | 110 GB | 53 GB | -| Sepolia | 186 GB | 116 GB | 63 GB | -| Chiado | ... GB | ... GB | ... GB | -| Amoy | ... GB | ... GB | ... GB | - +| Sepolia | 186 GB | 116 GB | 63 GB | + +See also hints on [optimizing storage](/basic/optimizing-storage.md). diff --git a/src/basic/node.md b/src/basic/node.md index ae8a0da..d97c76f 100644 --- a/src/basic/node.md +++ b/src/basic/node.md @@ -2,39 +2,37 @@ Erigon 3 introduces a flexible approach to node configuration, offering three distinct types to suit various user needs. Depending on your need, you can choose from three different node types. -If you are looking for more **privacy** during your interaction with EVM, like for example sending transactions with your node, you can use a [minimal node](#minimal-node), which is fast to set up and uses a minimal amount of [disk space](disk-space.md). Minimal node is also suitable for staking. - -If you want to do extensive **research**, like for example searching for old states of the EVM, or implementing Otterscan, you will need an [archive node](#archive-node). - -If you want to run a validator and produce blocks, **staking** is achievable already with a [full node](#full-node). - - | Usage | Minimal Node | Full Node | Archive Node | |--------------|--------------|-----------|--------------| | Privacy, RPC | **Yes** | **Yes** | **Yes** | +| Contribute to network | No | **Yes** | **Yes** | | Research | No | No | **Yes** | | Staking | **Yes** | **Yes** | **Yes** | +## Minimal node -To switch type of node, you must first delete the ```/chaindata``` folder in the chosen ```--datadir``` directory. +Erigon 3 implements support for [EIP-4444](https://eips.ethereum.org/EIPS/eip-4444) through its *Minimal Node configuration*, enabled by the flag `--prune.mode=minimal`. For example: -## Archive node -The traditional Archive Node remains the default, providing complete historical data. +```bash +./build/bin/erigon --prune.mode=minimal +``` + +Minimal node is suitable for users with constrained hardware who wants to achieve more **privacy** during their interaction with EVM, like for example sending transactions with your node. Minimal node is also suitable for staking. ## Full node -For users seeking a balance between storage efficiency and functionality, the Full Node option can be activated with the flag `--prune.mode=full`. For example: -```bash -./build/bin/erigon --prune.mode=full -``` +Erigon 3 is full Node by default. The full node configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](disk-space.md) requirements of Erigon 3, the full node configuration is suitable for the majority of users. -This setup maintains essential data while reducing storage requirements. +## Archive node -## Minimal node -Erigon 3 implements support for [EIP-4444](https://eips.ethereum.org/EIPS/eip-4444) through its *Minimal Node configuration*, enabled by the flag `--prune.mode=minimal`. For example: +Ethereum's state refers to account balances, contracts, and consensus data. Archive nodes store every historical state, making it easier to access past data, but requiring more disk space. They provide comprehensive historical data, making them optimal for conducting extensive **research** on the chain, ranging from searching for old states of the EVM to implementing advanced block explorers, such as Otterscan, and undertaking **development** activities. -```bash -./build/bin/erigon --prune.mode=minimal -``` +Erigon 3 has consistently reduced the [disk space](disk-space.md) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. + +
+ +**Information** + +In order to switch type of node, you must first delete the ```/chaindata``` folder in the chosen ```--datadir``` directory. -This lightweight option aligns with the Ethereum Improvement Proposal's goal of reducing long-term storage burden on nodes, potentially improving network scalability and participation. \ No newline at end of file +
diff --git a/src/basic/ports.md b/src/basic/ports.md index 06dd996..c4e156d 100644 --- a/src/basic/ports.md +++ b/src/basic/ports.md @@ -1,31 +1,40 @@ # Default Ports and Firewalls +Main recommendations: + +- Avoid exposing other ports unless necessary for specific use cases (e.g., JSON-RPC or WebSocket). +- Regularly audit your firewall rules to ensure they are aligned with your infrastructure needs. +- Use monitoring tools like Prometheus or Grafana to track P2P communication metrics. + +This minimal configuration ensures proper P2P functionality for both the Execution and Consensus layers without exposing unnecessary services. Let me know if you need further clarifications! + + ## Erigon Ports -| Component | Port | Protocol | Purpose | Should Expose | -| --------- | ---- | -------- | ------- | -------------- | -| Engine | 9090 | TCP | gRPC Server | Private | -| Engine | 42069 | TCP & UDP | Snap sync (Bittorrent) | Public | -| Engine | 8551 | TCP | Engine API (JWT auth) | Private | -| Sentry | 30303 | TCP & UDP | eth/68 peering | Public | -| Sentry | 30304 | TCP & UDP | eth/67 peering | Public | -| Sentry | 9091 | TCP | incoming gRPC Connections | Private | -| RPCdaemon | 8545 | TCP | HTTP & WebSockets & GraphQL | Private | -| Diagnostics | 8080 | TCP & UDP| Diagnostic Tool | Private | +| Component | Port | Protocol | Purpose | Should Expose | +| ---------- | ----- | --------- | --------------------------- | -------------- | +| Engine | 9090 | TCP | gRPC Server | *Private* | +| Engine | 42069 | TCP & UDP | Snap sync (Bittorrent) | Public | +| Engine | 8551 | TCP | Engine API (JWT auth) | *Private* | +| Sentry | 30303 | TCP & UDP | eth/68 peering | Public | +| Sentry | 30304 | TCP & UDP | eth/67 peering | Public | +| Sentry | 9091 | TCP | Incoming gRPC Connections | *Private* | +| RPCdaemon | 8545 | TCP | HTTP & WebSockets & GraphQL | *Private* | +| Diagnostics| 8080 | TCP & UDP | Diagnostic Tool | *Private* | ## Caplin ports -| Component | Port | Protocol | Purpose | Should Expose | +| Component | Port | Protocol | Purpose | Should Expose | | --------- | ---- | -------- | ------- | -------------- | -| Sentinel | 4000 | UDP | Peering | Public | -| Sentinel | 4001 | TCP | Peering | Public | +| Sentinel | 4000 | UDP | Peering | Public | +| Sentinel | 4001 | TCP | Peering | Public | ## Shared ports -| Component | Port | Protocol | Purpose | Should Expose | -| --------- | ---- | -------- | ------- | -------------- | -| All | 6060 | TCP | pprof | Private | -| All | 6060 | TCP | metrics | Private | +| Component | Port | Protocol | Purpose | Should Expose | +| --------- | ---- | -------- | ------- | --------------- | +| All | 6060 | TCP | pprof | *Private* | +| All | 6060 | TCP | metrics | *Private* | - You can optionally enable additional flags to configure the system to expose different ports for **pprof** or **metrics**. However, both **pprof** and **metrics** are configured to use the same default port of 6060/tcp. - To run both **pprof** and **metrics** at the same time, you'll need to manually modify the port assignments or choose an alternative approach. @@ -42,24 +51,24 @@ # Hetzner firewall rules -| IP Range | Description | -|--------------------------------| ------------------------------------------| -| 0.0.0.0/8 | "This" Network (RFC 1122, Section 3.2.1.3)| -| 10.0.0.0/8 | Private-Use Networks (RFC 1918) | +| IP Range | Description | +| ------------------------------ | ----------------------------------------- | +| 0.0.0.0/8 | "This" Network (RFC 1122, Section 3.2.1.3) | +| 10.0.0.0/8 | Private-Use Networks (RFC 1918) | | 100.64.0.0/10 | Carrier-Grade NAT (CGN) (RFC 6598, Section 7)| -| 127.16.0.0/12 | Private-Use Networks (RFC 1918)| -| 169.254.0.0/16 | Link Local (RFC 3927) | -| 172.16.0.0/12 | Private-Use Networks (RFC 1918) | -| 192.0.0.0/24 | IETF Protocol Assignments (RFC 5736) | -| 192.0.2.0/24 | TEST-NET-1 (RFC 5737) | -| 192.88.99.0/24 | 6to4 Relay Anycast (RFC 3068) | -| 192.168.0.0/16 | Private-Use Networks (RFC 1918) | +| 127.16.0.0/12 | Private-Use Networks (RFC 1918) | +| 169.254.0.0/16 | Link Local (RFC 3927) | +| 172.16.0.0/12 | Private-Use Networks (RFC 1918) | +| 192.0.0.0/24 | IETF Protocol Assignments (RFC 5736) | +| 192.0.2.0/24 | TEST-NET-1 (RFC 5737) | +| 192.88.99.0/24 | 6to4 Relay Anycast (RFC 3068) | +| 192.168.0.0/16 | Private-Use Networks (RFC 1918) | | 198.18.0.0/15 | Network Interconnect Device Benchmark Testing (RFC 2544)| -| 198.51.100.0/24 | TEST-NET-2 (RFC 5737) | -| 203.0.113.0/24 | TEST-NET-3 (RFC 5737) | -| 224.0.0.0/4 | Multicast (RFC 3171) | +| 198.51.100.0/24 | TEST-NET-2 (RFC 5737) | +| 203.0.113.0/24 | TEST-NET-3 (RFC 5737) | +| 224.0.0.0/4 | Multicast (RFC 3171) | | 240.0.0.0/4 | Reserved for Future Use (RFC 1112, Section 4)| -| 255.255.255.255/32 | Limited Broadcast (RFC 919, Section 7) | -| 255.255.255.255/32 | RFC 922, Section 7 | +| 255.255.255.255/32 | Limited Broadcast (RFC 919, Section 7) | +| 255.255.255.255/32 | RFC 922, Section 7 | Same in [IpTables](https://ethereum.stackexchange.com/questions/6386/how-to-prevent-being-blacklisted-for-running-an-ethereum-client/13068#13068) syntax. \ No newline at end of file diff --git a/src/getting-started/hw-requirements.md b/src/getting-started/hw-requirements.md index 4448a2a..9c7d3d0 100644 --- a/src/getting-started/hw-requirements.md +++ b/src/getting-started/hw-requirements.md @@ -19,7 +19,7 @@ Please refer to [disk space required](/basic/disk-space.md) for details. To ensu ## CPU Requirements * **Architecture**: 64-bit architecture. -* **Number of core and threads**: while a powerful CPU can help, it's not essential for running Erigon. A moderate number of cores and threads should suffice. +* **Number of core and threads**: While a powerful CPU can be beneficial, it's not essential for running Erigon. A moderate number of cores and threads should be sufficient. However, we recommend at least 4 cores, or 8 cores for high performance. ## RAM Requirements @@ -31,4 +31,4 @@ Please refer to [disk space required](/basic/disk-space.md) for details. To ensu ## Bandwith -A stable and reliable internet connection is crucial for running a node, especially if you intend to run a validator node: a downtime can result in missed rewards or penalties. A minimum download speed of 25Mbps is recommended, and it's best to use an ISP with an uncapped data allowance. +A stable and reliable internet connection is crucial for running a node, especially if you're running a validator node, as downtime can lead to missed rewards or penalties. We recommend a minimum inbound and outbound bandwidth of 20 Mbps, with a stable connection and low latency. For optimal performance, it's best to use an ISP with an uncapped data allowance. \ No newline at end of file diff --git a/src/getting-started/sw-requirements.md b/src/getting-started/sw-requirements.md index 9ddbc6d..88ceeaa 100644 --- a/src/getting-started/sw-requirements.md +++ b/src/getting-started/sw-requirements.md @@ -1,57 +1,47 @@ # Software Requirements -Before we start, please note that building software from source can be complex. If you're not comfortable with technical tasks, you might want to check the [Docker](/installation/docker.md) installation. +Before we start, please note that building software from source can be complex. If you're not comfortable with technical tasks, you might want to check the [Docker](./docker.md) installation. Erigon works only from command line interface (CLI), so it is advisable to have a good confidence with basic commands. Please ensure that the following prerequisites are met. -## Install Build essential and CMake (Linux systems) +### Build essential (only for Linux) -**Build-essential** and **Cmake** are software packages that are required for building and compiling software. Install them using the following command: +Install **Build-essential** and **Cmake**: ```bash sudo apt install build-essential cmake -y ``` -## Git +### Git -Git is a tool that helps download and manage the Erigon source code. To install Git, visit . +Git is a tool that helps download and manage the Erigon source code. To install Git, visit: +[https://git-scm.com/downloads](https://git-scm.com/downloads). -## Go Programming Language -Erigon utilizes Go (also known as Golang) version 1.23 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the `/usr/local/go` folder (you may need to use `sudo`) and re-extract the new version in its place. +### Go Programming Language -To install the latest Go version, visit the official documentation at . +Erigon utilizes Go (also known as Golang) version 1.22 or newer for part of its development. It is recommended to have a fresh Go installation. If you have an older version, consider deleting the /usr/local/go folder (you may need to use sudo) and re-extract the new version in its place. -For Linux users, use the following command in your terminal: +To install the latest Go version, visit the official documentation at [https://golang.org/doc/install](https://golang.org/doc/install). -```bash -sudo apt-get update -wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz -sudo tar -xvf go1.21.0.linux-amd64.tar.gz -sudo mv go /usr/local -export GOROOT=/usr/local/go -export GOPATH=$HOME/go -export PATH=$GOPATH/bin:$GOROOT/bin:$PATH -source ~/.profile -``` - -## C++ Compiler +### C++ Compiler This turns the C++ part of Erigon's code into a program your computer can run. You can use either **Clang** or **GCC**. -- For **Clang** follow the instructions at . In Linux, open your terminal in the directory where you want to install Clang and copy-paste the following code: +- For **Clang** follow the instructions at [https://clang.llvm.org/get_started.html](https://clang.llvm.org/get_started.html). Only in Linux, place your terminal to directory where you want to install Clang and copy-paste this code: - ```bash - git clone --depth=1 https://github.com/llvm/llvm-project.git +```bash + sudo git clone --depth=1 https://github.com/llvm/llvm-project.git cd llvm-project mkdir build cd build cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm - ``` + make +``` -- For **GCC** (version 10 or newer): +- For **GCC** (version 10 or newer): [https://gcc.gnu.org/install/index.html](https://gcc.gnu.org/install/index.html) You can now proceed with Erigon installation. \ No newline at end of file diff --git a/src/getting-started/tips.md b/src/getting-started/tips.md index d8bf1d6..766bad7 100644 --- a/src/getting-started/tips.md +++ b/src/getting-started/tips.md @@ -3,8 +3,16 @@ ## Optimize for Low Latency -Use a machine with low latency storage (not throughput) and high RAM for faster initial sync. +Use a machine with low-latency storage (focused on latency, not throughput) and ample RAM to speed up the initial sync process. ## Memory Optimized Nodes -Consider using memory-optimized nodes for faster sync, such as *AWS EC2 r5* or *r6* series instances. \ No newline at end of file +Consider using memory-optimized nodes for faster sync, such as *AWS EC2 r5* or *r6* series instances, for faster syncing. + +## Additional Recommendations + +- Only expose ports that are necessary for specific use cases (e.g., JSON-RPC or WebSocket). +- Regularly review and audit your firewall rules to ensure they align with your infrastructure needs. +- Utilize monitoring tools like Prometheus or Grafana to track P2P communication metrics. + +This minimal configuration ensures proper P2P functionality for both the Execution and Consensus layers, without exposing unnecessary services. \ No newline at end of file diff --git a/src/installation/build_exec_win.md b/src/installation/build_exec_win.md index a6d6a64..e2dc253 100644 --- a/src/installation/build_exec_win.md +++ b/src/installation/build_exec_win.md @@ -55,7 +55,7 @@ Then click on the "**New**" button and paste the following path: Open the Command Prompt and type the following: ```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git ``` You might need to change the `ExecutionPolicy` to allow scripts created locally or signed by a trusted publisher to run: diff --git a/src/installation/docker.md b/src/installation/docker.md index fc48bf6..4b6508b 100644 --- a/src/installation/docker.md +++ b/src/installation/docker.md @@ -2,7 +2,6 @@ *How to run a Erigon node with Docker* Using Docker allows starting Erigon packaged as a Docker image without installing the program directly on your system. -General Info ## General info @@ -18,27 +17,29 @@ General Info Here are the steps to download and start Erigon 3 in Docker: -* Install Docker Desktop on Mac, Windows, or Linux. +1. Install the latest version of Docker Engine, see instructions [here](https://docs.docker.com/engine/install/). -* Check the Erigon Docker Hub page to see the available releases. +2. Visit the Erigon Docker Hub page to view the available releases. For Erigon 3, search for the [latest available release](https://hub.docker.com/r/erigontech/erigon/tags?name=v3). -* Download the latest version: - ```bash - docker pull erigontech/erigon:main-latest - ``` +3. Download the latest version: + +```bash +docker pull erigontech/erigon:v3.0.0-alpha6 +``` * List the downloaded images to get the IMAGE ID: - ```bash - docker images - ``` +```bash +docker images +``` * Check which Erigon version has been downloaded: - ```bash - docker run -it --v - ``` -* If you want to start Erigon add the options according to the usage page or the advanced customization page. For example: - ```bash - docker run -it a3867a12bd23 --chain=holesky --prune.mode=minimal - ``` -When done, exit the container or press `Ctrl+C`. The container will stop. +```bash +docker run -it --v +``` +* If you want to start Erigon add the options according to the [basic usage](/basic-usage.md) page or the advanced customization page. For example: + +```bash +docker run -it 50bef1b5d0f9 --chain=holesky --prune.mode=minimal +``` +* When done, exit the container or press `Ctrl+C`. The container will stop. ## Optional: Setup dedicated user @@ -112,13 +113,10 @@ ERIGON_USER=erigon sudo -u ${ERIGON_USER} DOCKER_UID=$(id -u ${ERIGON_USER}) DOCKER_GID=$(id -g ${ERIGON_USER}) XDG_DATA_HOME=~${ERIGON_USER}/.ethereum DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose ``` -`Makefile` creates the initial directories for Erigon, Prometheus and Grafana. The PID namespace is shared between erigon and rpcdaemon which is required to open Erigon's DB from another process (RPCDaemon local-mode), see . +`Makefile` creates the initial directories for Erigon, Prometheus and Grafana. The PID namespace is shared between erigon and rpcdaemon which is required to open Erigon's DB from another process (RPCDaemon local-mode). See: [https://github.com/ledgerwatch/erigon/pull/2392/files](https://github.com/ledgerwatch/erigon/pull/2392/files) -If your Docker installation requires the Docker daemon to run as root (which is the default), you will need to prefix the above command with `sudo`. However, it is sometimes recommended to run Docker (and therefore its containers) as a non-root user for security reasons. For more information on how to do this, see this [article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user). +If your docker installation requires the docker daemon to run as root (which is by default), you will need to prefix the command above with `sudo`. However, it is sometimes recommended running docker (and therefore its containers) as a non-root user for security reasons. For more information about how to do this, refer to this [article](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).
- -**Information** - -Windows support for `docker-compose` is not ready yet. +Windows support for docker-compose is not ready yet.
\ No newline at end of file diff --git a/src/installation/linux.md b/src/installation/linux.md index 7dc41f1..ff70d77 100644 --- a/src/installation/linux.md +++ b/src/installation/linux.md @@ -4,7 +4,7 @@ The basic Erigon configuration is suitable for most users just wanting to run a node. For building the latest stable release use the following command: ```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git cd erigon make erigon ``` diff --git a/src/installation/upgrading-md b/src/installation/upgrading-md index db2e26f..ce5cca9 100644 --- a/src/installation/upgrading-md +++ b/src/installation/upgrading-md @@ -15,7 +15,7 @@ To upgrade Erigon to a newer version when you've originally installed it via Git Replace `` with the version tag of the new release, for example: ```bash - git checkout v3.0.0-alpha5 + git checkout v3.0.0-alpha6 ``` * **Rebuild Erigon**: Since the codebase has changed, you need to compile the new version. Run: diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index 36e46dc..a8cd0e5 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -18,7 +18,7 @@ Check which [type of node](/basic/node.md) you might want torun and the [disk sp For MacOS and Linux, run the following commands to build from source the latest Erigon version: ```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git cd erigon make erigon ``` @@ -98,7 +98,7 @@ The basic command to run Erigon with Caplin on Ethereum mainnet is: ## Basic Configuration​ - If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. -- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - Default chain is `--chain=mainnet` for Ethereum mainnet: - add the flag `--chain=holesky` for Holesky testnet; - `--chain=sepolia` for Sepolia testnet. diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index a7e1640..f233660 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -18,7 +18,7 @@ Check which [type of node](/basic/node.md) you might want torun and the [disk sp For MacOS and Linux, run the following commands to build from source the latest Erigon version: ```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git cd erigon make erigon ``` @@ -101,7 +101,7 @@ And an example of Lighthouse running Chiado testnet: ## Basic Configuration​ - If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. -- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - Add the flag `--chain=chiado` for Chiado testnet. - `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). - To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) diff --git a/src/nodes/polygon.md b/src/nodes/polygon.md index e10c66d..cc507a7 100644 --- a/src/nodes/polygon.md +++ b/src/nodes/polygon.md @@ -19,7 +19,7 @@ Check which [type of node](/basic/node.md) you might want torun and the [disk sp For MacOS and Linux, run the following commands to build from source the latest Erigon version: ```bash -git clone --branch v3.0.0-alpha5 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git cd erigon make erigon ``` @@ -36,7 +36,7 @@ If you are using [Windows](/installation/windows.md) follow the dedicated instal # Start Erigon -To start a Erigon archive node for **Polygon mainnet** with remote Heimdall: +To start a Erigon full node for **Polygon mainnet** with remote Heimdall: ```bash ./build/bin/erigon --chain=bor-mainnet --bor.heimdall=https://heimdall-api.polygon.technology/ @@ -51,7 +51,7 @@ For a **Amoy testnet** archive node with remote Heimdall: ## Basic Configuration​ - If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. -- Erigon is archive node by default, use `--prune.mode=full` to run a full node (latest 90'000 blocks) or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. +- Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). - To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) - To stop the Erigon node you can use the `CTRL+C` command. diff --git a/src/tools/introduction.md b/src/tools/introduction.md index 7d1766c..931ebe1 100644 --- a/src/tools/introduction.md +++ b/src/tools/introduction.md @@ -1 +1,12 @@ # Diagnostic Tool + +As the Erigon ecosystem expands, the demand for an effective system to diagnose and resolve user issues grows. The Erigon Diagnostics Tool is designed to offer a simplified approach to pinpointing the underlying reasons for problems faced by Erigon users, be they individuals, companies utilizing Erigon internally, or enterprises granting Erigon node access to others. +Key Features + +The Erigon Diagnostics tool offers the following features: + +- **Automated Data Collection**: The tool can gather essential information about the user's Erigon node, including the Erigon version, system parameters, and recent console output, without requiring extensive manual input from the user. + +- **Interactive Diagnostics**: When additional data is needed to pinpoint the issue, the tool facilitates an interactive process, guiding the user through targeted data collection to optimize the troubleshooting process. + +- **Diagnostic Reporting**: The tool generates comprehensive diagnostic reports, making it easier for the Erigon development team to analyze the issues and provide effective solutions. \ No newline at end of file diff --git a/src/welcome.md b/src/welcome.md index 1cfc21e..e59bc75 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -2,6 +2,7 @@ > > **NOTE**: The Erigon 3 book is under construction and you may find broken links, empty pages and inexact information. +> > For instructions regarding Erigon 2 please refer to . @@ -18,7 +19,9 @@ > **DISCLAIMER**: Erigon 3 is in alpha phase and it is not recommended to be used in production environments. The Erigon team does not take any responsibility for losses or damages occurred through the use of Erigon. While we employ a seasoned in-house security team, we have not subjected our systems to independent third-party security assessments, leaving potential vulnerabilities to bugs or malicious activity unaddressed. It is essential for validators to be aware that unforeseen events, including software glitches, may result in lost rewards. -Erigon is an efficiency frontier implementation of Ethereum, designed to provide a faster, more modular and optimised experience. An archive node by default, Erigon uses edge technologies such as staged sync, efficient state storage and database compression, combined with high modularity. +Erigon is an efficient Ethereum implementation designed for speed, modularity, and optimization. By default, it functions as an archive node, utilizing technologies like staged sync, efficient state storage, and database compression. + +With **Erigon v3 Alpha 6**, the default configuration shifts from archive node to full node, enhancing efficiency, accessibility, and versatility for a wider range of users. Archive nodes remain available for developers and researchers needing full historical data, while the full node offers faster sync times and lower resource usage for everyday operations. More info [here](https://erigon.tech/announcing-erigon-v3-alpha-6-focus-on-staking-and-full-node-performance/).
From afb2509b6ab59c712493594b47128da331030c81 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 20 Dec 2024 21:11:40 +0100 Subject: [PATCH 26/89] updates and fixes --- README.md | 20 +----- src/SUMMARY.md | 17 +++-- src/advanced/{block-prod.md => bp-caplin.md} | 37 +---------- src/advanced/bp-ext.md | 26 ++++++++ src/advanced/configuring.md | 4 +- src/advanced/downloader.md | 4 +- src/advanced/lighthouse.md | 34 ++++++++-- src/advanced/prysm.md | 21 ++++++- src/advanced/rpc_daemon.md | 2 +- src/advanced/txpool.md | 2 +- src/basic-usage.md | 2 +- src/basic/node.md | 4 +- src/basic/optimizing-storage.md | 18 +++--- src/basic/ports.md | 65 +------------------- src/installation/build_exec_win.md | 2 +- src/installation/docker.md | 2 +- src/installation/linux.md | 2 +- src/installation/upgrading-md | 2 +- src/nodes/ethereum.md | 6 +- src/nodes/gnosis.md | 8 +-- src/nodes/polygon.md | 4 +- src/staking.md | 10 +++ src/welcome.md | 4 ++ 23 files changed, 133 insertions(+), 163 deletions(-) rename src/advanced/{block-prod.md => bp-caplin.md} (61%) create mode 100644 src/advanced/bp-ext.md create mode 100644 src/staking.md diff --git a/README.md b/README.md index bb94c3c..1e10556 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,5 @@ # The Erigon 3 Book -This is the official The Erigon 3 Book, soon online at . +This is the official Erigon 3 documentation, hosted at . -It is built on [mdbook](https://rust-lang.github.io/mdBook/). Please take a look at its install instructions first. - -## Build - -```shell -mdbook build -``` - -The compiled book will be available in the `book` subdirectory. - -## Run it locally - -```shell -mdbook serve -``` - -It will start a local HTTP server and serve the book contents at http://localhost:3000/. +Development branch is hosted at and it is built on [mdbook](https://rust-lang.github.io/mdBook/). If you want to contribute please take a look at its install instructions first. \ No newline at end of file diff --git a/src/SUMMARY.md b/src/SUMMARY.md index aafa071..47d2145 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -23,6 +23,11 @@ - [Default Ports and Firewalls](basic/ports.md) - [Web3 Wallet](basic/wallet) +- [Quick nodes](quick_nodes.md) + - [How to run an Ethereum node](nodes/ethereum.md) + - [How to run a Gnosis Chain node](nodes/gnosis.md) + - [How to run a Polygon node](nodes/polygon.md) + - [Advanced Usage](advanced.md) - [Configuring Erigon](advanced/configuring.md) - [Consensus Layer](advanced/consensus_layer.md) @@ -30,7 +35,6 @@ - [Prysm](advanced/prysm.md) - [Lighthouse](advanced/lighthouse.md) - [JWT secret](advanced/jwt.md) - - [Block production](advanced/block-prod.md) - [Options](advanced/options.md) - [RPC Daemon](advanced/rpc_daemon.md) - [TxPool](advanced/txpool.md) @@ -39,14 +43,9 @@ - [TLS Authentication](advanced/tls-authentication.md) - [Perfomance Tricks](advanced/performance.md) - --- - -- [Quick nodes](quick_nodes.md) - - [Ethereum](nodes/ethereum.md) - - [Gnosis](nodes/gnosis.md) - - [Polygon](nodes/polygon.md) - - --- +- [Staking](staking.md) + - [External CL](advanced/bp-ext.md) + - [Caplin](advanced/bp-caplin.md) - [Tools](tools.md) - [Dagnostic Tools](tools/introduction.md) diff --git a/src/advanced/block-prod.md b/src/advanced/bp-caplin.md similarity index 61% rename from src/advanced/block-prod.md rename to src/advanced/bp-caplin.md index 9effb39..1bba8f4 100644 --- a/src/advanced/block-prod.md +++ b/src/advanced/bp-caplin.md @@ -1,40 +1,7 @@ -# Block production - -*How to propose and validate blocks with Erigon* - -Both remote miners and Caplin are supported. - -# Using remote miners - -To enable remote miners , add the flags: - -```bash ---mine --miner.etherbase=... -``` -or - -```bash ---mine --miner.miner.sigkey=... -``` - -Other supported options are: -- `--miner.notify`: Comma separated HTTP URL list to notify of new work packages -- `--miner.gaslimit`: Target gas limit for mined blocks (default: `36000000`) -- `--miner.etherbase`: Public address for block mining rewards (default: "`0`") -- `--miner.extradata`: Block extra data set by the miner (default: `client version`) -- `--miner.noverify`: Disable remote sealing verification (default: `false`) -- `--miner.noverify`: Disable remote sealing verification (default: `false`) -- `--miner.sigfile`: Private key to sign blocks with -- `--miner.recommit`: Time interval to recreate the block being mined (default: `3s`) -- `--miner.gasprice`: This option sets the minimum gas price for mined transactions -- `--miner.gastarget`: This option sets the maximum amount of gas that could be spent during a transaction. - -Erigon supports [standard JSON-RPC methods](https://ethereum.org/en/developers/docs/apis/json-rpc/). - # Using Caplin as validator -*Running Erigon with Caplin and Lighthouse Validator* +*Running Erigon with Caplin as validator* -Caplin is also suitable for staking, however, you will need to utilize either Lighthouse, Teku, or another validator client as your key manager, since Caplin does not offer a native key management solution. +Caplin is also suitable for staking. However, it is required to pair it with a validator key manager, such as Lighthouse or Teku, since it doesn't have a native key management system. This guide explains how to use Erigon with its embedded Caplin consensus layer and Lighthouse as the validator client for staking on Ethereum. diff --git a/src/advanced/bp-ext.md b/src/advanced/bp-ext.md new file mode 100644 index 0000000..b25feb4 --- /dev/null +++ b/src/advanced/bp-ext.md @@ -0,0 +1,26 @@ +# Using an external consensus client as validator + +To enable external consensus clients, add the flags: + +```bash +--mine --miner.etherbase=... +``` +or + +```bash +--mine --miner.miner.sigkey=... +``` + +Other supported options are: +- `--miner.notify`: Comma separated HTTP URL list to notify of new work packages +- `--miner.gaslimit`: Target gas limit for mined blocks (default: `36000000`) +- `--miner.etherbase`: Public address for block mining rewards (default: "`0`") +- `--miner.extradata`: Block extra data set by the miner (default: `client version`) +- `--miner.noverify`: Disable remote sealing verification (default: `false`) +- `--miner.noverify`: Disable remote sealing verification (default: `false`) +- `--miner.sigfile`: Private key to sign blocks with +- `--miner.recommit`: Time interval to recreate the block being mined (default: `3s`) +- `--miner.gasprice`: This option sets the minimum gas price for mined transactions +- `--miner.gastarget`: This option sets the maximum amount of gas that could be spent during a transaction. + +Erigon supports [standard JSON-RPC methods](https://ethereum.org/en/developers/docs/apis/json-rpc/). diff --git a/src/advanced/configuring.md b/src/advanced/configuring.md index 57d1935..ea7ed25 100644 --- a/src/advanced/configuring.md +++ b/src/advanced/configuring.md @@ -4,8 +4,8 @@ The Erigon 3 CLI has a wide range of flags that can be used to customize its beh ## Data Storage -* `--datadir`: Set the data directory for the databases (default: `/home/admin/.local/share/erigon`) -* `--ethash.dagdir`: Set the directory to store the ethash mining DAGs (default: `/home/admin/.local/share/erigon-ethash`) +* `--datadir`: Set the data directory for the databases (default: `/home/usr/.local/share/erigon`) +* `--ethash.dagdir`: Set the directory to store the ethash mining DAGs (default: `/home/usr/.local/share/erigon-ethash`) * `--database.verbosity` Enabling internal db logs. Very high verbosity levels may require recompile db. Default: 2, means warning. (default: `2`) ## Logging diff --git a/src/advanced/downloader.md b/src/advanced/downloader.md index 9744b31..02e2b10 100644 --- a/src/advanced/downloader.md +++ b/src/advanced/downloader.md @@ -159,7 +159,7 @@ To display available options for downloader digit: The `--help` flag listing is reproduced below for your convenience. -``` +```bash snapshot downloader Usage: @@ -182,7 +182,7 @@ Available Commands: Flags: --chain string name of the network to join (default "mainnet") - --datadir string Data directory for the databases (default "/home/admin/.local/share/erigon") + --datadir string Data directory for the databases (default "/home/usr/.local/share/erigon") --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default true) --diagnostics.disabled Disable diagnostics --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") diff --git a/src/advanced/lighthouse.md b/src/advanced/lighthouse.md index 8ae4c7e..21cd96a 100644 --- a/src/advanced/lighthouse.md +++ b/src/advanced/lighthouse.md @@ -1,9 +1,33 @@ # Lighthouse -Lighthouse is another popular client that combined with Erigon can be used for block building. +Lighthouse is another popular client that combined with Erigon can be used for block building. The necessary steps to run Erigon with Lightouse are listed here following: + +1. Start Erigon with the flag `--externalcl` to allow a external Consesus Layer: + + ```bash + ./build/bin/erigon --externalcl + ``` + +2. Install Lighthouse by following the [official instructions](https://lighthouse-book.sigmaprime.io). + +3. Lighthouse must fully synchronize before Erigon can start syncing, since Erigon requires an existing target head to sync to. The quickest way to get Lighthouse synced is to use a public checkpoint synchronization endpoint from the list at . + + In order to communicate with Erigon the execution endpoint `:8551` must be specified, where `` is either `//localhost` or the IP address of the device running Erigon. + + Lighthouse must point to the [JWT secret](/advanced/jwt.md) automatically created by Erigon in the datadir directory (in the below example the default data directory is used). + + ```bash + lighthouse bn \ + --network mainnet \ + --execution-endpoint http://localhost:8551 \ + --execution-jwt /home/usr/.local/share/erigon/jwt.hex \ + --checkpoint-sync-url https://mainnet.checkpoint.sigp.io \ + ``` + + If your Lighthouse is on a different device, add `--authrpc.addr 0.0.0.0` (Engine API listens on localhost by default) as well as `--authrpc.vhosts `. + + + + -Documentation can be found here: -The basic steps to run Erigon together with Lighthouse are: -1. Install and run Erigon. Erigon will automatically create a JWT secret. -2. Install and run Lighthouse, pointing to JWT secret created by Erigon. \ No newline at end of file diff --git a/src/advanced/prysm.md b/src/advanced/prysm.md index 2843643..26bb020 100644 --- a/src/advanced/prysm.md +++ b/src/advanced/prysm.md @@ -1,4 +1,23 @@ # Prysm +Prysm is a popular client that combined with Erigon can be used for staking. The necessary steps to run Erigon with Prysm are listed here following: - \ No newline at end of file +1. Start Erigon with the flag `--externalcl` to allow a external Consesus Layer: + + ```bash + ./build/bin/erigon --externalcl + ``` + +2. Install Prysm by following the [official instructions](https://docs.prylabs.network/docs/install/install-with-script). + +3. Prysm must fully synchronize before Erigon can start syncing, since Erigon requires an existing target head to sync to. The quickest way to get Prysm synced is to use a public checkpoint synchronization endpoint from the list at . + + In order to communicate with Erigon the execution endpoint `:8551` must be specified, where `` is either `//localhost` or the IP address of the device running Erigon. + + Prysm must point to the [JWT secret](/advanced/jwt.md) automatically created by Erigon in the datadir directory (in the below example the default data directory is used). + + ```bash + ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --mainnet --jwt-secret=/home/usr/.local/share/erigon/jwt.hex --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info + ``` + + If your Prysm is on a different device, add `--authrpc.addr 0.0.0.0` (Engine API listens on localhost by default) as well as `--authrpc.vhosts `. \ No newline at end of file diff --git a/src/advanced/rpc_daemon.md b/src/advanced/rpc_daemon.md index fb0f590..5a1d27c 100644 --- a/src/advanced/rpc_daemon.md +++ b/src/advanced/rpc_daemon.md @@ -49,7 +49,7 @@ For example: ```bash ./build/bin/erigon --internalcl --private.api.addr=localhost:9090 --http=false -./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,erigon,web3,net,debug,trace,txpool —-datadir=/home/admin/.local/share/erigon +./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,erigon,web3,net,debug,trace,txpool —-datadir=/home/usr/.local/share/erigon ``` With the above command it has also been specified which RPC namespaces to enable by `--http.api` flag. diff --git a/src/advanced/txpool.md b/src/advanced/txpool.md index 7e6bb8e..8dd3bd0 100644 --- a/src/advanced/txpool.md +++ b/src/advanced/txpool.md @@ -46,7 +46,7 @@ Usage: txpool [flags] Flags: ---datadir string Data directory for the databases (default "/home/admin/.local/share/erigon") +--datadir string Data directory for the databases (default "/home/usr/.local/share/erigon") -h, --help help for txpool --log.console.json Format console logs with JSON --log.console.verbosity string Set the log level for console logs (default "info") diff --git a/src/basic-usage.md b/src/basic-usage.md index 812a5f2..dd16f92 100644 --- a/src/basic-usage.md +++ b/src/basic-usage.md @@ -14,7 +14,7 @@ The default Consensus Layer utilized is [Caplin](./advanced/caplin.md), the Erig # Basic Configuration​ -* Default data directory is `/home/admin/.local/share/erigon`. If you want to store Erigon files in a non-default location, add flag: +* Default data directory is `/home/usr/.local/share/erigon`. If you want to store Erigon files in a non-default location, add flag: ```bash --datadir= diff --git a/src/basic/node.md b/src/basic/node.md index d97c76f..3613659 100644 --- a/src/basic/node.md +++ b/src/basic/node.md @@ -21,13 +21,13 @@ Minimal node is suitable for users with constrained hardware who wants to achiev ## Full node -Erigon 3 is full Node by default. The full node configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](disk-space.md) requirements of Erigon 3, the full node configuration is suitable for the majority of users. +Erigon 3 is full node by default (`--prune.mode=full`). This configuration delivers **faster sync times** and reduced resource consumption for everyday operation, maintaining essential data while **reducing storage requirements**. We recommend running a full node whenever possible, as it supports the network's decentralization, resilience, and robustness, aligning with Ethereum's trustless and distributed ethos. Given the reduced [disk space](disk-space.md) requirements of Erigon 3, the full node configuration is suitable for the majority of users. ## Archive node Ethereum's state refers to account balances, contracts, and consensus data. Archive nodes store every historical state, making it easier to access past data, but requiring more disk space. They provide comprehensive historical data, making them optimal for conducting extensive **research** on the chain, ranging from searching for old states of the EVM to implementing advanced block explorers, such as Otterscan, and undertaking **development** activities. -Erigon 3 has consistently reduced the [disk space](disk-space.md) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. +Erigon 3 has consistently reduced the [disk space](disk-space.md) requirements for running an archive node, rendering it more affordable and accessible to a broader range of users. To run a archive node use the flag `--prune.mode=archive`.
diff --git a/src/basic/optimizing-storage.md b/src/basic/optimizing-storage.md index 08530cf..1b8a5b7 100644 --- a/src/basic/optimizing-storage.md +++ b/src/basic/optimizing-storage.md @@ -8,26 +8,26 @@ For optimal performance, it's recommended to store the datadir on a fast NVMe-RA Place the `datadir` on the slower disk. Then, create symbolic links (using `ln -s`) to the **fast disk** for the following sub-folders: - `chaindata` -- `domain` +- `snapshots/domain` This will speed up the execution of E3. On the **slow disk** place `datadir` folder with the following structure: - `chaindata` (linked to fast disk) - `snapshots` - - `domain` (linked to fast disk) - - `history` - - `idx` - - `accessors` + - `domain` (linked to fast disk) + - `history` + - `idx` + - `accessor` - `temp` ## Step 2: Speed Up History Access (Optional) -If you need to further improve performance: +If you need to further improve performance try the following improvements step by step: -- Store the `accessors` folder on the fast disk. This should provide a noticeable speed boost. -- If the speed is still not satisfactory, move the `idx` folder to the fast disk. -- If performance is still an issue, consider moving the entire history folder to the fast disk. +1. Store the `snapshots/accessor` folder on the fast disk. This should provide a noticeable speed boost. +2. If the speed is still not satisfactory, move the `snapshots/idx` folder to the fast disk. +3. If performance is still an issue, consider moving the entire `snapshots/history` folder to the fast disk. By following these steps, you can optimize your Erigon 3 storage setup to achieve a good balance between performance and cost. \ No newline at end of file diff --git a/src/basic/ports.md b/src/basic/ports.md index c4e156d..a9f7306 100644 --- a/src/basic/ports.md +++ b/src/basic/ports.md @@ -8,67 +8,4 @@ Main recommendations: This minimal configuration ensures proper P2P functionality for both the Execution and Consensus layers without exposing unnecessary services. Let me know if you need further clarifications! - -## Erigon Ports - -| Component | Port | Protocol | Purpose | Should Expose | -| ---------- | ----- | --------- | --------------------------- | -------------- | -| Engine | 9090 | TCP | gRPC Server | *Private* | -| Engine | 42069 | TCP & UDP | Snap sync (Bittorrent) | Public | -| Engine | 8551 | TCP | Engine API (JWT auth) | *Private* | -| Sentry | 30303 | TCP & UDP | eth/68 peering | Public | -| Sentry | 30304 | TCP & UDP | eth/67 peering | Public | -| Sentry | 9091 | TCP | Incoming gRPC Connections | *Private* | -| RPCdaemon | 8545 | TCP | HTTP & WebSockets & GraphQL | *Private* | -| Diagnostics| 8080 | TCP & UDP | Diagnostic Tool | *Private* | - -## Caplin ports - -| Component | Port | Protocol | Purpose | Should Expose | -| --------- | ---- | -------- | ------- | -------------- | -| Sentinel | 4000 | UDP | Peering | Public | -| Sentinel | 4001 | TCP | Peering | Public | - -## Shared ports - -| Component | Port | Protocol | Purpose | Should Expose | -| --------- | ---- | -------- | ------- | --------------- | -| All | 6060 | TCP | pprof | *Private* | -| All | 6060 | TCP | metrics | *Private* | - -- You can optionally enable additional flags to configure the system to expose different ports for **pprof** or **metrics**. However, both **pprof** and **metrics** are configured to use the same default port of 6060/tcp. -- To run both **pprof** and **metrics** at the same time, you'll need to manually modify the port assignments or choose an alternative approach. - -# gRPC ports - -| Component | Port | -| ------------------- | ---- | -| http api | 9092 | -| Snapshots Downloader| 9093 | -| TxPool | 9094 | - - -# Hetzner firewall rules - - -| IP Range | Description | -| ------------------------------ | ----------------------------------------- | -| 0.0.0.0/8 | "This" Network (RFC 1122, Section 3.2.1.3) | -| 10.0.0.0/8 | Private-Use Networks (RFC 1918) | -| 100.64.0.0/10 | Carrier-Grade NAT (CGN) (RFC 6598, Section 7)| -| 127.16.0.0/12 | Private-Use Networks (RFC 1918) | -| 169.254.0.0/16 | Link Local (RFC 3927) | -| 172.16.0.0/12 | Private-Use Networks (RFC 1918) | -| 192.0.0.0/24 | IETF Protocol Assignments (RFC 5736) | -| 192.0.2.0/24 | TEST-NET-1 (RFC 5737) | -| 192.88.99.0/24 | 6to4 Relay Anycast (RFC 3068) | -| 192.168.0.0/16 | Private-Use Networks (RFC 1918) | -| 198.18.0.0/15 | Network Interconnect Device Benchmark Testing (RFC 2544)| -| 198.51.100.0/24 | TEST-NET-2 (RFC 5737) | -| 203.0.113.0/24 | TEST-NET-3 (RFC 5737) | -| 224.0.0.0/4 | Multicast (RFC 3171) | -| 240.0.0.0/4 | Reserved for Future Use (RFC 1112, Section 4)| -| 255.255.255.255/32 | Limited Broadcast (RFC 919, Section 7) | -| 255.255.255.255/32 | RFC 922, Section 7 | - -Same in [IpTables](https://ethereum.stackexchange.com/questions/6386/how-to-prevent-being-blacklisted-for-running-an-ethereum-client/13068#13068) syntax. \ No newline at end of file +Too see ports used by Erigon and its components refer to . \ No newline at end of file diff --git a/src/installation/build_exec_win.md b/src/installation/build_exec_win.md index e2dc253..ece8591 100644 --- a/src/installation/build_exec_win.md +++ b/src/installation/build_exec_win.md @@ -55,7 +55,7 @@ Then click on the "**New**" button and paste the following path: Open the Command Prompt and type the following: ```bash -git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha7 --single-branch https://github.com/erigontech/erigon.git ``` You might need to change the `ExecutionPolicy` to allow scripts created locally or signed by a trusted publisher to run: diff --git a/src/installation/docker.md b/src/installation/docker.md index 4b6508b..82f22f2 100644 --- a/src/installation/docker.md +++ b/src/installation/docker.md @@ -24,7 +24,7 @@ Here are the steps to download and start Erigon 3 in Docker: 3. Download the latest version: ```bash -docker pull erigontech/erigon:v3.0.0-alpha6 +docker pull erigontech/erigon:v3.0.0-alpha7 ``` * List the downloaded images to get the IMAGE ID: ```bash diff --git a/src/installation/linux.md b/src/installation/linux.md index ff70d77..d434e32 100644 --- a/src/installation/linux.md +++ b/src/installation/linux.md @@ -4,7 +4,7 @@ The basic Erigon configuration is suitable for most users just wanting to run a node. For building the latest stable release use the following command: ```bash -git clone --branch v3.0.0-alpha6 --single-branch https://github.com/erigontech/erigon.git +git clone --branch v3.0.0-alpha7 --single-branch https://github.com/erigontech/erigon.git cd erigon make erigon ``` diff --git a/src/installation/upgrading-md b/src/installation/upgrading-md index ce5cca9..0a9b23e 100644 --- a/src/installation/upgrading-md +++ b/src/installation/upgrading-md @@ -15,7 +15,7 @@ To upgrade Erigon to a newer version when you've originally installed it via Git Replace `` with the version tag of the new release, for example: ```bash - git checkout v3.0.0-alpha6 + git checkout v3.0.0-alpha7 ``` * **Rebuild Erigon**: Since the codebase has changed, you need to compile the new version. Run: diff --git a/src/nodes/ethereum.md b/src/nodes/ethereum.md index a8cd0e5..4226ea9 100644 --- a/src/nodes/ethereum.md +++ b/src/nodes/ethereum.md @@ -1,4 +1,4 @@ -# Ethereum +# How to run an Ethereum node Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. @@ -65,7 +65,7 @@ The basic command to run Erigon with Caplin on Ethereum mainnet is: 4. Prysm must point to the **[JWT secret](/advanced/jwt.md)** automatically created by Erigon in the datadir directory. In the following example the default data directory is used. ```bash - ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --mainnet --jwt-secret=/home/admin/.local/share/erigon/jwt.hex --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info + ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --mainnet --jwt-secret=/home/usr/.local/share/erigon/jwt.hex --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info ``` If your Prysm is on a different device, add `--authrpc.addr 0.0.0.0` (Engine API listens on localhost by default) as well as `--authrpc.vhosts ` to your Prysm configuration. @@ -97,7 +97,7 @@ The basic command to run Erigon with Caplin on Ethereum mainnet is: ## Basic Configuration​ -- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/usr/.local/share/`.erigon. - Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - Default chain is `--chain=mainnet` for Ethereum mainnet: - add the flag `--chain=holesky` for Holesky testnet; diff --git a/src/nodes/gnosis.md b/src/nodes/gnosis.md index f233660..1879193 100644 --- a/src/nodes/gnosis.md +++ b/src/nodes/gnosis.md @@ -1,4 +1,4 @@ -# Gnosis Chain +# How to run a Gnosis Chain node Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. @@ -82,7 +82,7 @@ Below is an example of Lighthouse running **Gnosis Chain**: --datadir=data \ --http \ --execution-endpoint http://localhost:8551 \ - --execution-jwt /home/admin/.local/share/erigon/jwt.hex \ + --execution-jwt /home/usr/.local/share/erigon/jwt.hex \ --checkpoint-sync-url "https://checkpoint.gnosischain.com" ``` @@ -94,13 +94,13 @@ And an example of Lighthouse running Chiado testnet: --datadir=data \ --http \ --execution-endpoint http://localhost:8551 \ - --execution-jwt /home/admin/.local/share/erigon/jwt.hex \ + --execution-jwt /home/usr/.local/share/erigon/jwt.hex \ --checkpoint-sync-url "https://checkpoint.chiadochain.net" ``` ## Basic Configuration​ -- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/usr/.local/share/`.erigon. - Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - Add the flag `--chain=chiado` for Chiado testnet. - `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). diff --git a/src/nodes/polygon.md b/src/nodes/polygon.md index cc507a7..0d86b3c 100644 --- a/src/nodes/polygon.md +++ b/src/nodes/polygon.md @@ -1,4 +1,4 @@ -# Polygon +# How to run a Polygon node Follow the [hardware](/getting-started/hw-requirements.md) and [software](/getting-started/sw-requirements.md) prerequisites. @@ -50,7 +50,7 @@ For a **Amoy testnet** archive node with remote Heimdall: ## Basic Configuration​ -- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/admin/.local/share/`.erigon. +- If you want to store Erigon files in a non-default location, add flag `--datadir=`. Default data directory is `/home/usr/.local/share/`.erigon. - Erigon is full node by default, use `--prune.mode=archive` to run a archive node or `--prune.mode=minimal` (EIP-4444). If you want to change [type of node](/basic/node.md) delete the `--datadir` folder content and restart Erigon with the appropriate flags. - `--http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool` to use RPC and e.g. be able to connect your [wallet](/basic/wallet.md). - To increase download speed add `--torrent.download.rate=512mb` (default is 16mb) diff --git a/src/staking.md b/src/staking.md new file mode 100644 index 0000000..b4fd9ec --- /dev/null +++ b/src/staking.md @@ -0,0 +1,10 @@ +# Staking + +*How to propose and validate blocks with Erigon* + +Erigon is a comprehensive execution and consensus layer that also supports staking, or block production. + +Both remote miners and Caplin are supported. + +- Using a [external consensus client](/advanced/bp-ext.md) as validator +- Using [Caplin as validator](/advanced/bp-caplin.md) diff --git a/src/welcome.md b/src/welcome.md index e59bc75..0cd6cd7 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -47,3 +47,7 @@ Erigon 3 also introduces changes to the release process, including: * New Docker Image Repository: Erigon images are now available on Dockerhub repository "erigontech/erigon". * Multi-Platform Support: The docker image is built for linux/amd64/v2 and linux/arm64 platforms using Alpine 3.20.2. * Release Workflow Changes: Build flags are now passed to the release workflow, allowing users to view previously missed build information in released binaries. + +# Contributing to this documentation + +To contribute to this documentation, commit your change to the development branch on [Github](https://github.com/erigontech/docs/tree/development). You might want to run it locally to verify the output before committing, see how MdBook works [here](https://rust-lang.github.io/mdBook/index.html). From 964f2d3ee58f7064e5f6508bcbaf6693dc3c99ac Mon Sep 17 00:00:00 2001 From: Bloxster Date: Fri, 3 Jan 2025 20:05:38 +0100 Subject: [PATCH 27/89] updated staking, caplin, RPC, disk space, ports --- src/advanced/caplin.md | 12 +- src/advanced/downloader.md | 155 +++---------------- src/advanced/options.md | 19 +-- src/advanced/rpc_daemon.md | 301 +++++++++++++------------------------ src/advanced/sentry.md | 75 ++++++++- src/advanced/txpool.md | 90 ++++++----- src/basic/disk-space.md | 6 +- src/basic/ports.md | 55 ++++++- src/nodes/ethereum.md | 2 +- src/nodes/gnosis.md | 2 +- src/nodes/polygon.md | 2 +- src/staking.md | 4 +- src/welcome.md | 8 +- 13 files changed, 328 insertions(+), 403 deletions(-) diff --git a/src/advanced/caplin.md b/src/advanced/caplin.md index 16f4637..b1bc3bf 100644 --- a/src/advanced/caplin.md +++ b/src/advanced/caplin.md @@ -4,8 +4,6 @@ Caplin, the novel embedded Consensus Layer, brings unparalleled performance, eff By integrating the consensus layer into the EVM-node, Caplin eliminates the need for separate disk storage, reducing overall system complexity and improving overall efficiency. OtterSync, a new syncing algorithm, further enhances performance by shifting 98% of the computation to network bandwidth, reducing sync times and improving chain tip performance, disk footprint, and decentralization. -Ottersync - # Caplin Usage Caplin is enabled by default, at which point an external consensus layer is no longer needed. @@ -14,6 +12,14 @@ Caplin is enabled by default, at which point an external consensus layer is no l ./build/bin/erigon ``` -Caplin also has an archive mode for historical states and blocks, which can be enabled with the `--caplin.archive` flag. +Caplin also has an archive mode for historical states, blocks, and blobs. These can be enabled with the following flags: + +- `--caplin.states-archive`: Enables the storage and retrieval of historical state data, allowing access to past states of the blockchain for debugging, analytics, or other use cases. +- `--caplin.blocks-archive`: Enables the storage of historical block data, making it possible to query or analyze full block history. +- `--caplin.blobs-archive`: Enables the storage of historical blobs, ensuring access to additional off-chain data that might be required for specific applications. + +In addition, Caplin can backfill recent blobs for an op-node or other uses with the new flag: + +- `--caplin.blobs-immediate-backfill`: Backfills the last 18 days' worth of blobs to quickly populate historical blob data for operational needs or analytics. Caplin can also be used for [block production](/advanced/block-prod.md#using-caplin-as-validator), aka **staking**. \ No newline at end of file diff --git a/src/advanced/downloader.md b/src/advanced/downloader.md index 02e2b10..10b8cc0 100644 --- a/src/advanced/downloader.md +++ b/src/advanced/downloader.md @@ -11,155 +11,36 @@ While all Erigon components are separable and can be run on different machines,
-Like many other Erigon components (txpool, sentry, rpc daemon) `downloader` can be running [integrated into Erigon](#start-erigon-with-snapshots-support) or as a [separate process](#running-downloader-as-a-separate-process). +For a comprehensive understanding of the Downloader's functionality, configuration, and usage, please refer to the embedded file you can find in your compiled Erigon folder at `./cmd/downloader/README.md`. This file covers the following key topics: -## Start Erigon with snapshots support +1. **Snapshots overview**: An introduction to snapshots, their benefits, and how they are created and used in Erigon. +2. **Starting Erigon with snapshots support**: Instructions on how to start Erigon with snapshots support, either by default or as a separate process. +3. **Creating new networks or bootnodes**: A guide on how to create new networks or bootnodes, including creating new snapshots and starting the Downloader. +4. **Architecture**: An overview of the Downloader's architecture, including how it works with Erigon and the different ways .torrent files can be created. +5. **Utilities**: A list of available utilities, including `torrent_cat`, `torrent_magnet`, and `torrent_clean`. +6. **Remote manifest verify**: Instructions on how to verify that remote webseeds have available manifests and all manifested files are available. +7. **Faster rsync**: Tips on how to use `rsync` for faster file transfer. +8. **Release details**: Information on how to start automatic commits of new hashes to the `master` branch. +9. **Creating a seedbox**: A guide on how to create a seedbox to support a new network or type of snapshots. +Some of the key sections in the documentation include: -Downloader is running by default inside Erigon, where it can be configured with the `--snapshots` flag: +* **How to create new snapshots**: Instructions on how to create new snapshots, including using the `seg` command and creating .torrent files. +* **How to start the Downloader**: Instructions on how to start the Downloader, either as a separate process or as part of Erigon. +* **How to verify .seg files**: Instructions on how to verify that .seg files have the same checksum as the current .torrent files. -```bash -./build/bin/erigon --snapshots -``` - -The `--snapshots` flag is compatible with the `--prune.mode` flag. - -When you start the Erigon node with the --snapshots flag, it allows you to control the behavior of the Downloader component, such as: - -- Enabling or disabling the Downloader component -- Configuring the Downloader to use specific snapshots or directories -- Controlling the seeding and downloading of snapshots - -## Running downloader as a separate process - -Before using a separate downloader process the executable must be built: - -```bash -cd erigon -make downloader -``` -Downloader can then be started as independent process, for example: - -```bash -./build/bin/downloader --downloader.api.addr=127.0.0.1:9093 --torrent.port=42068 -``` - -- `--downloader.api.addr` is for internal communication with Erigon; -- `--torrent.port=42068` is for public BitTorrent protocol listen; -- The default download speed is 16mb/sec. You can increase/limit the network usage by adding the flags `--torrent.download.rate=512mb --torrent.upload.rate=512mb` -- On startup Erigon sends list of `.torrent` files to Downloader and waits for 100% download completion - ```bash - ./build/bin/erigon --snapshots --downloader.api.addr=127.0.0.1:9093 - ``` -- Use `--snap.keepblocks=true` to not delete retired blocks from DB. -- Any network/chain can start with snapshot sync: - - The node will only download snapshots that are registered in the next repository, which can be found at . - - The node will periodically clear out old blocks from the database by copying them into snapshots of 1,000-block size. It will then merge these snapshots into larger ranges until it reaches snapshots of 500,000 blocks. Once this process is complete, the node will automatically begin creating new snapshots.". - -## Creation of a new network or bootnode - -When creating a new network or bootnode, it's possible that new snapshots may need to be created and seeded. To do this, you'll need to create the snapshots using the following command: - -```bash -erigon snapshots retire --datadir= -``` - -This will create .torrent files that the Downloader can use to seed the new snapshots. The output format is compatible with . - -To change the size of the snapshots, add the following flags: - -```bash ---from=0 --to=1_000_000 --segment.size=500_000 -``` - -Then, use the downloader command to rebuild the snapshots: - -```bash -./build/bin/downloader torrent_hashes --rebuild --datadir= -``` - -The Downloader will automatically seed the new snapshots. - -Note that while Erigon is not required to seed snapshots, running Erigon with the --snapshots flag will also enable seeding. - -## Additional info +By referring to the embedded documentation file, you can gain a deeper understanding of the Downloader's capabilities and how to effectively utilize it in your Erigon setup. -When creating snapshots, you don't need a fully-synced Erigon node. In fact, you only need to complete a few initial stages of syncing. This allows you to start seeding snapshots without having to wait for a full sync. - -To take advantage of this, you can use the following flags to start syncing, but only seed the first few stages: - -- `STOP AFTER STAGE=Senders`: this flag tells Erigon to stop syncing after reaching the "Senders" stage. This allows you to seed the snapshots without waiting for the full sync. -- `./build/bin/erigon --snapshots=false --datadir=`: this command starts the Erigon node in snapshot-only mode, which allows it to seed the snapshots without waiting for the full sync. - -However, for security reasons, it's highly recommended to have a fully-synced Erigon node. This ensures that all data is up-to-date and secure. - -### Indexing Snapshots Before Seeding - -Before seeding snapshots, they must be indexed by Erigon. While indexing is not required for seeding, it's recommended to run the following command to ensure that snapshots are properly indexed: - -```bash -./build/bin/erigon snapshots index --datadir= -``` - -This step is not required for seeding, but it's essential for using snapshots effectively. - -## Architecture - -Snapshots can be created in four ways: - -1. **Automated creation**: Erigon can create new .torrent files using the downloader.Download RPC method. -2. **Manual creation**: Erigon can create new .seg files, which are then scanned by the Downloader to create .torrent files. -3. **Manual seeding**: .torrent files can be manually copied from another server or restored from backup. -4. **Manual indexing**: .seg files can be manually copied and indexed by the Downloader. - -**Erigon**'s role in the snapshot creation process: -- Connects to the Downloader and shares the list of hashes. -- Waits for the download of all snapshots. -- Creates `.idx` files (secondary indices) when .seg files are available. -- Switches to normal staged sync after downloading all snapshots. -- Ensures that snapshot downloading happens only once, even if new Erigon versions are released. - -**Downloader**'s role in the snapshot creation process: -- Reads .torrent files and downloads the contents described by them. -- Uses a list of trackers to download files (see ./trackers/embed.go). -- Automatically seeds the downloaded files. - -# Technical Details - -To prevent attacks, `.idx` files are created with random seeds, ensuring that each node has a unique `.idx` file (but the same `.seg` file). -If `.seg` files are manually added or removed, the `/snapshots/db` folder must also be updated. - -## Verifying .seg file checksums - -Use the `downloader --verify` command to check the checksums of the `.seg` files. Compare the checksums with those of the current `.torrent` files. - -## Faster Rsync - -Use the following command to perform a faster rsync: -```bash -rsync -aP --delete -e "ssh -T -o Compression=no -x" -``` - -## Release Details - -To start automatic commits of new hashes to the master branch: -```bash -crontab -e @hourly cd && ./cmd/downloader/torrent_hashes_update.sh 1>&2 2>> ~/erigon_cron.log -``` - -This command pushes the changes to the master branch automatically before each release. - -# Command line options +## Command line options To display available options for downloader digit: ```bash ./build/bin/downloader --help ``` - The `--help` flag listing is reproduced below for your convenience. -```bash +``` snapshot downloader Usage: @@ -182,7 +63,7 @@ Available Commands: Flags: --chain string name of the network to join (default "mainnet") - --datadir string Data directory for the databases (default "/home/usr/.local/share/erigon") + --datadir string Data directory for the databases (default "/home/bloxster/.local/share/erigon") --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default true) --diagnostics.disabled Disable diagnostics --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") diff --git a/src/advanced/options.md b/src/advanced/options.md index f5e4aa9..aad0da6 100644 --- a/src/advanced/options.md +++ b/src/advanced/options.md @@ -10,11 +10,8 @@ The `--help` flag listing is reproduced below for your convenience. ```bash ./build/bin/erigon --help ``` -# Commands - - -# Commands +## Commands ``` NAME: @@ -24,7 +21,7 @@ USAGE: erigon [command] [flags] VERSION: - 3.00.0-alpha6-f22317ef + 3.00.0-alpha7-34714c0c COMMANDS: init Bootstrap and initialize a new genesis block @@ -34,12 +31,10 @@ COMMANDS: help, h Shows a list of commands or help for one command GLOBAL OPTIONS: - --datadir value Data directory for the databases (default: /root/.local/share/erigon) - --ethash.dagdir value Directory to store the ethash mining DAGs (default: /root/.local/share/erigon-ethash) + --datadir value Data directory for the databases (default: /home/bloxster/.local/share/erigon) + --ethash.dagdir value Directory to store the ethash mining DAGs (default: /home/bloxster/.local/share/erigon-ethash) --externalcl Enables the external consensus layer (default: false) --txpool.disable Experimental external pool and block producer, see ./cmd/txpool/readme.md for more info. Disabling internal txpool and block producer. (default: false) - --txpool.locals value Comma separated accounts to treat as locals (no flush, priority inclusion) - --txpool.nolocals Disables price exemptions for locally submitted transactions (default: false) --txpool.pricelimit value Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default: 1) --txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10) --txpool.blobpricebump value Price bump percentage to replace existing (type-3) blob transaction (default: 100) @@ -48,9 +43,7 @@ GLOBAL OPTIONS: --txpool.totalblobpoollimit value Total limit of number of all blobs in txs within the txpool (default: 480) --txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 10000) --txpool.globalbasefeeslots value Maximum number of non-executable transactions where only not enough baseFee (default: 30000) - --txpool.accountqueue value Maximum number of non-executable transaction slots permitted per account (default: 64) --txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 30000) - --txpool.lifetime value Maximum amount of time non-executable transaction are queued (default: 3h0m0s) --txpool.trace.senders value Comma separated list of addresses, whose transactions will traced in transaction pool with debug printing --txpool.commit.every value How often transactions should be committed to the storage (default: 15s) --prune.distance value Keep state history for the latest N blocks (default: everything) (default: 0) @@ -227,7 +220,7 @@ GLOBAL OPTIONS: --beacon.api.cors.allow-credentials set the cors' allow credentials (default: false) --beacon.api.port value sets the port to listen for beacon api requests (default: 5555) --beacon.api.read.timeout value Sets the seconds for a read time out in the beacon api (default: 5) - --beacon.api.write.timeout value Sets the seconds for a write time out in the beacon api (default: 5) + --beacon.api.write.timeout value Sets the seconds for a write time out in the beacon api (default: 31536000) --beacon.api.protocol value Protocol for beacon API (default: "tcp") --beacon.api.ide.timeout value Sets the seconds for a write time out in the beacon api (default: 25) --caplin.backfilling sets whether backfilling is enabled for caplin (default: false) @@ -247,6 +240,8 @@ GLOBAL OPTIONS: --sync.loop.break.after value Sets the last stage of the sync loop to run --sync.parallel-state-flushing Enables parallel state flushing (default: true) --chaos.monkey Enable 'chaos monkey' to generate spontaneous network/consensus/etc failures. Use ONLY for testing (default: false) + --shutter Enable the Shutter encrypted transactions mempool (defaults to false) (default: false) + --shutter.keyper.bootnodes value [ --shutter.keyper.bootnodes value ] Use to override the default keyper bootnodes (defaults to using the bootnodes from the embedded config) --pprof Enable the pprof HTTP server (default: false) --pprof.addr value pprof HTTP server listening interface (default: "127.0.0.1") --pprof.port value pprof HTTP server listening port (default: 6060) diff --git a/src/advanced/rpc_daemon.md b/src/advanced/rpc_daemon.md index 5a1d27c..f196e57 100644 --- a/src/advanced/rpc_daemon.md +++ b/src/advanced/rpc_daemon.md @@ -1,206 +1,117 @@ # RPC Daemon *Remote Procedure Call* -Like any other Erigon component, the Remote Procedure Call (RPC) can run within the Erigon all-in-one client or as an independent process. This has many advantages, including easier development, the ability to run multiple RPC daemons at once, and the ability to run the daemon remotely. It is also possible to run the daemon locally (in read-only) if both processes have access to the data folder. - -## Built-in RPC daemon - -To enable RPC daemon as a built-in service in Erigon add the flags `--http` and `--ws` (sharing same port with http). For example: - -```bash -./build/bin/erigon --internalcl --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,web3,net,debug,trace,txpool -``` -
- -**Warning**: The above example is a convenient but insecure snippet to allow users to connect their wallet from any host. To have a secure connection it is recommended to utilize [TLS Authentication](./tls-authentication.md). -
- -This command run Erigon on a remote server allowing connection from any host, enabling http api for eth, web3, net etc. To connect a remote wallet use IP address of the remote machine on the RPC URL. Default port is 8545 e.g. `http://123.123.123.123:8545`. - -## Websocket - -Erigon supports also WebSocket protocol, just add the flag `--ws` to enable the WS-RPC server (default: `false`) or `--ws.compression` to enable compression over WebSocket (default: `false`). - -In order to specify websocket server listening port you can use the flag `--ws.port` (default: `8546`) - -## GraphQL - -GraphQL protocol is also supported, add flag `--graphql`. - -## RPC as a separate process - -To build the RPC daemon separately run the command: - -```bash -make rpcdaemon -``` - -The RPC daemon can use: -- The local database, with Erigon running or on a snapshot of a database -- A remote database running on another machine. - -### Running locally - -Running RPC daemon on the same computer along with Erigon is the default option because it uses Shared Memory access to Erigon's db, which is much faster than TCP access. Remember to always provide the following options: -- `--datadir` to specify where Erigon data are stored ,by default `/home/user/.local/share/erigon` -- `--private.api.addr` to provide private api network address (default `127.0.0.1:9090`) - -For example: - -```bash -./build/bin/erigon --internalcl --private.api.addr=localhost:9090 --http=false -./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.vhosts="*" --http.addr="0.0.0.0" --http.api=eth,erigon,web3,net,debug,trace,txpool —-datadir=/home/usr/.local/share/erigon -``` - -With the above command it has also been specified which RPC namespaces to enable by `--http.api` flag. - -### Running Remotely - -In some cases, it is useful to run Erigon nodes in a different network (for example, in a public cloud), but RPC daemon locally. In this scenario the local machine requires no storing capacity and basic computing requirements. - -
- -**Warning**: to ensure the integrity of communication and access control to the Erigon node, [TLS Authentication](./tls-authentication.md) is needed. - -
- -This works regardless of whether RPC daemon is on the same computer with Erigon, or on a different one. They use TPC socket connection to pass data between them. To use this mode, run Erigon in one terminal window. - -To start RPC daemon remotely - just don't set the `--datadir` flag: - -```bash -./build/bin/erigon --internalcl --private.api.addr=localhost:9090 --http=false -./build/bin/rpcdaemon --private.api.addr=localhost:9090 --http.api=eth,erigon,web3,net,debug,trace,txpool -``` - -If the Erigon process is on one machine and RPC daemon is on another machine, use the `--private.api.addr` option for Erigon and open port `9090`: - -```bash -./build/bin/erigon --internalcl --private.api.addr=0.0.0.0:9090 --http=false --http.vhosts="*" --http.addr="0.0.0.0" -``` - -On the other machine: - -```bash -./build/bin/rpcdaemon --http.vhosts="*" --private.api.addr=123.123.123.123:9090 --http.api=eth,erigon,web3,net,debug,trace,txpool -``` - -For instance you can run also a number of different RPC daemon on different machines, attaching to the same Erigon process. - -The daemon should respond with something like: - -`INFO [date-time] HTTP endpoint opened url=localhost:8545...` - -When running remotely, RPC daemon by default maintains a state cache that is updated each time Erigon imports a new block. When the state cache is reasonably warm, it allows such a remote RPC daemon to execute queries related to the latest block (i.e. current state) with comparable performance to a local RPC daemon (about 2x slower vs. 10x slower without state cache). Since there can be multiple such RPC daemons per Erigon node, it may scale well for some workloads that are heavy on current state queries. - -## Healthcheck - -There are 2 options for running healtchecks -- POST request -- GET request with custom headers. - -Both options are available at the `/health` endpoint. - -### POST request - -If the health check is successful it returns `200 OK`. - -If the health check fails it returns `500 Internal Server Error`. - -Configuration of the health check is sent as POST body of the method. - -``` -{ -"min_peer_count": , -"known_block": -} -``` - -Not adding a check disables that. - -- `min_peer_count` checks for mimimum of healthy node peers. Requires net namespace to be listed in `http.api`. -- `known_block` sets up the block that node has to know about. Requires eth namespace to be listed in `http.api`. - -Example request: - -`http POST http://localhost:8545/health --raw '{"min_peer_count": 3, "known_block": "0x1F"}'` - -Example response: -``` -{ -"check_block": "HEALTHY", -"healthcheck_query": "HEALTHY", -"min_peer_count": "HEALTHY" -} -``` -### GET with headers - -If the healthcheck is successful it will return a `200` status code. - -If the healthcheck fails for any reason a status 500 will be returned. This is true if one of the criteria requested fails its check. - -You can set any number of values on the X-ERIGON-HEALTHCHECK header. Ones that are not included are skipped in the checks. - -Available Options: -- `synced` will check if the node has completed syncing -- `min_peer_count` will check that the node has at least many peers -- `check_block` will check that the node is at least ahead of the specified -- `max_seconds_behind` - will check that the node is no more than behind from its latest block - -Example Request: - -``` -curl --location --request GET 'http://localhost:8545/health' \ ---header 'X-ERIGON-HEALTHCHECK: min_peer_count1' \ ---header 'X-ERIGON-HEALTHCHECK: synced' \ ---header 'X-ERIGON-HEALTHCHECK: max_seconds_behind600' -``` - -Example Response: - -``` -{ -"check_block":"DISABLED", -"max_seconds_behind":"HEALTHY", -"min_peer_count":"HEALTHY", -"synced":"HEALTHY" -} -``` - -## Testing - -By default, the RPC daemon serves data from `localhost:8545`. You may send curl commands to see if things are working. - -Try `eth_blockNumber` for example. In a third terminal window enter this command: - -```bash -curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id":1}' localhost:8545 -``` - -This should return something along the lines of this (depending on how far your Erigon node has synced): - -``` -{ -"jsonrpc": "2.0", -"id": 1, -"result":" 0xa5b9ba" -} -``` - -Postman may also be used to test RPC daemon. +The RPC daemon is a crucial component of Erigon, enabling remote procedure calls and providing access to various APIs. For a comprehensive understanding of the RPC daemon's functionality, configuration, and usage, please refer to **[this page](https://github.com/erigontech/erigon/blob/main/cmd/rpcdaemon/README.md)** (also contained in your locally compiled Erigon folder at `/cmd/rpcdaemon`) which covers the following key topics: + +1. **Introduction**: An overview of the RPC daemon, its benefits, and how it integrates with Erigon. +2. **Getting Started**: Step-by-step guides for running the RPC daemon locally and remotely, including configuration options and command-line flags. +3. **Healthcheck**: Information on performing health checks using POST requests or GET requests with custom headers. +4. **Testing and debugging**: Examples of testing the RPC daemon using `curl` commands and Postman, debugging. +5. **FAQ**: Frequently asked questions and answers covering topics such as prune options, RPC implementation status, and securing communication between the RPC daemon and Erigon instance. +6. **For Developers**: Resources for developers, including code generation and information on working with the RPC daemon. +7. **Relations between prune options and RPC methods**: Explains how prune options affect RPC methods. +8. **RPC Implementation Status**: Provides a table showing the current implementation status of Erigon's RPC daemon. +9. **Securing the communication between RPC daemon and Erigon instance via TLS and authentication**: Outlines the steps to secure communication between the RPC daemon and Erigon instance. +10. **Ethstats**: Describes how to run ethstats with the RPC daemon. +11. **Allowing only specific methods (Allowlist)**: Explains how to restrict access to specific RPC methods. ## Command Line Options -RPCdaemon is started and controlled using the command line and it is stopped by pressing `CTRL-C`. - -You can configure RPCdaemon using command-line options (a.k.a. flags), which you can use to specify also sub-commands to invoke other functionalities. - -The command-line help listing is reproduced below for your convenience. The same information can be obtained at any time from your own RPCdaemon instance by running: +To display available options for RPCdaemon digit: ```bash ./build/bin/rpcdaemon --help ``` -For more detailed on RPC daemon info refer to this page: - - \ No newline at end of file +The `--help` flag listing is reproduced below for your convenience. + +``` +rpcdaemon is JSON RPC server that connects to Erigon node for remote DB access + +Usage: + rpcdaemon [flags] + +Flags: + --datadir string path to Erigon working directory + --db.read.concurrency int Does limit amount of parallel db reads. Default: equal to GOMAXPROCS (or number of CPU) (default 1408) + --diagnostics.disabled Disable diagnostics + --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") + --diagnostics.endpoint.port uint Diagnostics HTTP server listening port (default 6062) + --diagnostics.speedtest Enable speed test + --graphql enables graphql endpoint (disabled by default) + --grpc Enable GRPC server + --grpc.addr string GRPC server listening interface (default "localhost") + --grpc.healthcheck Enable GRPC health check + --grpc.port int GRPC server listening port (default 8547) + -h, --help help for rpcdaemon + --http.addr string HTTP server listening interface (default "localhost") + --http.api strings API's offered over the RPC interface: eth,erigon,web3,net,debug,trace,txpool,db. Supported methods: https://github.com/erigontech/erigon/tree/main/cmd/rpcdaemon (default [eth,erigon]) + --http.compression Disable http compression (default true) + --http.corsdomain strings Comma separated list of domains from which to accept cross origin requests (browser enforced) + --http.dbg.single Allow pass HTTP header 'dbg: true' to printt more detailed logs - how this request was executed + --http.enabled enable http server (default true) + --http.port int HTTP server listening port (default 8545) + --http.timeouts.idle duration Maximum amount of time to wait for the next request when keep-alives are enabled. If http.timeouts.idle is zero, the value of http.timeouts.read is used (default 2m0s) + --http.timeouts.read duration Maximum duration for reading the entire request, including the body. (default 30s) + --http.timeouts.write duration Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read (default 30m0s) + --http.trace Trace HTTP requests with INFO level + --http.url string HTTP server listening url. will OVERRIDE http.addr and http.port. will NOT respect http paths. prefix supported are tcp, unix + --http.vhosts strings Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default [localhost]) + --https.addr string rpc HTTPS server listening interface (default "localhost") + --https.cert string certificate for rpc HTTPS server + --https.enabled enable http server + --https.key string key file for rpc HTTPS server + --https.port int rpc HTTPS server listening port. default to http+363 if not set + --https.url string rpc HTTPS server listening url. will OVERRIDE https.addr and https.port. will NOT respect paths. prefix supported are tcp, unix + --log.console.json Format console logs with JSON + --log.console.verbosity string Set the log level for console logs (default "info") + --log.delays Enable block delay logging + --log.dir.disable disable disk logging + --log.dir.json Format file logs with JSON + --log.dir.path string Path to store user and error logs to disk + --log.dir.prefix string The file name prefix for logs stored to disk + --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") + --log.json Format console logs with JSON + --metrics Enable metrics collection and reporting + --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") + --metrics.port int Metrics HTTP server listening port (default 6061) + --ots.search.max.pagesize uint Max allowed page size for search methods (default 25) + --polygon.sync Enable if Erigon has been synced using the new polygon sync component + --pprof Enable the pprof HTTP server + --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") + --pprof.cpuprofile string Write CPU profile to the given file + --pprof.port int pprof HTTP server listening port (default 6060) + --private.api.addr string Erigon's components (txpool, rpcdaemon, sentry, downloader, ...) can be deployed as independent Processes on same/another server. Then components will connect to erigon by this internal grpc API. Example: 127.0.0.1:9090 (default "127.0.0.1:9090") + --rpc.accessList string Specify granular (method-by-method) API allowlist + --rpc.allow-unprotected-txs Allow for unprotected (non-EIP155 signed) transactions to be submitted via RPC + --rpc.batch.concurrency uint Does limit amount of goroutines to process 1 batch request. Means 1 bach request can't overload server. 1 batch still can have unlimited amount of request (default 2) + --rpc.batch.limit int Maximum number of requests in a batch (default 100) + --rpc.evmtimeout duration Maximum amount of time to wait for the answer from EVM call. (default 5m0s) + --rpc.gascap uint Sets a cap on gas that can be used in eth_call/estimateGas (default 50000000) + --rpc.maxgetproofrewindblockcount.limit int Max GetProof rewind block count (default 100000) + --rpc.overlay.getlogstimeout duration Maximum amount of time to wait for the answer from the overlay_getLogs call. (default 5m0s) + --rpc.overlay.replayblocktimeout duration Maximum amount of time to wait for the answer to replay a single block when called from an overlay_getLogs call. (default 10s) + --rpc.returndata.limit int Maximum number of bytes returned from eth_call or similar invocations (default 100000) + --rpc.slow duration Print in logs RPC requests slower than given threshold: 100ms, 1s, 1m. Exluded methods: eth_getBlock,eth_getBlockByNumber,eth_getBlockByHash,eth_blockNumber,erigon_blockNumber,erigon_getHeaderByNumber,erigon_getHeaderByHash,erigon_getBlockByTimestamp,eth_call + --rpc.streaming.disable Erigon has enabled json streaming for some heavy endpoints (like trace_*). It's a trade-off: greatly reduce amount of RAM (in some cases from 30GB to 30mb), but it produce invalid json format if error happened in the middle of streaming (because json is not streaming-friendly format) + --rpc.subscription.filters.maxaddresses int Maximum number of addresses per subscription to filter logs by. + --rpc.subscription.filters.maxheaders int Maximum number of block headers to store per subscription. + --rpc.subscription.filters.maxlogs int Maximum number of logs to store per subscription. + --rpc.subscription.filters.maxtopics int Maximum number of topics per subscription to filter logs by. + --rpc.subscription.filters.maxtxs int Maximum number of transactions to store per subscription. + --rpc.txfeecap float Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default 1) + --socket.enabled Enable IPC server + --socket.url string IPC server listening url. prefix supported are tcp, unix (default "unix:///var/run/erigon.sock") + --state.cache string Amount of data to store in StateCache (enabled if no --datadir set). Set 0 to disable StateCache. Defaults to 0MB RAM (default "0MB") + --tls.cacert string CA certificate for client side TLS handshake for GRPC + --tls.cert string certificate for client side TLS handshake for GRPC + --tls.key string key file for client side TLS handshake for GRPC + --trace string Write execution trace to the given file + --trace.compat Bug for bug compatibility with OE for trace_ routines + --trace.maxtraces uint Sets a limit on traces that can be returned in trace_filter (default 200) + --txpool.api.addr string txpool api network address, for example: 127.0.0.1:9090 (default: use value of --private.api.addr) + --verbosity string Set the log level for console logs (default "info") + --ws Enable Websockets - Same port as HTTP[S] + --ws.api.subscribelogs.channelsize int Size of the channel used for websocket logs subscriptions (default 8192) + --ws.compression Enable Websocket compression (RFC 7692) +``` diff --git a/src/advanced/sentry.md b/src/advanced/sentry.md index 99978a9..3ec5749 100644 --- a/src/advanced/sentry.md +++ b/src/advanced/sentry.md @@ -53,13 +53,82 @@ Erigon might be attached to several Sentry instances running across different ma ```bash --sentry.api.addr value ``` +Where `value` is comma separated sentry addresses ':,:'. -Where `value` is comma separated sentry addresses ':,:' +## More info -## Command line options +For other information regardin Sentry functionality, configuration, and usage, please refer to the embedded file you can find in your compiled Erigon folder at `./cmd/sentry/README.md`. -To display available options for sentry digit: +## Options + +The --help flag listing is reproduced below for your convenience. ```bash ./build/bin/sentry --help +``` + +### Command Line Options + +To display available options for Sentry digit: + +```bash +./build/bin/sentry -h +``` + +The `--help` flag listing is reproduced below for your convenience. + + +``` +Run p2p sentry + +Usage: + sentry [flags] + +Flags: + --datadir string Data directory for the databases (default "/home/bloxster/.local/share/erigon") + --diagnostics.disabled Disable diagnostics + --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") + --diagnostics.endpoint.port uint Diagnostics HTTP server listening port (default 6062) + --diagnostics.speedtest Enable speed test + --discovery.dns strings Sets DNS discovery entry points (use "" to disable DNS) + --healthcheck Enabling grpc health check + -h, --help help for sentry + --log.console.json Format console logs with JSON + --log.console.verbosity string Set the log level for console logs (default "info") + --log.delays Enable block delay logging + --log.dir.disable disable disk logging + --log.dir.json Format file logs with JSON + --log.dir.path string Path to store user and error logs to disk + --log.dir.prefix string The file name prefix for logs stored to disk + --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") + --log.json Format console logs with JSON + --maxpeers int Maximum number of network peers (network disabled if set to 0) (default 32) + --maxpendpeers int Maximum number of TCP connections pending to become connected peers (default 1000) + --metrics Enable metrics collection and reporting + --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") + --metrics.port int Metrics HTTP server listening port (default 6061) + --nat string NAT port mapping mechanism (any|none|upnp|pmp|stun|extip:) + "" or "none" Default - do not nat + "extip:77.12.33.4" Will assume the local machine is reachable on the given IP + "any" Uses the first auto-detected mechanism + "upnp" Uses the Universal Plug and Play protocol + "pmp" Uses NAT-PMP with an auto-detected gateway address + "pmp:192.168.0.1" Uses NAT-PMP with the given gateway address + "stun" Uses STUN to detect an external IP using a default server + "stun:" Uses STUN to detect an external IP using the given server (host:port) + + --netrestrict string Restricts network communication to the given IP networks (CIDR masks) + --nodiscover Disables the peer discovery mechanism (manual peer addition) + --p2p.allowed-ports uints Allowed ports to pick for different eth p2p protocol versions as follows ,,.., (default [30303,30304,30305,30306,30307]) + --p2p.protocol uint Version of eth p2p protocol (default 68) + --port int Network listening port (default 30303) + --pprof Enable the pprof HTTP server + --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") + --pprof.cpuprofile string Write CPU profile to the given file + --pprof.port int pprof HTTP server listening port (default 6060) + --sentry.api.addr string grpc addresses (default "localhost:9091") + --staticpeers strings Comma separated enode URLs to connect to + --trace string Write execution trace to the given file + --trustedpeers strings Comma separated enode URLs which are always allowed to connect, even above the peer limit + --verbosity string Set the log level for console logs (default "info") ``` \ No newline at end of file diff --git a/src/advanced/txpool.md b/src/advanced/txpool.md index 8dd3bd0..870311b 100644 --- a/src/advanced/txpool.md +++ b/src/advanced/txpool.md @@ -7,8 +7,9 @@ The transaction pool (txpool or mempool) is the dynamic in-memory area where pen The thousands of pending transactions that enter the global pool by being broadcast on the network and before being included in a block are an always changing data set that’s holding millions of dollars at any given second. There are many ways to use txpool such as yield farming, liquidity providing, arbitrage, front running and MEV . -Erigon has a separate executable that allow to run TxPool as a separate process. -Running with TX pool as a separate process +WHile Txpool component is run by default as an internal Erigon component, it can also be run as a separate process. + +## Running with TX pool as a separate process Before using a separate TxPool process the executable must be built: @@ -29,9 +30,13 @@ Erigon must be launched with options to listen to external TxPool ./build/bin/erigon --pprof --pprof.addr 123.123.123.123 ``` -## Command line options +## More info + +For other information regardin Txpool functionality, configuration, and usage, please refer to the embedded file you can find in your compiled Erigon folder at `./cmd/txpool/README.md`. + +## Command Line Options -To display available options for sentry digit: +To display available options for Txpool digit: ```bash ./build/bin/txpool --help @@ -39,43 +44,54 @@ To display available options for sentry digit: The `--help` flag listing is reproduced below for your convenience. -```bash +``` Launch external Transaction Pool instance - same as built-into Erigon, but as independent Process Usage: txpool [flags] Flags: ---datadir string Data directory for the databases (default "/home/usr/.local/share/erigon") --h, --help help for txpool ---log.console.json Format console logs with JSON ---log.console.verbosity string Set the log level for console logs (default "info") ---log.dir.json Format file logs with JSON ---log.dir.path string Path to store user and error logs to disk - --log.dir.prefix string The file name prefix for logs stored to disk - --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") - --log.json Format console logs with JSON - --metrics Enable metrics collection and reporting - --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") - --metrics.port int Metrics HTTP server listening port (default 6060) - --pprof Enable the pprof HTTP server - --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") - --pprof.cpuprofile string Write CPU profile to the given file - --pprof.port int pprof HTTP server listening port (default 6060) - --private.api.addr string execution service : (default "localhost:9090") - --sentry.api.addr strings comma separated sentry addresses ':,:' (default [localhost:9091]) - --tls.cacert string CA certificate for client side TLS handshake - --tls.cert string certificate for client side TLS handshake - --tls.key string key file for client side TLS handshake - --trace string Write execution trace to the given file - --txpool.accountslots uint Minimum number of executable transaction slots guaranteed per account (default 16) - --txpool.api.addr string txpool service : (default "localhost:9094") - --txpool.commit.every duration How often transactions should be committed to the storage (default 15s) - --txpool.globalbasefeeslots int Maximum number of non-executable transactions where only not enough baseFee (default 10000) - --txpool.globalqueue int Maximum number of non-executable transaction slots for all accounts (default 10000) - --txpool.globalslots int Maximum number of executable transaction slots for all accounts (default 10000) - --txpool.pricebump uint Price bump percentage to replace an already existing transaction (default 10) - --txpool.pricelimit uint Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default 1) - --txpool.trace.senders strings Comma separared list of addresses, whoes transactions will traced in transaction pool with debug printing - --verbosity string Set the log level for console logs (default "info") + --datadir string Data directory for the databases (default "/home/bloxster/.local/share/erigon") + --db.writemap Enable WRITE_MAP feature for fast database writes and fast commit times (default true) + --diagnostics.disabled Disable diagnostics + --diagnostics.endpoint.addr string Diagnostics HTTP server listening interface (default "127.0.0.1") + --diagnostics.endpoint.port uint Diagnostics HTTP server listening port (default 6062) + --diagnostics.speedtest Enable speed test + -h, --help help for txpool + --log.console.json Format console logs with JSON + --log.console.verbosity string Set the log level for console logs (default "info") + --log.delays Enable block delay logging + --log.dir.disable disable disk logging + --log.dir.json Format file logs with JSON + --log.dir.path string Path to store user and error logs to disk + --log.dir.prefix string The file name prefix for logs stored to disk + --log.dir.verbosity string Set the log verbosity for logs stored to disk (default "info") + --log.json Format console logs with JSON + --metrics Enable metrics collection and reporting + --metrics.addr string Enable stand-alone metrics HTTP server listening interface (default "127.0.0.1") + --metrics.port int Metrics HTTP server listening port (default 6061) + --pprof Enable the pprof HTTP server + --pprof.addr string pprof HTTP server listening interface (default "127.0.0.1") + --pprof.cpuprofile string Write CPU profile to the given file + --pprof.port int pprof HTTP server listening port (default 6060) + --private.api.addr string execution service : (default "localhost:9090") + --sentry.api.addr strings comma separated sentry addresses ':,:' (default [localhost:9091]) + --tls.cacert string CA certificate for client side TLS handshake + --tls.cert string certificate for client side TLS handshake + --tls.key string key file for client side TLS handshake + --trace string Write execution trace to the given file + --txpool.accountslots uint Minimum number of executable transaction slots guaranteed per account (default 16) + --txpool.api.addr string txpool service : (default "localhost:9094") + --txpool.blobpricebump uint Price bump percentage to replace an existing blob (type-3) transaction (default 100) + --txpool.blobslots uint Max allowed total number of blobs (within type-3 txs) per account (default 48) + --txpool.commit.every duration How often transactions should be committed to the storage (default 15s) + --txpool.globalbasefeeslots int Maximum number of non-executable transactions where only not enough baseFee (default 30000) + --txpool.globalqueue int Maximum number of non-executable transaction slots for all accounts (default 30000) + --txpool.globalslots int Maximum number of executable transaction slots for all accounts (default 10000) + --txpool.gossip.disable Disabling p2p gossip of txs. Any txs received by p2p - will be dropped. Some networks like 'Optimism execution engine'/'Optimistic Rollup' - using it to protect against MEV attacks + --txpool.pricebump uint Price bump percentage to replace an already existing transaction (default 10) + --txpool.pricelimit uint Minimum gas price (fee cap) limit to enforce for acceptance into the pool (default 1) + --txpool.totalblobpoollimit uint Total limit of number of all blobs in txs within the txpool (default 480) + --txpool.trace.senders strings Comma separated list of addresses, whose transactions will traced in transaction pool with debug printing + --verbosity string Set the log level for console logs (default "info") ``` \ No newline at end of file diff --git a/src/basic/disk-space.md b/src/basic/disk-space.md index a1118ab..14841da 100644 --- a/src/basic/disk-space.md +++ b/src/basic/disk-space.md @@ -8,7 +8,7 @@ | Network | Archive Node | Full Node | Minimal Node | |----------|--------------|-----------|--------------| | Ethereum | 1.7 TB | 900 GB | 310 GB | -| Gnosis | 511 GB | 354 GB | 200 GB | +| Gnosis | 535 GB | 365 GB | 210 GB | | Polygon | 4.3 TB | 2 TB | 873 GB |