It’s here! The first significant ARK Core release as we progress toward v3 is live on ARK Public Network. Core v2.1 now sports a stricter TypeScript codebase and increased test coverage. Let’s review the changes.

First things first — Typical ARK users do not have to do anything for this update. All updates will be taken care of in the background by the ARK developers and delegates. The transition should be smooth without any glitches or slowing of the blockchain. However, the timeliness and process of exchanges updating are beyond our control, so you might experience delays on deposits and withdrawals as they make the switch.

The newest Core upgrade is primarily focused on changing the codebase from JavaScript to TypeScript. This means rewriting the entire Core to the TypeScript programming language. While this sounds unreal to accomplish in such a short period of time (the initial new Core v2 was released just over 2 months ago), TypeScript is a superset of JavaScript which makes the conversion easier. One of the advantages of TypeScript is that it reports type and syntax errors at compile time, instead of runtime (when the application is already running live). Also, the stricter rules (the need to define types) make it much more suitable for a blockchain project. TypeScript makes perfect sense for growing projects that need to scale and have multiple developers working on the codebase.

ARK Core has now also been de-branded by renaming all instances of “ARK” to “CORE”. This makes Core more generic and much easier for bridgechains to deploy as there is no need to rename anything, after generating your custom network configuration you are ready to go!

ARK Core v2.1 also introduces 100% test coverage of key components of the Core (Crypto, Blockchain, and Transaction Pool). Great test coverage gives developers confidence that the project is well developed and maintained, and makes it easier to evaluate whether or not a refactoring or addition to the source code is going to break something.

Addition of new API endpoints will also help exchanges and our Desktop and Mobile clients reduce API calls on some of the most frequently used inquiries. One new example is the ability in a single API call to look up information for more than 1 ARK address at a time, thus reducing loading times and limiting the need for multiple API calls.

What’s Next for Core?

Next release of Core v2.2 will focus on even easier use of the Core for developers and exchanges. Core will become an npm module that can be installed and interacted with globally. For example you will be able to call ark relay:mainnet after installing core via yarn global add @arkecosystem/core .

With v2.2 we’ll also take full advantage of the recently developed ARK Utilities library, which will speed up several elements of core by over 100%. You can read more on ARK Utilities here.

Configuration and options will be managed via ARK Configure. This will be an all new interface for managing nodes using simple commands and will essentially replace the need for the ARK Core Commander. Development of Core v2.2 is underway with the anticipated release next month.

Now lets go over the changes in greater detail for those who want to dive deeper.

Changes In Numbers

Since initial Core release :

15 different developers contributing to the Core.

contributing to the Core. 180 new commits to the Core.

to the Core. 1,924 files changed in the Core.

in the Core. 107,957 lines of code added to the Core.

to the Core. 96,729 lines of code deleted in the Core.

What’s New?

Added

Added a milestoneHash identifier to use for peer banning (#1837)

identifier to use for peer banning (#1837) Added TypeScript declarations for core-logger (#1833)

(#1833) Added TypeScript declarations for core-logger-winston (#1887)

(#1887) Added TypeScript declarations for core-container (#1891)

(#1891) Added TypeScript declarations for core-database (#1901, #1905)

(#1901, #1905) Added TypeScript declarations for core-transaction-pool (#1906)

(#1906) Added TypeScript declarations for core-blockchain (#1943)

(#1943) Added TypeScript declarations for core-snapshots (#1947)

(#1947) Added TypeScript declarations for core-api (#1948)

(#1948) Added TypeScript declarations for crypto (#1917)

(#1917) Added the core-jest-matchers package (#1926)

package (#1926) Added the core-interfaces package (#1924)

package (#1924) Return the transaction expiration time via API (#1927)

Added the ability to disable the public API cache (#1930)

Return the vote of a wallet via public API (#2009)

Upgrade script for 2.1 (#1999)

Installation script for deb/rpm distros (#2016)

Case specific errors for crypto (#2038)

(#2038) Separate business-logic from data-layer logic (#2055)

Changed

Migrated from JavaScript to TypeScript (#1625)

Moved the peers.json configuration into core-p2p (#1625)

configuration into (#1625) Merged core-transaction-pool-mem into core-transaction-pool (#1625)

into (#1625) Use a faster alternative to derive an estimate (#1655)

Reworked crypto configuration to make it simpler (#1733)

Moved the dynamic fees configuration into core-transaction-pool (#1733)

(#1733) Periodically check for new peers instead of retrying until finding some (#1738)

Adjusted some banning times for peers to make network recovery smoother (#1730)

Simplified configuration by further separating network and core (#1733)

Take the minFeeBroadcast value into account for fee statistics (#1873)

value into account for fee statistics (#1873) Only allow vendor fields for type 0 and 6 transactions (#1931)

Improved the network quorum details and feedback (#1898)

Only return errors when broadcast and pool fees are too low (#1940)

Improved performance of BIP38 (#1941)

Cleaned up the logic of block processing (#1953)

Cleaned up the logic of serialize/deserialize in crypto (#1969)

Replaced all ARK naming with CORE (#1970)

Use system paths for data and configuration (#1987)

Increased the maximum transaction age to 6 hours (#1996)

Replaced progress bars with logging to reduce noise (#2044)

Replaced commander.js with @oclif in core-debugger-cli (#2049)

(#2049) Replaced commander.js with @oclif in core-snapshots-cli (#2050)

(#2050) Replaced commander.js with @oclif in core-tester-cli (#2051)

(#2051) Moved docker files from docker/* to docker/development/* (#2053)

to (#2053) Moved the genesis blocks from the core configuration to the network configuration in crypto (#2052)

Fixed

Resolved an issue with the resolveOptions method that would result in options being resolved for plugins that are not registered in the container (#1625)

method that would result in options being resolved for plugins that are not registered in the container (#1625) Malformed condition for filtering peers (#1689)

Use the correct pagination schema for the v2 public API (#1717)

Ensure that delegate searches can handle undefined values (#1831)

Mark semantically invalid versions as invalid overall (#1836)

Ordering of delegates via public API (#1731)

Handle webhooks that have no conditions (#1869)

Validate the network byte on transactions (#1853)

Use correct schemas for address, public key and username validation in the public API (#1954)

Populate the last block of all delegates (#1919)

Return the transaction forging timestamp instead of signing timestamp (#1957)

Mark cold wallets as not found in the legacy API (#1955)

A malformed condition that resulted in wrong peer lists (#1939)

Properly verify block slot timestamps (#1985)

Return fixed peer states for v1 and v2 API responses (#2027)

Validate IP ranges to detect loopbacks (#2045)

Fixed invalid timestamp check (#2046)

Check if the blockchain state storage is available before performing fork checks (#2047)

Gracefully handle a corrupted cached peers.json file (#2061)

file (#2061) Always sort transactions by sequence and the requested field to make API sorting deterministic (#2058)

Disallow multiple registrations for same delegate (#2080)

Removed

Removed the transactionsFromIds P2P endpoint (#1911)

P2P endpoint (#1911) Removed the validator and rules fron @arkecosystem/crypto (#2021)

and fron (#2021) Ended support for the legacy multisignatures from the previous LISK fork (#2057)

Special Thanks

Thank you to all who have helped test the newest Core, provided pull-requests, and identified issues — we couldn’t have done it without you!