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 }