This is a stable release, introducing multiple enhancements and bugfixes. Itis a recommended upgrade for production use.

On testnet, upgrade before block 3250000 (expected Nov 7, 2019) is mandatorydue to the activation of the following new features that require a hard fork:

Allow sending zero fee child chain transactions even from accounts not yetregistered on the blockchain.

Allow setting up account control with zero max fees. This completely removesthe risk that an attacker who obtains the passphrase of an account placedunder account control may slowly waste its funds on fees, however thetransactions fees for such an account will need to be sponsored, i.e. itstransactions must be bundled by some bundler for free.

The above features will be available on testnet after block 3250000, and willalso become enabled on mainnet at the next scheduled hard fork.

If you have enabled any of those in the nxt.properties file, the nxt.addOnsproperty must be updated with the new add-on classname.

For add-ons in the nxt.addons package, such as the process management add-ons,specifying the full Java package name is now optional, i.e. if only the classname is specified in the nxt.addOns property, it is assumed to be in thenxt.addons package.

Each of the new add-ons exports two http APIs, to allow saving the encryptedconfiguration and starting the corresponding process.

The EncryptedConfig add-ons now by default use files under the conf/processesdirectory to save the encrypted processes configuration, overwriting existingfiles if needed. An alternative location can be specified using thenxt.addons.EncryptedConfig.path property. When using the API, the config filecan also be saved under any other path, as long as it does not overwrite anexisting file.

Client-side encryption is also supported by the SaveEncrypted add-on APIs. Ifthe config data is already encrypted, the dataAlreadyEncrypted=true requestparameter must be set, and there is no need to submit the encryptionPassword.

All of the above forging, bundling, funding monitors, and standby shufflingprocess management add-ons are now fully supported by the wallet UI.A "Processes" page has been added, accessible under the cogwheel menu, fromwhich the configuration of currently running forgers, bundlers, fundingmonitors or standby shufflers can be saved to an encrypted configuration file,and restored again after a node restart by supplying the encryption password.The corresponding add-ons must first be enabled in the nxt.properties file inorder for the option to save/start them to appear in the Processes page.

The wallet UI now allows attaching an unencrypted message also to transactionsthat do not have a recipient.

Multiple UX improvements to reduce or automate the switching between chainsthat is sometimes needed when the user tries to access a feature or submit atransaction not supported on the current chain.

The Standby Shufflers UI has been improved to show the numbers of shufflingrecipient accounts remaining and currently in use.

The Funding Monitors UI, available under the cogwheel menu / Monitors, nowallows starting a funding monitor for assets or monetary system currencies,not only for child chain coins. Funding monitors for such holdings must be runon a chain that allows asset transfer or currency transfer transactions, i.e.not on the parent Ardor chain.

The startFundingMonitor and getFundingMonitor APIs now support an optionalincludeHoldingInfo parameter, to request the asset or currency info to beincluded in the response json.

Setting up https on a public node running Ardor has been made simple, withoutthe need for a reverse proxy. The new pem.to.pkcs12.keystore.certbot.hook.shscript can be used to convert an SSL certificate issued by Let's Encrypt toa keystore file that the Ardor node can use. The run.sh script now supportsauthbind, if started with the --authbind modified, to allow the Ardor softwareto listen on port 443 without having to run it as root. A detailed tutorialputting everything together is available at:https://ardordocs.jelurida.com/Configuring_HTTPs_on_a_standalone_Ardor_installation

A new managePeersNetworking API has been added, to allow disabling orenabling the node peer networking at runtime. It takes a single "operation"parameter, with possible values: "enable", "disable", and "query", andrequires the adminPassword when run on a public node.

A new property has been added, nxt.deleteProcessedVotes=true, to optionallydisable the deletion of votes records when trimming the votes table. Notethat even if votes are not deleted, re-calculation of poll results may requiredata that are no longer available (such as account or asset balances at thetime of poll finish), unless a blockchain rescan is done, this is why thedefault is still to delete old votes records.

The compact.sh script has been improved to better reduce the database size.A new property has been added, nxt.disableCompactOnShutdown=false to allowdisabling database compact on shutdown, for faster restarts during development.

The export/import functionality for contacts and approval models, as used inthe browser based wallet UI, is now available and compatible with the JavaFXbased desktop wallet too.

The Contract Runner doesn't require anymore an initial configuration onnxt.properties or an external JSON file. Instead, it can be bootstrappedfrom the new Processes page or from an uploaded configuration file.The recommended configuration procedure is now the Processes page as itprovides a persistent configuration using encryption instead of plain textfiles. It also helps with the initial configuration. When you open theSave modal window for Contract Runner under the Processes page you are presentedwith a basic minimum configuration like this:

The accountRS will match the currently logged in account, but you can change it.You only need to enter the passphrase for the account and then the encryptionpassword. The UI will take care of adding the passphrase to the configurationfile before encrypting it locally and sending to the node for persistentstorage. In order to start the contract runner use the Start button under theProcesses page. After restarting the node you only need to start it again.

The Contract Runner can now calculate the best fee when sending transactionsinstead of relying on a fixed fee ratio. There is a new 'autoFeeRate' booleanproperty to enable this new feature. If set to true (default: false), thecontract runner will calculate the best fee available based on the currentbundlers. This should be equivalent to the "Calculate Fee" button on the wallet.When autoFeeRate is set to false, or the best fee cannot be obtained, thecontract runner will revert to using the usual "feeRateNQTPerFXT.<Chain Name>"properties.

Two new optional properties for the contract runner allow filtering outbundlers used to retrieve the best available fee when autoFeeRate is activated.

Bundlers with an effective balance below the property minBundlerBalanceFXTare not considered for the best fee calculation. The default for this propertyis to use the same value as the global property nxt.minBundlerBalanceFXT.

Also, bundlers with a fee limit currently below the propertyminBundlerFeeLimitFQT are also not considered for the best fee calculation.Again, the default for this property is to use the same value as the equivalentglobal property.