From 9c20215f41d39abcfabdc1d8070e372db31c686e Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 24 Jul 2023 15:00:03 +0800 Subject: [PATCH] max: use fixedpoint.Value for field parsing --- pkg/exchange/max/convert.go | 25 +++--------------- pkg/exchange/max/maxapi/userdata.go | 32 ++++++------------------ pkg/exchange/max/maxapi/userdata_test.go | 2 +- 3 files changed, 13 insertions(+), 46 deletions(-) diff --git a/pkg/exchange/max/convert.go b/pkg/exchange/max/convert.go index 6047f5ee6..48b7687f7 100644 --- a/pkg/exchange/max/convert.go +++ b/pkg/exchange/max/convert.go @@ -288,36 +288,19 @@ func convertWebSocketTrade(t max.TradeUpdate) (*types.Trade, error) { // trade time mts := time.Unix(0, t.Timestamp*int64(time.Millisecond)) - price, err := fixedpoint.NewFromString(t.Price) - if err != nil { - return nil, err - } - - quantity, err := fixedpoint.NewFromString(t.Volume) - if err != nil { - return nil, err - } - - quoteQuantity := price.Mul(quantity) - - fee, err := fixedpoint.NewFromString(t.Fee) - if err != nil { - return nil, err - } - return &types.Trade{ ID: t.ID, OrderID: t.OrderID, Symbol: toGlobalSymbol(t.Market), Exchange: types.ExchangeMax, - Price: price, - Quantity: quantity, + Price: t.Price, + Quantity: t.Volume, Side: side, IsBuyer: side == types.SideTypeBuy, IsMaker: t.Maker, - Fee: fee, + Fee: t.Fee, FeeCurrency: toGlobalCurrency(t.FeeCurrency), - QuoteQuantity: quoteQuantity, + QuoteQuantity: t.Price.Mul(t.Volume), Time: types.Time(mts), }, nil } diff --git a/pkg/exchange/max/maxapi/userdata.go b/pkg/exchange/max/maxapi/userdata.go index 000e65946..26ff6cf4b 100644 --- a/pkg/exchange/max/maxapi/userdata.go +++ b/pkg/exchange/max/maxapi/userdata.go @@ -94,15 +94,15 @@ func parserOrderSnapshotEvent(v *fastjson.Value) *OrderSnapshotEvent { } type TradeUpdate struct { - ID uint64 `json:"i"` - Side string `json:"sd"` - Price string `json:"p"` - Volume string `json:"v"` - Market string `json:"M"` + ID uint64 `json:"i"` + Side string `json:"sd"` + Price fixedpoint.Value `json:"p"` + Volume fixedpoint.Value `json:"v"` + Market string `json:"M"` - Fee string `json:"f"` - FeeCurrency string `json:"fc"` - FeeDiscounted bool `json:"fd"` + Fee fixedpoint.Value `json:"f"` + FeeCurrency string `json:"fc"` + FeeDiscounted bool `json:"fd"` Timestamp int64 `json:"T"` UpdateTime int64 `json:"TU"` @@ -112,22 +112,6 @@ type TradeUpdate struct { Maker bool `json:"m"` } -func parseTradeUpdate(v *fastjson.Value) TradeUpdate { - return TradeUpdate{ - ID: v.GetUint64("i"), - Side: string(v.GetStringBytes("sd")), - Price: string(v.GetStringBytes("p")), - Volume: string(v.GetStringBytes("v")), - Market: string(v.GetStringBytes("M")), - Fee: string(v.GetStringBytes("f")), - FeeCurrency: string(v.GetStringBytes("fc")), - Timestamp: v.GetInt64("T"), - UpdateTime: v.GetInt64("TU"), - OrderID: v.GetUint64("oi"), - Maker: v.GetBool("m"), - } -} - type TradeUpdateEvent struct { BaseEvent Trades []TradeUpdate `json:"t"` diff --git a/pkg/exchange/max/maxapi/userdata_test.go b/pkg/exchange/max/maxapi/userdata_test.go index af80dcd22..2967e16df 100644 --- a/pkg/exchange/max/maxapi/userdata_test.go +++ b/pkg/exchange/max/maxapi/userdata_test.go @@ -40,6 +40,6 @@ func Test_parseTradeSnapshotEvent(t *testing.T) { assert.Equal(t, "bid", evt.Trades[0].Side) assert.Equal(t, "ethtwd", evt.Trades[0].Market) assert.Equal(t, int64(1521726960357), evt.Trades[0].Timestamp) - assert.Equal(t, "3.2", evt.Trades[0].Fee) + assert.Equal(t, "3.2", evt.Trades[0].Fee.String()) assert.Equal(t, "twd", evt.Trades[0].FeeCurrency) }