diff --git a/client/core/core.go b/client/core/core.go index 69519c22da..7bf76449fe 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -331,8 +331,8 @@ func (dc *dexConnection) marketEpochDuration(mktID string) uint64 { return mkt.EpochLen } -// marketEpoch gets the best known epoch for the specified market and time -// stamp. If the market is not known, 0 is returned. +// marketEpoch gets the epoch index for the specified market and time stamp. If +// the market is not known, 0 is returned. func (dc *dexConnection) marketEpoch(mktID string, stamp time.Time) uint64 { epochLen := dc.marketEpochDuration(mktID) if epochLen == 0 { @@ -1370,7 +1370,7 @@ func (c *Core) Trade(pw []byte, form *TradeForm) (*Order, error) { } // Prepare and store the tracker and get the core.Order to return. - tracker := newTrackedTrade(dbOrder, preImg, dc, mkt, c.db, c.latencyQ, wallets, coins, c.notify) + tracker := newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, c.db, c.latencyQ, wallets, coins, c.notify) corder, _ := tracker.coreOrder() dc.tradeMtx.Lock() dc.trades[tracker.ID()] = tracker @@ -1803,7 +1803,7 @@ func (c *Core) dbTrackers(dc *dexConnection) (map[order.OrderID]*trackedTrade, e } else { var preImg order.Preimage copy(preImg[:], dbOrder.MetaData.Proof.Preimage) - trackers[dbOrder.Order.ID()] = newTrackedTrade(dbOrder, preImg, dc, mkt, c.db, c.latencyQ, nil, nil, c.notify) + trackers[dbOrder.Order.ID()] = newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, c.db, c.latencyQ, nil, nil, c.notify) } } for oid := range cancels { diff --git a/client/core/core_test.go b/client/core/core_test.go index a342d01fa3..be516a77b3 100644 --- a/client/core/core_test.go +++ b/client/core/core_test.go @@ -1697,7 +1697,7 @@ func TestCancel(t *testing.T) { lo, dbOrder, preImg, _ := makeLimitOrder(dc, true, 0, 0) oid := lo.ID() mkt := dc.market(tDcrBtcMktName) - tracker := newTrackedTrade(dbOrder, preImg, dc, mkt, rig.db, rig.queue, nil, nil, rig.core.notify) + tracker := newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, rig.db, rig.queue, nil, nil, rig.core.notify) dc.trades[oid] = tracker handleCancel := func(msg *msgjson.Message, f msgFunc) error { @@ -1861,7 +1861,7 @@ func TestTradeTracking(t *testing.T) { t.Fatalf("walletSet error: %v", err) } mkt := dc.market(tDcrBtcMktName) - tracker := newTrackedTrade(dbOrder, preImgL, dc, mkt, rig.db, rig.queue, walletSet, nil, rig.core.notify) + tracker := newTrackedTrade(dbOrder, preImgL, dc, mkt.EpochLen, rig.db, rig.queue, walletSet, nil, rig.core.notify) rig.dc.trades[tracker.ID()] = tracker var match *matchTracker checkStatus := func(tag string, wantStatus order.MatchStatus) { @@ -2366,7 +2366,7 @@ func TestReadConnectMatches(t *testing.T) { Order: lo, } mkt := dc.market(tDcrBtcMktName) - tracker := newTrackedTrade(dbOrder, preImg, dc, mkt, rig.db, rig.queue, nil, nil, notify) + tracker := newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, rig.db, rig.queue, nil, nil, notify) metaMatch := db.MetaMatch{ MetaData: &db.MatchMetaData{}, Match: &order.UserMatch{}, @@ -2636,7 +2636,7 @@ func TestSetEpoch(t *testing.T) { rig.dc.books[tDcrBtcMktName] = newBookie(func() {}) lo, dbOrder, preImg, _ := makeLimitOrder(dc, true, 0, 0) mkt := dc.market(tDcrBtcMktName) - tracker := newTrackedTrade(dbOrder, preImg, dc, mkt, rig.db, rig.queue, nil, nil, rig.core.notify) + tracker := newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, rig.db, rig.queue, nil, nil, rig.core.notify) dc.trades[lo.ID()] = tracker metaData := tracker.metaData @@ -2684,7 +2684,7 @@ func TestSetEpoch(t *testing.T) { }, Order: mo, } - tracker = newTrackedTrade(dbOrder, preImg, dc, mkt, rig.db, rig.queue, nil, nil, rig.core.notify) + tracker = newTrackedTrade(dbOrder, preImg, dc, mkt.EpochLen, rig.db, rig.queue, nil, nil, rig.core.notify) metaData = tracker.metaData dc.trades[mo.ID()] = tracker ensureStatus("market order", order.OrderStatusExecuted) diff --git a/client/core/trade.go b/client/core/trade.go index 80fb957024..1d25a059b5 100644 --- a/client/core/trade.go +++ b/client/core/trade.go @@ -92,7 +92,7 @@ type trackedTrade struct { } // newTrackedTrade is a constructor for a trackedTrade. -func newTrackedTrade(dbOrder *db.MetaOrder, preImg order.Preimage, dc *dexConnection, mkt *Market, +func newTrackedTrade(dbOrder *db.MetaOrder, preImg order.Preimage, dc *dexConnection, epochLen uint64, db db.DB, latencyQ *wait.TickerQueue, wallets *walletSet, coins asset.Coins, notify func(Notification)) *trackedTrade { ord := dbOrder.Order return &trackedTrade{ @@ -107,7 +107,7 @@ func newTrackedTrade(dbOrder *db.MetaOrder, preImg order.Preimage, dc *dexConnec coins: mapifyCoins(coins), matches: make(map[order.MatchID]*matchTracker), notify: notify, - epochLen: mkt.EpochLen, + epochLen: epochLen, } } @@ -910,15 +910,6 @@ func (t *trackedTrade) processRedemption(msgID uint64, redemption *msgjson.Redem // index < the new index and has a status of OrderStatusEpoch, the order will // be assumed to have matched without error, and the status set to executed or // booked, depending on the order type. -// -// DRAFT NOTE: As of now, if the client is not subscribed to the order book when -// the order actually matches, the status might not be set correctly. This is a -// consequence of having no notifications for orders which either are 1) -// unmatched (market order against empty book, or immediate limit order with -// restrictive rate), or 2) are booked without matching. This also creates the -// odd case that a fully-matched standing limit order may be set to -// OrderStatusBooked before a subsequent match notification might change it -// to OrderStatusExecuted. func (t *trackedTrade) processEpoch(epochIdx uint64) bool { t.mtx.Lock() defer t.mtx.Unlock() diff --git a/client/webserver/site/src/js/markets.js b/client/webserver/site/src/js/markets.js index 47ebed7334..ea4a9b08f9 100644 --- a/client/webserver/site/src/js/markets.js +++ b/client/webserver/site/src/js/markets.js @@ -1040,7 +1040,7 @@ function updateDataCol (tr, col, s) { } /* - * updateUserOrderRow sets the td values of the user's order table row element. + * updateUserOrderRow sets the td contents of the user's order table row. */ function updateUserOrderRow (tr, order) { updateDataCol(tr, 'type', order.type === LIMIT ? 'limit' : 'market')