github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/header/header.go (about)

     1  package header
     2  
     3  import (
     4  	"context"
     5  
     6  	libhead "github.com/celestiaorg/go-header"
     7  	"github.com/celestiaorg/go-header/sync"
     8  
     9  	"github.com/celestiaorg/celestia-node/header"
    10  )
    11  
    12  // Module exposes the functionality needed for querying headers from the network.
    13  // Any method signature changed here needs to also be changed in the API struct.
    14  //
    15  //go:generate mockgen -destination=mocks/api.go -package=mocks . Module
    16  type Module interface {
    17  	// LocalHead returns the ExtendedHeader of the chain head.
    18  	LocalHead(context.Context) (*header.ExtendedHeader, error)
    19  
    20  	// GetByHash returns the header of the given hash from the node's header store.
    21  	GetByHash(ctx context.Context, hash libhead.Hash) (*header.ExtendedHeader, error)
    22  	// GetRangeByHeight returns the given range (from:to) of ExtendedHeaders
    23  	// from the node's header store and verifies that the returned headers are
    24  	// adjacent to each other.
    25  	GetRangeByHeight(
    26  		ctx context.Context,
    27  		from *header.ExtendedHeader,
    28  		to uint64,
    29  	) ([]*header.ExtendedHeader, error)
    30  	// GetByHeight returns the ExtendedHeader at the given height if it is
    31  	// currently available.
    32  	GetByHeight(context.Context, uint64) (*header.ExtendedHeader, error)
    33  	// WaitForHeight blocks until the header at the given height has been processed
    34  	// by the store or context deadline is exceeded.
    35  	WaitForHeight(context.Context, uint64) (*header.ExtendedHeader, error)
    36  
    37  	// SyncState returns the current state of the header Syncer.
    38  	SyncState(context.Context) (sync.State, error)
    39  	// SyncWait blocks until the header Syncer is synced to network head.
    40  	SyncWait(ctx context.Context) error
    41  	// NetworkHead provides the Syncer's view of the current network head.
    42  	NetworkHead(ctx context.Context) (*header.ExtendedHeader, error)
    43  
    44  	// Subscribe to recent ExtendedHeaders from the network.
    45  	Subscribe(ctx context.Context) (<-chan *header.ExtendedHeader, error)
    46  }
    47  
    48  // API is a wrapper around Module for the RPC.
    49  // TODO(@distractedm1nd): These structs need to be autogenerated.
    50  type API struct {
    51  	Internal struct {
    52  		LocalHead func(context.Context) (*header.ExtendedHeader, error) `perm:"read"`
    53  		GetByHash func(
    54  			ctx context.Context,
    55  			hash libhead.Hash,
    56  		) (*header.ExtendedHeader, error) `perm:"read"`
    57  		GetRangeByHeight func(
    58  			context.Context,
    59  			*header.ExtendedHeader,
    60  			uint64,
    61  		) ([]*header.ExtendedHeader, error) `perm:"read"`
    62  		GetByHeight   func(context.Context, uint64) (*header.ExtendedHeader, error)    `perm:"read"`
    63  		WaitForHeight func(context.Context, uint64) (*header.ExtendedHeader, error)    `perm:"read"`
    64  		SyncState     func(ctx context.Context) (sync.State, error)                    `perm:"read"`
    65  		SyncWait      func(ctx context.Context) error                                  `perm:"read"`
    66  		NetworkHead   func(ctx context.Context) (*header.ExtendedHeader, error)        `perm:"read"`
    67  		Subscribe     func(ctx context.Context) (<-chan *header.ExtendedHeader, error) `perm:"read"`
    68  	}
    69  }
    70  
    71  func (api *API) GetByHash(ctx context.Context, hash libhead.Hash) (*header.ExtendedHeader, error) {
    72  	return api.Internal.GetByHash(ctx, hash)
    73  }
    74  
    75  func (api *API) GetRangeByHeight(
    76  	ctx context.Context,
    77  	from *header.ExtendedHeader,
    78  	to uint64,
    79  ) ([]*header.ExtendedHeader, error) {
    80  	return api.Internal.GetRangeByHeight(ctx, from, to)
    81  }
    82  
    83  func (api *API) GetByHeight(ctx context.Context, u uint64) (*header.ExtendedHeader, error) {
    84  	return api.Internal.GetByHeight(ctx, u)
    85  }
    86  
    87  func (api *API) WaitForHeight(ctx context.Context, u uint64) (*header.ExtendedHeader, error) {
    88  	return api.Internal.WaitForHeight(ctx, u)
    89  }
    90  
    91  func (api *API) LocalHead(ctx context.Context) (*header.ExtendedHeader, error) {
    92  	return api.Internal.LocalHead(ctx)
    93  }
    94  
    95  func (api *API) SyncState(ctx context.Context) (sync.State, error) {
    96  	return api.Internal.SyncState(ctx)
    97  }
    98  
    99  func (api *API) SyncWait(ctx context.Context) error {
   100  	return api.Internal.SyncWait(ctx)
   101  }
   102  
   103  func (api *API) NetworkHead(ctx context.Context) (*header.ExtendedHeader, error) {
   104  	return api.Internal.NetworkHead(ctx)
   105  }
   106  
   107  func (api *API) Subscribe(ctx context.Context) (<-chan *header.ExtendedHeader, error) {
   108  	return api.Internal.Subscribe(ctx)
   109  }