github wavesplatform/Waves v1.6.0
Version 1.6.0 (Stagenet)

pre-release5 hours ago

Attention! This release is for stagenet only! Not for mainnet/testnet.

In this release

This release introduces the new Deterministic Finality feature that will help achieve 2-block finality under most circumstances.

Protocol enhancements

Deterministic Finality

Once feature 25 is activated, miners will need to commit to generation in the following Generation Period by sending a CommitToGeneration transaction. Generation Period duration varies by network (1000 blocks for Stagenet, 3000 blocks for Testnet, and 10000 blocks for Mainnet). Besides mining new blocks, upon successful block application, the node will automatically broadcast the signed endorsement of the parent of the newly applied block to its peers. The miner of the current block collects the endorsements from its peers and includes them in the current block. Since only committed generators can participate in block production, for each Generation Period the total generating balance is known. The block endorsed by at least 2/3 of the total generating balance is considered finalized: the node will not rollback beyond that block when switching to another chain.

If no miners have committed to the next Generation Period, or neither of the committed generators have enough generating balance (at least 1000 waves), the blockchain falls back to the previous miner selection mechanism where anyone with enough balance can forge new blocks. In this case the block at (current height - 100) will automatically finalize.

CommitToGeneration Transaction

Besides the standard transaction fields, this transaction contains:

  1. the BLS public key derived from the private key the node will use to sign block endorsements
  2. the start height of the next Generation Period
  3. BLS signature of the concatenated (1) and (2)
    To commit to generation, the miner must provide the deposit of 100 waves. This deposit is locked from the moment of the transaction processing up until the end of the Generation Period the miner is committing to. This deposit is withheld if the miner broadcasts conflicting endorsements.

You can sign a CommitToGeneration transaction with one of the keys in the node's wallet by using the /transactions/sign API endpoint. By default, the node will find the key pair corresponding to the address in the sender field of the request JSON, use the private key as the BLS public key, create the BLS signature and sign the transaction with the waves private key.

Ride

  • Released version 9 of the Standard Library.
  • Added CommitToGeneration transaction binding.
  • Decreased complexity for several functions.

Node REST API

  • /generators/at/{height} lists all generators committed to mining at height and their respective generating balances, as well as heights where they have sent conflicting endorsements, if any.
  • /blocks/height/finalized returns the height of the currently finalized block.
  • /blocks/finalized and /blocks/headers/finalized returns the current finalized block and its header, respectively.
  • /blocks/finalized/at/{height} returns the height of the block that has been finalized at height.
  • finalizationVoting in block JSON contains both the indexes of valid endorsement senders and conflicting endorsements collected by the miner of this block.

Activation

To activate the improvements listed above, vote for feature #25 Deterministic Finality.

Update Notes

There's no need to rebuild the state when updating from 1.5.12.

Don't miss a new Waves release

NewReleases is sending notifications on new releases.