forked from stellar/go
/
actions_orderbook.go
86 lines (76 loc) · 2.48 KB
/
actions_orderbook.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package ticker
import (
"time"
millenniumclient "github.com/aiblocks/go/clients/millenniumclient"
"github.com/aiblocks/go/services/ticker/internal/scraper"
"github.com/aiblocks/go/services/ticker/internal/tickerdb"
"github.com/aiblocks/go/support/errors"
hlog "github.com/aiblocks/go/support/log"
)
// RefreshOrderbookEntries updates the orderbook entries for the relevant markets that were active
// in the past 7-day interval
func RefreshOrderbookEntries(s *tickerdb.TickerSession, c *millenniumclient.Client, l *hlog.Entry) error {
sc := scraper.ScraperConfig{
Client: c,
Logger: l,
}
// Retrieve relevant markets for the past 7 days (168 hours):
mkts, err := s.Retrieve7DRelevantMarkets()
if err != nil {
return errors.Wrap(err, "could not retrieve partial markets")
}
for _, mkt := range mkts {
ob, err := sc.FetchOrderbookForAssets(
mkt.BaseAssetType,
mkt.BaseAssetCode,
mkt.BaseAssetIssuer,
mkt.CounterAssetType,
mkt.CounterAssetCode,
mkt.CounterAssetIssuer,
)
if err != nil {
l.Error(errors.Wrap(err, "could not fetch orderbook for assets"))
continue
}
dbOS := orderbookStatsToDBOrderbookStats(ob, mkt.BaseAssetID, mkt.CounterAssetID)
err = s.InsertOrUpdateOrderbookStats(&dbOS, []string{"base_asset_id", "counter_asset_id"})
if err != nil {
l.Error(errors.Wrap(err, "could not insert orderbook stats into db"))
continue
}
// Compute the orderbook stats for the reverse market.
iob, err := sc.FetchOrderbookForAssets(
mkt.CounterAssetType,
mkt.CounterAssetCode,
mkt.CounterAssetIssuer,
mkt.BaseAssetType,
mkt.BaseAssetCode,
mkt.BaseAssetIssuer,
)
if err != nil {
l.Error(errors.Wrap(err, "could not fetch reverse orderbook for assets"))
continue
}
dbIOS := orderbookStatsToDBOrderbookStats(iob, mkt.CounterAssetID, mkt.BaseAssetID)
err = s.InsertOrUpdateOrderbookStats(&dbIOS, []string{"base_asset_id", "counter_asset_id"})
if err != nil {
l.Error(errors.Wrap(err, "could not insert reverse orderbook stats into db"))
}
}
return nil
}
func orderbookStatsToDBOrderbookStats(os scraper.OrderbookStats, bID, cID int32) tickerdb.OrderbookStats {
return tickerdb.OrderbookStats{
BaseAssetID: bID,
CounterAssetID: cID,
NumBids: os.NumBids,
BidVolume: os.BidVolume,
HighestBid: os.HighestBid,
NumAsks: os.NumAsks,
AskVolume: os.AskVolume,
LowestAsk: os.LowestAsk,
Spread: os.Spread,
SpreadMidPoint: os.SpreadMidPoint,
UpdatedAt: time.Now(),
}
}