Currently, Mesh validates incoming orders at the latest block height. Since eth_call's can take some time to complete, it is possible that Mesh has already processed higher block number before the order was inserted to the DB. This could lead to events being missed and the fillableTakerAmount stored in the DB being incorrect.
The solution is to block the processing of new block events while validating incoming orders and to validate them at the latest block processed by the Mesh node. We then add it to Mesh before unblocking the block event processing.
After #793, this became an issue again. Rather than reverting to the old solution of using a database lock, a new solution will be implemented in #863.
Currently, Mesh validates incoming orders at the
latest
block height. Sinceeth_call
's can take some time to complete, it is possible that Mesh has already processed higher block number before the order was inserted to the DB. This could lead to events being missed and the fillableTakerAmount stored in the DB being incorrect.The solution is to block the processing of new block events while validating incoming orders and to validate them at the latest block processed by the Mesh node. We then add it to Mesh before unblocking the block event processing.