diff --git a/tomox/order_processor.go b/tomox/order_processor.go index f284c128f..a43a499ec 100644 --- a/tomox/order_processor.go +++ b/tomox/order_processor.go @@ -41,6 +41,16 @@ func (tomox *TomoX) ApplyOrder(coinbase common.Address, chain consensus.ChainCon } else if big.NewInt(int64(nonce)).Cmp(order.Nonce) == 1 { return nil, nil, ErrNonceTooLow } + if order.Status == OrderStatusCancelled { + err := tomoXstatedb.CancelOrder(orderBook, order) + if err != nil { + log.Debug("Error when cancel order", "order", order) + return nil, nil, err + } + log.Debug("Exchange add user nonce:", "address", order.UserAddress, "status", order.Status, "nonce", nonce+1) + tomoXstatedb.SetNonce(order.UserAddress.Hash(), nonce+1) + return trades, rejects, nil + } if order.Price.Sign() == 0 || common.BigToHash(order.Price).Big().Cmp(order.Price) != 0 { log.Debug("Reject order price invalid", "price", order.Price) rejects = append(rejects, order) @@ -53,17 +63,6 @@ func (tomox *TomoX) ApplyOrder(coinbase common.Address, chain consensus.ChainCon tomoXstatedb.SetNonce(order.UserAddress.Hash(), nonce+1) return trades, rejects, nil } - - if order.Status == OrderStatusCancelled { - err := tomoXstatedb.CancelOrder(orderBook, order) - if err != nil { - log.Debug("Error when cancel order", "order", order) - return nil, nil, err - } - log.Debug("Exchange add user nonce:", "address", order.UserAddress, "status", order.Status, "nonce", nonce+1) - tomoXstatedb.SetNonce(order.UserAddress.Hash(), nonce+1) - return trades, rejects, nil - } orderType := order.Type // if we do not use auto-increment orderid, we must set price slot to avoid conflict if orderType == tomox_state.Market { diff --git a/tomox/tomox_state/statedb.go b/tomox/tomox_state/statedb.go index 33cf2b343..760e036b2 100644 --- a/tomox/tomox_state/statedb.go +++ b/tomox/tomox_state/statedb.go @@ -262,8 +262,8 @@ func (self *TomoXStateDB) CancelOrder(orderBook common.Hash, order *OrderItem) e if stateOrderItem == nil || stateOrderItem.empty() { return fmt.Errorf("Order item empty order book : %s , order id : %s , price : %s ", orderBook, orderIdHash.Hex(), priceHash.Hex()) } - if stateOrderItem.data.Hash != order.Hash { - return fmt.Errorf("Error Order Hash mismatch when cancel order book : %s , order id : %s , got : %s , expect : %s ", orderBook, orderIdHash.Hex(), stateOrderItem.data.Hash.Hex(), order.Hash.Hex()) + if stateOrderItem.data.UserAddress != order.UserAddress { + return fmt.Errorf("Error Order User Address mismatch when cancel order book : %s , order id : %s , got : %s , expect : %s ", orderBook, orderIdHash.Hex(), stateOrderItem.data.UserAddress.Hex(), order.UserAddress.Hex()) } self.journal = append(self.journal, cancelOrder{ orderBook: orderBook,