database is closed
issues related to our go-sqlite3
databases.OrderWatcher
.OrderEvent
subscribers blocking handling of messages.miniHeaderRetentionLimit
block headers in the DB. This caused issue #667 and also caused the Mesh node's DB storage to continuously grow over time. (#716)CUSTOM_CONTRACT_ADDRESSES
env config (#640).getOrdersForPageAsync
method to @0x/mesh-rpc-client
WS client interface so that clients can paginate through the retrieved orders themselves (#642).@0x/mesh-browser
package. (#665).HTTP_RPC_ADDR
defaults to localhost:60556
). (#658)@0x/mesh-ts-client
's getOrdersAsync
endpoint to include the snapshotID
and snapshotTimestamp
at which the Mesh DB was queried along with the orders found. (#591)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)ENABLE_ETHEREUM_RPC_RATE_LIMITING
and config option enableEthereumRPCRateLimiting
which 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)SnapshotTimestamp
field to GetOrdersResponse
, the return type of the mesh_getOrders
RPC method. This way, the caller can know at what point in time the snapshot had been created. (#591)web3-provider
dependency used by @0x/mesh-rpc-client
in order to fix a bug where it was requiring either process
OR window
to exist in the global scope (#601).@0x/mesh-rpc-client
to avoid the client from hanging endlessly if it misses a response due to network disruption (#603).makerAssetFeeData
or takerAssetFeeData
were sometimes being set to an empty string instead of 0x
in the browser (#579).@0x/mesh-browser
package 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).UNEXPIRED
OrderEventEndState
enum value to both @0x/mesh-rpc-client
and @0x/mesh-browser
and missing STOPPED_WATCHING
value from @0x/mesh-rpc-client
.github.com/libp2p/go-libp2p-kad-dht
(#539).RPC_ADDR
from a random available port to 60557
. Some documentation already assumed 60557
was the default port. Now all documentation has been updated for consistency with this change. (#542).go-ethereum
's rpc
package. (#545)--archive
flag 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)@0x
deps in @0x/mesh-rpc-client
@0x/mesh-browser
package that resulted in some config options not being passed through correctly (#502)../0x_mesh/db
.RPC_PORT
environment variable. The new RPC_ADDR
environment variable allows specifying both the interface and port (#487).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).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)EXPIRATION_BUFFER_SECONDS
env config since we no longer compute order expiration using UTC time. (#490)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)Transfer
and Approve
ERC721 events which differ from the ERC721 standard. (#494)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)addOrdersAsync
function in the TypeScript bindings will be pinned.getStats
RPC endpoint now includes a new field which accounts for the number of orders that have been marked as "removed" but not yet permanently deleted (#461).CUSTOM_ADDRESSES
environment variable or the customAddresses
field in the TypeScript bindings (#445).feeAssetData
fields. (#446])txHashes
key in the OrderEvent
s emitted from the orders
JSON-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)Kind
key in OrderEvent
to EndState
to 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 contractEvents
included (#420)fillableTakerAssetAmount
in the DB when orders were being partially filled or when their fillability increased due to a block re-org. (#439)P2P_LISTEN_PORT
to P2P_TCP_PORT
(#366). This makes it possible to configure Mesh to use both the TCP and Websocket transports by listening on different ports.BOOTSTRAP_LIST
environment variable (#374). Typically this should only be used for testing/debugging.BlockWatch
so that it can be used without using LevelDB
for Ethereum block storage. (#355)fillableTakerAssetAmount
and lastUpdated
were not always being properly updated in the DB. (#386)GetStatsAsync
method to getStatsAsync
in TS client"declaration": true,
to TS client's tsconfig.json
so that downstream projects can use it's TS typings. (#325)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)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)