github.com/palisadeinc/bor@v0.0.0-20230615125219-ab7196213d15/consensus/bor/heimdallapp/state_sync.go (about) 1 package heimdallapp 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/maticnetwork/heimdall/clerk/types" 8 9 "github.com/ethereum/go-ethereum/consensus/bor/clerk" 10 11 abci "github.com/tendermint/tendermint/abci/types" 12 ) 13 14 func (h *HeimdallAppClient) StateSyncEvents(ctx context.Context, fromID uint64, to int64) ([]*clerk.EventRecordWithTime, error) { 15 totalRecords := make([]*clerk.EventRecordWithTime, 0) 16 17 hCtx := h.hApp.NewContext(true, abci.Header{Height: h.hApp.LastBlockHeight()}) 18 19 for { 20 fromRecord, err := h.hApp.ClerkKeeper.GetEventRecord(hCtx, fromID) 21 if err != nil { 22 return nil, err 23 } 24 25 events, err := h.hApp.ClerkKeeper.GetEventRecordListWithTime(hCtx, fromRecord.RecordTime, time.Unix(to, 0), 1, stateFetchLimit) 26 if err != nil { 27 return nil, err 28 } 29 30 totalRecords = append(totalRecords, toEvents(events)...) 31 32 if len(events) < stateFetchLimit { 33 break 34 } 35 36 fromID += uint64(stateFetchLimit) 37 } 38 39 return totalRecords, nil 40 } 41 42 func toEvents(hdEvents []types.EventRecord) []*clerk.EventRecordWithTime { 43 events := make([]*clerk.EventRecordWithTime, len(hdEvents)) 44 45 for i, ev := range hdEvents { 46 events[i] = toEvent(ev) 47 } 48 49 return events 50 } 51 52 func toEvent(hdEvent types.EventRecord) *clerk.EventRecordWithTime { 53 return &clerk.EventRecordWithTime{ 54 EventRecord: clerk.EventRecord{ 55 ID: hdEvent.ID, 56 Contract: hdEvent.Contract.EthAddress(), 57 Data: hdEvent.Data.Bytes(), 58 TxHash: hdEvent.TxHash.EthHash(), 59 LogIndex: hdEvent.LogIndex, 60 ChainID: hdEvent.ChainID, 61 }, 62 Time: hdEvent.RecordTime, 63 } 64 }