-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Release 1.5.0e
https://bitbucket.org/JeanLucPicard/nxt/downloads/nxt-client-1.5.0e.zipsha256:
da89d5d7641b9dcfba725ad618fd5b98da39254d7bcdad129c2affcc9a3826e8 nxt-client-1.5.0e.zip
This is a development release for testing only. Source code is not provided.
Change log:
This is an experimental release for the Voting System and Phasing. It enables
these features on testnet, and is a required update for all testnet nodes.
It is also possible to run this version on main net, but the block at which the
new features will be enabled has not been set yet.
New features:
Voting System.
Voting System API calls:
CreatePoll, CastVote, GetPoll, GetPolls, GetPollResult, GetPollVote,
GetPollVotes, SearchPolls.
Polls processing is optional. If nxt.processPolls=false (default is true), vote
counting is not done and no poll results are stored. This can be used to reduce
the load on lower performance nodes. It is still possible to get the results of
a poll using getPollResult, as long as the required vote and balances data
hasn't been trimmed yet.
Regardless of the nxt.processPolls setting, votes for polls that finished
before the last trim height (1441 blocks by default) are deleted and only
aggregate results, if processing is enabled, are kept.
Votes are weighted based on the voting model selected, which can be by account,
by balance, by asset balance or by currency balance, and a minimum balance
cutoff can also be specified. The voting model is defined when the poll is
created, however a different voting model can be specified when calling the
getPollResult API, to calculate on the fly an alternative vote counting, as
long as vote data is still available.
Voting multiple times, changing, or deleting votes is not allowed.
The fee to create a poll is 10 NXT for a poll with up to 20 options, with 1 NXT
additional fee for any additional option (max 100 options are possible).
Phasing.
Phasing API calls:
ApproveTransaction, GetAccountPhasedTransactions,
GetAccountPhasedTransactionCount, GetAssetPhasedTransactions,
GetCurrencyPhasedTransactions, GetPhasingPoll, GetPhasingPolls,
GetPhasingPollVote, GetPhasingPollVotes, GetVoterPhasedTransactions.
A transaction of any type can be phased by adding a phased=true parameter and
an appropriate set of phasing parameters. Phased transactions are accepted in
the blockchain immediately (subject to all usual validations), but are executed
only at finish height, if still valid and if the required quorum has been met.
If not approved, or not valid at finish height, they remain in the blockchain
but are never executed, and any changes they caused to the sender unconfirmed
balance are reversed, except that the fee is not refunded.
In addition to the voting models available in polls, phased transactions can
use a whitelist of accounts (max 10) allowed to vote for the transaction.
It is possible to vote for (approve) up to 10 phased transactions with a single
approval transaction. This transaction will be accepted in the blockchain only
if all phased transactions it is voting for are already in it.
Voting multiple times is allowed but has no effect on vote counting, votes
after the first vote from each account are ignored.
It is also possible to make any transaction phased without needing voting for
approval. This can be used to create transactions with deferred execution.
Pay on reveal secret is supported as a voting model for phased transactions.
When this voting model is used, the phased transaction must include the
hash of a secret chosen by the sender (up to 100 bytes long), and an approval
transaction for it is only accepted if it includes the secret that results in
this hash. It does not matter who the sender of the approval transaction is,
unless a whitelist is also defined. Supported hash functions currently are
sha256, ripemd160, and sha256 followed by ripemd160. The codes to specify them
as parameters are available from the getConstants API.
Finally, it is possible to make a phased transaction that is released or
rejected not on the basis of voting, but based on the presence of other
transactions (linked transactions) in the blockchain at its finish height.
To do that, up to 10 phasingLinkedFullHash transaction hashes can be defined
when creating the phased transaction. Note that this does not create a
dependency between the linked transactions themselves. This feature can be
used to implement atomic execution of transactions of any type, provided the
phased transaction is phasing safe. Transactions already in the blockchain
before the acceptance of the phased transaction can also be linked, as long
as they are not more than 60 days old, or themselves phased transactions.
The deferred execution with no approval needed, pay on reveal secret, and
linked transactions features are currently accessible using the API only, the
UI for them will be completed in a later release.
Similar to voting, the phasing data for phased transaction that finished before
the last trim height is also deleted and only the aggregate approval results
are kept.
The fee for making a transaction phased depends on the voting model selected.
For by-account voting with no minimum balance, or no voting needed, it is 1 NXT
in addition to the regular fee for that particular transaction type. For voting
that depends on voter balances, the additional phasing fee is 20 NXT.
The fee for approving a phased transaction is 1 NXT for each phased
transaction included in the vote.
Variable size messages, encrypted messages, digital goods deliveries. After VS
block, messages and encrypted messages will be allowed to be up to 40 kbytes
long instead of 1000 bytes, with 1 NXT fee for each 1024 bytes. Digital goods
deliveries can also be up to 40 kbytes, with 1 NXT fee for each 1024 bytes
after the first 10k. A single transaction is always limited not to exceed the
maximum block payload length, currently 255 * 176 bytes.
Other new APIs:
GetOrderTrades - given an askOrder, bidOrder, or both, returns all trades that
were executed as a result of this order.
GetDGSExpiredPurchases - returns the purchases for a given seller which have
expired without being delivered.
GetDGSTagsLike - returns all Digital Goods Store tags starting with a given
(at least 2 characters long) prefix.
GetAliasesLike - returns all Aliases starting with a given (at least 2
characters long) prefix.
SearchAccounts - full text search on account info (name and description).
GetPlugins - returns a list of all installed plugins.
DumpPeers - returns all active peers of a certain version.
Shutdown - shuts down the server. Takes an optional scan parameter, if true
the derived tables are truncated and a full rescan with validation is scheduled
on next start. The resulting nxt_db folder is smaller, and a node bootstrapped
with this database is going to verify the blockchain and rebuild all derived
tables on start. While this ensures validity of the blockchain and all tables,
it cannot verify that this is the current consensus blockchain and not a fork,
therefore providing such a database for download is still not trustless.
GetLog - returns the most recent log messages, kept in a memory buffer.
GetStackTraces - returns the stack traces of the currently running threads.
Shutdown, getLog and getStackTraces require the admin password.
Changed APIs:
CreateTransaction - to facilitate debugging and to allow preparing transaction
bytes and json even for transactions that are currently invalid, if broadcast
parameter is false, all relevant transaction fields (json, bytes, hash, etc)
are still included in the result even in the case of invalid transaction.
If broadcast=true, those fields are returned only in case of successful
transaction broadcast, otherwise only the error messages are returned.
This change affects all APIs that end up creating a new transaction.
GetConstants - in addition to adding the new transaction types and subtypes,
and the voting models, the format of the resulting json has been changed.
Added optional timestamp parameter to getExchanges and getTrades.
Added optional account parameter and pagination support to getCurrencyFounders.
Always include errorCode and errorDescription in some API results that only had
an error field in case of an error.
Limit number of records returned by all APIs that support pagination to
nxt.maxAPIRecords at a time (default 100), unless the admin password is
provided or is not needed.
AddPeer adds an isNewlyAdded boolean to the returned peer json, indicating
whether the peer was not already known.
Client changes:
Extended UI in the "advanced" transaction modal dialog for every transaction
type for invoking the different variants of phased transactions (to be approved
by a certain number of accounts or balance/asset/currency holders).
New main sidebar item for the Voting System, modal to create the various types
of polls, pages to find active polls and follow polls over time, list with own
polls and votes casted.
Generic notification system for incoming transactions showing the number
of transaction types and total new transactions.
Unconfirmed transactions are only displayed in the "Dashboard" and "My Transactions"
pages and no longer appear in other tables.
Transaction info dialog for AE Bid and Ask orders now displays a table containing
the actual trades mathcing the specific order.
New account login feature for faster login just by Nxt account.
User specific client DB with new logout option to clear user data.
Streamlined sidebar/navigation structure.
Send Currency button added to the toolbar which invokes the transfer currency dialog
Environment information, client settings and various diagnostic information is logged
to the browser's JavaScript console during startup and login.
Phasing tab was added to the transaction info dialog of phased transactions.
Various bug fixes.
Client Plugin System:
Functionality - The NRS client comes with a new plugin system, enabling third
party developers to provide additional functionality for the client. Plugins
can be activated/deactivated on startup, the status of installed plugins can be
seen on a separate settings page. Plugins can hook into the new "Plugins"
sidebar navigation item or provide their own navigation structure.
Security - Plugins are not sandboxed or restricted in any way and have full
access to client functionality including the passphrase. It is essential to only
install plugins from trusted sources and in doubt don't use plugins together
with accounts storing larger amounts of NXT. There are prominent security
warnings both on the login page and within the plugins folder.
Installation - A Plugin is provided as an archived file containing the necessary
HTML/JS/CSS files and can be installed by extracting the file in the plugins/
client directory.
Developer - For a plugin to be valid is has to follow a certain minimal file
structure and be shipped with a manifest.json file with some meta information.
Detailed information can be found in the DEVELOPERS.md file in the plugins/
directory. There is also a "hello_world" example plugin to get an idea how
things work.
Other important changes:
Fixed transaction ordering in AE order matching to always be by transaction
index instead of by id, to take effect after Voting System Block.
Enforce nxt.adminPassword if set, even if the APIServer is listening on
localhost only.
Added nxt.ignorePeerAnnouncedAddress and nxt.cjdnsOnly properties, relevant
only for cjdns users or multihomed nodes.
Default initial peers are now stored in nxt.defaultPeers and
nxt.testnetDefaultPeers instead of being populated by NxtDbVersion on database
creation.
Allow the API server to handle both http and https requests on different ports,
if nxt.apiServerSSLPort is set to a port different from nxt.apiServerPort and
nxt.apiSSL=true. If the SSL and non-SSL ports are configured to be the same,
the nxt.apiSSL property determines whether SSL is used or not. On testnet,
non-SSL port is hardcoded to 6876 and SSL, if enabled, to 6877.
Reduced the default nxt.maxRollback to 800. Also added a nxt.trimFrequency
setting to control how often the trim is run, default 1000.
This release requires Java 8 and will not run or compile with Java 7.
run.bat has been updated to search for a Java 8 installation using the Windows
registry.
Updated Jetty to version 9.2.10 and Bouncy Castle to version 1.52. If unpacking
on top of a previous installation, delete the old lib folder first.
This release will perform a database upgrade with a full rescan on first start.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQIcBAEBAgAGBQJVItxeAAoJEFOhyXc7+e2AGksQAJT0SolvRBp8bUPllvz4MivZ
4JirVpWQbVXaE7u3PKte3qA+UFgcaincMU1YM9YCPsHsbX9K24+fIRhblHHBoG7p
zVrqYNcE/1+uJMS0I1UFV2GDx3aFY+2lM/m4rVp8BXNGuUdNFdvAO6vW8i0bj+Ba
Rbe6Xds58YzGXZbkIuxNDnJHqlL/gBAF1q3yPuvftBx6m8nnGoOdjsVh6UDcrHTh
eeqK2hI4ZGNilwE0Coc99qIzSJi85ReE3/LANlQVac532ggVg4dK21HuB2joVtFo
wvBEcFpoeW4VdFSWWla3DRdxOOMo13OnIpIi07cWgrHH/eIG2VtZxoG3rFSyYe9s
NsVCwuV3iQxcvlU6yd4DzWprauyOKjJy0WQC0500whgJfKEZUVZeFVxlh3vLJVKN
4Jmc0cR2/hfqnpIQ6I13w8s6+UeeLnkQxmFRN9DKRICkX6PSqjejfDNjNEutCqAu
9edJ8QmVlJIUygeOjoMRZLVx4fDuxXG9UZOxu4r8DT9IfvkjX0pt5huI8uHSHIpB
tOKKV3aaELfhh2ybF7n86D+i50UAZsRUz/jSLEYfAawS6Em25hpmxk3SdRtz7Uxs
rhvD8qCyVTWeSbqtztZoUmcgWvPqDvcMqi9DTZjn2WgsoFaIBtBHzRyNjW568NYJ
9KMLLhaV6bZ6eMK3mGle
=rWe6
-----END PGP SIGNATURE-----