This repository has been archived by the owner on Jun 11, 2024. It is now read-only.
Version 0.4.0
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
andPOST /api/accounts/generatePublicKey
. New accounts are no longer written tomem_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
andAccount.prototype.merge
. - Closed #266. Added
virgin
column tomem_accounts
. Indicating whether an unconfirmed transaction sent from an account has been applied. - Closed #266. Added
protect_mem_account
database trigger. Makingaddress
,u_username
,username
,virgin
,publicKey
, and secondPublicKey columns immutable once written. - Closed #266. Added
senderPublicKey
exceptions toTransaction.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
.
- Tracking cleanup status through
- 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
andepoch
properties toGET /api/blocks/getStatus
. - Fixed orphan account check. Excluding
mem_accounts
with NULLblockId
. - 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 release2.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.
- Only trigger
- Checking
nethash
for all transport/peer
requests. - Returning JSON response for
POST /peer/blocks
. - Returning
success
orerror
forGET /api/peers/get
. - Added
success
property toGET /peer/transactions
. - Ignoring already processed or confirmed transactions for
POST /peer/transactions
. - Added
transactionId
property toPOST /peer/transactions
. - Added
success
property toGET /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 fromconfig.json
. - Added
maxUpdatePeers
option toconfig.json
. - Added
trustProxy
setting toconfig.json
.
Dependencies
- Updated all dependencies to latest compatible versions.
- Replaced
underscore
,util-extend
withlodash
.
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 configuringlisk_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.