-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
86 lines (72 loc) · 1.94 KB
/
main.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 main
import (
"context"
"log"
"os"
"sync"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/joho/godotenv"
"github.com/leedinh/pluto/block"
"github.com/leedinh/pluto/bot"
"github.com/leedinh/pluto/db"
"github.com/leedinh/pluto/logger"
"github.com/leedinh/pluto/model"
"github.com/leedinh/pluto/parser"
"github.com/leedinh/pluto/tracker"
"go.uber.org/zap"
)
var (
telegramBotToken string
logg *zap.Logger
d *db.Database
rpcClient *ethclient.Client
)
func init() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
telegramBotToken = os.Getenv("TELEGRAM_BOT_TOKEN")
if telegramBotToken == "" {
log.Fatal("TELEGRAM_BOT_TOKEN environment variable is not set")
}
logg = logger.GetLogger()
logg.Info("Start Pluto")
d, _, err = db.InitDB()
if err != nil {
log.Fatal(err)
}
logg.Info("Connect to DB successfully", zap.Any("database", d))
rpcClient, err = ethclient.Dial("https://api-internal.roninchain.com/rpc")
if err != nil {
log.Fatal(err)
}
logg.Info("Connect to RPC successfully", zap.Any("rpcClient", rpcClient))
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
var trackerQueue []interface{}
blockSpan := block.NewBlockSpan(rpcClient, 7)
eventTracker := tracker.NewBlockTracker(rpcClient, d.Db, blockSpan, "tracker_1")
trackerQueue = append(trackerQueue, blockSpan, eventTracker)
trackerUpdate := model.NewTrackerUpdate()
var trackerWG sync.WaitGroup
rules := parser.InitRules()
go func() {
for {
for _, item := range trackerQueue {
trackerWG.Add(1)
switch it := item.(type) {
case *block.BlockSpan:
go it.BlockPoll(ctx, &trackerWG)
case *tracker.BlockTracker:
go it.Execute(ctx, &trackerWG, it.BlockSpan.LastestBlockNumber, rules, trackerUpdate)
}
}
trackerWG.Wait()
}
}()
bot := bot.InitBot(telegramBotToken, logg, model.Flow{}, d, trackerUpdate)
bot.Start()
}