Copy 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
Copy sudo ufw default deny incoming
sudo ufw default allow outgoing
Copy sudo ufw allow from ${REMOTE.HOST.IP} to any port 8545 8546
Copy sudo ufw allow 30303/tcp
sudo ufw allow 30303/udp
Copy 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
Copy 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
Copy unzip nethermind-latest-linux-x64.zip
Copy 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'
Copy mkdir -p /root/fuse-archive/chainspec
nano /root/fuse-archive/chainspec/fuse.json
Copy {
"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"
}
}
}
Copy mkdir -p /root/fuse-archive/config
nano /root/fuse-archive/config/empty.cfg
Copy mkdir /root/fuse-archive/fuse_data
Copy sudo chmod +x /root/fuse-archive/Nethermind.Runner
Copy sudo nano /etc/systemd/system/nethermind.service
Copy [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
Copy 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
Copy journalctl -f -u nethermind #follow logs of nethermind service