Documentation ¶
Index ¶
- Constants
- Variables
- func ActorStore(ctx context.Context, bs bstore.Blockstore) adt.Store
- func ComputeNextBaseFee(baseFee types.BigInt, gasLimitUsed int64, noOfBlocks int, epoch abi.ChainEpoch) types.BigInt
- func DrawRandomness(rbase []byte, pers crypto.DomainSeparationTag, round abi.ChainEpoch, ...) ([]byte, error)
- func FlushValidationCache(ds datastore.Batching) error
- func NewChainRand(cs *ChainStore, blks []cid.Cid) vm.Rand
- func PutMessage(bs bstore.Blockstore, m storable) (cid.Cid, error)
- func ReorgOps(lts func(types.TipSetKey) (*types.TipSet, error), a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error)
- type BlockMessages
- type ChainIndex
- type ChainStore
- func (cs *ChainStore) ActorStore(ctx context.Context) adt.Store
- func (cs *ChainStore) AddBlock(ctx context.Context, b *types.BlockHeader) error
- func (cs *ChainStore) AddToTipSetTracker(b *types.BlockHeader) error
- func (cs *ChainStore) BlockMsgsForTipset(ts *types.TipSet) ([]BlockMessages, error)
- func (cs *ChainStore) ChainBlockstore() bstore.Blockstore
- func (cs *ChainStore) Close() error
- func (cs *ChainStore) ComputeBaseFee(ctx context.Context, ts *types.TipSet) (abi.TokenAmount, error)
- func (cs *ChainStore) Contains(ts *types.TipSet) (bool, error)
- func (cs *ChainStore) Export(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, ...) error
- func (cs *ChainStore) FlushValidationCache() error
- func (cs *ChainStore) ForceHeadSilent(_ context.Context, ts *types.TipSet) error
- func (cs *ChainStore) GetBeaconRandomness(ctx context.Context, blks []cid.Cid, pers crypto.DomainSeparationTag, ...) ([]byte, error)
- func (cs *ChainStore) GetBlock(c cid.Cid) (*types.BlockHeader, error)
- func (cs *ChainStore) GetCMessage(c cid.Cid) (types.ChainMsg, error)
- func (cs *ChainStore) GetChainRandomness(ctx context.Context, blks []cid.Cid, pers crypto.DomainSeparationTag, ...) ([]byte, error)
- func (cs *ChainStore) GetGenesis() (*types.BlockHeader, error)
- func (cs *ChainStore) GetHeaviestTipSet() *types.TipSet
- func (cs *ChainStore) GetLatestBeaconEntry(ts *types.TipSet) (*types.BeaconEntry, error)
- func (cs *ChainStore) GetMessage(c cid.Cid) (*types.Message, error)
- func (cs *ChainStore) GetParentReceipt(b *types.BlockHeader, i int) (*types.MessageReceipt, error)
- func (cs *ChainStore) GetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*api.HeadChange, error)
- func (cs *ChainStore) GetSignedMessage(c cid.Cid) (*types.SignedMessage, error)
- func (cs *ChainStore) GetTipSetFromKey(tsk types.TipSetKey) (*types.TipSet, error)
- func (cs *ChainStore) GetTipsetByHeight(ctx context.Context, h abi.ChainEpoch, ts *types.TipSet, prev bool) (*types.TipSet, error)
- func (cs *ChainStore) Import(r io.Reader) (*types.TipSet, error)
- func (cs *ChainStore) IsAncestorOf(a, b *types.TipSet) (bool, error)
- func (cs *ChainStore) IsBlockValidated(ctx context.Context, blkid cid.Cid) (bool, error)
- func (cs *ChainStore) Load() error
- func (cs *ChainStore) LoadMessagesFromCids(cids []cid.Cid) ([]*types.Message, error)
- func (cs *ChainStore) LoadSignedMessagesFromCids(cids []cid.Cid) ([]*types.SignedMessage, error)
- func (cs *ChainStore) LoadTipSet(tsk types.TipSetKey) (*types.TipSet, error)
- func (cs *ChainStore) MarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error
- func (cs *ChainStore) MaybeTakeHeavierTipSet(ctx context.Context, ts *types.TipSet) error
- func (cs *ChainStore) MessagesForBlock(b *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error)
- func (cs *ChainStore) MessagesForTipset(ts *types.TipSet) ([]types.ChainMsg, error)
- func (cs *ChainStore) NearestCommonAncestor(a, b *types.TipSet) (*types.TipSet, error)
- func (cs *ChainStore) PersistBlockHeaders(b ...*types.BlockHeader) error
- func (cs *ChainStore) PutMessage(m storable) (cid.Cid, error)
- func (cs *ChainStore) PutTipSet(ctx context.Context, ts *types.TipSet) error
- func (cs *ChainStore) ReadMsgMetaCids(mmc cid.Cid) ([]cid.Cid, []cid.Cid, error)
- func (cs *ChainStore) ReorgOps(a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error)
- func (cs *ChainStore) SetGenesis(b *types.BlockHeader) error
- func (cs *ChainStore) SetHead(ts *types.TipSet) error
- func (cs *ChainStore) StateBlockstore() bstore.Blockstore
- func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*api.HeadChange
- func (cs *ChainStore) SubscribeHeadChanges(f ReorgNotifee)
- func (cs *ChainStore) TryFillTipSet(ts *types.TipSet) (*FullTipSet, error)
- func (cs *ChainStore) UnmarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error
- func (cs *ChainStore) VMSys() vm.SyscallBuilder
- func (cs *ChainStore) WalkSnapshot(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, ...) error
- func (cs *ChainStore) Weight(ctx context.Context, ts *types.TipSet) (types.BigInt, error)
- type FullTipSet
- type HeadChangeCoalescer
- type HeadChangeEvt
- type ReorgNotifee
Constants ¶
const ( HCRevert = "revert" HCApply = "apply" HCCurrent = "current" )
Variables ¶
var DefaultChainIndexCacheSize = 32 << 10
var DefaultMsgMetaCacheSize = 2048
var DefaultTipSetCacheSize = 8192
var ErrNotifeeDone = errors.New("notifee is done and should be removed")
Functions ¶
func ActorStore ¶
func ComputeNextBaseFee ¶
func DrawRandomness ¶
func DrawRandomness(rbase []byte, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error)
func FlushValidationCache ¶
func FlushValidationCache(ds datastore.Batching) error
func NewChainRand ¶
func NewChainRand(cs *ChainStore, blks []cid.Cid) vm.Rand
func PutMessage ¶
func PutMessage(bs bstore.Blockstore, m storable) (cid.Cid, error)
Types ¶
type BlockMessages ¶
type ChainIndex ¶
type ChainIndex struct {
// contains filtered or unexported fields
}
func NewChainIndex ¶
func NewChainIndex(lts loadTipSetFunc) *ChainIndex
func (*ChainIndex) GetTipsetByHeight ¶
func (ci *ChainIndex) GetTipsetByHeight(_ context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error)
func (*ChainIndex) GetTipsetByHeightWithoutCache ¶
func (ci *ChainIndex) GetTipsetByHeightWithoutCache(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:
- a tipset cache
- a block => messages references cache.
func NewChainStore ¶
func NewChainStore(chainBs bstore.Blockstore, stateBs bstore.Blockstore, ds dstore.Batching, vmcalls vm.SyscallBuilder, j journal.Journal) *ChainStore
func (*ChainStore) ActorStore ¶
func (cs *ChainStore) ActorStore(ctx context.Context) adt.Store
func (*ChainStore) AddBlock ¶
func (cs *ChainStore) AddBlock(ctx context.Context, b *types.BlockHeader) error
func (*ChainStore) AddToTipSetTracker ¶
func (cs *ChainStore) AddToTipSetTracker(b *types.BlockHeader) error
func (*ChainStore) BlockMsgsForTipset ¶
func (cs *ChainStore) BlockMsgsForTipset(ts *types.TipSet) ([]BlockMessages, error)
func (*ChainStore) ChainBlockstore ¶
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) Close ¶
func (cs *ChainStore) Close() error
func (*ChainStore) ComputeBaseFee ¶
func (cs *ChainStore) ComputeBaseFee(ctx context.Context, ts *types.TipSet) (abi.TokenAmount, error)
func (*ChainStore) Contains ¶
func (cs *ChainStore) Contains(ts *types.TipSet) (bool, error)
Contains returns whether our BlockStore has all blocks in the supplied TipSet.
func (*ChainStore) FlushValidationCache ¶
func (cs *ChainStore) FlushValidationCache() 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 ¶
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) GetBeaconRandomness ¶
func (cs *ChainStore) GetBeaconRandomness(ctx context.Context, blks []cid.Cid, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error)
func (*ChainStore) GetBlock ¶
func (cs *ChainStore) GetBlock(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(c cid.Cid) (types.ChainMsg, error)
func (*ChainStore) GetChainRandomness ¶
func (cs *ChainStore) GetChainRandomness(ctx context.Context, blks []cid.Cid, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error)
func (*ChainStore) GetGenesis ¶
func (cs *ChainStore) GetGenesis() (*types.BlockHeader, error)
func (*ChainStore) GetHeaviestTipSet ¶
func (cs *ChainStore) GetHeaviestTipSet() *types.TipSet
GetHeaviestTipSet returns the current heaviest tipset known (i.e. our head).
func (*ChainStore) GetLatestBeaconEntry ¶
func (cs *ChainStore) GetLatestBeaconEntry(ts *types.TipSet) (*types.BeaconEntry, error)
func (*ChainStore) GetMessage ¶
func (cs *ChainStore) GetMessage(c cid.Cid) (*types.Message, error)
func (*ChainStore) GetParentReceipt ¶
func (cs *ChainStore) GetParentReceipt(b *types.BlockHeader, i int) (*types.MessageReceipt, error)
func (*ChainStore) GetPath ¶
func (cs *ChainStore) GetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*api.HeadChange, error)
func (*ChainStore) GetSignedMessage ¶
func (cs *ChainStore) GetSignedMessage(c cid.Cid) (*types.SignedMessage, error)
func (*ChainStore) GetTipSetFromKey ¶
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) IsAncestorOf ¶
func (cs *ChainStore) IsAncestorOf(a, b *types.TipSet) (bool, error)
IsAncestorOf returns true if 'a' is an ancestor of 'b'
func (*ChainStore) IsBlockValidated ¶
func (cs *ChainStore) IsBlockValidated(ctx context.Context, blkid cid.Cid) (bool, error)
func (*ChainStore) Load ¶
func (cs *ChainStore) Load() error
func (*ChainStore) LoadMessagesFromCids ¶
func (cs *ChainStore) LoadMessagesFromCids(cids []cid.Cid) ([]*types.Message, error)
func (*ChainStore) LoadSignedMessagesFromCids ¶
func (cs *ChainStore) LoadSignedMessagesFromCids(cids []cid.Cid) ([]*types.SignedMessage, error)
func (*ChainStore) LoadTipSet ¶
func (*ChainStore) MarkBlockAsValidated ¶
func (cs *ChainStore) MarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error
func (*ChainStore) MaybeTakeHeavierTipSet ¶
MaybeTakeHeavierTipSet evaluates the incoming tipset and locks it in our internal state as our new head, if and only if it is heavier than the current head and does not exceed the maximum fork length.
func (*ChainStore) MessagesForBlock ¶
func (cs *ChainStore) MessagesForBlock(b *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error)
func (*ChainStore) MessagesForTipset ¶
func (*ChainStore) NearestCommonAncestor ¶
func (*ChainStore) PersistBlockHeaders ¶
func (cs *ChainStore) PersistBlockHeaders(b ...*types.BlockHeader) error
func (*ChainStore) PutMessage ¶
func (cs *ChainStore) PutMessage(m storable) (cid.Cid, error)
func (*ChainStore) ReadMsgMetaCids ¶
func (cs *ChainStore) ReadMsgMetaCids(mmc cid.Cid) ([]cid.Cid, []cid.Cid, error)
func (*ChainStore) SetGenesis ¶
func (cs *ChainStore) SetGenesis(b *types.BlockHeader) error
func (*ChainStore) SetHead ¶
func (cs *ChainStore) SetHead(ts *types.TipSet) error
SetHead sets the chainstores current 'best' head node. This should only be called if something is broken and needs fixing
func (*ChainStore) StateBlockstore ¶
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) 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(ts *types.TipSet) (*FullTipSet, error)
func (*ChainStore) UnmarkBlockAsValidated ¶
func (cs *ChainStore) UnmarkBlockAsValidated(ctx context.Context, blkid cid.Cid) error
func (*ChainStore) VMSys ¶
func (cs *ChainStore) VMSys() vm.SyscallBuilder
func (*ChainStore) WalkSnapshot ¶
func (cs *ChainStore) WalkSnapshot(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, skipOldMsgs, skipMsgReceipts bool, cb func(cid.Cid) error) error
type FullTipSet ¶
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 ¶
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 ¶
func NewHeadChangeCoalescer(fn ReorgNotifee, minDelay, maxDelay, mergeInterval time.Duration) *HeadChangeCoalescer
NewHeadChangeCoalescer creates a HeadChangeCoalescer.
func (*HeadChangeCoalescer) Close ¶
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 ¶
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 ¶
type HeadChangeEvt struct { From types.TipSetKey FromHeight abi.ChainEpoch To types.TipSetKey ToHeight abi.ChainEpoch RevertCount int ApplyCount int }
type ReorgNotifee ¶
ReorgNotifee represents a callback that gets called upon reorgs.
func WrapHeadChangeCoalescer ¶
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.