Instructions How to install a Full Waves Node (and accept Tokes as a transaction fee)

Author: Minh Tran, tokesplatform.org

4-3-17

Install the JRE 1.8

Download the JRE 1.8 (Java Runtime Environment) from the Oracle JRE 8 website by going to and click on the download button at the bottom of the label JRE. Click “Accept License Agreement” and click on the link to download the JRE file specific to your Operating System. If you are a Windows user, in most cases,you will click the link next to “Windows x86 Offline” or “Windows x64 Offline” depending if you have a 32-bit or 64-bit Windows machine.

You must add a line;JAVA_HOME/binto your existing PATH environment variable to access the JRE from the command line. You can find detailed instructions on this step at

Now you can check your JRE installation. Run the Windows Command line appcmd.exeand execute the commandjava -version. You should see something similar to the following:

java version "1.8.0_74"

Java(TM) SE Runtime Environment (build 1.8.0_74-b02)

Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

If this is correct, proceed to the next step.

Download the Full Node application .jar file

Go to and download the latest release of the full node .jar file for Mainnet. In this example, you will go to the link above and click on the waves-0.6.3.jar (or newer) link to download the file to your computer.

For Windows users, place this file in the following directory: C:\Waves

Setup the Configuration File

Copy the entire text from the table below and paste it into a .conf file inside the C:\Waves directory where the waves-0.6.3.jar file was saved. You can use any name for the .conf file, for example: waves-mainnet.conf

Look through the documentation at for more details on the different settings to customize your full node.

The Full Node needs to be associated with a wallet. If you already have a Waves wallet, you can use that one. Or I would advise that you create one specifically for the full node.

Create a wallet using the Waves Lite Client. You can download the Waves Lite Client by going to the Chrome App Store (google this) and searching for “wavesliteapp”. After you install the Waves Lite Client, launch it. Then click on the “New Account” button. Enter a name and password for the account. Copy the Wallet Seed and keep it somewhere safe. Click “Register” to create the wallet. Once inside the wallet, look for the 4 icons on the top right of the application screen. The left most icon should be the “Backup” button. Click on Backup. A screen will display showing all the details about your wallet. You will need to copy the Encoded Seed to put into the waves-mainnet.conf file.

Open up the waves-mainnet.conf file with a text editor.

Enter a password between the double quotes in the password section. This password is for the new local wallet that will be created using your Encoded Seed. The password could be a new password. It doesn’t have to be the same as your Waves Lite Client wallet password. You will only need to have the password entered here for the first run of the Full Node. When the Full Node starts for the first time, it will create a local wallet file that it will use to run using the Encoded Seed provided and the password to get into that wallet. After the first run, you can edit the waves-mainnet.conf file again and clear out the password.

# Password to protect wallet file.

password =”passwordhere” (example - password =”389jff39”)

Paste the Encoded Seed from above between the double quotes in the seed section.

# Wallet seed as a BASE58 string.

Seed = "encodedseedstringhere” (example - Seed = “203f939f003f930f3jmn4”)

The Encoded Seed needs to remain.

Run the Full Node

To start the Full Node, go to the command line and execute the below command from inside the directory C:\Waves

java –jar waves-0.6.3.jar waves-mainnet.conf

If everything is correct, you will see the Full Node start logging information and it will start downloading lots of data from the Waves Blockchain. You can also test your node via web browser by loading the url: The Full Node comes with a web UI that you can use to explore the various REST functionality provided by the Full Node. Most of this is to be used by developers. If curious, you can go to for more information. You should disable the REST Web UI once you have tested. Go to the rest-api section in the configuration file and set enable = no.

If something is wrong, you will see an error and it will exit back to the command line. If this happens, you will need to make sure the settings in the configuration file are correct. The defaults set in the configuration file below should work if you follow all of the instructions correctly.

Note

1)You will need to have at least 10,000 Waves in your Full Node wallet in order for your Full Node to work as a miner!

Credit and Disclaimer

-This guide is not intended to be a guide on Blockchain technology. The user of this guide should have some computer knowledge. And should be familiar with the idea of a wallet and how to access / transfer assets from one wallet to another.

-Some parts of this document were copied directly from the Waves website. The Waves team deserves a great deal of credit on that front. The goal here however was to make node setup as simple as possible.

-The goal of this document was to gather all the bits and pieces of information on the Waves website and to present it in a way that would make it easy for a non-developer to follow.

-Some of the information in this document might be outdated by the time you are reading this. As of writing this document, the current version of release is 0.6.3. The latest version that you download may be different.

-Use the information that I provided in this document at your own risk. I am not responsible for any issues that might arise from it (or lost Waves!)

-Please check with the configuration documentation at for more details on how to secure you Full Node for production use. The configuration file that I provided was intended to get you up running a quickly as possible.

Configuration File

Copy the entire text in the shaded area below and save it into a file at C:\Waves\waves-mainnet.conf

# Waves Node settings section.

waves {

# Node base directory.

directory = "C:/Waves"

# Application logging level. Could be DEBUG | INFO | WARN | ERROR. The default value is INFO.

logging-level = INFO

# P2P Network settings.

network {

# Peers and blacklist storage file.

file = ${waves.directory}"/data/peers.dat"

# Network address.

bind-address = "0.0.0.0"

# Port number.

port = 6868

# Node name to send during a handshake. Comment this string out to set random node name.

#node-name = "some-node-name"

# String with IP address and port to send as an external address during a handshake. Could be set automatically in case of UPnP is enabled.

declared-address = ""

# A nonce to send during a handshake. Should be different if few nodes run on the same external IP address. Comment this out to set random nonce.

#nonce = 0

# List of IP addresses of well-known nodes.

known-peers = ["138.201.152.166:6868", "138.201.152.165:6868", "138.201.152.164:6868", "138.201.152.163:6868", "34.192.116.209:6868", "52.8.147.91:6868", "52.192.108.188:6868", "52.62.212.53:6868", "52.67.63.123:6868"]

# Restricts node communication to local machine.

local-only = no

# How long the information about peer stays in the database after the last communication with it.

peers-data-residence-time = 1d

# For how long a peer stays in the blacklist after getting in it.

black-list-residence-time = 10m

# A number of network connections handled simultaneously.

max-connections = 30

# Timeout on network communications with peers.

connection-timeout = 30s

# Network buffer size.

outbound-buffer-size = 16M

# The minimal ephemeral port number used to distinguish incoming connections.

min-ephemeral-port-number = 35368

# The size of a circular buffer to store unverified peers.

max-unverified-peers = 1000

# The period of time between broadcasts of the connected peers' list.

peers-broadcast-interval = 2m

# The number of incorrect packets received from a peer to blacklist it.

black-list-threshold = 50

# The number of unrequested packets received from a peer to blacklist the peer.

unrequested-packets-threshold = 100

# UPnP settings.

upnp {

# Enable or disable UPnP tunnel creation. Use this setting only if your router/gateway supports it. This is useful only if your node is running in a home network. And completely unuseful if your node is in the cloud.

enable = no

# UPnP timeouts.

gateway-timeout = 7s

discover-timeout = 3s

}

}

# Wallet settings.

wallet {

# The path to wallet file.

file = ${waves.directory}"/wallet/wallet.dat"

# Password to protect wallet file.

password = ""

# Wallet seed as a BASE58 string.

seed = ""

}

# Blockchain settings.

blockchain {

# The path to blockchain file.

file = ${waves.directory}"/data/blockchain.dat"

# Blockchain type. Could be TESTNET | MAINNET | CUSTOM. The default value is TESTNET.

type = MAINNET

# The 'custom' section should be uncommented and set only in case of CUSTOM blockchain type is selected. It's impossible to overwrite predefined 'testnet' and 'mainnet' configurations.

# custom {

# # Address feature character. Used to prevent mixing up addresses from different networks.

# address-scheme-character = "C"

#

# # Timestamps/heights then activate/deactivate different validations on blockchain.

# functionality {

# allow-temporary-negative-until = 0

# allow-invalid-payment-transactions-by-timestamp = 0

# require-sorted-transactions-after = 0

# generation-balance-depth-from-50-to-1000-after-height = 0

# minimal-generating-balance-after = 0

# allow-transactions-from-future-until = 0

# allow-unissued-assets-until = 0

# allow-burn-transaction-after = 0

# require-payment-unique-id-after = 0

# }

#

# # Genesis block settings.

# genesis {

# # Timestamp of the genesis block and transactions in it.

# timestamp = 1460678400000

#

# # Genesis block signature.

# signature = "BASE58BLOCKSIGNATURE"

#

# # Initial balance in smallest currency units.

# initial-balance = 100000000000000

#

# # List of genesis transactions.

# transactions = [

# {recipient = "BASE58ADDRESS1", amount = 50000000000000},

# {recipient = "BASE58ADDRESS2", amount = 50000000000000}

# ]

# }

# }

}

# Checkpoints settings.

checkpoints {

# The public key for checkpoints verification. The default value is the TESTNET public key.

public-key = "7EXnkmJyz1gPfLJwytThcwGwpyfjzFXC3hxBhvVK4EQP"

}

# Transaction fees for different types of transactions.

# BDMRyZsmDZpgKhdM7fUTknKcUbVVkDpMcqEj31PUzjMy is the Tokes assetID

fees {

payment {

WAVES = 100000

}

issue {

WAVES = 100000000

}

transfer {

WAVES = 100000,

"BDMRyZsmDZpgKhdM7fUTknKcUbVVkDpMcqEj31PUzjMy": 1000000

}

reissue {

WAVES = 100000

}

burn {

WAVES = 100000

}

exchange {

WAVES = 100000

}

lease {

WAVES = 100000

}

lease-cancel {

WAVES = 100000

}

}

# Matcher settings.

matcher {

# Enable/disable matcher.

enable = no

# Matcher's account address.

account = ""

# Matcher REST API bind address.

bind-address = "127.0.0.1"

# Matcher REST API port.

port = 6886

# Minimum allowed order fee.

min-order-fee = 100000

# A fee of order match transaction.

order-match-tx-fee = 100000

# Matcher's directories.

journal-directory = ${waves.directory}"/journal"

snapshots-directory = ${waves.directory}"/snapshots"

# Snapshot creation interval.

snapshots-interval = 1d

# A maximum number of open orders.

max-open-orders = 1000

}

# New block generator settings.

miner {

# Enable/disable block generation.

enable = yes

# Enable/disable off-line block generation.

offline = no

# The number of connected peers required to start block generation.

quorum = 1

# New block generation interval.

generation-delay = 15s

# The maximum age of the last block to allow generation.

interval-after-last-block-then-generation-is-allowed = 1d

# Enable/disable TF-Like scheduling.

tf-like-scheduling = yes

}

# Node's REST API settings.

rest-api {

# Enable/disable REST API.

enable = yes

# Network address to bind.

bind-address = "127.0.0.1"

# Port to listen to REST API requests.

port = 6869

# Hash of API key string.

api-key-hash = ""

# Enable/disable CORS support.

cors = yes

}

# Nodes' synchronisation settings.

synchronization {

# The number of blocks that could be rolled back in case of a fork detection. If the fork is longer than this the rollback is impossible.

max-rollback = 100

# The size of temporary storage for forked blocks.

max-chain-length = 101

# Load only entire chain from peer then requested.

load-entire-chain = yes

# Timeout to receive all requested blocks.

synchronization-timeout = 30s

# Stick to one peer while receiving requested blocks.

pin-to-initial-peer = yes

# The number of retries of synchronisation before sending the peer to the blacklist.

retries-before-blacklisting = 2

# The number of retries of synchronisation operations.

operation-retires = 3

# Score broadcast interval.

score-broadcast-interval = 30s

# Time to live for broadcasted score.

score-ttl = 90s

}

# Unverified transactions pool settings.

utx {

# Pool size.

size = 10000

# Random transaction broadcast interval.

broadcast-interval = 30s

}

}