github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/share/share.go (about) 1 package share 2 3 import ( 4 "context" 5 6 "github.com/celestiaorg/rsmt2d" 7 8 "github.com/celestiaorg/celestia-node/header" 9 "github.com/celestiaorg/celestia-node/share" 10 ) 11 12 var _ Module = (*API)(nil) 13 14 // Module provides access to any data square or block share on the network. 15 // 16 // All Get methods provided on Module follow the following flow: 17 // 1. Check local storage for the requested Share. 18 // 2. If exists 19 // * Load from disk 20 // * Return 21 // 3. If not 22 // * Find provider on the network 23 // * Fetch the Share from the provider 24 // * Store the Share 25 // * Return 26 // 27 // Any method signature changed here needs to also be changed in the API struct. 28 // 29 //go:generate mockgen -destination=mocks/api.go -package=mocks . Module 30 type Module interface { 31 // SharesAvailable subjectively validates if Shares committed to the given 32 // ExtendedHeader are available on the Network. 33 SharesAvailable(context.Context, *header.ExtendedHeader) error 34 // GetShare gets a Share by coordinates in EDS. 35 GetShare(ctx context.Context, header *header.ExtendedHeader, row, col int) (share.Share, error) 36 // GetEDS gets the full EDS identified by the given extended header. 37 GetEDS(ctx context.Context, header *header.ExtendedHeader) (*rsmt2d.ExtendedDataSquare, error) 38 // GetSharesByNamespace gets all shares from an EDS within the given namespace. 39 // Shares are returned in a row-by-row order if the namespace spans multiple rows. 40 GetSharesByNamespace( 41 ctx context.Context, header *header.ExtendedHeader, namespace share.Namespace, 42 ) (share.NamespacedShares, error) 43 } 44 45 // API is a wrapper around Module for the RPC. 46 // TODO(@distractedm1nd): These structs need to be autogenerated. 47 type API struct { 48 Internal struct { 49 SharesAvailable func(context.Context, *header.ExtendedHeader) error `perm:"read"` 50 GetShare func( 51 ctx context.Context, 52 header *header.ExtendedHeader, 53 row, col int, 54 ) (share.Share, error) `perm:"read"` 55 GetEDS func( 56 ctx context.Context, 57 header *header.ExtendedHeader, 58 ) (*rsmt2d.ExtendedDataSquare, error) `perm:"read"` 59 GetSharesByNamespace func( 60 ctx context.Context, 61 header *header.ExtendedHeader, 62 namespace share.Namespace, 63 ) (share.NamespacedShares, error) `perm:"read"` 64 } 65 } 66 67 func (api *API) SharesAvailable(ctx context.Context, header *header.ExtendedHeader) error { 68 return api.Internal.SharesAvailable(ctx, header) 69 } 70 71 func (api *API) GetShare(ctx context.Context, header *header.ExtendedHeader, row, col int) (share.Share, error) { 72 return api.Internal.GetShare(ctx, header, row, col) 73 } 74 75 func (api *API) GetEDS(ctx context.Context, header *header.ExtendedHeader) (*rsmt2d.ExtendedDataSquare, error) { 76 return api.Internal.GetEDS(ctx, header) 77 } 78 79 func (api *API) GetSharesByNamespace( 80 ctx context.Context, 81 header *header.ExtendedHeader, 82 namespace share.Namespace, 83 ) (share.NamespacedShares, error) { 84 return api.Internal.GetSharesByNamespace(ctx, header, namespace) 85 } 86 87 type module struct { 88 share.Getter 89 share.Availability 90 } 91 92 func (m module) SharesAvailable(ctx context.Context, header *header.ExtendedHeader) error { 93 return m.Availability.SharesAvailable(ctx, header) 94 }