This is a guide for how to run the Stratis Core C# full node (Core) on a Raspberry PI 3 (RPI) with no front end UI. The RPI is not yet an officially supported platform for Core but I personally have been staking successfully for several weeks directly from source code with decent up-time. There are some tips and tricks though to get it running successfully. I will lead you through my approach in this article.
Disclaimers: This is not yet an officially supported platform for Core so do so at your own risk. I provide no guarantees or assurances of the stability of Core for maintaining your funds or staking performance. This is completely unsupported and you are at your own risk. These steps are only recommended for users that have a strong technical background and are technically competent on the Linux OS. If things like docker containers, networking, REST APIs, or firewall configurations are things that scare you, this probably isn’t the best approach for you and you may be better off using the supported full node deployments.
For supported Core platforms visit:
The Stratis Core wallet is an online wallet which allows you to send and receive STRAT coins. This means you can pay…
Configuring your RPI
Memory and Swap File
The RPI has limited memory (approx. 1GB) and Core can be fairly memory hungry especially during initial block download (IBD) phase. Therefore you should make sure you allocate a decent sized swap file. I recommend 2GB if you have a sufficiently large SD card.
Set CONF_SWAPSIZE=2048 in dphys-swapfile
sudo dphys-swapfile swapoffsudo nano /etc/dphys-swapfile sudo dphys-swapfile swapon
We will use docker to build and run the Stratis Core node from source code. So you will need to install docker onto your RPI. This can be done from the following commands:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi
Building, Running, and Testing .NET Core and ASP.NET Core 2.1 in Docker on a Raspberry Pi (ARM32)
I love me some Raspberry Pi. They are great little learning machines and are super fun for kids to play with. Even if…
It’s recommended to setup a firewall on your RPI so you can only access it from your local network (or trusted PCs) and only the peer to peer (P2P) ports for Core are accessible externally. I personally used the UFW firewall on RPI.
I blocked everything except the following:
Ports enabled for my home network (subnet 192.168.0.0/24)
22 : SSH port- used to remote connect to RPI
16174: Stratis Core RPC port- only needed if you need to RPC into node
37221: Stratis Core API port- use to connect to node from home network
Port enabled for external access
16178: Stratis Core P2P protocol
To install and configure UFW with the above:
sudo apt install ufw
sudo ufw allow from 192.168.0.0/24 to any port 22
sudo ufw allow from 192.168.0.0/24 to any port 16174
sudo ufw allow from 192.168.0.0/24 to any port 37221
sudo ufw allow port 16178
sudo ufw enable
sudo ufw status
You should get something like this:
Status: activeTo Action From
— — — — — —
22 ALLOW 192.168.0.0/24
16174 ALLOW 192.168.0.0/24
37221 ALLOW 192.168.0.0/24
16178 ALLOW Anywhere
16178 (v6) ALLOW Anywhere (v6)
If you have problems getting UFW configured check out this reference:
How to Setup UFW Firewall on Ubuntu and Debian
A correctly functioning firewall is the most crucial part of the complete Linux system security. By default, Debian and…
Clone, Build, & Run Core
Create Virtual Directory for Core Node Data
Docker can map virtual directories from inside the docker container to your host’s file system. It is nice to map the Core’s data directory to a virtual directory so you can easily access some the Core’s configuration such as peers.json and wallet files. To do so create a folder on your RPI to host the Stratis Core nodes data:
Run DotNet Docker Container
The dotnet SDK can be hosted and run from within a docker container. This will allow us to build and run the Stratis Core from source code. Run the dotnet sdk docker container with the following command:
docker run -it --name stratis -p 16178:16178 -p 16174:16174 -p 37221:37221 -v ~/stratisnode:/root/.stratisnode microsoft/dotnet:2.1.500-sdk
-p options expose ports from the Core node in the container to the host
-v maps the virtual directory you created into the containers core datadir directory
-it runs the container in interactive mode, see docker docs for more details
Get Stratis Core Source
Clone the Core source from the release branch into your running docker container:
git clone -b release/22.214.171.124 https://github.com/stratisproject/StratisBitcoinFullNode.git
-b release/126.96.36.199 is the release branch from the Stratis Core github repository. At time of writing 188.8.131.52 is the most recent Core release.
This will download the code for the current Stratis Core release into StratisBitcoinFullNode directory.
Find IP of running dotnet sdk Container
There might be an easier way but the containers internal IP can be found by running the following command on the running container.
docker inspect 9e3aa86199cf
Replace 9e3aa86199c with the id of your running dotnet sdk container, list of running containers and their ids can be found by running docker ps
The “IPAddress” at the end of this big list will be your containers internal IP address, make note of it as you will use it in the step below.
Run Stratis Core in DotNet Container
Below are an example command to build and start the node. Once the node is running hit CTRL+P+Q to exit container and leave it running in background.
cd ./StratisBitcoinFullNode/src/Stratis.StratisDdotnet run -c Release -apiuri=”http://172.17.0.2" -server=1 -rpcuser=”[USER]” -rpcpassword=”[PASSWORD]" -rpcallowip=”172.17.0.0/24" -maxblkmem=2 -maxoutboundconnections=8 -maxinboundconnections=8
-apiuri will should contain the IP of the dotnet container you got in the previous step. This will allow you to access the API from another PC on your local network.
You can remotely control the node fully through the API. So exposing RPC is an optional step. If you want to allow RPC access use the -server -rpcuser -rpcpassword options. Replace RPC [User] and [Password] with the credentials you want to use to restrict access to RPC.
-rpcallowip can be used to restrict which IP can access your node via RPC. In this example I have set it to the subnet of my docker host. This allows any of my other containers to access my node via RPC. This is because I have setup a reverse proxy to expose my nodes RPC endpoint. I have been working on a remote monitoring dashboard that uses RPC to monitor your node which I will talk about in a future article. If you want to only allow access from a specific PC on your local network you can enter it’s IP there instead. If you just want to use the API you don’t need to include any of the RPC options above.
Arguments for -apiport and -rpcport are optional you can add those options if you want to map to different ports than the Stratis Core defaults. Just ensure your firewall settings are updated accordingly. It’s a good security practice to use different ports than the defaults.
The -maxblkmem, -maxoutboundconnections, -maxinboundconnections are used to reduce the memory footprint of the node since the RPI has limited memory. I’ve found that these settings currently work best through trial and error.
If you have set everything up properly, your Core node should start syncing and your node’s datadir data should be writing node data in the virtual directory you created in the previous step.
Syncing Stratis Blockchain
You can leave your Core node running in the background by exiting the containers interactive mode by hitting CRTL+P+Q.
You can reattach to the Core node by doing:
docker attach 9e3aa86199cf
Just replace the container id above with your running containers id (which you can get via the docker ps command)
Syncing will take a significant amount of time due to the low memory in the RPI. I had to start and restart my node several times and it took several days to eventually sync the whole blockchain. If your node dies and you need to restart your node, use the dotnet command in the previous step.
Control Stratis Core through API
Once your Core node is running, and you have your firewall setting setup properly you should be able to access the API by browsing to the swagger page on the node from a browser on another PC on your network by navigating to http://192.168.1.1:37221/swagger Where the IP is the IP of your RPI (not the IP of the docker container hosting your node) and the port is the port you configured as the API in the firewall,and node in previous steps.
Creating a wallet
To create a wallet on your RPI execute the following through the swagger page:
This will generate the 12 word backup phrase for your private key. Save and record these words exactly as given. You will need these to create your wallet in the step below, and to restore your wallet if you ever need to restore it from scratch.
Enter the 12 words provided by the previous step in the mnemonic field. Choose a strong password and a passphrase. They can be the same if you want. Enter “default” for the name of the wallet. If you have done this successfully you will have a file called default.wallet.json in your ~/stratisnode/stratis/StratisMain directory.
Be sure to record the 12 words, password, passphrase and the date/time you created the wallet and save somewhere safe. You will need this information if you ever need to restore your wallet from backup in the future.
Transfer funds to Wallet
From swagger page:
AccountName: account 0
This will return a STRAT address you can use for receiving funds to your newly created wallet.
Prior to sending funds to your wallet make sure you are comfortable with the steps below for withdrawal of funds from your wallet, as they are somewhat more complicated. Always send a small amount to test that you can receive funds properly prior to sending a large amount.
Get Wallet Balance
From swagger page:
Send Funds from Wallet
From swagger page:
You will need the walletName, accountName, and password from previous steps to build the transaction. Put the recipient STRAT address in destinationAddress and amount (in STRAT) in amount.
Once you have built the transaction you can send it using the send-transaction method.
Again be sure to test your process with a small amount before trying a larger amount.
From swagger page:
To start staking
password: your wallet password from previous steps
To get staking status
This is a useful function to remotely see the status of the RPI node. From swagger page:
It will provide information like current block synced and current peers etc.
Some other users have reported that you can speed up syncing process by syncing from another computer to a external hard drive and then hooking that hard drive up to your RPI. I have not tried this myself although it should work.
Some other users have been able to get the Core wallet UI running on the RPI. I believe this involves a source code change. I have not tried this myself as I have no x-windows installed on my RPI but may be an option as well.
Other useful information and help can be found in the Stratis discord channel:
Join the Stratis Platform Discord Server!
Check out the Stratis Platform community on Discord - hang out with 4,489 other members and enjoy free voice and text…
Please leave comments below if you find any errors in these steps and procedures. Most of this was created from my somewhat fading memory so I may have missed a step or two.
If you like this guide, feel free to send a STRAT donation to:
Which is a wallet running on a RPI!!