Skip to content

v4.5.0

Compare
Choose a tag to compare
@tohsnoom tohsnoom released this 01 Sep 16:11
· 173 commits to master since this release
a656509

VITAE Core version 4.5.0 is now available from: https://github.com/vitaeteam/vitae/releases

This is a MANDATORY new major version release, including various new features, bug fixes and performance improvements.

Please report bugs using the issue tracker at github: https://github.com/vitaeteam/vitae/issues

Mandatory Update

VITAE Core v4.5.0 is a mandatory update that includes a consensus rule change to replace the seesaw variable rewards algorithm with a fixed rewards structure for staking, masternodes, and fundamental nodes. All wallets, masternodes, and fundamental nodes need to upgrade in order to stay on the offical VITAE mainnet blockchain.

Please upgrade your wallets and other VITAE nodes as soon as possible. If you do not upgrade within the first few weeks of September 2020, you may need to resync the blockchain to restore proper operation of your wallet/node after upgrading.

How to Upgrade

If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/VITAE-Qt (on Mac) or vitaed/vitae-qt (on Linux).

Notable Changes

User Experience

Removal of seesaw rewards algorithm

The previous algorithm that dynamically adjusts masternode and staking rewards based on the amount of masternodes and staking is being replaced with a fixed rewards schedule. This will be enabled on a future date after the majority of the VITAE network has upgraded so that the network can maintain consensus.

Once this takes effect, there will be a fixed reward for each staked block and each masternode reward, regardless of how many masternodes are enabled on the VITAE network. After this change is activated, the masternode reward will be 2 VITAE, the fundamentalnode reward will be 2 VITAE, and the staking reward will be 1 VITAE for each block.

Adjustment to staking properties to reduce orphaned blocks

The stake hashdrift has been lowered to 30 seconds to reduce the number of orphans being experienced by VITAE stakers.

Add TOR service icon to status bar

An icon is now shown for clients that are connected and operating over the TOR network. Included is a mouse-over tooltip showing the onion address associated with the client. This icon is only shown when a connection to the TOR network can be established, and will be hidden otherwise.

Wallet Options

“Unlock for staking and anonymization only” is now selected by default when unlocking the wallet from the User Interface

Backup to external devices / locations

Summary

The VITAE wallet can now have user selected directories for automatic backups of the wallet data file (wallet.dat). This can be set by adding the following lines to the vitae.conf file, found in the VITAE data directory.

  • backuppath = <directory / full path>
  • zvitaebackuppath = <directory / full path>
  • custombackupthreshold =
    Note: System write permissions must be appropriate for the location the wallet is being saved to.
  • Configured variables display in the Wallet Repair tab inside the Tools Window / Dropdown Menu
  • Allows for backing up wallet.dat to the user set path, simultaneous to other backups
  • Allows backing up to directories and files, with a limit (threshold) on how many files can be saved in the directory before it begins overwriting the oldest wallet file copy.

Details:

  • If path is set to directory, the backup will be named wallet.dat-<year>-<month>-<day>-<hour>-<minute>-<second>
  • If zVITAE backup, auto generated name is wallet-autozvitaebackup.dat-<year>-<month>-<day>-<hour>-<minute>-<second>
  • If path set to file, backup will be named <filename>.dat
  • walletbackupthreshold enables the user to select the maximum count of backup files to be written before overwriting existing backups.

Example:

  • -backuppath=/<mynewdir>/
  • -walletbackupthreshold=2

Backing up 4 times will result as shown below

            date/time
backup #1 - 2018-04-20-00-04-00  
backup #2 - 2018-04-21-04-20-00  
backup #3 - 2018-04-22-00-20-04  
backup #4 - 2018-04-23-20-04-00  

1.
    /<mynewdir>/
        wallet.dat-2018-04-20-00-04-00
2.
    /<mynewdir>/
        wallet.dat-2018-04-20-00-04-00
        wallet.dat-2018-04-21-04-20-00
3.
    /<mynewdir>/
        wallet.dat-2018-04-22-00-20-04
        wallet.dat-2018-04-21-04-20-00
4.
    /<mynewdir>/
        wallet.dat-2018-04-22-00-20-04
        wallet.dat-2018-04-23-20-04-00

VITAE Daemon & Client (RPC Changes)

New RPC command

findserial

Search the zerocoin database for a zerocoinspend transaction that contains the given serial. This will help with support issues to verify if a specific zVITAE mint has been spent. This RPC call allows for support to grab the serial, and then find the spend tx on the chain.

New RPC commands

createmasternodebroadcast

decodemasternodebroadcast

relaymasternodebroadcast

A new set of rpc commands masternodebroadcast to create masternode broadcast messages offline and relay them from online node later (messages expire in ~1 hour).

zVITAE Updates

There are some changes and updates to the zerocoin protocol that in the future will help users who hold zVITAE convert it back into VITAE. These changes have been applied in preparation for allowing this spending to take place with a future release, but at this time zerocoin will remain in maintenance mode.

Technical Changes

Switch to libsecp256k1 signature verification

This change lets go of reliance on OpenSSL in the consensus code. The rationale behind it is to avoid depending on an external and changing library where our consensus code is affected. This is security and consensus critical. VITAE users will experience quicker block validations and sync times as block transactions are verified under libsecp256k1.

The recent CVE-2018-0495 brings into question a potential vulnerability with OpenSSL (and other crypto libraries) that libsecp256k1 is not susceptible to.

Write to the zerocoinDB in batches

Instead of using a separate write operation for each and every bit of data that needs to be flushed to disk, utilize leveldb's batch writing capability. The primary area of improvement this offers is when reindexing the zerocoinDB (-reindexzerocoin), which went from needing multiple hours on some systems to mere minutes.

Secondary improvement area is in ConnectBlock() when multiple zerocoin transactions are involved.

Migration to libevent based http server

The RPC and REST interfaces are now initialized and controlled using standard libevent instead of the ad-hoc pseudo httpd interface that was used previously. This change introduces a more resource friendly and effective interface.

New Notification Path

blocksizenotify

A new notification path has been added to allow a script to be executed when receiving blocks larger than the 1MB legacy size. This functions similar to the other notification listeners (blocknotify, walletnotify, etc).

Removed Growl Support

Growl hasn't been free nor needed for many years. MacOS versions since 10.8 have the OS notification center, which is still supported after this.

Resolution of excessive peer banning

It was found that following a forced closure of the VITAE core wallet (ungraceful), a situation could arise that left partial/incomplete data in the disk cache. This caused the client to fail a basic sanity test and ban any peer which was sending the (complete) data. This, in turn, was causing the wallet to become stuck. This issue has been resolved client side by guarding against this partial/incomplete data in the disk cache.

Minor Enhancements

  • Updated RPC help outputs & removed the deprecated obfuscation.
  • Refactored code
  • Various bug fixes
  • Updated documentation

4.5.0 Change log

Detailed release notes follow. This overview includes changes that affect behavior, code moves, refactoring and string updates.

Core Features

  • [Consensus] Fix compilation with OpenSSL 1.1
  • [Consensus] Require standard transactions for testnet
  • [Consensus] Replace seesaw rewards algorithm with fixed rewards
  • [Core] Remove Gitan-OSX warning for High Sierra builds
  • [Core] Give high priority to zerocoinspends to make it into the next block.
  • [Core] Minor refactoring + unused variable removed
  • [Core] Refactor ConnectBlock() to segregate state tracking items
  • [Core] Fix masternode and fundamentalnode broadcast for networks != MAINNET
  • [Crypto] Switch to libsecp256k1 signature verification and update the lib
  • [Core] Switch from local to main signals for the validation interface
  • [Core] zVITAE v2: zPoS dzVITAE ezVITAE external backup and budget fixes (too many to list)
  • [Main] Check whether tx is in chain in ContextualCheckZerocoinMint()
  • [Main] Write to the zerocoinDB in batches
  • [MoveOnly] Remove zVITAE code from main.cpp

Build System

  • [Depends] Update depends package versions.
  • [Build] Remove unnecessary BOOST dependency
  • [Build] Make sure Boost headers are included for libzerocoin
  • [Build] Fixes for OSX builds on newer OS versions
  • [Build] Fixed some compiler warnings
  • [Travis] Add separate job to check doc/logprint/subtree

P2P Protocol and Network Code

  • [Network] Remove vfReachable and modify IsReachable to only use vfLimited.
  • [Network] Updated DNS and fixed seeds
  • [Network] Added checkpoints
  • [Budget] Make sorting of finalized budgets deterministic

GUI

  • [Qt] Refresh zVITAE balance after resetting mints or spends
  • [Qt] Update privacy tab info about zeromint on config change
  • [Qt] Connect automint icon to the UI automint setting change
  • [Qt] Fix warning dialog popup for the Blockchain Explorer
  • [Qt] Make "For anonymization and staking only" checked by default
  • [Qt] Only enable/disable PrivacyDialog zVITAE elements if needed.
  • [Qt] Fixed Multisend dialog to show settings properly
  • [Qt] Show progress percent for zvit reindex operations
  • [Qt] Remove useless help button from QT dialogs (windows)
  • [Qt] Periodic translation update
  • [Qt] Remove Growl support
  • [Qt] Add Tor service icon to status bar

RPC/REST

  • [RPC] Add blocksizenotify command
  • [RPC] Findserial
  • [RPC] Allow watchonly coins to be shown for listunspent
  • [RPC] Segfault vitae-cli getinfo while loading block index
  • [RPC/REST] Migrate to libevent based httpd server
  • [RPC] Show script verification errors in signrawtransaction result
  • [Wallet/RPC] Add argument to mint zerocoin from specific UTXO

Wallet

  • [Wallet] Adjust staking properties to lower orphan rates.
  • [Wallet] Combine fees when possible and fix autocombine insufficient funds
  • [Wallet] Write new transactions to wtxOrdered properly
  • [Wallet] Add some LOCK to avoid crash
  • [Wallet] Add a check on zVITAE spend to avoid a segfault
  • [Wallet] Fix spending for v1 zVITAE
  • [Wallet] Increase valid range for automint percentage

Miscellaneous

  • [Bug] Segfault with -enableswifttx=0 / -enableswifttx=false
  • [Bug] Fix CMasternodeConfig::read
  • [Refactoring] Removed unused function SliceHash
  • [Docs] Added release notes for autocombine and proxy GUI.
  • [Docs] Update OSX build notes: zmq, libevent, and notes to handle possible glibtoolize error
  • [Docs] OSX Build - Instructions on how to make the Homebrew OpenSSL headers visible
  • [Docs] Readme changes
  • [Docs] Change aarch assert sign output folder
  • [Docs] Updated copyright years
  • [Tests] Fix chain ordering in budget tests
  • [Output] Properly log reason(s) for increasing a peer's DoS score.
  • [Utils] Add copyright header to logprint-scanner.py

Credits

  • Wang King
  • Michael Trisko
  • Anthony Posselli
  • blondfrogs
  • Dexaran
  • fanquake
  • Fuzzbawls
  • gpdionisio
  • lex-dev3
  • Mrs-X
  • Nitya Sattva
  • Patrick Strateman
  • PeterL73
  • presstab
  • rejectedpromise
  • SHTDJ
  • Sieres
  • Tim Uy
  • turtleflax
  • Warrows