Fruzhin is a Java Implementation of the Polkadot Host. The ultimate goal for Fruzhin is to be able to function as an authoring and relaying node, increasing security of the Polkadot Protocol. It's been funded by Polkadot Pioneers Prize.
Warning Fruzhin is in pre-production state
git clone https://github.com/LimeChain/Fruzhin.git
cd Fruzhin
Fruzhin works with Java 22.
If you have multiple java version installed please make sure you're using 22:
export JAVA_HOME=`/usr/libexec/java_home -v 22`
./gradlew build
java -jar build/libs/Fruzhin-0.1.0.jar -n polkadot --node-mode full --sync-mode full
-n
(network) could be westend
, polkadot
or kusama
--node-mode
could be full
or light
--sync-mode
could be full
or warp
docker image pull limechain/fruzhin
docker volume create rocksdb
docker run -d -v rocksdb:/usr/app/rocks-db limechain/fruzhin -n polkadot --node-mode full --sync-mode full
In order to use the Fruzhin node for local development you will first need to start another node that would serve as a peer.
For the sake of this example we will use Paritytech's implementation. If you are not familiar with how to run a node see this.
Once you have successfully built the Polkadot project run the node via polkadot --dev
.
(The node starts on port 9944 by default)
Now you have 2 options:
local_dev.sh
scriptInstall JQ.
sudo apt-get install jq
Ubuntu
brew install jq
MacOS
Head to the main directory of Fruzhin execute the script ./local_dev.sh
.
Fetch the chain spec
curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "sync_state_genSyncSpec", "params": [true]}' http://localhost:9944
The lightSyncState
field is important for the light client to
work. Without it, the light client won't have a checkpoint to start from
and could be long-range attacked
Create a new westend-local.json
inside of the genesis
project directory.
Copy the contents of the result
field from the fetched chain spec into the newly created westend-local.json
.
In order to comply with the project requirements change the json structured as follows:
Fetched chain spec
{
"genesis": {
"raw": {
"top": {},
"childrenDefault": {}
}
}
}
Desired chain spec
{
"genesis": {
"top": {},
"childrenDefault": {}
}
}
Fetch the local boot nodes.
curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "system_localListenAddresses"}' http://localhost:9944
Paste the response into the bootNodes
field of the westend-local.json
chain spec.
./gradlew build
java -jar build/libs/Fruzhin-0.1.0.jar -n 'local' --node-mode 'full'/'light' --sync-mode 'full'/'warp' --db-recreate true/false