# Waves Node
A node is a host in the blockchain network. The node stores the copy of all the blockchain data, validates transactions and blocks, and synchronizes the data with peer nodes. Hundreds of independent nodes ensure the decentralization of the network: no single entity has sole control over the network or the ability to manipulate data.
Waves is a public blockchain: anyone can launch their own node and join the network. You can install and run the Waves application on an ordinary computer. Installation options are given in the Install Waves Node article.
# Node architecture
Waves node main components are:
- Network layer provides interaction with peer nodes.
- Validator checks transactions and blocks against blockchain rules.
- Database stores validated and confirmed transactions and blocks, as well as the current state of the blockchain: balances of accounts, entries of account data storages, assigned scripts etc.
- UTX pool contains unconfirmed transactions until they are included into a block.
- Block generator creates blocks that are added to the blockchain.
- Node REST API is an interface for receiving blockchain data, sending transactions to the blockchain, etc. See the Node REST API article for details.
# Validating Node
Any Waves node, regardless of its WAVES balance, is a validating node. It checks transactions and blocks received from other nodes against the blockchain rules. Invalid transactions and blocks are discarded.
Any node can also propose new transactions, which will propagate in the network until they are included into a block or discarded.
# Generating Node
A node with a generating balance of at least 1000 WAVES can participate in block generation and receive rewards. According to the Leased Proof of Stake (LPoS) algorithm, a node's chance to generate a block is proportional to its generating balance.
The generating balance of an account is its lowest balance in WAVES considering leasing for the last 1000 blocks (more about calculating the generating balance). With leasing mechanic, you can attract funds from other users to increase the generating balance of your node, frequency of block generation and thus the resulting income. More about leasing
The list of generating nodes in the Waves network, their balances, and block statistics are available at dev.pywaves.org.
If you'd like to run a generating node and get rewarded, see instructions.
Please keep in mind that a node with a minimum balance of 1000 WAVES generates ~1 block per month only. Without having a significant amount of WAVES, it is preferable to participate in block generation not by running your own node, but by leasing your WAVES to higher-performance generators.
# Generator's Income
By adding a new block to the blockchain, block generator receives:
- Block reward due to additional issue of WAVES token. The current reward size is 6 WAVES, and it can be increased or decreased by a vote of generating nodes. See the Community-Driven Monetary Policy article for details.
- Transaction fees. The node receives 40% of the total fees for transactions in the current block and 60% of the total fees for transactions in the previous block, according to Waves-NG protocol.
The calculation of the rewards is described in more detail in the Generator's Income article.
To develop and run a decentralized application, you do not have to run your own node. You can receive blockchain data and send transactions signed by users via API of pool of public nodes.
However, running your own node provides you with additional options:
- interact with the node without network latency,
- make more frequent requests than allowed by the limitations of the public pool,
- customize the node configuration with respect to your app,
- install node extensions, for example, Blockchain Updates to track changes,
- create your own node extensions.
# Node Scala and Node Go
The Waves node has two implementations:
- Node Scala is the main version providing maximum functionality.
- Node Go is the alternative version focused on high operation speed and interaction with gPRC services. Node Go is currently under development and not recommended to use in mission-critical projects.
Running two different applications in parallel makes the Waves network more sustainable to protocol implementation errors. Differences between the two versions are highlighted in the Node Go article.