This changelog is a work in progress and may contain notes for versions which have not actually been released. Check the Releases page to see full release notes and more information about the latest released versions.
database is closedissues related to our
- Fixed a bug that would cause the node to crash when receving log events for tokens that do not conform to the ERC20 specification.
- Fixed a data race condition in
- Fixed an issue with slow
OrderEventsubscribers blocking handling of messages.
- Fixed a critical bug in the ordersync protocol which resulted in only 50% of existing orders being shared when a new peer joins the network. New orders are shared separately and were unaffected. #760.
- As a result of implementing custom order filters, some of the code Mesh uses under the hood to share orders with peers has changed. As a result this version of Mesh cannot share orders with any older versions and vice versa (#630).
- Implemented custom order filters, which allow users to filter out all but the orders they care about. When a custom order filter is specified, Mesh will only send and receive orders that pass the filter. (#630).
- Instead of progressing Mesh forward by a single block on every invocation of the
BLOCK_POLLING_INTERVAL, we now attempt to sync as many blocks as necessary to reach the latest block available. This will reduce the chances of Mesh becoming out-of-sync with it's backing Ethereum node (#564)
- Added a new environment variable
ENABLE_ETHEREUM_RPC_RATE_LIMITINGand config option
enableEthereumRPCRateLimitingwhich can be used to completely disable Mesh's internal Ethereum RPC rate limiting features. By default it is enabled, and disabling can have some consequences depending on your RPC provider. (#584)
- Fixed an issue where order updates could have been missed if Mesh discovered blocks but didn't have time to process them before getting shut down. Now, blocks are only persisted to the DB once any order updates resulting from it have been processed. (#566).
- Fixed a race-condition when adding new orders to Mesh which could result in order-relevant events being missed if they occured very soon after the order was submitted and the order validation RPC call took a long time (#566).
- Add a default RPC request timeout of 30sec to all non-subscription requests sent by
@0x/mesh-rpc-clientto avoid the client from hanging endlessly if it misses a response due to network disruption (#603).
- Added support for persistence in the browser. Users of the
@0x/mesh-browserpackage will now be able to retain orders and other relevant parts of the state when refreshing the page or closing and re-opening the browser. (#533).
- Add missing
OrderEventEndStateenum value to both
- Changed the default port for
RPC_ADDRfrom a random available port to
60557. Some documentation already assumed
60557was the default port. Now all documentation has been updated for consistency with this change. (#542).
- Previously, we used to fast-sync block events missed since a Mesh node was last online. If this was more than 128 blocks ago, the fast-sync would fail if Mesh was not connected to an Ethereum node with the
--archiveflag enabled. We now fast-sync only if less than 128 blocks have elapsed. Otherwise, we simply re-validate all orders and continue processing block events from the latest block. (#407)
Note: This release will require wiping your Mesh's DB before upgrading. The DB location defaults to
- Due to security concerns and new rate limiting mechanisms, the default bind address for the RPC API has changed from
localhost. Users who previously did not set
RPC_PORTmay need to now manually set
RPC_ADDRto 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_ADDRto 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).
- Added an
UNEXPIREDorder 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)
- Renamed env config from
networkis 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
50(Learn more: https://medium.com/@pedrouid/chainid-vs-networkid-how-do-they-differ-on-ethereum-eec2ed41635b) (#485)
- 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
addOrdersAsyncfunction in the TypeScript bindings will be pinned.
- 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)
- Temporarily disabled bandwidth-based peer banning (#448). A bug in libp2p was occasionally causing observed bandwidth usage to spike to unrealistic levels, which can result in peers being erroneously banned. We decided to temporarily stop banning peers while we're working with the libp2p team to resolve the issue.
- Removes the
txHasheskey in the
OrderEvents emitted from the
ordersJSON-RPC subscription and replaced it with
contractEvents, an array of decoded order-relevant contract events. Parsing these events allows callers to find every discrete order fill/cancel event. (#420)
- Renames the
EndStateto better elucidate that it represents the aggregate change to the orders state since it was last re-validated. As an end state, it does not capture any possible intermediate states the order might have been in since the last re-validation. Intermediate states can be inferred from the
- Fixed two related bugs: One where order expiration events would be emitted multiple times and another that meant subsequent fill/cancel events for orders deemed expired were not emitted. Fills/cancels for expired orders will continue to be emitted if they occur within ~4 mins (i.e. 20 blocks) of the expiration (#385).
- Modified Mesh's validation logic to reject and consider invalid any partially fillable orders. While this istechnically a breaking change, partially fillable orders are rare in the wild and we don't expect this willaffect many users. (#333)
getStatsAsyncin TS client
- Modified how
mesh_addOrderstreats 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
isNewproperty to the accepted orderInfos returned, so that callers can discern which orders Mesh already knew about. (#316)
- Added backup bootstrap nodes provided by the libp2p community
- Reduced AdvertiseBootDelay for bootstrap nodes
This release fixes several bugs:
It also includes a reduction in the delay before which bootstrap nodes advertise themselves as relays from 15mins to 30sec.
This version introduces a temporary hack in order to help some Mesh nodes find their public IP address under certain circumstances.
This release fixes a bug in how AutoNAT and AutoRelay services were discovered.
This release fixes some networking related issues with our bootstrap nodes.
- Bootstrap nodes now advertise the correct public IP address.
- Bootstrap nodes now also operate as a relay.
These fixes will help smooth out any issues with peer discovery.
This release fixes a few minor bugs and includes additional documentation.
- 1.Set a custom protocol ID for our DHT in order to separate it from the default IPFS DHT.
- 2.Fixed a bug in the getOrders JSON-RPC endpoint where fillableTakerAssetAmount was sometimes being encoded as numbers instead of strings.
- 3.Converted addresses to all lowercase (non-checksummed) in the JSON-RPC API.
- 4.Improved logging.
- 5.Added a guide for running a Mesh node with telemetry-enabled.
This release adds AutoNAT support for our bootstrap nodes. This enables peers who are behind NATs to find each and connect to each other (in most cases).
In addition, this release includes some changes to default network timeouts and documentation improvements.
This is the initial beta release for 0x Mesh!
This release supports the following features:
- Automatic peer discovery via a DHT.
- A JSON-RPC endpoint for interacting with your Mesh node. It includes support for adding new orders and subscribing to order updates.
- Efficient order validation and order watching under the hood. You will get notified quickly when orders are expired, canceled, or filled.
- Basic limitations on the size and types of messages sent by peers. Peers that send malformed messages or messages that are too big will be dropped.
In addition to improving stability and scalability we plan to release many more important features in the near future. Check out https://github.com/0xProject/0x-mesh/issues for more information about what we are working on.