NRS v1.12.0e singapore
Please login or register.

Login with username, password and session length
Advanced search  


Latest Nxt Client: Nxt 1.11.15

Author Topic: NRS v1.12.0e  (Read 1036 times)


  • Core Dev
  • Jr. Member
  • **
  • Karma: +30/-0
  • Offline Offline
  • Posts: 54
    • View Profile
NRS v1.12.0e
« on: August 29, 2019, 03:40:36 pm »

Hash: SHA512

Release 1.12.0e


sha256 checksums:

923f12ed6ac471f4133c001cf2fcfa6015c7eff95d24763641ff81e36cca9663  nxt-client-1.12.0e.zip

c07eb19c95776f20845368143c8e78ca471afb347e7ca10976d8744f66cb539d  nxt-client-1.12.0e.sh

The exe and dmg packages must have a digital signature by "Jelurida Swiss SA".

Change log:

This is an experimental release, enabling several new features on testnet
only at block height 2500000. All testnet nodes must upgrade to this release
before this block (expected Sept 1, 2019). This release can also be used on
mainnet but upgrade is optional.

New features:

Added Asset Dividends payment by asset or currency. This allows paying asset
dividends not only in NXT, but also in any asset or monetary system currency.

Added Asset Properties feature, to allow setting arbitrary name/value metadata
on assets. Any user can set a property on any asset, only the asset issuer or
the user who sets the property can delete it.

Added Asset Increase transaction, allowing asset issuers to increase the total
number of asset shares available.

The Asset Delete History has been renamed to Quantity Change History and now
shows both asset deletion and new shares issuance transactions.
The getAssetDeletes API has been deprecated and a new getAssetHistory API can
be used to retrieve asset deletions, increases, or both.

Asset Dividends by Holding, Asset Properties and Asset Increase are currently
testnet-only features and will be enabled on mainnet at the next planned
hardfork block, exact height to be announced later.

New APIs related to the above features:

getAssetHistory, increaseAssetShares, getAssetProperties, setAssetProperty,

Process management add-ons, APIs and UI:

When enabling add-ons using the nxt.addOns property, if a package name is not
specified, the nxt.addons package is assumed, therefore it is no longer needed
to specify the full package name for the default add-ons included in the

Added StartForging and ForgingEncryptedConfig add-ons to facilitate management
of forging processes.

The StartForging add-on reads the passphrases stored in a plain text file, as
defined in the property nxt.startForgingFile, one passphrase per line, and
automatically starts forging with each of these accounts when the server is
started. Since passphrases are stored unencrypted, this add-on should only
be used on well secured servers, or with accounts of insignificant value, or
in test environments.

For a secure way of starting forging with multiple accounts on a remote server
the ForgingEncryptedConfig add-on can be used to store the passphrases of
forging accounts in an encrypted file. This add-on exports two APIs:
saveForgingEncrypted and startForgingEncrypted, used respectively to save the
list of forging passphrases in an encrypted file, and to start forging with
them by only submitting to the server the password necessary to decrypt this
file. Note that at runtime, the forging account passphrases will still be kept
in server memory, but when using these add-ons will never need to be stored on
disk, and will not need to be re-submitted to the server each time forging
needs to be started. These add-ons are useful when forging on a fully trusted
node, and having to restart forging remotely without a risk of exposing the
passphrases in transit.

Added StartFundingMonitors and FundingMonitorsEncryptedConfig add-ons to
facilitate management of funding monitor processes.

The StartFundingMonitors add-on will automatically start all funding monitors
configured in a JSON formatted file, as defined in the property
nxt.startFundingMonitorsFile. The JSON can be generated by manually starting
the funding monitors as desired, and using the GetFundingMonitor API to
retrieve the list of monitors in JSON format. The secretPhrase parameter needs
to be manually added to the JSON for each funding monitor.

The FundingMonitorsEncryptedConfig add-ons allow storing the JSON configuration
of funding monitors in an encrypted instead of plain text file, and starting
the funding monitors by submitting only the decryption password to the server.
It exports two APIs for this purpose, saveFundingMonitorsEncrypted and

The SaveEncrypted APIs require the admin passphrase when used on a remote node.
To prevent overwriting arbitrary files, they will only overwrite an existing
file located in the conf/processes directory and with a default for the add-on
filename; otherwise the file must not already exist.

An UI for the above ForgingEncryptedConfig and FundingMonitorsEncryptedConfig
add-ons has been added, accessible under the cogwheel/processes menu.

Accounts under account control are no longer allowed to start FundingMonitors.

Java programming API:

As an alternative to programming against the http API, the same API calls are
now accessible from java programs using the so called APICallers. Those are
available in the nxt.http.callers package, and code samples for how to use them
are provided under src/java/com/jelurida/ardor/client/api, demonstrating tasks
such as local signing, message encryption and decryption, waiting for a new
block, etc. When integrating the Nxt functionality in your java programs,
using APICallers is the recommended approach instead of accessing core Nxt
classes directly.

Light client networking improvements:

Bootstrap of API proxy - try to connect to known peers and if this fails,
connect to trusted nodes to get latest open API peers. The purpose is to
either have a node serving the proxy at start, or to know that the network
is down, and also to fix the problems caused by old initial peers.

Default bootstrap node is defined in nxt.properties:

The new bootstrapAPIProxy API can be used to refresh the latest open API peers
from the bootstrap node.

Performance and stability improvements and bugfixes.

Windows and Mac installations now use by default an embedded Open JDK 12

The H2 database now uses the newer MV_STORE format by default. Conversion to
this format however takes effect only when running compact.sh on an existing
database, or re-downloading the blockchain from scratch.

Updated Jetty to version 9.3.27, H2 to 1.4.199.




  • Sr. Member
  • ****
  • Karma: +22/-4
  • Offline Offline
  • Posts: 269
    • View Profile
Re: NRS v1.12.0e
« Reply #1 on: August 29, 2019, 05:47:31 pm »

very interesting, thank you for your work  :D

here is how i made() forging more equitable and democratic with a simple modification of the effective balance:

in Account.java, i add a new (copy/paste) function right after the getEffectiveBalanceNXT():1235

Code: [Select]

public long getVirtualForgingBalanceNXT(int height) {

        if (height <= 1440) {

            Account genesisAccount = getAccount(id, 0);

            long genesisAccountBalance = genesisAccount.getBalanceNQT();

            if (genesisAccount == null) {

                return 0;

            } else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 100 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 1000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 491956) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 1000 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 10000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 48762) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 10000 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 100000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 4798) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 100000 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 1000000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 469) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 1000000 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 10000000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 45) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 10000000 && genesisAccount.getBalanceNQT() / Constants.ONE_NXT < 100000000){

                genesisAccountBalance = (genesisAccount.getBalanceNQT() * 4) /5;

            }else if (genesisAccount.getBalanceNQT() / Constants.ONE_NXT >= 100000000){

                genesisAccountBalance = genesisAccount.getBalanceNQT() /7;

            return genesisAccountBalance / Constants.ONE_NXT;
        if (this.publicKey == null) {
            this.publicKey = publicKeyTable.get(accountDbKeyFactory.newKey(this));
        if (this.publicKey == null || this.publicKey.publicKey == null || height - this.publicKey.height <= 1440) {
            return 0; // cfb: Accounts with the public key revealed less than 1440 blocks ago are not allowed to generate blocks
        try {

            long virtualForgingBalanceNQT = 0;

            if (activeLesseeId == 0) {

                virtualForgingBalanceNQT = getGuaranteedBalanceNQT(Constants.GUARANTEED_BALANCE_CONFIRMATIONS, height);

            }else {

                virtualForgingBalanceNQT = getLessorsGuaranteedBalanceNQT(height) + getGuaranteedBalanceNQT(Constants.GUARANTEED_BALANCE_CONFIRMATIONS, height);

                if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 100 && virtualForgingBalanceNQT / Constants.ONE_NXT < 1000) {

                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 491956) / 5;

                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 1000 && virtualForgingBalanceNQT / Constants.ONE_NXT < 10000) {

                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 48762) / 5;

                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 10000 && virtualForgingBalanceNQT / Constants.ONE_NXT < 100000) {

                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 4798) / 5;

                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 100000 && virtualForgingBalanceNQT / Constants.ONE_NXT < 1000000) {
                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 469) / 5;
                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 1000000 && virtualForgingBalanceNQT / Constants.ONE_NXT < 10000000) {

                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 45) / 5;

                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 10000000 && virtualForgingBalanceNQT / Constants.ONE_NXT < 100000000) {

                    virtualForgingBalanceNQT = (virtualForgingBalanceNQT * 4)  / 5;

                } else if (virtualForgingBalanceNQT / Constants.ONE_NXT >= 100000000) {
                    virtualForgingBalanceNQT = virtualForgingBalanceNQT / 7;


            return virtualForgingBalanceNQT < Constants.MIN_FORGING_BALANCE_NQT ? 0 : virtualForgingBalanceNQT / Constants.ONE_NXT;

        } finally {


and in Generator.java under setLastBlock() i changed the getEffectiveBalanceNXT() to getVirtualForgingBalanceNXT()

Code: [Select]

effectiveBalanceNXT = Math.max(account.getVirtualForgingBalanceNXT(height), 0);

so, this simple solution kill all the chances for many attack vectors like the 51% or sybil and give more chances to the poor forgers than the rich ones...

in my NBCK the minimum to forge is 100 coins and those that forge with an amount between 100 and 999 have more chances to forge a block than all the others

i set in competition 10 accounts for 266962 blocks (still running) and this work pretty well... the block generation time is the same as NXT and the base target is under 0500%

i know that can be done in a better way because i am not a pro in java, i hope this solution  will be useful to someone...

thank you again and good luck  :D


  • Core Dev
  • Hero Member
  • *****
  • Karma: +439/-42
  • Offline Offline
  • Posts: 1795
    • View Profile
Re: NRS v1.12.0e
« Reply #2 on: August 31, 2019, 07:25:14 am »

Mobile app link https://bitbucket.org/Jelurida/nxt/downloads/nxt-client-1.12.0e.apk
sha256 76815e60858222b13018e1ddb9e2775cc2b0733cb223a05491c4c2d3a9b6714a
NXT Core Dev
Public Key: D8311651 Key fingerprint: 0560 443B 035C EE08 0EC0  D2DD 275E 94A7 D831 1651