Masternoding

Earn rewards and participate in the growth of the project

What is a Masternode?

Masternodes are servers with a pre-determined amount of collateral backing their power to validate transactions on the network. In terms of Rupaya, the amount required to run a masternode is 10,000 RUPX (YOU NEED TO BUY 10,001 IN ORDER TO COVER TRANSACTION FEES FROM THE EXCHANGE TO YOUR WALLET (Transfer fee from stocks exchange is .001 for example). In exchange for this investment your server running the Rupaya core wallet is enabled to validate transactions on the blockchain. For this validation service that your server is providing, you are rewarded in two ways. The most straightforward way is in the case of Masternode Rewards (set amount of currency). Currently the reward is 66RUPX during this current block phase (Phase 3, Official Reward Breakdown). The second is through the governance system. Proposals are submitted and only Masternode owners may vote on those proposals and thereby you help to control the growth and development of your investment.

Where can I buy the required RUPX?

Available Exchanges include:

I just bought 10,001 RUPX! Now what?

Time to get yourself a Rupaya Core wallet if you don't have one already. The current wallet version is 4.10 which was released in April and brought with it the governance functionality we spoke of earlier (Information on governance can be found here).

Install the appropriate wallet for your operating system and leave it running so that it will fully synchronize the Rupaya blockchain while we work on setting up rest of your masternode.


How do I know my Wallet is fully synched?

There is a checkmark in the bottom-right corner of the application that will be blue once your wallet is fully synchronized with the blockchain.


Wallet is synching now what?

Now we need to purchase a linux VPS to install our masternode on, but before we spin up our new VPS however we are going to generate some keypairs for added security on your masternode.

What the @#*% is a keypair?

SSH keypairs are public and private keys that authenticate your account. This is a significant security improvement over password authentication and is painless to setup (Find more information on SSH encryption here).

Windows Users

Windows users will need to download the putty client. They have a stand-alone version as well as an installer package. If you are new to this then I suggest using the installer package (Putty Download Link)

Generating keys with puttygen on windows


Linux/Mac Users

Generating keys with ssh-keygen on Linux/Mac


Generating additional keys with ssh-keygen on Linux/Mac


Ok I have my keys, can I start my VPS now?

Absolutely! Top providers for creating your VPS (Droplet) include DigitalOcean or Vulture. I prefer Digital Ocean and if you wish to use Digital Ocean as well then here is my referral link for $10 off your new account.

Creating VPS Droplet on Digital Ocean


Multiple Masternode Advice

When spinning up your new droplet, only enable IPV6 if you plan to run two MN on one VPS. In my opinion this is a unecessary risk in the sense that if you have a problem with the VPS instance then it affects both your nodes at once. I prefer to run each node individually and spread those nodes around the globe in different datacenters.


Using your SSH Keys to login

Now that your VPS is created we can login to our new server using our fresh ssh keys.

On windows this will be through the Putty Client

On Mac or Linux you can simply use the ssh package already included

Using SSH on Mac/Linux to login to our VPS with SSH Keys


I'm finally logged in, now lets get this baby running

First thing we want to do is update our system packages and install basic ssh protection with fail2ban (If you are using Ubuntu 16.04 then Fail2ban is setup to protect SSH by default, for other distributions please see fail2ban's extensive documentation).

apt-get update apt-get install fail2ban apt-get upgrade -y

Updating packages and installing fail2ban


Copy Fail2Ban configs

Once Fail2Ban is installed we will want to create modifiable configs for fail2ban and its jail settings (Find out more information on fail2ban documentation).

cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Configuring Swap Space

Next we want to setup some swap space on our SSD disk to assist with our systems memory requirements.

fallocate -l 3000M /mnt/3000MB.swap dd if=/dev/zero of=/mnt/3000MB.swap bs=1024 count=3072000 mkswap /mnt/3000MB.swap chmod 600 /mnt/3000MB.swap echo '/mnt/3000MB.swap none swap sw 0 0' >> /etc/fstab swapon /mnt/3000MB.swap

Swap Space

I move the activation of the swap space until the end to avoid locking issues.

Setting up swap space on our VPS


You can check that you have successfully created your swap space and that it is active by running free -h.

Configuring local firewall

Setting up the firewall to allow ssh and masternode communication. From the command prompt paste the following commands.

ufw allow 22/tcp ufw limit 22/tcp ufw allow 9020/tcp ufw logging on ufw --force enable

Configuring the uncomplicated firewall (UFW)


Establishing a new user account

Best practice suggests the avoidance of using root, and rather utlize a elevated users privledges. Our next step is then to create this new account on our VPS.

adduser rupxmn

Create new user and add to sudo group


You will be prompted for general user details (name, room number, etc). You can leave this information blank, but just be sure to confirm the user creation at the end. Now that we have our new user account, we need to modify some permissions and then adding our ssh key we have created for this user.

usermod -aG sudo rupxmn su - rupxmn mkdir ~/.ssh chmod 700 ~/.ssh

Switch to new user and load ssh public key for user


We now need to add the text of your public key into a file, called 'authorized_keys', which we are going to create in the new '.ssh' directory we established under our new user account. Create a the file and open the 'vi' editor with the following command.

vi ~/.ssh/authorized_keys

Highlight the public key information either from your machines command line or if you are using windows then from the Puttygen public key window (Be sure to copy ALL of the text in the window) and copy the text.

Switch back to your VPS and hit either the 'a' or 'i' key to begin inserting our public key text. Now 'right-click' your mouse to auto-paste the public key we just copied. Lastly you hit the escape key, then type ':wq', and finally hit the enter key. This will now write the public key information into that file we just created.

Before we leave this open session we want to test our new user connection by successfully logging into our VPS utilizing our new username and private key file. If you can successfully login as your new user, and run as sudo (example 'sudo apt-get update', if prompt for your password and entry is successful then the user has proper privledge level). Feel free to minimize this session as we will return to it in a moment.

Removing Root Access from SSH

Returning to our original session type exit to return to the 'root' user account. From there paste the following commands to remove ssh access via root user and restart the ssh service

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config systemctl reload sshd

Removing Root Login


At this point we can close this session and open back up our fresh session thats using our new user account and private key.

Updating Putty profile on windows with new user and private key.


Installing Rupaya Hot Wallet

Begin by downloading the latest wallet release to your VPS.

wget https://github.com/rupaya-project/rupaya/releases/download/4.1.2/rupaya-4.1.2-linux-x64.tar.gz

Downloading Rupaya wallet to VPS.


Now unpack the package to the /usr/local/bin directory.

sudo tar xvzf rupaya-4.1.2-linux-x64.tar.gz -C /usr/local/bin/

Unpacking wallet to /usr/local/bin


Lastly we want to launch the Rupaya daemon (don't worry, we expect it to fail. This is to create directory and configuration files.).

rupayad

Within the generated text you will find a generated username and password. Copy those for use in your rupaya.conf file we are about to setup.

vi ~/.rupaya/rupaya.conf

Again like with the ssh file before we need to press either 'a' or 'i' to insert text into the vi editor. Copy the below configuration information into the file, but change RPCUSER, RPCPASSWORD, EXTERNALIP, and MASTERNODEADDR accordingly.

rpcuser=rupxuser rpcpassword=someSUPERsecurePASSWORD3746375620 rpcport=7020 rpcallowip=127.0.0.1 rpcconnect=127.0.0.1 rpcbind=127.0.0.1 maxconnections=512 listen=1 daemon=1 externalip=YOUR-VPS-IP-ADDRESS:9020 masternodeaddr=YOUR-VPS-IP-ADDRESS:9020 addnode=seeds.rupx.io

Just like before press the escape key, then type ':wq', and finally press the enter key. Now that we have the initial rupaya configuration setup, it's time to launch the daemon again.

rupayad

Unpacking wallet to /usr/local/bin


Leave daemon running till fully synched!

We have a few more tasks to accomplish but I encourage you to let the blockchain synch completely before you restart the rupaya daemon again. I have notice a lot of reports that blocks are getting stuck and suspect this may be the culprit.

We next need to generate a masternode private key (This is not the private key for your actual wallet!)

rupaya-cli masternode genkey

Copy the outputted private key off to the side for use in our rupaya configuration. Time to open the Rupaya configuration file again.

vi ~/.rupaya/rupaya.conf

Navigate to the end of the file and press 'a' (insert text after cursor). Return down a line and add the following two lines to the end of your rupaya.conf file.

masternode=1 masternodeprivkey=87LBTcfgkepEddWNFrJcut76rFp9wQG6rgbqPhqHWGvy13A9hJK

Your finaly rupaya.conf file should look like the following:

rpcuser=rupxuser rpcpassword=someSUPERsecurePASSWORD3746375620 rpcport=7020 rpcallowip=127.0.0.1 rpcconnect=127.0.0.1 rpcbind=127.0.0.1 maxconnections=512 listen=1 daemon=1 externalip=YOUR-VPS-IP-ADDRESS:9020 masternodeaddr=YOUR-VPS-IP-ADDRESS:9020 addnode=seeds.rupx.io masternode=1 masternodeprivkey=87LBTcfgkepEddWNFrJcut76rFp9wQG6rgbqPhqHWGvy13A9hJK

As before press the escape key, then type ':wq', and finally hit the enter key. Now that our Rupaya.conf is ready to go let's tidy up a couple more things before we restart and activate our node.

Generating your masternode private key and editing the config


Setting up Log Rotation

Since we are running Rupaya under our user account, the log files can be view with our permissions alone. That being said we will create a logrotate rules and schedule within our profile. Now let's create that logrotate file and open it in VI with the following command.

vi ~/logrotate.conf

Yet again we need to press either 'a' or 'i' to insert text into the vi editor. Copy the lines below and paste into our file.

/home/rupxmn/.rupaya/*.log { size 3M daily missingok rotate 30 copytruncate dateext compress notifempty create }

As before press the escape key, then type ':wq', and finally hit the enter key. The conditional rules for log rotation that we have set are: if log file is greater than 3Mb in size, over a day old, keep 30 logs in total, create a clean log file after rotation, append the date to the rotated log, and compress the log with gunzip. Now that we have setup our logrotate configuration we need to create a state file in our home directory.

logrotate /home/rupxmn/logrotate.conf --state /home/rupxmn/logrotate-state --verbose

This will create our initial state file and give us a baseline for logrotate to evaluate our rules.

Setting up Cron jobs to start run our logrotate command and restart Rupaya upon system reboot

Since we don't require root I am going to install this first cronjob under our user account. You could also set this cron job up using the system crontab like we will for the restarting of the Rupaya daemon after reboot.

crontab -e

Ubuntu will prompt you for which editor to use, for me I am going to continue with VI (option 3). Once it opens the crontab go to the end of the file and hit 'a' to begin inserting text. Hit enter to return down to a clean line and input the following:

0 1 * * * /usr/sbin/logrotate /home/rupxmn/logrotate.conf --state /home/rupxmn/logrotate-state

As always with VI, press the escape key, then type ':wq', and finally hit the enter key. Now that we have a state file created and a cronjob setup to run logrotate against the rules we set every day at 1am. We could make the rotation any interval we choose.

We are going to create a quick cron job entry to ensure that if we restart our VPS or if it goes down unexpectedly that the Rupaya daemon starts once the server has booted back up.

sudo vi /etc/cron.d/resetrupaya

Again like before we need to press either 'a' or 'i' to insert text into the vi editor. Copy the line below and paste into our file.

@reboot rupxmn sleep 5 && /usr/local/bin/rupayad

As before press the escape key, then type ':wq', and finally hit the enter key.

By this point our masternode should be fully synchronized with the blockchain but we can check with rupaya-cli getblockcount. If that matches whats on http://mn.rupx.io/ and whats on your cold wallet, then we are ready to go. To check the block count on your cold wallet, select the debug console from the tools menu and enter getblockcount. Enter the following to shut your rupaya daemon down cleanly wait 2 minutes and restart:

rupaya-cli stop && sleep 120 && rupayad

Check blockcount every minute

Since we are waiting for the blockchain to fully synchronize, feel free to use to the following command to follow the block increases until it matches your cold wallet and the block explorer. This code will check the block count every minute for 15 minutes.

for i in {1..15}; do rupaya-cli getblockcount; sleep 60; done

Activating our masternode

We are going to activate our new masternode from the cold wallet we installed at the beginning of this article. However before we transfer money into our wallet, we should protect it by encrypting the wallet.

Encrypting your Wallet

In the cold wallet select Settings, then Encrypt Wallet. This is going to bring up a prompt for you to set a passphrase. Enter a strong passphrase and confirm it (if you are the forgetful type then write this passphrase down and secure it in a safe location, post-it note on your monitor would not qualify). After you hit enter it will appear as if it is frozen, IT'S NOT! Be patient as it is generating your keypairs for encrypting the wallet. Once complete the wallet will need to restart.

Ok my wallet is protected, can I transfer funds finally?

YES! We need to transfer EXACTLY 10,000 RUPX to a receiving address that we setup. On the cold wallet select File,then Receiving Addresses. Click the button New and give the receiving address a label like MN1. Now select the new address click on the Copy button to copy the wallet address (Example address: 7B1w7xczeTAqKiAkiZ1AMHhXSSdJbNkoSs) to your clipboard.

Depending on where your coins reside, the amount to transfer may vary based on the transaction fees. For the purposes here I will assume that the coins will be withdrawn from Stocks.Exchange. From the withdrawal screen you will enter 10000.001 to cover the .001 transaction fee charge. After sending, you can verify the balance on the transactions tab of your cold wallet. This can take a few minutes to be confirmed by the network. Once the transaction has been confirmed and shows a check mark on your transactions tab, open up the debug console again (Tools menu, Debug Console), and enter masternode outputs. You should see something like the following, which represents a masternode valid transaction entry:

[ { "txhash" : "c19972e47d2a77d3ff23c2dbd8b2b204f9a64a46fed0608ce57cf76ba9216487", "outputidx" : 1 } ]

If you see the above then we can move on to modifying our masternode.conf file in the cold wallet. Select Tools, then Open Masternode Configuration File. If you get prompted for a program to use for opening the file, then Notepad/texedit will suffice.

If the Masternode.conf doesn't open, where can I find it?

  • Mac: ~/Library/Application Support/Rupaya
  • Windows: ~\AppData\Roaming\Rupaya

When the file opens, you should see a line that is commented out (# in front) at the bottom of the file. This is the format we must use to enter our masternode information. Looking at the template example, we need to construct the following:

[Receiving-Address-Label] YOUR-VPS-IP-ADDRESS:9020 [masternodeprivkey] [txhash-from-cold-wallet] [outputidx-from-cold-wallet]

If I assummed my Label was MN1 as described above, and assumming my VPS IP ADDRESS was 1.1.1.1, then the line I would build using the other information in this document would be as follows:

MN1 1.1.1.1:9020 87LBTcfgkepEddWNFrJcut76rFp9wQG6rgbqPhqHWGvy13A9hJK c19972e47d2a77d3ff23c2dbd8b2b204f9a64a46fed0608ce57cf76ba9216487 1

When you are finished save and close the masternode.conf. Now exit your wallet and give it a minute to shutdown cleanly. Once it has fully shut down, re-open the wallet and we should find our newly configured masternode listed on the wallet Masternodes tab. Give the wallet a minute to synchronize and then unlock your wallet with your configured passphrase. With the wallet unlocked and synchronized with the network we are not going to head back to our favorite debug console (Tools, then Debug Console), and enter the following command:

startmasternode alias false MN1

You should see a successful message similar to the following:

{ "overall" : "Successfully started 1 masternodes, failed to start 0, total 1","detail" : [ { "alias" : "MN1", "result" : "successful", "error" : "" } ] }

That should be all there is to it, but lets just confirm on the VPS side by running the following command from your masternode VPS, rupaya-cli masternode status. If it returns the following:

{ "txhash" : "c19972e47d2a77d3ff23c2dbd8b2b204f9a64a46fed0608ce57cf76ba9216487", "outputidx" : 1, "netaddr" : "1.1.1.1:9020", "addr" : "7B1w7xczeTAqKiAkiZ1AMHhXSSdJbNkoSs", "status" : 4, "message" : "Masternode successfully started" }

CONGRATS! Go grab the relaxation beverage of your choice, kick back and wait for your first payout. The first payout is currently taking just under 3 days and then pays out daily (as of 5-23-18).


Frequently Asked Questions


How long before my first payout?

I understand, TL;DR version: just under 3 days for first reward.


How can I calculate the payout rate?

Block rewards are every minute, there are 1440 minutes in a day. To calculate the payout rate: take 1440 and divide that by the number of active masternodes (http://mn.rupx.io/). So when we reach 1440 active masternodes the payout cycle would be exactly once per day.


My blockchain is no longer synching, or is stuck.

Many times in discord we will hear about a masternode setup that was synching but now is stuck. This is often fixed by issuing the following command.

rupaya-cli stop && sleep 120 && rupayad -reindex

What this command will do is shut the rupaya daemon down, force the server to wait 2 minutes, before issuing the last command which will start the rupaya daemon again but with the trigger to reindex the blockchain. Once the rupaya daemon is started again, this is a great time to follow the blockchain increases with my little one-liner:

Check blockcount every minute

Since we are waiting for the blockchain to fully synchronize, feel free to use to the following command to follow the block increases until it matches your cold wallet and the block explorer. This code will check the block count every minute for 20 minutes.

for i in {1..20}; do rupaya-cli getblockcount; sleep 60; done

If it is still stuck then backup masternode.conf, rupaya.conf, and wallet.dat from the rupaya directory. Delete the rupaya directory and re-create with rupayad, then move your wallet and configuration files back into the folder. Lastly, start the rupaya daemon again with rupayad and use my "Check blockcount every minute" code to follow the block increases till its fully synchronized.


How can I shut my masternode down?

As we are always sorry to see anyone go, we absolutely want to make sure you have the proper instructions to do so. To unlock your coins and shut your node down, proceed with the following steps:

  1. Open up your cold wallet
  2. Click and on the masternodes tab, select your master node, and click Start Missing.
  3. Now click on the tools menu and selct Open Masternode Configuration File.
  4. Either delete the line with the masternode you wish to take down, or simply add a "#" at the start of the line. Save and close the file.
  5. Shut your cold wallet down and wait for it to close.
  6. Re-open your wallet and you should see that your masternode collateral funds are now unlocked.
  7. At this point you are free to do with the coins whatever you wish.
  8. Don't forget to destroy your droplet on whatever cloud provider you chose (no sense paying for something you are no longer using).

Coming Soon...