Skip to content
This repository has been archived by the owner on Jun 11, 2024. It is now read-only.

Version 0.4.0

Compare
Choose a tag to compare
@karmacoma karmacoma released this 10 Oct 10:33

Changelog

Backend

Accounts

  • Closed #197. Improving error messages when account does not have enough funds. Yielding sender address and account balance.
  • Closed #266. Changed behavior of POST /api/accounts/open and POST /api/accounts/generatePublicKey. New accounts are no longer written to mem_accounts. Added one-time migration to delete dormant accounts which have never received or sent funds.
  • Closed #266. Verifying public key type, length and format in Account.prototype.set and Account.prototype.merge.
  • Closed #266. Added virgin column to mem_accounts. Indicating whether an unconfirmed transaction sent from an account has been applied.
  • Closed #266. Added protect_mem_account database trigger. Making address, u_username, username, virgin, publicKey, and secondPublicKey columns immutable once written.
  • Closed #266. Added senderPublicKey exceptions to Transaction.prototype.verify.
  • Added missing address validation to GET /accounts?address=.
  • Fixed error on GET /api/delegates?orderBy=unknown:asc.
  • Fixed error on GET /api/delegates?limit=0.

Blocks

  • Closed #163. Adding default orderBy to /api/blocks (height:desc).
  • Merged #210. Block processing rewrite @fix.
    • Verifying block and transactions before database writes.
    • Eliminating duplicate logic, using Blocks.prototype.processBlock during rebuild.
  • Preventing data corruption of memory tables after reload or shutdown #213.
    • Tracking cleanup status through __private.cleanup.
    • Skipping blocks on cleanup for Blocks.prototype.loadBlocksOffset.
    • Skipping blocks on cleanup for Blocks.prototype.loadBlocksFromPeer.
    • Exiting Blocks.prototype.processBlock early on cleanup.
    • Cleaning up immediately on Loader.prototype.cleanup.
  • Closed #222. Fixing block reward calculation within first few blocks after milestone.
  • Closed #258. Detecting numericality of snapshot round. Allowing node app.js —snapshot=foobar to default to the highest round.
  • Closed #260. Removing infinite recursion in Loader.prototype.getNetwork.
  • Closed #276. Finishing snapshot within __private.applyBlock.
  • Closed #289. Prevent sync slowdown after receiving unconfirmed transactions.
  • Conditionally loading blocks from network; when there has been no block “receipts” over network transport, or when last receipt was over 120 seconds ago.
  • Added GET /api/loader/status/ping endpoint @34ro.
  • Added GET /api/blocks/getEpoch endpoint.
  • Added nethash and epoch properties to GET /api/blocks/getStatus.
  • Fixed orphan account check. Excluding mem_accounts with NULL blockId.
  • Fixed invalid type comparison on unapplied rounds.
  • Fixed reported block height when rebuilding blockchain.
  • Improved error logging with JSON dump of affected block.

Transactions

  • Closed #265. Fixing "Account not found" error when sending transactions to virgin account using POST /api/transactions.
  • Fixed #279. Removing erroneous unconfirmed transactions.
  • Fixed #279. Removing redundant double spend collection.
  • Fixed undefined is not a function error. After error thrown while verifying transaction bytes.
  • Added verification of transaction assets for all transaction types.
  • Improved error logging with JSON dump of affected transaction.
  • Improved logging of apply / undo of transactions at debug level.
  • Performing sender balance checks using bignum arithmetic.

Applications

  • Closed #269. Fixed crash on 404 error for POST /api/dapps/install.
  • Downgraded npm to latest LTS release 2.15.10.

Peers

  • Improving peers db efficiency #104. Sequencing peers updates.
  • Improving peers db efficiency #104. Replacing insert / update with single upsert.
  • Improving peers db efficiency #104. Chaining database queries when adding dapp peer.
  • Closed #147. Replacing request with popsicle. Fixing memory leak on large request bodies, e.g. loading blocks from peer.
  • Merged #227. Improved peer discovery using histogram cut selection of "good" peers @fix.
  • Closed #231. Implementing API rate limiter. Individually configurable for both /api and /peer. Disabled by default.
  • Added EHEADERS, ERESPONSE, ENETHASH peer error codes, extending: https://github.com/blakeembrey/popsicle#error-handling.
  • Fixed timers in Loader.prototype.onPeerReady.
    • Only trigger nextLoadBlock if loaded and not already syncing.
    • Fixed halt to nextLoadUnconfirmedTransactions recursion when syncing.
    • Fixed halt to nextLoadSignatures recursion when syncing.
  • Checking nethash for all transport /peer requests.
  • Returning JSON response for POST /peer/blocks.
  • Returning success or error for GET /api/peers/get.
  • Added success property to GET /peer/transactions.
  • Ignoring already processed or confirmed transactions for POST /peer/transactions.
  • Added transactionId property to POST /peer/transactions.
  • Added success property to GET /peer/height.
  • Removing peers which return bad response code.
  • Removing peers with invalid request headers.
  • Removing peers with invalid nethash.
  • Improved logging of peer changes at debug level.
  • Increased default peer timeout to 5000 ms.
  • Fixed unwanted rejection of seed peers due to lack of os, version metadata.
  • Removed unnecessary peer loopback detection.
  • Validating peer headers using zschema only.

Refactoring

  • Closed #147. Dramatically improved CPU and memory efficiency.
    • Moved schema validations into separate modules, to eliminate unnecessary continous object creation.
    • Added unique ids to schema validations, to better utilize z-schema schema caching.
    • Nullifying any large objects identified by memory profiling at the earliest opportunity.
  • Decoupled transaction types from modules into separately addressed modules.
  • Defining functions on constructor prototype where possible.
  • Using async for control flow, to remove deep nesting of code.
  • Fully linted code base using jshint to a strict standard.
  • Created database indexes on memory tables.

Tests

  • Complete rewrite and abstraction of API tests, for cleaner tests.
  • Massively expanded API test coverage, resulting in many fixes.
  • Added initial unit test coverage, e.g. for block rewards.

Configuration

  • Removed unimplemented serveHttpAPI/Wallet options from config.json.
  • Added maxUpdatePeers option to config.json.
  • Added trustProxy setting to config.json.

Dependencies

  • Updated all dependencies to latest compatible versions.
  • Replaced underscore, util-extend with lodash.

Frontend

  • Added Polish language support.
  • Fixating and updating dependency versions.
  • Fixing calls to null u_multisignatures/multisignatures.
  • Fixing call to undefined resp.data.account.

Build

  • Closed #44. Added timestamp to postgresql logs.
  • Added empty blockchain.db.gz to allow for starting the blockchain from 0.
  • Updating node/lisk-node to 0.12.16.

lisk.sh

  • Implemented url flag for lisk.sh to allow remote snapshots to be used with rebuild.
  • Updated rebuild logic to allow for local backups to be reused and to specify file name.
  • Improved lisk startup to display current block height after start or status is issued.
  • Implemented new logic for interactive snapshotting.
  • Added progress bar when downloading snapshots.

lisk_snapshot.sh

  • Implemented lisk_snapshot.sh for automated database backups.
  • Added snapshot.json for configuring lisk_snapshot.sh backups.

installLisk.sh

  • Removed duplicated block height check already present in lisk.sh.
  • Changed coldstart to use empty blockchain.db.gz.

Documentation

  • Updated upgrade instructions to use automated upgrade.
  • Updated testnet installation instructions.