@@ -3,6 +3,8 @@ package logpoller
3
3
import (
4
4
"context"
5
5
"errors"
6
+ "fmt"
7
+ "math"
6
8
"sync"
7
9
"time"
8
10
@@ -19,10 +21,11 @@ var (
19
21
20
22
//go:generate mockery --name ORM --inpackage --structname mockORM --filename mock_orm.go
21
23
type ORM interface {
22
- InsertFilter (ctx context.Context , filter Filter ) (id int64 , err error )
23
- SelectFilters (ctx context.Context ) ([]Filter , error )
24
- DeleteFilters (ctx context.Context , filters map [int64 ]Filter ) error
24
+ InsertFilter (context.Context , filter Filter ) (id int64 , err error )
25
+ SelectFilters (context.Context ) ([]Filter , error )
26
+ DeleteFilters (context.Context , filters map [int64 ]Filter ) error
25
27
MarkFilterDeleted (ctx context.Context , id int64 ) (err error )
28
+ InsertLogs (context.Context , []Log ) (err error )
26
29
}
27
30
28
31
type ILogPoller interface {
@@ -57,9 +60,34 @@ func NewLogPoller(lggr logger.SugaredLogger, orm ORM, cl internal.Loader[client.
57
60
return & lp
58
61
}
59
62
63
+ func makeLogIndex (txIndex int , txLogIndex uint ) int64 {
64
+ if txIndex < 0 || txIndex > math .MaxUint32 || txLogIndex > math .MaxUint32 {
65
+ panic (fmt .Sprintf ("txIndex or txLogIndex out of range: txIndex=%d, txLogIndex=%d" , txIndex , txLogIndex ))
66
+ }
67
+ return int64 (math .MaxUint32 * uint32 (txIndex ) + uint32 (txLogIndex ))
68
+ }
69
+
60
70
func (lp * LogPoller ) Process (event ProgramEvent ) error {
61
71
// process stream of events coming from event loader
72
+
73
+ Decode (event .Data ) // Borsch decode
74
+
75
+ log := Log {
76
+ FilterID : filterID ,
77
+ ChainID : lp .chainID ,
78
+ LogIndex : makeLogIndex (event .TransactionIndex , event .TransactionLogIndex ),
79
+ BlockHash : Hash (event .BlockHash ),
80
+ BlockNumber : int64 (event .BlockHeight ),
81
+ BlockTimestamp : ,
82
+ Address :,
83
+ EventSig :,
84
+
85
+ }
86
+
87
+ logs := []Log {log }
88
+
62
89
lp .events = append (lp .events , event )
90
+
63
91
return nil
64
92
}
65
93
0 commit comments