nimbus-eth1/fluffy
Kim De Mey c20892f805
Allow starting beacon network in local testnet and add lc bridge (#1654)
Add the option to start the fluffy nodes with the beacon network
activated and allow for running a beacon lc bridge in the local
testnet script.
2023-07-25 14:52:44 +02:00
..
common Add new Portal BlockBody type for Shanghai fork (#1589) 2023-05-30 06:56:54 +02:00
docs Add some minor docs to indicate the existance of eth_data_exporter (#1637) 2023-07-10 19:35:28 +02:00
eth_data Add new portal beacon chain lc content encoding tests (#1636) 2023-07-08 17:01:33 +02:00
grafana Adjust Grafana dashboard to represent the one used for the fleet (#1139) 2022-06-22 17:22:07 +02:00
network Add new portal beacon chain lc content encoding tests (#1636) 2023-07-08 17:01:33 +02:00
network_data/testnet0 Update Fluffy bootstrap ENRs to nodes on new provider (#1619) 2023-06-28 21:29:48 +02:00
rpc Adjust discv5_updateNodeInfo JSON-RPC to specify key and value (#1569) 2023-05-09 14:34:01 +02:00
scripts Allow starting beacon network in local testnet and add lc bridge (#1654) 2023-07-25 14:52:44 +02:00
tests Add new portal beacon chain lc content encoding tests (#1636) 2023-07-08 17:01:33 +02:00
tools Allow starting beacon network in local testnet and add lc bridge (#1654) 2023-07-25 14:52:44 +02:00
README.md Add some minor docs to indicate the existance of eth_data_exporter (#1637) 2023-07-10 19:35:28 +02:00
conf.nim Let Fluffy default join testnet via the testnet bootstrap nodes (#1620) 2023-06-28 23:53:27 +02:00
content_db.nim Add loop to history network to log status message on interval (#1526) 2023-03-31 18:52:21 +02:00
fluffy.nim Improve logging and logging options in Fluffy (#1548) 2023-04-19 17:01:01 +02:00
fluffy.nim.cfg Fix name of fluffy config file and disable log colors for Windows (#1551) 2023-04-20 12:58:56 +02:00
logging.nim Improve logging and logging options in Fluffy (#1548) 2023-04-19 17:01:01 +02:00
network_metadata.nim Add new Portal BlockBody type for Shanghai fork (#1589) 2023-05-30 06:56:54 +02:00
nim.cfg Build Fluffy tools individually through Makefile (#1626) 2023-07-05 16:44:18 +02:00
seed_db.nim Reduce Nim 1.6 compiler warnings & hints 2023-01-31 13:38:08 +01:00
version.nim Add a version to fluffy and add web3_clientVersion JSON-RPC (#1531) 2023-04-05 16:14:42 +02:00

README.md

Fluffy: The Nimbus Portal Network Client

Fluffy CI Stability: experimental License: Apache License: MIT

Discord: Nimbus Status: #nimbus-general

Introduction

This folder holds the development of the Nimbus client implementation supporting the Portal Network: Fluffy. The Portal Network is a project still heavily in research phase and fully in flux. This client is thus still highly experimental.

Current status of specifications can be found in the portal-network-specs repository.

Development Updates

Monthly development updates are shared here.

To keep up to date with changes and development progress, follow the Nimbus blog.

How to Build & Run

Prerequisites

  • GNU Make, Bash and the usual POSIX utilities. Git 2.9.4 or newer.

Build the Fluffy client

git clone git@github.com:status-im/nimbus-eth1.git
cd nimbus-eth1
make fluffy

# See available command line options
./build/fluffy --help

# Example command: Run the client and connect to a bootstrap node.
./build/fluffy --bootstrap-node:enr:<base64 encoding of ENR>

Update and rebuild the Fluffy client

# From the nimbus-eth1 repository
git pull
# To bring the git submodules up to date
make update

make fluffy

Run a Fluffy client on the public testnet

# Connect to the Portal testnet bootstrap nodes and enable the JSON-RPC APIs
./build/fluffy --rpc --table-ip-limit:1024 --bucket-ip-limit:24

The table-ip-limit and bucket-ip-limit options are needed to allow more nodes with the same IPs in the routing tables. The default limits are there as security measure. It is currently needed to increase the limits for the testnet because the fleet of Fluffy nodes runs on only 2 machines / network interfaces.

There is a public Portal testnet which contains nodes of different clients.

Fluffy will default join the network through these bootstrap nodes. You can also explicitly provide the --network:testnet0 option to join this network, or --network:none to not connect to any of these bootstrapn odes.

Note: The --network option selects automatically a static set of specific bootstrap nodes belonging to a "testnet". Currently testnet0 is the only option, which results in connecting to the testnet bootstrap nodes. It should be noted that there is currently no real way to distinguish a "specific" Portal network, and as long as the same Portal protocols are supported, nodes can simply connect to it and no real separation can be made.

The testnet is currently storing only the first 25000 mainnet blocks. This can be tested by using the JSON-RPC call eth_getBlockByHash:

# Get the hash of a block from your favorite block explorer, e.g.:
# 0x8dda3a641653c0454569c3b5be529f58b14d2a5b5d87956664c746ce1e367c21
# Run command to get this block:
curl -s -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":"1","method":"eth_getBlockByHash","params":["0x8dda3a641653c0454569c3b5be529f58b14d2a5b5d87956664c746ce1e367c21", false]}' http://localhost:8545 | jq

One can also use the blockwalk tool to walk down the blocks one by one, e.g:

make fluffy-tools

./build/blockwalk --block-hash:0xf6bfad56d1a45d1661506343dd1e511b5d7e17565b3ec293125ff0890b9709e5

Run Fluffy test suite

# From the nimbus-eth1 repository
make fluffy-test

Run Fluffy local testnet script

./fluffy/scripts/launch_local_testnet.sh

Find more details on the usage and workings of the local testnet script here.

Windows support

Follow the steps outlined here to build fluffy on Windows.

Development tools and documentation

The fluffy directory also holds several tools to help development of the Portal networks.

Command to build the tools:

make fluffy-tools -j6

Additional documention on the tools or on what you can use them for:

  • eth_data_exporter: tool to extract content from EL or CL and prepare it as Portal content and content keys.
  • Content seeding: Documentation on how to retrieve & generate history data and how to seed it into the network
  • Manual protocol interop testing: commands on how to manually test the discv5 and Portal protocol request and responses
  • Local testnet script: Documentation on the local testnet script and how to use it

The basics for developers

When working on this repository, you can run the env.sh script to run a command with the right environment variables set. This means the vendored Nim and Nim modules will be used, just as when you use make.

E.g.:

# start a new interactive shell with the right env vars set
./env.sh bash

More development tips can be found on the general nimbus-eth1 readme.

The code follows the Status Nim Style Guide.

Metrics and their visualisation

To enable metrics run Fluffy with the --metrics flag:

./build/fluffy --metrics

Default the metrics are available at http://127.0.0.1:8008/metrics.

The address can be changed with the --metrics-address and --metrics-port options.

This provides only a snapshot of the current metrics. In order track the metrics over time and to also visualise them one can use for example Prometheus and Grafana.

The steps on how to set up such system is explained in this guide.

A Fluffy specific dashboard can be found here.

This is the dashboard used for our Fluffy testnet fleet. In order to use it locally, you will have to remove the {job="nimbus-fluffy-metrics"} part from the instance and container variables queries in the dashboard settings. Or they can also be changed to a constant value.

The other option would be to remove those variables and remove their usage in each panel query.

License

Licensed and distributed under either of

or

at your option. These files may not be copied, modified, or distributed except according to those terms.