github ArkEcosystem/core 2.4.0

latest releases: 3.9.0, 3.8.2, 3.8.1...
4 years ago

As we move towards 2.6 and the completion of AIP11, AIP18 and AIP29 there will be various breaking changes. The main concern of most developers will be breaking changes to @arkecosystem/crypto so go through the commits listed below and make sure you adjust everything in your application that is affected by a change.

Exchange JSON-RPC

The JSON-RPC we offer, formerly known as @arkecosystem/core-json-rpc, has received a rework to turn it into a real RPC that is easier to use and maintain.

Programmatic

The biggest change is that it now offers programmatic use to make integration into ARK Core easier while simultaneously allowing it to run as a standalone application detached from a relay.

Standalone
https://github.com/ArkEcosystem/exchange-json-rpc

ARK Core Plugin
https://github.com/ArkEcosystem/core/tree/develop/packages/core-exchange-json-rpc

The @arkecosystem/core-json-rpc plugin has been deprecated and replaced by @arkecosystem/core-exchange-json-rpc because of different those 2 plugins work under the hood and their dependencies.

Peers

A few smaller improvements to how peers and faulty responses are being handled have also been made which should smoothen the experience without having to manually retry requests.

Database

The Exchange JSON-RPC uses SQLite under the hood to store all data. In previous versions it was using https://github.com/mapbox/node-sqlite3 which was known to cause random build issues for ARK Core and sometimes needed a dozen retries before it finally compiled.

That dependency has been replaced with https://github.com/JoshuaWise/better-sqlite3 which is the same that ARK Core uses for its transaction pool. It provides better performance, receives updates and fixes when needed and build errors are a thing of the past.

Migration

If you've been using the JSON-RPC in the past together with ARK Core the migration to the Exchange JSON-RPC is as simple as following the steps at https://docs.ark.io/releases/v2.4/migrating_2.3_2.4.html#step-5-update-core-json-rpc-to-core-exchange-json-rpc.

Disclaimer

  1. The Exchange JSON-RPC is only maintained for exchanges, as the name suggests. We do not offer any support or guidance unless you are an Exchange in which case you most likely will already be in touch with us.
  2. Do not use the Exchange JSON-RPC unless you are forced too and have no other options. The Public API provides much greater capabilities of searching and filtering data.

Added

  • Implement in @arkecosystem/core-state to manage the state of in-memory data (#2479)
  • Implement a blockchain replay command (#2526)
  • Save blocks in batches during sync (#2500)
  • Implement v2/node/fees endpoint (#2393)
  • Allow setting a vendor field for transactions created via @arkecosystem/core-json-rpc (#2425)
  • Limit the number of accepted peers per subnet (#2507)
  • BREAKING: Implement WebSockets with SocketCluster (#2273)
  • Parallel block download (#2433)
  • In-memory storage for last N blocks and transactions (#2492)
  • BREAKING: Switch transaction expiration from seconds to chain height (#2461)
  • Require the user to choose a snapshot if the blocks flag is missing in @arkecosystem/core commands (#2522)
  • BREAKING: Implement Block.fromHex, Block.fromBytes and Block.fromData methods in @arkecosystem/crypto (#2377)
  • BREAKING: Implement BlockFactory in @arkecosystem/crypto (#2429)
  • BREAKING: Implement TransactionFactory in @arkecosystem/crypto (#2437)
  • Integrate end-to-end tests (#2468)
  • Initial Implementation of core-wallet-api (#2544)
  • Accept block height to list block transactions in core-api (#2567)
  • Functional test matchers for core-jest-matchers (#2562)
  • Don't trust headers and verify config and plugin connectivity of peers (#2559], #2553], #2552)
  • Proxy API calls to core-api until fully developed (#2558)
  • Add database configuration command to CLI (#2557], #2563)
  • Add command to generate network configuration CLI (#2582)
  • Initial implementation of core-explorer (#2604)

Fixed

  • Insert the genesis block as soon as the database is ready (#2376)
  • BREAKING: Purge invalid transactions after a milestone change (#2499)
  • Use public API to auto-configure @arkecosystem/core-tester-cli (#2517)
  • Parse only the last line of pm2 stdout to avoid parsing faulty input (#2484)
  • Delete bad rounds after unclean shutdown (#2581)
  • Divide blocks into smaller chunks for batch processing (#2586)
  • Remove forged transactions from pool before discarding block (#2555)
  • BREAKING: Make transaction amount required (#2574)
  • Various sync issues with devnet and mainnet (#2565)
  • Do not suspend peer for AppNotReady (#2590)
  • Allow use of old and new block IDs via core-json-rpc (#2593)
  • Assign calculated delegate ranks from temp wallets to prevent wrong ranks on boot (#2611)
  • Camelize block keys before bignum transformation for snapshots (#2615)
  • Deserialize transactions before they leave the pool to remove bad ones (#2622)
  • Require all properties in schema and handle 404 resources for core-webhooks (#2634)
  • Check if transactions can still be applied before forging (#2635)
  • Off by one error in transaction confirmations via API (#2645)
  • Set the correct channel if core was directly installed with @next (#2646)
  • Invalid orderBy causes Internal Server Error via API (#265)
  • Avoid trying to INSERT duplicates in rounds via core-snapshots (#2651)
  • Handle failing optional plugins gracefully (#2657)
  • Correctly purge invalid transactions from disk on start (#2665)
  • Don't append duplicate rounds rows to a snapshot (#2662)
  • Use temporary wallets for transaction validation (#2666)
  • Correctly display second signature if available via core-api (#2670)
  • Missing block confirmations on v2 API endpoints (#2674)
  • Delay transaction purge on start until after StateBuilder finished (#2685)
  • Check claimed state of peer (#2686)
  • Ignore overheight blocks and keep forging (#2687)

Changed

  • BREAKING: Always use crypto identities to work with keys and addresses (#2443)
  • BREAKING: Enforce BigNumber for satoshi based values (#2391)
  • BREAKING: Move in-memory wallet logic to core-state (#2489)
  • BREAKING: Replace bignumify with Utils.BigNumber.make (#2416)
  • Replace Joi with AJV for internal validation (#2426)
  • BREAKING: Bind plugin options before registering the plugin (#2375)
  • BREAKING: Extend the node.js event emitter (#2440)
  • BREAKING: Move the wallet interfaces to @arkecosystem/core-state (#2515)
  • Remove height difference ban for peers (#2360)
  • BREAKING: Simplify the transaction pool by not using insertion order (#2495)
  • BREAKING: Drop no longer needed pagination from @arkecosystem/core-webhooks (#2424)
  • BREAKING: Extract transaction signing and utils out of the model in @arkecosystem/crypto (#2514)
  • BREAKING: Extract transaction verification out of the model in @arkecosystem/crypto (#2506)
  • BREAKING: Make all Slots.* methods static in @arkecosystem/crypto (#2473)
  • BREAKING: Move interfaces, types and models in @arkecosystem/crypto (#2379)
  • Move mainnet exceptions to config in @arkecosystem/crypto (#2529)
  • BREAKING: Remove extraneous Client class in @arkecosystem/crypto (#2417)
  • BREAKING: Split the Crypto class into Hash and Transaction in @arkecosystem/crypto (#2444)
  • Invalidate blocks with expired transactions (#2528)
  • Transaction type agnostic wallet bootstrap to support AIP29 (#2539)
  • Return all schema errors in hapi-ajv (#2571)
  • Remove timeout banning (#2597)
  • Use dayjs as it now has official UTC support (#2592)
  • Require a minimum of 0 as pubKeyHash (#2628)
  • BREAKING: Replaced @arkecosystem/core-json-rpc with @arkecosystem/core-exchange-json-rpc (Use @arkecosystem/core-exchange-json-rpc programmatically) (#2643)
  • Expire transactions that don't have an expiration (#2672)

Removed

  • BREAKING: Remove unused methods to get/set/reset height from Slots (#2467)
  • Remove peer caching (#2606)
  • Remove peer banning (#2612)
  • Remove coldstart period (#2619)
  • Remove whitelist access log (#2655)

Don't miss a new core release

NewReleases is sending notifications on new releases.