github.com/diadata-org/diadata@v1.4.593/pkg/dia/helpers/substrate-helper/gsrpc/registry/state/event_provider.go (about)

     1  package state
     2  
     3  import (
     4  	libErr "github.com/diadata-org/diadata/pkg/dia/helpers/substrate-helper/gsrpc/error"
     5  	"github.com/diadata-org/diadata/pkg/dia/helpers/substrate-helper/gsrpc/rpc/state"
     6  	"github.com/diadata-org/diadata/pkg/dia/helpers/substrate-helper/gsrpc/types"
     7  )
     8  
     9  const (
    10  	ErrEventStorageKeyCreation = libErr.Error("event storage key creation")
    11  	ErrEventStorageRetrieval   = libErr.Error("event storage retrieval")
    12  )
    13  
    14  //go:generate mockery --name EventProvider --structname EventProviderMock --filename event_provider_mock.go --inpackage
    15  
    16  // EventProvider is the interface used for retrieving event data from the storage.
    17  type EventProvider interface {
    18  	GetStorageEvents(meta *types.Metadata, blockHash types.Hash) (*types.StorageDataRaw, error)
    19  }
    20  
    21  // eventProvider implements the EventProvider interface.
    22  type eventProvider struct {
    23  	stateRPC state.State
    24  }
    25  
    26  // NewEventProvider creates a new EventProvider.
    27  func NewEventProvider(stateRPC state.State) EventProvider {
    28  	return &eventProvider{stateRPC: stateRPC}
    29  }
    30  
    31  const (
    32  	storagePrefix = "System"
    33  	storageMethod = "Events"
    34  )
    35  
    36  // GetStorageEvents returns the event storage data found at the provided blockHash.
    37  func (p *eventProvider) GetStorageEvents(meta *types.Metadata, blockHash types.Hash) (*types.StorageDataRaw, error) {
    38  	key, err := types.CreateStorageKey(meta, storagePrefix, storageMethod, nil)
    39  
    40  	if err != nil {
    41  		return nil, ErrEventStorageKeyCreation.Wrap(err)
    42  	}
    43  
    44  	storageData, err := p.stateRPC.GetStorageRaw(key, blockHash)
    45  
    46  	if err != nil {
    47  		return nil, ErrEventStorageRetrieval.Wrap(err)
    48  	}
    49  
    50  	return storageData, nil
    51  }