Docs
  • InfraDAO Overview
  • ⌨️Indexing 101
    • Linux and Ethereum Clients
      • Introduction to Linux
      • Getting started with Ethereum Clients
      • Lab 1: Sync a Gnosis blockchain node
  • ⌨️Archive Nodes 101
    • Overview
    • ⏫Arbitrum
      • 💻Baremetal
      • 🐳Docker
    • 🔼Arbitrum Sepolia
      • 💻Baremetal
    • 🏔️Avalanche
      • 🐳Docker
    • 🔵Base
      • Erigon
        • 💻Baremetal
      • GETH
        • 💻Baremetal
        • 🐳Docker
    • 🫐Base Sepolia
      • 💻Baremetal
      • 🐋Docker
        • 🐋Op-Reth
    • 🔔Binance
      • Erigon
        • 💻Baremetal
    • 💥Blast
      • 💻Baremetal
    • 🧋Boba
      • 💻Baremetal
      • 🐳Docker
    • 🫖BobaBNB
      • 💻Baremetal
      • 🐳Docker
    • 🟨Celo
      • 🐳Docker
    • 🔷Ethereum
      • 🦦Erigon
        • 💻Baremetal
        • 🐳Docker
      • 🦀Reth
        • 💻Baremetal
        • 🐳Docker
    • 🦄Ethereum Sepolia
      • 🐉Erigon
        • 💻Baremetal
      • 🦥Geth
        • 🐳Docker
    • 👻Fantom
      • 🐳Docker
    • ♻️Fuse
      • 💻Baremetal
    • 🦉Gnosis
      • 🦦Erigon
        • 💻Baremetal
    • 📍Iotex
      • 💻Baremetal
    • 🔲Linea
      • 💻Baremetal
      • 🐳Docker
    • Ⓜ️Mode
      • 💻Baremetal
      • 🐳Docker
    • 🌌Moonbeam
      • 💻Baremetal
      • 🐳Docker
    • 🌛Moonriver
      • 💻Baremetal
      • 🐳Docker
    • 🔴Optimism
      • GETH
        • 🖥️Baremetal
        • 🐳Docker
      • Erigon
        • 💻Baremetal
    • 🍎Optimism Sepolia
      • 🐳Docker
      • 💻Baremetal
    • ♾️Polygon
      • 🐳Docker
    • 👾Polygon zkEVM
      • 🐉Erigon
        • 💻Baremetal
        • 🐳Docker
    • 🛡️Ronin
      • 🐳Docker
      • 💻Baremetal
    • 🫚Rootstock
      • 🐳Docker
      • 💻Baremetal
    • 📜Scroll
      • 🐳Docker
      • 💻Baremetal
    • 🦔Sonic
      • 🐳Docker
      • 💻Baremetal
    • 🌟Starknet
      • 🪶Pathfinder
        • 🐳Docker
      • 🧑‍🚒Firehose
        • 💻Baremetal
        • 🐳Docker
      • 🏵️Juno
        • 🐳Docker
    • ✖️X Layer
      • 🐳Docker
      • 💻Baremetal
        • 🦥Erigon
        • 👽ZK-Node
    • 💤zkSync Era
      • 💻Baremetal
      • 🐳Docker
    • ⚡Zora
      • 🐳Docker
      • 💻Baremetal
Powered by GitBook
On this page
  • System Requirements
  • Pre-Requisites
  • Setting up Firewall
  • Building a Node on Fuse with Nethermind client
  • Install .NET SDK
  • Download the Latest Nethermind Release Binary
  • Configuing Nethermind client
  • View Logs for Debugging
  • References

Was this helpful?

Edit on GitHub
  1. Archive Nodes 101
  2. Fuse

Baremetal

Authors: [man4ela | catapulta.eth]

System Requirements

CPU
OS
RAM
DISK

4 vCPU

Debian 12/Ubuntu 22.04

8GB min

16GB Recommended

2.5TB+ (SSD)

The Fuse archival node has a size of 2.5TB on Septmber 3rd, 2024

Pre-Requisites

sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove -y

sudo apt install -y git make wget gcc pkg-config libusb-1.0-0-dev libudev-dev jq gcc g++ curl libssl-dev screen apache2-utils build-essential pkg-config unzip

Setting up Firewall

Set explicit default UFW rules

sudo ufw default deny incoming
sudo ufw default allow outgoing

Allow SSH

sudo ufw allow 22/tcp

Allow remote RPC connections with Fuse node

sudo ufw allow from ${REMOTE.HOST.IP} to any port 8545 8546

Not advised to allow all or unknown IP address to RPC port

Allow P2P Connections

sudo ufw allow 30303/tcp
sudo ufw allow 30303/udp

Enable Firewall

sudo ufw enable

To check the status of UFW and see the current rules

sudo ufw status verbose

Building a Node on Fuse with Nethermind client

Install .NET SDK

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y apt-transport-https
sudo apt update
sudo apt install -y dotnet-sdk-8.0

Download the Latest Nethermind Release Binary

wget "$(curl -s https://api.github.com/repos/NethermindEth/nethermind/releases/latest \
        | grep "browser_download_url" \
        | grep "linux-x64.zip" \
        | cut -d '"' -f 4)" -O nethermind-latest-linux-x64.zip

Use unzip to extract downloaded archive

unzip nethermind-latest-linux-x64.zip

Configuing Nethermind client

Increase the maximum number of open files

sudo bash -c 'echo "nethermind soft nofile 100000" > /etc/security/limits.d/nethermind.conf' 
sudo bash -c 'echo "nethermind hard nofile 100000" >> /etc/security/limits.d/nethermind.conf'

Create chainspec file for Fuse

mkdir -p /root/fuse-archive/chainspec

nano /root/fuse-archive/chainspec/fuse.json

Copy/Paste the following contents into the file:

{
  "name": "FuseNetwork",
  "engine": {
    "authorityRound": {
      "params": {
        "stepDuration": "5",
        "blockReward": "0x0",
        "blockRewardContractAddress": "0x63D4efeD2e3dA070247bea3073BCaB896dFF6C9B",
        "blockRewardContractTransition": 100,
        "validators": {
          "multi": {
            "0": {
              "list": ["0xd9176e84898a0054680aec3f7c056b200c3d96c3"]
            },
            "100": {
              "safeContract": "0x3014ca10b91cb3D0AD85fEf7A3Cb95BCAc9c0f79"
            }
          }
        }
      }
    }
  },
  "params": {
    "gasLimitBoundDivisor": "0x400",
    "maximumExtraDataSize": "0x20",
    "minGasLimit": "0x1388",
    "networkID": "0x07a",
    "eip155Transition": 0,
    "validateChainIdTransition": 0,
    "eip140Transition": 0,
    "eip211Transition": 0,
    "eip214Transition": 0,
    "eip658Transition": 0,
    "eip150Transition": "0x0",
    "eip160Transition": "0x0",
    "eip161abcTransition": "0x0",
    "eip161dTransition": "0x0",
    "eip98Transition": "0x7fffffffffffff",
    "eip145Transition": "0x38ada7",
    "eip1014Transition": "0x38ada7",
    "eip1052Transition": "0x38ada7",
    "eip1283Transition": "0xd29240",
    "eip1344Transition": "0xd29240",
    "eip1706Transition": "0xd29240",
    "eip1884Transition": "0xd29240",
    "eip2028Transition": "0xd29240",
    "eip2929Transition": "0xd29240",
    "eip2930Transition": "0xd29240",
    "eip1559Transition": "0x1D653E8",
    "eip2565Transition": "0x1D653E8",
    "eip3198Transition": "0x1D653E8",
    "eip3529Transition": "0x1D653E8",
    "eip3541Transition": "0x1D653E8",
    "eip1559BaseFeeMinValueTransition": "0x1D653E8",
    "eip3651TransitionTimestamp": "0x66A78440",
    "eip3855TransitionTimestamp": "0x66A78440",
    "eip3860TransitionTimestamp": "0x66A78440",
    "eip1153TransitionTimestamp": "0x66A78440",
    "eip5656TransitionTimestamp": "0x66A78440",
    "eip6780TransitionTimestamp": "0x66A78440",
    "eip1559BaseFeeMaxChangeDenominator": "0x8",
    "eip1559ElasticityMultiplier": "0x2",
    "eip1559BaseFeeInitialValue": "0x3b9aca00",
    "eip1559BaseFeeMinValue": "0x2540be400",
    "maxCodeSize": 24576,
    "maxCodeSizeTransition": "0x0"
  },
  "genesis": {
    "seal": {
      "authorityRound": {
        "step": "0x0",
        "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
      }
    },
    "difficulty": "0x20000",
    "baseFeePerGas": "0x2540BE400",
    "gasLimit": "0x989680"
  },
  "nodes": [
    "enode://60ca021ca7a60c5fedeb39344d6ef282c6c8574c87bf492dcef7ed8dd9611c5a33da2b286f12eb81554c403718565a749d5028c9bcfc1d5b90b8d105ac04da4b@35.205.73.124:30303",
    "enode://550041c1883866ee537ddf220c0ea84b614bce27e9adb8de85b3b86bd745d7ed9575043a78fabe192f1f0ceee71a343f1d5b35f09e6bb41f24ac69bfe214f414@34.76.228.61:30303"
  ],
  "accounts": {
    "0x0000000000000000000000000000000000000001": {
      "balance": "1",
      "builtin": {
        "name": "ecrecover",
        "pricing": {
          "linear": {
            "base": 3000,
            "word": 0
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000002": {
      "balance": "1",
      "builtin": {
        "name": "sha256",
        "pricing": {
          "linear": {
            "base": 60,
            "word": 12
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000003": {
      "balance": "1",
      "builtin": {
        "name": "ripemd160",
        "pricing": {
          "linear": {
            "base": 600,
            "word": 120
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000004": {
      "balance": "1",
      "builtin": {
        "name": "identity",
        "pricing": {
          "linear": {
            "base": 15,
            "word": 3
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000005": {
      "builtin": {
        "name": "modexp",
        "pricing": {
          "0": {
            "price": {
              "modexp": {
                "divisor": 20
              }
            }
          },
          "0xd29240": {
            "info": "EIP-2565: ModExp Gas Cost.",
            "price": {
              "modexp2565": {}
            }
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000006": {
      "builtin": {
        "name": "alt_bn128_add",
        "pricing": {
          "0": {
            "price": {
              "alt_bn128_const_operations": {
                "price": 500
              }
            }
          },
          "0xd29240": {
            "info": "EIP-1108 Istanbul HF",
            "price": {
              "alt_bn128_const_operations": {
                "price": 150
              }
            }
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000007": {
      "builtin": {
        "name": "alt_bn128_mul",
        "pricing": {
          "0": {
            "price": {
              "alt_bn128_const_operations": {
                "price": 4000
              }
            }
          },
          "0xd29240": {
            "info": "EIP-1108 Istanbul HF",
            "price": {
              "alt_bn128_const_operations": {
                "price": 6000
              }
            }
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000008": {
      "builtin": {
        "name": "alt_bn128_pairing",
        "pricing": {
          "0": {
            "price": {
              "alt_bn128_pairing": {
                "base": 100000,
                "pair": 80000
              }
            }
          },
          "0xd29240": {
            "info": "EIP-1108 Istanbul HF",
            "price": {
              "alt_bn128_pairing": {
                "base": 45000,
                "pair": 34000
              }
            }
          }
        }
      }
    },
    "0x0000000000000000000000000000000000000009": {
      "builtin": {
        "name": "blake2_f",
        "pricing": {
          "0xd29240": {
            "info": "EIP-152 Istanbul HF",
            "price": {
              "blake2_f": {
                "gas_per_round": 1
              }
            }
          }
        }
      }
    },
    "0xd9176e84898a0054680aec3f7c056b200c3d96c3": {
      "balance": "300000000000000000000000000"
    }
  }
}

Ctrl + X and Y to exit and confirm saving changes to a file

Create an empty config file for Fuse

mkdir -p /root/fuse-archive/config

nano /root/fuse-archive/config/empty.cfg

Copy/Paste the following contents into the file:

{
}

Create Data Directory to store chain data for Fuse blockchain

mkdir /root/fuse-archive/fuse_data

Configure systemd Service

Ensure that you grant execute permission to the binary file:

sudo chmod +x /root/fuse-archive/Nethermind.Runner

Create a systemd service file:

sudo nano /etc/systemd/system/nethermind.service

Add the following content:

[Unit]
Description=Nethermind Node
Documentation=https://docs.nethermind.io
After=network.target

[Service]
User=root
Environment=DOTNET_BUNDLE_EXTRACT_BASE_DIR=/root/fuse-archive/fuse-data/basedir
ExecStart=/root/fuse-archive/Nethermind.Runner \
        --datadir=/root/fuse-archive/fuse-data/datadir/ \
        --config=/root/fuse-archive/config/empty.cfg \
        --Init.DiscoveryEnabled=true \
        --Init.WebSocketsEnabled=true \
        --Init.StoreReceipts=true \
        --Init.ChainSpecPath=/root/fuse-archive/chainspec/fuse.json \
        --Init.BaseDbPath=/root/fuse-archive/fuse-data/basedir \
        --Init.GenesisHash=0x6e778e9491576a28bd06fac93844d8494be1f153e60ba7d29b4b51d991d4f830 \
        --Network.DiscoveryPort=30303 \
        --Network.P2PPort=30303 \
        --Network.LocalIp=0.0.0.0 \
        --Network.ExternalIp=0.0.0.0 \
        --JsonRpc.Enabled=true \
        --JsonRpc.Timeout=20000 \
        --JsonRpc.Host=0.0.0.0 \
        --JsonRpc.Port=9656 \
        --JsonRpc.WebSocketsPort=9756 \
        --JsonRpc.JwtSecretFile=/root/fuse-archive/jwt.hex \
        --Receipt.TxLookupLimit=0 \
        --Metrics.NodeName=fuse_archive \
        --Bloom.IndexLevelBucketSizes="[ 16, 16, 16, 16 ]" \
        --Pruning.Mode=none \
        --Mining.MinGasPrice=1000000000 \
        --Merge.Enabled=false \
        --TraceStore.Enabled=true \
        --TraceStore.BlocksToKeep=0 \
        --TraceStore.TraceTypes=Trace,Rewards \
        --Sync.FastSync=false
Restart=on-failure
LimitNOFILE=1000000
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target

Ctrl + X and Y to exit and confirm saving changes to a file

Reload systemd and Enable the Service

systemctl enable nethermind #enable nethermind service at system startup

sudo systemctl daemon-reload #refresh systemd configuration when changes made

sudo systemctl start nethermind #start nethermind

sudo systemctl stop nethermind #stop nethermind

To check or modify nethermind.service parameters simply run

sudo nano /etc/systemd/system/nethermind.service

Ctrl+X and Y to save changes

View Logs for Debugging

journalctl -f -u nethermind  #follow logs of nethermind service

The logs should look like below and indicate that your node syncs and is expected to reach a chainhead in ~2-3 days

28 Jun 01:13:08 | Finalizing validators for transition signalled within contract at block 473632 after block 473633 (0xba9913...ff8838).

28 Jun 01:13:08 | Applying validator set change before block 473634 (0xae6e4c...881217).

28 Jun 01:13:08 | Downloaded 473,680 / 30,284,955 ( 1.56 %) | current 102 Blk/s | total 156 Blk/s

28 Jun 01:13:09 | Processed 473428... 473681 | 193.72 ms | slot 2,151 ms |⛽ Gas gwei: 0.00 .. 0.00 (0.00) .. 0.00

28 Jun 01:13:09 | - Blocks 254 0.14 MGas | 6 txs | calls 1,835 ( 0) | sload 4,835 | sstore 735 | create 0

28 Jun 01:13:09 | - Block throughput 0.74 MGas/s | 30.97 t/s | 1311.17 Blk/s | recover 0 | process 7

28 Jun 01:13:09 | Signal for transition within contract at block 473732 (0x89197a...464a90). New list of 2 : [0xc736793ff31e04807cbf20b39d50ac7a04a4bdad, 0xd9176e84898a0054680aec3f7c056b200c3d96c3].

References

PreviousFuseNextGnosis

Last updated 6 months ago

Was this helpful?

Since 08.2022 Fuse is moving from OE client to . To bootstrap Fuse archive node this guide covers the steps on how to build Nethermind from source and configure it to run for Fuse Network

⌨️
♻️
💻
Nethermind
LogoInstalling Nethermind | Nethermind documentation
Logofuse-network/README.md at master · fuseio/fuse-networkGitHub
LogoFuse Docs
Logonethermind-client/src/Nethermind/Nethermind.Runner/configs at production · fuseio/nethermind-clientGitHub