-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1Release 1.3.0sha256:b604a2c6299b0b11aa7697f39f7a56e207cbe02defb83c45c9d2e1b99e4c9920 nxt-client-1.3.0.zipChange log:This is the first release which stores all derived objects in the database,instead of keeping all of them in memory only.Derived objects are those that are constructed based on the information alreadyavailable in the blockchain blocks and transactions - i.e, Accounts, Aliases,Assets, Goods, Purchases, Orders, Trades. Storing them in the database instead ofin memory means the Asset Exchange and the Digital Goods Store can scale to muchhigher number of assets, orders, and goods, without requiring an ever growingamount of memory for each node.Using a standard SQL database tables to store those records also allows formuch more sophisticated queries, and allows third parties to write and executecustom queries against those tables directly, without being dependent on the NRShttp API only.By storing the state of all derived objects as of the current height, plus theirstate at previous heights up to 1440 blocks back, it is possible to completelyeliminate the need for blockchain rescans on startup, and on fork resolution.On upgrade from 1.2.8 and older releases, this version will perform an initialbuild of the derived objects tables, which on a fast machine takes about 4 min,but may take longer depending on your hardware. The database size will again growduring this rescan, but after shutdown should shrink back to around 550 MB.There will be no rescans on subsequent restarts, and the startup time is nowreduced to a few seconds only. There will also be no rescans at runtime on blockpop offs.Derived object tables are kept small by trimming them, only records needed toallow rollback of up to 1440 blocks back are kept. If you need to preserve andquery historical information going back all the way to height 0, this trimmingcan be disabled by setting nxt.trimDerivedTables=false (default is true) innxt.properties. After changing this property, a rebuild of the derived tablescan be triggered using the new scan API request, see below.The default number of rollback records kept can be increased while still keepingtrimming enabled, by setting nxt.maxRollback to a higher value (default andlowest possible is 1440). This should provide a compromise for those who want tokeep history of more than the default 1440 blocks, yet want to avoid theperformance penalty of never trimming the derived objects tables.To allow for the increased use of database, default max number of databaseconnection has been increased to nxt.maxDbConnections=30, and lock timeoutincreased to nxt.dbDefaultLockTimeout=60 in nxt-default.properties.Slower machines and high traffic public nodes may experience database locktimeouts with the default settings. To prevent those, MVCC mode can be enabledby appending MVCC=TRUE to the jdbc url in nxt.properties. MVCC is not enabledby default however, because while providing for higher concurrency undermultiple simultaneous connections, and thus avoiding timeouts, it is also sloweroverall and less well tested.To help with debugging potential bugs, default logging level has been set tonxt.level=FINE in logging-default.properties for this release, which will causemore output than usual in the log.API changes:The following existing APIs now allow optional pagination using firstIndex,lastIndex parameters:getAccountBlockIds, getAccountCurrentAskOrderIds, getAccountCurrentBidOrderIds,getAliases, getAllAssets, getAllTrades, getAskOrderIds, getBidOrderIds,getAskOrders, getBidOrders, getAssetIds, getAssetsByIssuer.The limit parameter is no longer accepted by the getAskOrderIds, getBidOrderIds,getAskOrders and getBidOrders APIs, as firstIndex/lastIndex parameters are nowused instead for pagination.getAccountBlockIds in addition to allowing pagination now returns the blocksin descending order, as this is more useful when showing the newest blockson top in the client.getTrades now accepts an optional account parameter, in addition to asset, toallow retrieving trade history for a specific account, for either all assets ora specific asset only.getUnconfirmedTransactions and getUnconfirmedTransactionIds now also acceptthe RS account number format.The Trade JSON now includes buyer and seller account ids, the height at whichthe trade occurred, the asset name, and the heights at which the ask and bidorders were accepted in the blockchain.The Asset JSON now includes total number of transfers, and number of accountsholding the asset.parseTransaction does not just return an error when trying to parse an invalidtransaction bytes or JSON, but adds a validate=false field, plus the actual errormessage, in addition to the parsed transaction JSON.getState no longer includes total effective balance.New API requests:getAccountBlocks - like getAccountBlockIds, but returning full block JSON.If includeTransactions parameter is true, also includes the transaction JSON.getAccountCurrentAskOrders and getAccountCurrentBidOrders -like getAccountCurrentAskOrderIds and getAccountCurrentBidOrderIds, but returningfull order JSON.getAllOpenAskOrders and getAllOpenBidOrders now replace getAllOpenOrders, butonly returning ask or bid orders respectively, and allow firstIndex/lastIndexpagination.getAssetTransfers - retrieves the asset transfers for an asset, account, or both,sorted by height descending.getAssetAccounts - accepts an asset parameter and returns all accounts holdingthis asset as of the current height, and the asset quantity each one owns, sortedby asset quantity descending.Takes an optional height parameter to allow retrieving asset holders as of aprevious blockchain height.getAccountLessors - retrieves the accounts that have leased their balance to thespecified account, takes an optional height parameter to allow querying previousblockchain heights.The historical height query feature in getAssetAccounts and getAccountLessorsdepends on the specified height records still being available, i.e. either tabletrimming disabled, or maxRollback set high enough to cover that height.longConvert - an utility API to convert between signed long ids as used in thedatabase and unsigned long ids represented as strings. Accepts an id in eitherform and returns both the signed and unsigned versions.getECBlock - returns the ecBlockId and ecBlockHeight given an optional timestamp,current time if not supplied.New debug API requests:The following requests are used for debugging purposes only and should notnormally be needed. They are disabled by default, set nxt.enableDebugAPI=true inthe properties to enable them. Do not enable on a public node where the API isaccessible to anyone.fullReset - delete and redownload the whole blockchain.popOff - accepts a numBlocks or height parameters, and pops off that many blocksor back to that height. If table trimming is enabled (default), at most 1440blocks can be popped off. Derived object tables are rolled back to the specifiedheight and blocks and transactions after that height are deleted.scan - accepts a numBlocks or height parameters, rolls back the derived objecttables to that height and rebuilds them by rescanning the existing blockchainfrom that height up again. Does not delete blocks or transactions from theblockchain, unlike the popOff request. A request to rescan more than 1440 blockswhen table trimming is enabled will do a full rescan starting from height 0.Setting validate parameter to true will also re-verify signatures and re-valudateblocks and transactions during the rescan.DbShellServlet:A command line access to the H2 database at runtime is now possible at:This page uses the H2 shell tool to allow querying the database at runtime,directly from the browser, without having to enable auto server mode in the jdbcurl. This servlet is only enabled if nxt.enableDebugAPI=true, and is very unwiseto enable on a publicly accessible node as it allows full read and write accessto the database.The usability of the http://localhost:7876/test API access page has been furtherimproved.Packaging changes:To prevent intentional misunderstanding of why jar files hashes are neverreproducible, the class files are now left unpacked in a classes subdirectoryafter compilation, instead of being packaged in a nxt.jar file. The run.sh andrun.bat scripts have been modified to include this directory on the classpathinstead of the nxt.jar file. Those who still prefer to build a nxt.jar file, caneasily do that with the included jar.sh script, and modify the classpath to useit. A pre-built nxt.jar file will still be included for a few releases, as itis expected by the restart code when upgrading from an older version, but is nototherwise used.Other internal changes:Everywhere, object ids that used to be Longs are now primitive longs, as theiruse as HashMap keys is no longer needed.Preserve and re-process unconfirmed transactions after fork resolution pop-off.Improved propagation of unconfirmed transactions.Multiple minor improvements and optimizations based on profiling results.Merged in code to enable future variable fees based on transaction type andtransaction size.Updated Jetty to version 9.2.3.Added an option to disable transaction re-broadcasting by setting the propertynxt.enableTransactionRebroadcasting to false (default is enabled).Testnet:This release will reset the testnet blockchain back to height 77431. Testnetnodes staying with 1.2.8 are already on a different fork.There is no urgency to upgrade on main net, both 1.2.8 and 1.3.0 versions cancoexist on the network and there is no hard fork involved. The local databasechanges however are not reversible, if you upgrade to 1.3.0 and decide to goback to 1.2.8, you will need to delete the nxt_db folder and re-download theblockchain.-----BEGIN PGP SIGNATURE-----Version: GnuPG v1.4.12 (GNU/Linux)iQIcBAEBAgAGBQJUPE0bAAoJEFOhyXc7+e2A2W0QANZmQWJAhYwJ+ESXlfNBt+K8J5ImeAizzW2pFjLMqs3V+YyxL/1iFZ9OTxQdUJy4XdIgo0kldjpbDyDUgaQ/3PSeYkIROM4TiY4l0znlpaMOdNIGLhAMtzFVpi0bQZzc9d9lcjWw3aOXUbrfH0IXHta+bay+AhSkk1sjxdfIFtuYaQz/Cn2gbpL3ea+cOcwelWLvBn80rrwUUDsm//Y8/FBSc963+/dCVn+EubCbyA45weg/e43xoc0xJ1bca/6CRzX8JAhmDMqArURNIK2RHzu5BJcH6iFTP8nQ/Ojll6jv/an/dJOWeANdakT8KHCrEoqSumdfLqPZuGpfgcLOcWMMhZNeUOkXYnisJkO0bBVOygs+bufGg2pcPENa4Jng5dga1kXiQB/uwPJRYJo+jtWCc8DfW6q8kMbi8Fe5TpeRGsxuSXxQYMW76h1uzD9oaH2SP71jWV9qoihuR3nRi1v1fOrByu6qmx3/+2VuI/b/repxon/Kg/bAUF9YntcUInoxTLWK5Q1MN3NyqDBACdKxhAQMmniUnDlnU7yas16CsdIcTdygnIfqaUmq/BWTbXzrwDRj1ZRKgc/6H/BBcCNYAZm+ZComlMXHmoPbqblXIVW8VdtvkC5ahboSWmuwwXidVfNcDh8GeJQ2ZW7g0e9MH7B+BH9NJLMWvUwGTyGY=2HLS-----END PGP SIGNATURE-----