Skip to content
This repository has been archived by the owner on Oct 11, 2024. It is now read-only.

Version 6.0.0-beta

Pre-release
Pre-release
Compare
Choose a tag to compare
@albrow albrow released this 05 Nov 23:33
· 835 commits to master since this release
a428703

Summary

Breaking changes 🛠

Note: This release will require wiping your Mesh's DB before upgrading. The DB location defaults to ./0x_mesh/db.

  • Renamed env config from ETHEREUM_NETWORK_ID to ETHEREUM_CHAIN_ID since network is a misnomer here and what we actually care about is the chainID. Most chains have the same id for their p2p network and chain. From the ones we support, the only outlier is Ganache, for which you will now need to supply 1337 instead of 50 (Learn more: https://medium.com/@pedrouid/chainid-vs-networkid-how-do-they-differ-on-ethereum-eec2ed41635b) (#485)
  • Rejected order code OrderForIncorrectNetwork has been changed to OrderForIncorrectChain (#485)
  • Removed RPC_PORT environment variable. The new RPC_ADDR environment variable allows specifying both the interface and port (#487).
  • Due to security concerns and new rate limiting mechanisms, the default bind address for the RPC API has changed from 0.0.0.0 to localhost. Users who previously did not set RPC_PORT may need to now manually set RPC_ADDR to enable other applications to access the RPC API. If you are using Docker Compose, we recommend using links. If you do need to set RPC_ADDR to bind on 0.0.0.0, please be aware of the security implications and consider protecting access to Mesh via a third-party firewall. (See #444 and #487 for more details).
  • Changed the EXPIRED event such that it is emitted when an order is expired according to the latest block timestamp, not anymore based on UTC time. (#490)
  • Removed the EXPIRATION_BUFFER_SECONDS env config since we no longer compute order expiration using UTC time. (#490)

Features ✅

  • Implemented a new strategy for limiting the amount of database storage used by Mesh and removing orders when the database is full. This strategy involves a dynamically adjusting maximum expiration time. When the database is full, Mesh will enforce a maximum expiration time for all incoming orders and remove any existing orders with an expiration time too far in the future. If conditions change and there is enough space in the database again, the max expiration time will slowly increase. This is a short term solution which solves the immediate issue of finite storage capacities and does a decent job of protecting against spam. We expect to improve and possibly replace it in the future. See #450 for more details.
  • Added support for a new feature called "order pinning" (#474). Pinned orders will not be affected by any DDoS prevention or incentive mechanisms (including the new dynamic max expiration time feature) and will always stay in storage until they are no longer fillable. By default, all orders which are submitted via either the JSON-RPC API or the addOrdersAsync function in the TypeScript bindings will be pinned.
  • Re-enabled bandwidth-based peer banning with a workaround to deal with erroneous spikes #478.
  • Added an UNEXPIRED order event kind which is emitted for orders that were previously considered expired but due to a block-reorg causing the latest block timestamp to be earlier than the previous latest block timestamp, are no longer expired. (#490)
  • Added support for decoding Axie Infinity Transfer and Approve ERC721 events which differ from the ERC721 standard. (#494)

Bug fixes 🐞

  • Improved the aggressiveness at which we permanently delete orders that have been flagged for removal. Previously we would wait for the cleanup job to handle this (once an hour), but that meant many removed orders would accumulate. We now prune them every 5 minutes. (#471)
  • Fixed a bug in the Go RPC client which resulted in errors when receving order events with at least one contract event (#496).