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  }