Documentation ¶
Overview ¶
TODO(@Wondertan): Ideally, we should move that into subpackage, so this does not get included into binary of
production code, but that does not matter at the moment.
Index ¶
- Variables
- func ExtendedHeaderToProto(eh *ExtendedHeader) (*header_pb.ExtendedHeader, error)
- func MarshalExtendedHeader(in *ExtendedHeader) (_ []byte, err error)
- func RandBlockID(t *testing.T) types.BlockID
- type Broadcaster
- type ConstructFn
- type DataAvailabilityHeader
- type DummySubscriber
- type Exchange
- type ExtendedHeader
- func MakeExtendedHeader(ctx context.Context, b *core.Block, comm *core.Commit, vals *core.ValidatorSet, ...) (*ExtendedHeader, error)
- func ProtoToExtendedHeader(pb *header_pb.ExtendedHeader) (*ExtendedHeader, error)
- func RandExtendedHeader(t *testing.T) *ExtendedHeader
- func UnmarshalExtendedHeader(data []byte) (*ExtendedHeader, error)
- func (eh *ExtendedHeader) Hash() bts.HexBytes
- func (eh *ExtendedHeader) IsExpired() bool
- func (eh *ExtendedHeader) LastHeader() bts.HexBytes
- func (eh *ExtendedHeader) MarshalBinary() ([]byte, error)
- func (eh *ExtendedHeader) UnmarshalBinary(data []byte) error
- func (eh *ExtendedHeader) ValidateBasic() error
- func (eh *ExtendedHeader) VerifyAdjacent(untrst *ExtendedHeader) error
- func (eh *ExtendedHeader) VerifyNonAdjacent(untrst *ExtendedHeader) error
- type RawHeader
- type Store
- type Subscriber
- type Subscription
- type TestSuite
- func (s *TestSuite) Commit(h *RawHeader) *types.Commit
- func (s *TestSuite) GenExtendedHeader() *ExtendedHeader
- func (s *TestSuite) GenExtendedHeaders(num int) []*ExtendedHeader
- func (s *TestSuite) GenRawHeader(height int64, lastHeader, lastCommit, dataHash bytes.HexBytes) *RawHeader
- func (s *TestSuite) Head() *ExtendedHeader
- type Validator
- type VerifyError
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNotFound is returned when there is no requested header. ErrNotFound = errors.New("not found") // ErrNoHead is returned when Store is empty (does not contain any known header). ErrNoHead = fmt.Errorf("no chain head") // ErrNonAdjacent is returned when Store is appended with a header not adjacent to the stored head. ErrNonAdjacent = fmt.Errorf("non-adjacent") )
var EmptyDAH = da.MinDataAvailabilityHeader
EmptyDAH provides DAH of the empty block.
var TrustingPeriod = 168 * time.Hour
TrustingPeriod is period through which we can trust a header's validators set.
Should be significantly less than the unbonding period (e.g. unbonding period = 3 weeks, trusting period = 2 weeks).
More specifically, trusting period + time needed to check headers + time needed to report and punish misbehavior should be less than the unbonding period. TODO(@Wondertan): We should request it from the network's state params
or listen for network params changes to always have a topical value.
Functions ¶
func ExtendedHeaderToProto ¶
func ExtendedHeaderToProto(eh *ExtendedHeader) (*header_pb.ExtendedHeader, error)
func MarshalExtendedHeader ¶
func MarshalExtendedHeader(in *ExtendedHeader) (_ []byte, err error)
MarshalExtendedHeader serializes given ExtendedHeader to bytes using protobuf. Paired with UnmarshalExtendedHeader.
Types ¶
type Broadcaster ¶
type Broadcaster interface {
Broadcast(ctx context.Context, header *ExtendedHeader, opts ...pubsub.PubOpt) error
}
Broadcaster broadcasts an ExtendedHeader to the network.
type ConstructFn ¶
type ConstructFn = func( context.Context, *core.Block, *core.Commit, *core.ValidatorSet, format.NodeAdder, ) (*ExtendedHeader, error)
ConstructFn aliases a function that creates an ExtendedHeader.
type DataAvailabilityHeader ¶
type DataAvailabilityHeader = da.DataAvailabilityHeader
func DataAvailabilityHeaderFromExtendedData ¶
func DataAvailabilityHeaderFromExtendedData(data *rsmt2d.ExtendedDataSquare) (DataAvailabilityHeader, error)
DataAvailabilityHeaderFromExtendedData generates a DataAvailabilityHeader from the given data square. TODO @renaynay: use da.NewDataAvailabilityHeader
type DummySubscriber ¶
type DummySubscriber struct {
Headers []*ExtendedHeader
}
func (*DummySubscriber) AddValidator ¶
func (mhs *DummySubscriber) AddValidator(Validator) error
func (*DummySubscriber) Cancel ¶
func (mhs *DummySubscriber) Cancel()
func (*DummySubscriber) NextHeader ¶
func (mhs *DummySubscriber) NextHeader(ctx context.Context) (*ExtendedHeader, error)
func (*DummySubscriber) Subscribe ¶
func (mhs *DummySubscriber) Subscribe() (Subscription, error)
type Exchange ¶
type Exchange interface { // RequestHead requests the latest ExtendedHeader. Note that the ExtendedHeader // must be verified thereafter. RequestHead(ctx context.Context) (*ExtendedHeader, error) // RequestHeader performs a request for the ExtendedHeader at the given // height to the network. Note that the ExtendedHeader must be verified // thereafter. RequestHeader(ctx context.Context, height uint64) (*ExtendedHeader, error) // RequestHeaders performs a request for the given range of ExtendedHeaders // to the network. Note that the ExtendedHeaders must be verified thereafter. RequestHeaders(ctx context.Context, origin, amount uint64) ([]*ExtendedHeader, error) // RequestByHash performs a request for the ExtendedHeader by the given hash corresponding // to the RawHeader. Note that the ExtendedHeader must be verified thereafter. RequestByHash(ctx context.Context, hash tmbytes.HexBytes) (*ExtendedHeader, error) }
Exchange encompasses the behavior necessary to request ExtendedHeaders from the network.
type ExtendedHeader ¶
type ExtendedHeader struct { RawHeader `json:"header"` Commit *core.Commit `json:"commit"` ValidatorSet *core.ValidatorSet `json:"validator_set"` DAH *DataAvailabilityHeader `json:"dah"` }
ExtendedHeader represents a wrapped "raw" header that includes information necessary for Celestia Nodes to be notified of new block headers and perform Data Availability Sampling.
func MakeExtendedHeader ¶
func MakeExtendedHeader( ctx context.Context, b *core.Block, comm *core.Commit, vals *core.ValidatorSet, dag format.NodeAdder, ) (*ExtendedHeader, error)
MakeExtendedHeader assembles new ExtendedHeader.
func ProtoToExtendedHeader ¶
func ProtoToExtendedHeader(pb *header_pb.ExtendedHeader) (*ExtendedHeader, error)
func RandExtendedHeader ¶
func RandExtendedHeader(t *testing.T) *ExtendedHeader
RandExtendedHeader provides an ExtendedHeader fixture.
func UnmarshalExtendedHeader ¶
func UnmarshalExtendedHeader(data []byte) (*ExtendedHeader, error)
UnmarshalExtendedHeader deserializes given data into a new ExtendedHeader using protobuf. Paired with MarshalExtendedHeader.
func (*ExtendedHeader) Hash ¶
func (eh *ExtendedHeader) Hash() bts.HexBytes
Hash returns Hash of the wrapped RawHeader. NOTE: It purposely overrides Hash method of RawHeader to get it directly from Commit without recomputing.
func (*ExtendedHeader) IsExpired ¶
func (eh *ExtendedHeader) IsExpired() bool
IsExpired checks if header is expired against trusting period.
func (*ExtendedHeader) LastHeader ¶
func (eh *ExtendedHeader) LastHeader() bts.HexBytes
LastHeader returns the Hash of the last wrapped RawHeader.
func (*ExtendedHeader) MarshalBinary ¶
func (eh *ExtendedHeader) MarshalBinary() ([]byte, error)
MarshalBinary marshals ExtendedHeader to binary.
func (*ExtendedHeader) UnmarshalBinary ¶
func (eh *ExtendedHeader) UnmarshalBinary(data []byte) error
UnmarshalBinary unmarshals ExtendedHeader from binary.
func (*ExtendedHeader) ValidateBasic ¶
func (eh *ExtendedHeader) ValidateBasic() error
ValidateBasic performs *basic* validation to check for missed/incorrect fields.
func (*ExtendedHeader) VerifyAdjacent ¶
func (eh *ExtendedHeader) VerifyAdjacent(untrst *ExtendedHeader) error
VerifyAdjacent validates adjacent untrusted header against trusted 'eh'.
func (*ExtendedHeader) VerifyNonAdjacent ¶
func (eh *ExtendedHeader) VerifyNonAdjacent(untrst *ExtendedHeader) error
VerifyNonAdjacent validates non-adjacent untrusted header against trusted 'eh'.
type RawHeader ¶
RawHeader is an alias to core.Header. It is "raw" because it is not yet wrapped to include the DataAvailabilityHeader.
func RandRawHeader ¶
RandRawHeader provides a RawHeader fixture.
type Store ¶
type Store interface { // Start starts the store. Start(context.Context) error // Stop stops the store by preventing further writes // and waiting till the ongoing ones are done. Stop(context.Context) error // Init initializes Store with the given head, meaning it is initialized with the genesis header. Init(context.Context, *ExtendedHeader) error // Height reports current height of the chain head. Height() uint64 // Head returns the ExtendedHeader of the chain head. Head(context.Context) (*ExtendedHeader, error) // Get returns the ExtendedHeader corresponding to the given hash. Get(context.Context, tmbytes.HexBytes) (*ExtendedHeader, error) // GetByHeight returns the ExtendedHeader corresponding to the given block height. GetByHeight(context.Context, uint64) (*ExtendedHeader, error) // GetRangeByHeight returns the given range [from:to) of ExtendedHeaders. GetRangeByHeight(ctx context.Context, from, to uint64) ([]*ExtendedHeader, error) // Has checks whether ExtendedHeader is already stored. Has(context.Context, tmbytes.HexBytes) (bool, error) // Append stores and verifies the given ExtendedHeader(s). // It requires them to be adjacent and in ascending order, // as it applies them contiguously on top of the current head height. // It returns the amount of successfully applied headers, // so caller can understand what given header was invalid, if any. Append(context.Context, ...*ExtendedHeader) (int, error) }
Store encompasses the behavior necessary to store and retrieve ExtendedHeaders from a node's local storage.
type Subscriber ¶
type Subscriber interface { // Subscribe creates long-living Subscription for validated ExtendedHeaders. // Multiple Subscriptions can be created. Subscribe() (Subscription, error) // AddValidator registers a Validator for all Subscriptions. // Registered Validators screen ExtendedHeaders for their validity // before they are sent through Subscriptions. // Multiple validators can be registered. AddValidator(Validator) error }
Subscriber encompasses the behavior necessary to subscribe/unsubscribe from new ExtendedHeader events from the network.
type Subscription ¶
type Subscription interface { // NextHeader returns the newest verified and valid ExtendedHeader // in the network. NextHeader(ctx context.Context) (*ExtendedHeader, error) // Cancel cancels the subscription. Cancel() }
Subscription can retrieve the next ExtendedHeader from the network.
type TestSuite ¶
type TestSuite struct {
// contains filtered or unexported fields
}
TestSuite provides everything you need to test chain of Headers. If not, please don't hesitate to extend it for your case.
func NewTestSuite ¶
NewTestSuite setups a new test suite with a given number of validators.
func (*TestSuite) GenExtendedHeader ¶
func (s *TestSuite) GenExtendedHeader() *ExtendedHeader
func (*TestSuite) GenExtendedHeaders ¶
func (s *TestSuite) GenExtendedHeaders(num int) []*ExtendedHeader
func (*TestSuite) GenRawHeader ¶
func (*TestSuite) Head ¶
func (s *TestSuite) Head() *ExtendedHeader
type Validator ¶
type Validator = func(context.Context, *ExtendedHeader) pubsub.ValidationResult
Validator aliases a func that validates ExtendedHeader.
type VerifyError ¶
type VerifyError struct {
Reason error
}
VerifyError is thrown on during VerifyAdjacent and VerifyNonAdjacent if verification fails.
func (*VerifyError) Error ¶
func (vr *VerifyError) Error() string