ARK Core v2.1: Hello TypeScript!

in #arkecosystem5 years ago

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.
  • 180 new commits to the Core.
  • 1,924 files changed in the Core.
  • 107,957 lines of code added 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)
  • Added TypeScript declarations for core-logger
    (#1833)
  • Added TypeScript declarations for core-logger-winston
    (#1887)
  • Added TypeScript declarations for core-container
    (#1891)
  • Added TypeScript declarations for core-database
    (#1901,
    #1905)
  • Added TypeScript declarations for core-transaction-pool
    (#1906)
  • Added TypeScript declarations for core-blockchain
    (#1943)
  • Added TypeScript declarations for core-snapshots
    (#1947)
  • Added TypeScript declarations for core-api
    (#1948)
  • Added TypeScript declarations for crypto
    (#1917)
  • Added the core-jest-matchers package
    (#1926)
  • Added the core-interfaces 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)
  • Separate business-logic from data-layer logic
    (#2055)

Changed

  • Migrated from JavaScript to TypeScript
    (#1625)
  • Moved the peers.json configuration into core-p2p
    (#1625)
  • Merged core-transaction-pool-mem into core-transaction-pool
    (#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)
  • 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)
  • 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)
  • Replaced commander.js with @oclif in core-snapshots-cli
    (#2050)
  • Replaced commander.js with @oclif in core-tester-cli
    (#2051)
  • Moved docker files from docker/* to docker/development/*
    (#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)
  • 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)
  • 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)
  • Removed the validator and rules fron @arkecosystem/crypto
    (#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!


ARK.io | Github | Facebook | Twitter | Forum | Blog | Explorer | Shop | Discord | YouTube

Coin Marketplace

STEEM 0.36
TRX 0.12
JST 0.039
BTC 70112.96
ETH 3549.99
USDT 1.00
SBD 4.71