store

package
v1.28.0-rc3 Latest Latest
Warning

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

Go to latest
Published: Jul 4, 2024 License: Apache-2.0, MIT Imports: 47 Imported by: 58

Documentation

Index

Constants

View Source
const (
	HCRevert  = "revert"
	HCApply   = "apply"
	HCCurrent = "current"
)
View Source
const TipsetkeyBackfillRange = 2 * build.Finality

Variables

View Source
var DefaultChainIndexCacheSize = 1 << 15

DefaultChainIndexCacheSize no longer sets the maximum size, just the initial size of the map.

View Source
var DefaultMsgMetaCacheSize = 2048
View Source
var DefaultTipSetCacheSize = 8192
View Source
var ErrNotifeeDone = errors.New("notifee is done and should be removed")

Functions

func ActorStore added in v0.3.0

func ActorStore(ctx context.Context, bs bstore.Blockstore) adt.Store

func ComputeNextBaseFee added in v0.7.0

func ComputeNextBaseFee(baseFee types.BigInt, gasLimitUsed int64, noOfBlocks int, epoch abi.ChainEpoch) types.BigInt

func FlushValidationCache added in v1.4.1

func FlushValidationCache(ctx context.Context, ds dstore.Batching) error

func PutMessage

func PutMessage(ctx context.Context, bs bstore.Blockstore, m storable) (cid.Cid, error)

func ReorgOps added in v0.5.2

func ReorgOps(ctx context.Context, lts func(ctx context.Context, _ types.TipSetKey) (*types.TipSet, error), a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error)

Types

type BlockMessages added in v0.5.0

type BlockMessages struct {
	Miner         address.Address
	BlsMessages   []types.ChainMsg
	SecpkMessages []types.ChainMsg
}

type ChainIndex added in v0.4.0

type ChainIndex struct {
	// contains filtered or unexported fields
}

func NewChainIndex added in v0.4.0

func NewChainIndex(lts loadTipSetFunc) *ChainIndex

func (*ChainIndex) GetTipsetByHeight added in v0.4.0

func (ci *ChainIndex) GetTipsetByHeight(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error)

func (*ChainIndex) GetTipsetByHeightWithoutCache added in v0.4.0

func (ci *ChainIndex) GetTipsetByHeightWithoutCache(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error)

type ChainStore

type ChainStore struct {
	// contains filtered or unexported fields
}

ChainStore is the main point of access to chain data.

Raw chain data is stored in the Blockstore, with relevant markers (genesis, latest head tipset references) being tracked in the Datastore (key-value store).

To alleviate disk access, the ChainStore has two ARC caches:

  1. a tipset cache
  2. a block => messages references cache.

func NewChainStore

func NewChainStore(chainBs bstore.Blockstore, stateBs bstore.Blockstore, ds dstore.Batching, weight WeightFunc, j journal.Journal) *ChainStore

func (*ChainStore) ActorStore added in v1.5.1

func (cs *ChainStore) ActorStore(ctx context.Context) adt.Store

func (*ChainStore) AddToTipSetTracker

func (cs *ChainStore) AddToTipSetTracker(ctx context.Context, b *types.BlockHeader) error

func (*ChainStore) BlockMsgsForTipset added in v0.5.0

func (cs *ChainStore) BlockMsgsForTipset(ctx context.Context, ts *types.TipSet) ([]BlockMessages, error)

func (*ChainStore) ChainBlockstore added in v1.5.1

func (cs *ChainStore) ChainBlockstore() bstore.Blockstore

ChainBlockstore returns the chain blockstore. Currently the chain and state // stores are both backed by the same physical store, albeit with different // caching policies, but in the future they will segregate.

func (*ChainStore) ChainLocalBlockstore added in v1.20.0

func (cs *ChainStore) ChainLocalBlockstore() bstore.Blockstore

func (*ChainStore) Close added in v1.2.0

func (cs *ChainStore) Close() error

func (*ChainStore) ComputeBaseFee added in v0.5.0

func (cs *ChainStore) ComputeBaseFee(ctx context.Context, ts *types.TipSet) (abi.TokenAmount, error)

func (*ChainStore) Contains

func (cs *ChainStore) Contains(ctx context.Context, ts *types.TipSet) (bool, error)

Contains returns whether our BlockStore has all blocks in the supplied TipSet.

func (*ChainStore) Export added in v0.2.6

func (cs *ChainStore) Export(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, skipOldMsgs bool, w io.Writer) error

func (*ChainStore) ExportRange added in v1.23.0

func (cs *ChainStore) ExportRange(
	ctx context.Context,
	w io.Writer,
	head, tail *types.TipSet,
	messages, receipts, stateroots bool,
	workers int) error

func (*ChainStore) FlushValidationCache added in v0.10.0

func (cs *ChainStore) FlushValidationCache(ctx context.Context) error

FlushValidationCache removes all results of block validation from the chain metadata store. Usually the first step after a new chain import.

func (*ChainStore) ForceHeadSilent added in v1.1.3

func (cs *ChainStore) ForceHeadSilent(ctx context.Context, ts *types.TipSet) error

ForceHeadSilent forces a chain head tipset without triggering a reorg operation.

CAUTION: Use it only for testing, such as to teleport the chain to a particular tipset to carry out a benchmark, verification, etc. on a chain segment.

func (*ChainStore) FormHeaviestTipSetForHeight added in v1.25.0

func (cs *ChainStore) FormHeaviestTipSetForHeight(ctx context.Context, height abi.ChainEpoch) (*types.TipSet, types.BigInt, error)

FormHeaviestTipSetForHeight looks up all valid blocks at a given height, and returns the heaviest tipset that can be made at that height It does not consider ANY blocks from miners that have "equivocated" (produced 2 blocks at the same height)

func (*ChainStore) GetBlock

func (cs *ChainStore) GetBlock(ctx context.Context, c cid.Cid) (*types.BlockHeader, error)

GetBlock fetches a BlockHeader with the supplied CID. It returns blockstore.ErrNotFound if the block was not found in the BlockStore.

func (*ChainStore) GetCMessage

func (cs *ChainStore) GetCMessage(ctx context.Context, c cid.Cid) (types.ChainMsg, error)

func (*ChainStore) GetCheckpoint added in v1.11.0

func (cs *ChainStore) GetCheckpoint() *types.TipSet

func (*ChainStore) GetGenesis

func (cs *ChainStore) GetGenesis(ctx context.Context) (*types.BlockHeader, error)

func (*ChainStore) GetHeaviestTipSet

func (cs *ChainStore) GetHeaviestTipSet() (ts *types.TipSet)

GetHeaviestTipSet returns the current heaviest tipset known (i.e. our head).

func (*ChainStore) GetLatestBeaconEntry added in v0.3.0

func (cs *ChainStore) GetLatestBeaconEntry(ctx context.Context, ts *types.TipSet) (*types.BeaconEntry, error)

func (*ChainStore) GetMessage

func (cs *ChainStore) GetMessage(ctx context.Context, c cid.Cid) (*types.Message, error)

func (*ChainStore) GetParentReceipt

func (cs *ChainStore) GetParentReceipt(ctx context.Context, b *types.BlockHeader, i int) (*types.MessageReceipt, error)

func (*ChainStore) GetPath added in v0.2.5

func (cs *ChainStore) GetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*api.HeadChange, error)

GetPath returns the sequence of atomic head change operations that need to be applied in order to switch the head of the chain from the `from` tipset to the `to` tipset.

func (*ChainStore) GetSignedMessage

func (cs *ChainStore) GetSignedMessage(ctx context.Context, c cid.Cid) (*types.SignedMessage, error)

func (*ChainStore) GetTipSetByCid added in v1.20.0

func (cs *ChainStore) GetTipSetByCid(ctx context.Context, c cid.Cid) (*types.TipSet, error)

func (*ChainStore) GetTipSetFromKey added in v0.2.8

func (cs *ChainStore) GetTipSetFromKey(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)

func (*ChainStore) GetTipsetByHeight

func (cs *ChainStore) GetTipsetByHeight(ctx context.Context, h abi.ChainEpoch, ts *types.TipSet, prev bool) (*types.TipSet, error)

GetTipsetByHeight returns the tipset on the chain behind 'ts' at the given height. In the case that the given height is a null round, the 'prev' flag selects the tipset before the null round if true, and the tipset following the null round if false.

func (*ChainStore) Import added in v0.2.6

func (cs *ChainStore) Import(ctx context.Context, r io.Reader) (head *types.TipSet, genesis *types.BlockHeader, err error)

func (*ChainStore) IsAncestorOf

func (cs *ChainStore) IsAncestorOf(ctx context.Context, a, b *types.TipSet) (bool, error)

IsAncestorOf returns true if 'a' is an ancestor of 'b'

func (*ChainStore) IsBlockValidated added in v0.4.0

func (cs *ChainStore) IsBlockValidated(ctx context.Context, blkid cid.Cid) (bool, error)

func (*ChainStore) IsStoringEvents added in v1.20.0

func (cs *ChainStore) IsStoringEvents() bool

IsStoringEvents indicates if this ChainStore is storing events.

func (*ChainStore) Load

func (cs *ChainStore) Load(ctx context.Context) error

func (*ChainStore) LoadMessagesFromCids

func (cs *ChainStore) LoadMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*types.Message, error)

func (*ChainStore) LoadSignedMessagesFromCids

func (cs *ChainStore) LoadSignedMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*types.SignedMessage, error)

func (*ChainStore) LoadTipSet

func (cs *ChainStore) LoadTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)

func (*ChainStore) MarkBlockAsValidated added in v0.4.0

func (cs *ChainStore) MarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error

func (*ChainStore) MessagesForBlock

func (cs *ChainStore) MessagesForBlock(ctx context.Context, b *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error)

func (*ChainStore) MessagesForTipset

func (cs *ChainStore) MessagesForTipset(ctx context.Context, ts *types.TipSet) ([]types.ChainMsg, error)

func (*ChainStore) NearestCommonAncestor

func (cs *ChainStore) NearestCommonAncestor(ctx context.Context, a, b *types.TipSet) (*types.TipSet, error)

func (*ChainStore) PersistTipsets added in v1.23.1

func (cs *ChainStore) PersistTipsets(ctx context.Context, tipsets []*types.TipSet) error

PersistTipsets writes the provided blocks and the TipSetKey objects to the blockstore

func (*ChainStore) PutMessage

func (cs *ChainStore) PutMessage(ctx context.Context, m storable) (cid.Cid, error)

func (*ChainStore) ReadMsgMetaCids added in v0.5.8

func (cs *ChainStore) ReadMsgMetaCids(ctx context.Context, mmc cid.Cid) ([]cid.Cid, []cid.Cid, error)

func (*ChainStore) ReadReceipts added in v1.23.0

func (cs *ChainStore) ReadReceipts(ctx context.Context, root cid.Cid) ([]types.MessageReceipt, error)

func (*ChainStore) RefreshHeaviestTipSet added in v1.25.0

func (cs *ChainStore) RefreshHeaviestTipSet(ctx context.Context, newTsHeight abi.ChainEpoch) error

RefreshHeaviestTipSet receives a newTsHeight at which a new tipset might exist. It then: - "refreshes" the heaviest tipset that can be formed at its current heaviest height

  • if equivocation is detected among the miners of the current heaviest tipset, the head is immediately updated to the heaviest tipset that can be formed in a range of 5 epochs

- forms the best tipset that can be formed at the _input_ height - compares the three tipset weights: "current" heaviest tipset, "refreshed" tipset, and best tipset at newTsHeight - updates "current" heaviest to the heaviest of those 3 tipsets (if an update is needed), assuming it doesn't violate the maximum fork rule

func (*ChainStore) RemoveCheckpoint added in v1.11.0

func (cs *ChainStore) RemoveCheckpoint(ctx context.Context) error

RemoveCheckpoint removes the current checkpoint.

func (*ChainStore) ReorgOps

func (cs *ChainStore) ReorgOps(ctx context.Context, a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error)

ReorgOps takes two tipsets (which can be at different heights), and walks their corresponding chains backwards one step at a time until we find a common ancestor. It then returns the respective chain segments that fork from the identified ancestor, in reverse order, where the first element of each slice is the supplied tipset, and the last element is the common ancestor.

If an error happens along the way, we return the error with nil slices.

func (*ChainStore) SecpkMessagesForBlock added in v1.20.0

func (cs *ChainStore) SecpkMessagesForBlock(ctx context.Context, b *types.BlockHeader) ([]*types.SignedMessage, error)

func (*ChainStore) SetCheckpoint added in v1.11.0

func (cs *ChainStore) SetCheckpoint(ctx context.Context, ts *types.TipSet) error

SetCheckpoint will set a checkpoint past which the chainstore will not allow forks. If the new checkpoint is not an ancestor of the current head, head will be set to the new checkpoint.

NOTE: Checkpoints cannot be set beyond ForkLengthThreshold epochs in the past, but can be set arbitrarily far into the future. NOTE: The new checkpoint must already be synced.

func (*ChainStore) SetGenesis

func (cs *ChainStore) SetGenesis(ctx context.Context, b *types.BlockHeader) error

func (*ChainStore) SetHead

func (cs *ChainStore) SetHead(ctx context.Context, ts *types.TipSet) error

SetHead sets the chainstores current 'best' head node. This should only be called if something is broken and needs fixing.

This function will bypass and remove any checkpoints.

func (*ChainStore) StateBlockstore added in v1.5.1

func (cs *ChainStore) StateBlockstore() bstore.Blockstore

StateBlockstore returns the state blockstore. Currently the chain and state stores are both backed by the same physical store, albeit with different caching policies, but in the future they will segregate.

func (*ChainStore) StoreEvents added in v1.20.0

func (cs *ChainStore) StoreEvents(store bool)

StoreEvents marks this ChainStore as storing events.

func (*ChainStore) SubHeadChanges

func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*api.HeadChange

func (*ChainStore) SubscribeHeadChanges

func (cs *ChainStore) SubscribeHeadChanges(f ReorgNotifee)

func (*ChainStore) TryFillTipSet

func (cs *ChainStore) TryFillTipSet(ctx context.Context, ts *types.TipSet) (*FullTipSet, error)

func (*ChainStore) UnionStore added in v1.15.1

func (cs *ChainStore) UnionStore() bstore.Blockstore

func (*ChainStore) UnmarkBlockAsValidated added in v0.8.1

func (cs *ChainStore) UnmarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error

func (*ChainStore) WalkSnapshot added in v0.9.0

func (cs *ChainStore) WalkSnapshot(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, skipOldMsgs, skipMsgReceipts bool, cb func(cid.Cid) error) error

func (*ChainStore) Weight

func (cs *ChainStore) Weight(ctx context.Context, hts *types.TipSet) (types.BigInt, error)

type FullTipSet

type FullTipSet struct {
	Blocks []*types.FullBlock
	// contains filtered or unexported fields
}

FullTipSet is an expanded version of the TipSet that contains all the blocks and messages

func NewFullTipSet

func NewFullTipSet(blks []*types.FullBlock) *FullTipSet

func (*FullTipSet) Cids

func (fts *FullTipSet) Cids() []cid.Cid

func (*FullTipSet) TipSet

func (fts *FullTipSet) TipSet() *types.TipSet

TipSet returns a narrower view of this FullTipSet elliding the block messages.

type HeadChangeCoalescer added in v1.1.3

type HeadChangeCoalescer struct {
	// contains filtered or unexported fields
}

HeadChangeCoalescer is a stateful reorg notifee which coalesces incoming head changes with pending head changes to reduce state computations from head change notifications.

func NewHeadChangeCoalescer added in v1.1.3

func NewHeadChangeCoalescer(fn ReorgNotifee, minDelay, maxDelay, mergeInterval time.Duration) *HeadChangeCoalescer

NewHeadChangeCoalescer creates a HeadChangeCoalescer.

func (*HeadChangeCoalescer) Close added in v1.1.3

func (c *HeadChangeCoalescer) Close() error

Close closes the coalescer and cancels the background dispatch goroutine. Any further notification will result in an error.

func (*HeadChangeCoalescer) HeadChange added in v1.1.3

func (c *HeadChangeCoalescer) HeadChange(revert, apply []*types.TipSet) error

HeadChange is the ReorgNotifee callback for the stateful coalescer; it receives an incoming head change and schedules dispatch of a coalesced head change in the background.

type HeadChangeEvt added in v0.7.1

type HeadChangeEvt struct {
	From        types.TipSetKey
	FromHeight  abi.ChainEpoch
	To          types.TipSetKey
	ToHeight    abi.ChainEpoch
	RevertCount int
	ApplyCount  int
}

type ReorgNotifee added in v0.4.0

type ReorgNotifee = func(rev, app []*types.TipSet) error

ReorgNotifee represents a callback that gets called upon reorgs.

func WrapHeadChangeCoalescer added in v1.1.3

func WrapHeadChangeCoalescer(fn ReorgNotifee, minDelay, maxDelay, mergeInterval time.Duration) ReorgNotifee

WrapHeadChangeCoalescer wraps a ReorgNotifee with a head change coalescer. minDelay is the minimum coalesce delay; when a head change is first received, the coalescer will

wait for that long to coalesce more head changes.

maxDelay is the maximum coalesce delay; the coalescer will not delay delivery of a head change

more than that.

mergeInterval is the interval that triggers additional coalesce delay; if the last head change was

within the merge interval when the coalesce timer fires, then the coalesce time is extended
by min delay and up to max delay total.

type WeightFunc added in v1.11.3

type WeightFunc func(ctx context.Context, stateBs bstore.Blockstore, ts *types.TipSet) (types.BigInt, error)

Jump to

Keyboard shortcuts

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