nimbus-eth1/fluffy
Kim De Mey 89023782f3
Let Portal wire protocol adhere to the discv5 packet size limits (#1008)
- Truncate returned number of ENRs in Portal Nodes message to fit
the discv5 max. packet size
- Truncate returned number of ENRs in Portal Content message to
fit the discv5 max. packet size
- Use more detailed packet size calculation for max content payload
in Portal Content message.
- Add metrics to track how many ENRs get packed in the Portal
Nodes and Content messages.
2022-03-24 21:06:13 +01:00
..
common Fix error when dataDir does not exist (#1000) 2022-03-18 13:06:57 +01:00
docs Update local_testnet.md (#976) 2022-02-22 15:55:47 +01:00
network Let Portal wire protocol adhere to the discv5 packet size limits (#1008) 2022-03-24 21:06:13 +01:00
network_data/testnet0 Add bootstrap nodes at compile time for testnet0 (#998) 2022-03-17 18:39:24 +01:00
rpc Adjust findNodes proc naming for consistency (#1002) 2022-03-19 08:54:42 +01:00
scripts Add block bodies to the propagation and lookups (#975) 2022-02-22 11:52:44 +01:00
tests Adjust findNodes proc naming for consistency (#1002) 2022-03-19 08:54:42 +01:00
tools Adjust findNodes proc naming for consistency (#1002) 2022-03-19 08:54:42 +01:00
README.md Update fluffy README with docs on testnet0 (#999) 2022-03-17 22:41:43 +01:00
conf.nim Add bootstrap nodes at compile time for testnet0 (#998) 2022-03-17 18:39:24 +01:00
content_db.nim Add api to get db size to content db (#987) 2022-03-08 14:49:41 +01:00
fluffy.nim Fix error when dataDir does not exist (#1000) 2022-03-18 13:06:57 +01:00
fluffy.nim.cfg Fix runtime loglevel selection for Fluffy (#980) 2022-02-24 22:50:59 +01:00
network_metadata.nim Add bootstrap nodes at compile time for testnet0 (#998) 2022-03-17 18:39:24 +01:00
populate_db.nim Avoid opening an uTP stream when no content was accepted (#1001) 2022-03-18 18:29:06 +01: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

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

Monthly development updates are shared here.

How to Build & Run

Prerequisites

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

Build 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 fluffy client

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

make fluffy

Run fluffy test suite

# From the nimbus-eth1 repository
make fluffy-test

Run fluffy on (Nimbus) public testnet0

There is a fleet of fluffy nodes deployed, and to easily join these, the --network:testnet0 option can be used.

./build/fluffy --network:testnet0 --table-ip-limit:1024 --bucket-ip-limit:24 --log-level:info --rpc

Note: This --network option will merely select a static set of specific bootstrap nodes belonging to a "testnet". Currently testnet0 is the only option, which results in connecting to designated fluffy bootstrap nodes. It should be noted that there is 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 table-ip-limit and bucket-ip-limit options are needed to allow more nodes with the same IPs in the routing tables. This is needed because the fleet of fluffy nodes runs on only 2 machines / network interfaces.

The network is currently storing only the first 2500 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

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.

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.

Detailed document showing commands to test client protocol interoperability.

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.