### Breaking changes - Modified how `mesh_addOrders` treats orders that are already stored on the Mesh node. Previously, they would be rejected with code `OrderAlreadyStored`. Now, if the order is stored and fillable, it will be accepted. If it is stored but unfillable, it will be rejected with `OrderAlreadyStoredAndUnfillable`. We additionally added a `isNew` property to the accepted orderInfos returned, so that callers can discern which orders Mesh already knew about. (#316) ### Features - Added backup bootstrap nodes provided by the libp2p community - Improved log formatting and reduced verbosity in a few cases (#314, #287) - Reduced AdvertiseBootDelay for bootstrap nodes - Implemented a check that will alerts you when switching to a different Ethereum network ID. (#301 -- special thanks to @hrharder) - Made environment variable parsing more generous by automatically removing quotes if needed (#306) - Improved tests by adding timeouts and closing resources where appropriate (#310, #309, #308) - Increased robustness by removing panics and failing more gracefully (#312) - RPC server is now started while block event backfilling is happening under the hood instead of waiting for it to complete (#318) - Added a `mesh_getStats` endpoint which returns a host of useful information about the state of the Mesh node (e.g., number of fillable order stored, number of peers, peerID, etc...) (#322) ### Bug fixes - Log messages are no longer incorrectly fired when receiving orders which have already been seen (#286) - Fixed a bug where Mesh was still running after the database was closed (#300) - Handled Parity "unknown block" error gracefully like we do Geth's (#285) # TODO: - [] Merge 2.0.0-beta PR to master - [x] Publish to docker hub - [x] Publish TS client to NPM - [x] Write up and publish release notes - [x] Update bootstrap nodes - [x] Update our personal nodes - [x] Alex - [x] Announce new version on Discord/Slack