share

package
v0.18.0-rc0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2024 License: Apache-2.0 Imports: 17 Imported by: 15

Documentation

Overview

Package share contains logic related to the retrieval and random sampling of shares of block data.

Though this package contains several useful methods for getting specific shares and/or sampling them at random, a particularly useful method is GetSharesByNamespace which retrieves all shares of block data of the given Namespace from the block associated with the given DataAvailabilityHeader (DAH, but referred to as AxisRoots within this package).

This package also contains declaration of the Availability interface. Implementations of the interface (light, full) are located in the availability sub-folder. Light Availability implementation samples for 16 shares of block data (enough to verify the block's availability on the network). Full Availability implementation samples for as many shares as necessary to fully reconstruct the block data.

Index

Constants

View Source
const (
	// DataHashSize is the size of the DataHash.
	DataHashSize = 32
	// AxisRootSize is the size of the single root in AxisRoots.
	AxisRootSize = 90
)
View Source
const NamespaceSize = appns.NamespaceSize

NamespaceSize is a system-wide size for NMT namespaces.

View Source
const (
	// Size is a system-wide size of a share, including both data and namespace GetNamespace
	Size = appconsts.ShareSize
)

Variables

View Source
var (
	// MaxPrimaryReservedNamespace is the highest primary reserved namespace.
	// Namespaces lower than this are reserved for protocol use.
	MaxPrimaryReservedNamespace = Namespace(appns.MaxPrimaryReservedNamespace.Bytes())
	// MinSecondaryReservedNamespace is the lowest secondary reserved namespace
	// reserved for protocol use. Namespaces higher than this are reserved for
	// protocol use.
	MinSecondaryReservedNamespace   = Namespace(appns.MinSecondaryReservedNamespace.Bytes())
	ParitySharesNamespace           = Namespace(appns.ParitySharesNamespace.Bytes())
	TailPaddingNamespace            = Namespace(appns.TailPaddingNamespace.Bytes())
	PrimaryReservedPaddingNamespace = Namespace(appns.PrimaryReservedPaddingNamespace.Bytes())
	TxNamespace                     = Namespace(appns.TxNamespace.Bytes())
	PayForBlobNamespace             = Namespace(appns.PayForBlobNamespace.Bytes())
	ISRNamespace                    = Namespace(appns.IntermediateStateRootsNamespace.Bytes())
)

Various reserved namespaces.

View Source
var DefaultRSMT2DCodec = appconsts.DefaultCodec

DefaultRSMT2DCodec sets the default rsmt2d.Codec for shares.

View Source
var ErrNotAvailable = errors.New("share: data not available")

ErrNotAvailable is returned whenever DA sampling fails.

MaxSquareSize is currently the maximum size supported for unerasured data in rsmt2d.ExtendedDataSquare.

Functions

func EmptyEDS

func EmptyEDS() *rsmt2d.ExtendedDataSquare

EmptyEDS returns the EDS of the empty block data square.

func GetData added in v0.11.0

func GetData(s Share) []byte

GetData slices out data of the Share.

func NewSHA256Hasher added in v0.13.5

func NewSHA256Hasher() hash.Hash

NewSHA256Hasher returns a new instance of a SHA-256 hasher.

func RootHashForCoordinates

func RootHashForCoordinates(r *AxisRoots, axisType rsmt2d.Axis, rowIdx, colIdx uint) []byte

RootHashForCoordinates returns the root hash for the given coordinates.

func RowsWithNamespace

func RowsWithNamespace(root *AxisRoots, namespace Namespace) (idxs []int)

RowsWithNamespace inspects the AxisRoots for the Namespace and provides a slices of Row indexes containing the namespace.

func ValidateShare

func ValidateShare(s Share) error

ValidateShare checks the size of a given share.

Types

type Availability

type Availability interface {
	// SharesAvailable subjectively validates if Shares committed to the given Root are available on
	// the Network.
	SharesAvailable(context.Context, *header.ExtendedHeader) error
}

Availability defines interface for validation of Shares' availability.

type AxisRoots

type AxisRoots = da.DataAvailabilityHeader

AxisRoots represents root commitment to multiple Shares. In practice, it is a commitment to all the Data in a square.

func EmptyEDSRoots

func EmptyEDSRoots() *AxisRoots

EmptyEDSRoots returns AxisRoots of the empty block EDS.

func NewAxisRoots

func NewAxisRoots(eds *rsmt2d.ExtendedDataSquare) (*AxisRoots, error)

NewAxisRoots generates AxisRoots(DataAvailabilityHeader) using the provided extended data square.

type DataHash added in v0.5.0

type DataHash []byte

DataHash is a representation of the AxisRoots hash.

func EmptyEDSDataHash

func EmptyEDSDataHash() DataHash

EmptyEDSDataHash returns DataHash of the empty block EDS.

func MustDataHashFromString added in v0.11.0

func MustDataHashFromString(datahash string) DataHash

MustDataHashFromString converts a hex string to a valid datahash.

func (DataHash) IsEmptyEDS

func (dh DataHash) IsEmptyEDS() bool

IsEmptyEDS check whether DataHash corresponds to the root of an empty block EDS.

func (DataHash) String added in v0.5.0

func (dh DataHash) String() string

func (DataHash) Validate added in v0.5.0

func (dh DataHash) Validate() error

type Namespace added in v0.11.0

type Namespace []byte

Namespace represents namespace of a Share. Consists of version byte and namespace ID.

func GetNamespace added in v0.11.0

func GetNamespace(s Share) Namespace

GetNamespace slices Namespace out of the Share.

func NamespaceFromBytes added in v0.11.0

func NamespaceFromBytes(b []byte) (Namespace, error)

NamespaceFromBytes converts bytes into Namespace and validates it.

func NewBlobNamespaceV0 added in v0.11.0

func NewBlobNamespaceV0(id []byte) (Namespace, error)

NewBlobNamespaceV0 takes a variable size byte slice and creates a valid version 0 Blob Namespace. The byte slice must be <= 10 bytes. If it is less than 10 bytes, it will be left padded to size 10 with 0s. Use predefined namespaces above, if non-blob namespace is needed.

func (Namespace) AddInt

func (n Namespace) AddInt(val int) (Namespace, error)

AddInt adds arbitrary int value to namespace, treating namespace as big-endian implementation of int

func (Namespace) Equals added in v0.11.0

func (n Namespace) Equals(target Namespace) bool

Equals compares two Namespaces.

func (Namespace) ID added in v0.11.0

func (n Namespace) ID() namespace.ID

ID reports ID of the Namespace.

func (Namespace) IsAboveMax added in v0.11.0

func (n Namespace) IsAboveMax(nodeHash []byte) bool

IsAboveMax checks if the namespace is above the maximum namespace of the given hash.

func (Namespace) IsBelowMin added in v0.11.0

func (n Namespace) IsBelowMin(nodeHash []byte) bool

IsBelowMin checks if the target namespace is below the minimum namespace of the given hash.

func (Namespace) IsGreater added in v0.11.0

func (n Namespace) IsGreater(target Namespace) bool

IsGreater reports if the Namespace is greater than the target.

func (Namespace) IsGreaterOrEqualThan added in v0.11.0

func (n Namespace) IsGreaterOrEqualThan(target Namespace) bool

IsGreaterOrEqualThan reports if the Namespace is greater or equal than the target.

func (Namespace) IsLess added in v0.11.0

func (n Namespace) IsLess(target Namespace) bool

IsLess reports if the Namespace is less than the target.

func (Namespace) IsLessOrEqual added in v0.11.0

func (n Namespace) IsLessOrEqual(target Namespace) bool

IsLessOrEqual reports if the Namespace is less than the target.

func (Namespace) IsOutsideRange added in v0.11.0

func (n Namespace) IsOutsideRange(leftNodeHash, rightNodeHash []byte) bool

IsOutsideRange checks if the namespace is outside the min-max range of the given hashes.

func (Namespace) Len added in v0.11.0

func (n Namespace) Len() int

Len reports the total length of the namespace.

func (Namespace) Repeat added in v0.11.0

func (n Namespace) Repeat(t int) []Namespace

Repeat copies the Namespace t times.

func (Namespace) String added in v0.11.0

func (n Namespace) String() string

String stringifies the Namespace.

func (Namespace) ToAppNamespace added in v0.11.0

func (n Namespace) ToAppNamespace() appns.Namespace

ToAppNamespace converts the Namespace to App's definition of Namespace. TODO: Unify types between node and app

func (Namespace) ToNMT added in v0.11.0

func (n Namespace) ToNMT() namespace.ID

ToNMT converts the whole Namespace(both Version and ID parts) into NMT's namespace.ID NOTE: Once https://github.com/celestiaorg/nmt/issues/206 is closed Namespace should become NNT's type.

func (Namespace) Validate added in v0.11.0

func (n Namespace) Validate() error

Validate checks if the namespace is correct.

func (Namespace) ValidateForBlob added in v0.11.0

func (n Namespace) ValidateForBlob() error

ValidateForBlob checks if the Namespace is valid blob namespace.

func (Namespace) ValidateForData added in v0.11.0

func (n Namespace) ValidateForData() error

ValidateForData checks if the Namespace is of real/useful data.

func (Namespace) Version added in v0.11.0

func (n Namespace) Version() byte

Version reports version of the Namespace.

type Share

type Share = []byte

Share contains the raw share data without the corresponding namespace. NOTE: Alias for the byte is chosen to keep maximal compatibility, especially with rsmt2d. Ideally, we should define reusable type elsewhere and make everyone(Core, rsmt2d, ipld) to rely on it.

func EmptyBlockShares added in v0.11.0

func EmptyBlockShares() []Share

EmptyBlockShares returns the shares of the empty block.

func TailPadding

func TailPadding() Share

TailPadding is a constant tail padding share exported for reuse

type ShareWithProof

type ShareWithProof struct {
	// Share is a full data including namespace
	Share
	// Proof is a Merkle Proof of current share
	Proof *nmt.Proof
	// Axis is a type of axis against which the share proof is computed
	Axis rsmt2d.Axis
}

ShareWithProof contains data with corresponding Merkle Proof

func (*ShareWithProof) Validate

func (s *ShareWithProof) Validate(rootHash []byte, x, y, edsSize int) bool

Validate validates inclusion of the share under the given root CID.

Directories

Path Synopsis
availability
light
TODO(@Wondertan): Instead of doing sampling over the coordinates do a random walk over NMT trees.
TODO(@Wondertan): Instead of doing sampling over the coordinates do a random walk over NMT trees.
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
eds
getters/mock
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.
p2p/shrex
Package shrex provides functionality that powers the share exchange protocols used by celestia-node.
Package shrex provides functionality that powers the share exchange protocols used by celestia-node.
p2p/shrex/peers
Package peers provides a peer manager that handles peer discovery and peer selection for the shrex getter.
Package peers provides a peer manager that handles peer discovery and peer selection for the shrex getter.
p2p/shrex/shrexeds
This package defines a protocol that is used to request extended data squares from peers in the network.
This package defines a protocol that is used to request extended data squares from peers in the network.
p2p/shrex/shrexnd
This package defines a protocol that is used to request namespaced data from peers in the network.
This package defines a protocol that is used to request namespaced data from peers in the network.
p2p/shrex/shrexsub
This package defines a protocol that is used to broadcast shares to peers over a pubsub network.
This package defines a protocol that is used to broadcast shares to peers over a pubsub network.
pb

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL