Documentation

Index

Constants

const (
	BlockchainChannel = byte(0x40)
)

Variables

var (
	ErrBlockIsNil      = errors.New("the chain has no block data")
	ErrBranchNameUsed  = errors.New("blockchain:branch name has been used")
	ErrConvertToFuture = errors.New("can't revert to future height")
	ErrRevertBackup    = errors.New("revert from backup,not find data")
)

var ErrNotFound = errors.New("leveldb not found")

Functions

func BlockStoreDB

func BlockStoreDB(config *cfg.Viper) dbm.DB

func LoadBlockStore

func LoadBlockStore(blockStoreDB dbm.DB, height def.INT) (*pbtypes.Block, *pbtypes.BlockMeta, *pbtypes.BlockID)

Types

type BlockPool

type BlockPool struct {
	BaseService
	// contains filtered or unexported fields
}

func NewBlockPool

func NewBlockPool(logger *zap.Logger, start def.INT, requestsCh chan<- BlockRequest, timeoutsCh chan<- string) *BlockPool

func (*BlockPool) AddBlock

func (pool *BlockPool) AddBlock(peerID string, block *pbtypes.Block, blockSize int)

TODO: ensure that blocks come in order for each peer.

func (*BlockPool) GetStatus

func (pool *BlockPool) GetStatus() (height def.INT, numPending int32, lenRequesters int)

func (*BlockPool) IsCaughtUp

func (pool *BlockPool) IsCaughtUp() bool

TODO: relax conditions, prevent abuse.

func (*BlockPool) OnStart

func (pool *BlockPool) OnStart() error

func (*BlockPool) OnStop

func (pool *BlockPool) OnStop()

func (*BlockPool) PeekTwoBlocks

func (pool *BlockPool) PeekTwoBlocks() (first *agtypes.BlockCache, second *agtypes.BlockCache)

We need to see the second block's Commit to validate the first block. So we peek two blocks at a time. The caller will verify the commit.

func (*BlockPool) PopRequest

func (pool *BlockPool) PopRequest()

Pop the first block at pool.height It must have been validated by 'second'.Commit from PeekTwoBlocks().

func (*BlockPool) RedoRequest

func (pool *BlockPool) RedoRequest(height def.INT)

Invalidates the block at pool.height, Remove the peer and redo request from others.

func (*BlockPool) RemovePeer

func (pool *BlockPool) RemovePeer(peerID string)

func (*BlockPool) SetPeerHeight

func (pool *BlockPool) SetPeerHeight(peerID string, height def.INT)

Sets the peer's alleged blockchain height.

type BlockRequest

type BlockRequest struct {
	Height def.INT
	PeerID string
}

type BlockStore

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

Simple low level store for blocks.

There are three types of information stored:

- BlockMeta:   Meta information about each block
- Block part:  Parts of each block, aggregated w/ PartSet
- Commit:      The commit part of each block, for gossiping precommit votes

Currently the precommit signatures are duplicated in the Block parts as well as the Commit. In the future this may change, perhaps by moving the Commit data outside the Block.

Panics indicate probable corruption in the data

func NewBlockStore

func NewBlockStore(db dbm.DB) *BlockStore

func (*BlockStore) GetReader

func (bs *BlockStore) GetReader(key []byte) io.Reader

func (*BlockStore) Height

func (bs *BlockStore) Height() def.INT

Height() returns the last known contiguous block height.

func (*BlockStore) LoadBlock

func (bs *BlockStore) LoadBlock(height def.INT) *agtypes.BlockCache

func (*BlockStore) LoadBlockCommit

func (bs *BlockStore) LoadBlockCommit(height def.INT) *agtypes.CommitCache

The +2/3 and other Precommit-votes for block at `height`. This Commit comes from block.LastCommit for `height+1`.

func (*BlockStore) LoadBlockMeta

func (bs *BlockStore) LoadBlockMeta(height def.INT) *pbtypes.BlockMeta

func (*BlockStore) LoadBlockPart

func (bs *BlockStore) LoadBlockPart(height def.INT, index int) *pbtypes.Part

func (*BlockStore) LoadSeenCommit

func (bs *BlockStore) LoadSeenCommit(height def.INT) *agtypes.CommitCache

NOTE: the Precommit-vote heights are for the block at `height`

func (*BlockStore) SaveBlock

func (bs *BlockStore) SaveBlock(block *agtypes.BlockCache, blockParts *agtypes.PartSet, seenCommit *agtypes.CommitCache)

blockParts: Must be parts of the block seenCommit: The +2/3 precommits that were seen which committed at height.

If all the nodes restart after committing a block,
we need this to reload the precommits to catch-up nodes to the
most recent height.  Otherwise they'd stall at H-1.

type BlockStoreStateJSON

type BlockStoreStateJSON struct {
	Height       def.INT
	OriginHeight def.INT
}

func LoadBlockStoreStateJSON

func LoadBlockStoreStateJSON(db dbm.DB) BlockStoreStateJSON

func (BlockStoreStateJSON) Save

func (bsj BlockStoreStateJSON) Save(db dbm.DB)

func (BlockStoreStateJSON) SaveByKey

func (bsj BlockStoreStateJSON) SaveByKey(key []byte, db dbm.DB)

type BlockVerifierFunc

type BlockVerifierFunc func(pbtypes.BlockID, def.INT, *agtypes.CommitCache) error

type BlockchainReactor

type BlockchainReactor struct {
	p2p.BaseReactor
	// contains filtered or unexported fields
}

BlockchainReactor handles long-term catchup syncing.

func NewBlockchainReactor

func NewBlockchainReactor(logger *zap.Logger, config *viper.Viper, lastBlockHeight def.INT, store *BlockStore, fastSync bool) *BlockchainReactor

func (*BlockchainReactor) AddPeer

func (bcR *BlockchainReactor) AddPeer(peer *p2p.Peer)

Implements Reactor

func (*BlockchainReactor) BroadcastStatusRequest

func (bcR *BlockchainReactor) BroadcastStatusRequest() error

func (*BlockchainReactor) BroadcastStatusResponse

func (bcR *BlockchainReactor) BroadcastStatusResponse() error

func (*BlockchainReactor) GetChannels

func (bcR *BlockchainReactor) GetChannels() []*p2p.ChannelDescriptor

Implements Reactor

func (*BlockchainReactor) OnStart

func (bcR *BlockchainReactor) OnStart() error

func (*BlockchainReactor) OnStop

func (bcR *BlockchainReactor) OnStop()

func (*BlockchainReactor) Receive

func (bcR *BlockchainReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte)

Implements Reactor

func (*BlockchainReactor) RemovePeer

func (bcR *BlockchainReactor) RemovePeer(peer *p2p.Peer, reason interface{})

Implements Reactor

func (*BlockchainReactor) SetBlockExecuter

func (bcR *BlockchainReactor) SetBlockExecuter(x BlockExecuterFunc)

func (*BlockchainReactor) SetBlockVerifier

func (bcR *BlockchainReactor) SetBlockVerifier(v BlockVerifierFunc)

func (*BlockchainReactor) SetEventSwitch

func (bcR *BlockchainReactor) SetEventSwitch(evsw agtypes.EventSwitch)

implements events.Eventable

func (*BlockchainReactor) SetStateValidator

func (bcR *BlockchainReactor) SetStateValidator(f ValidatorSetorFunc)

type NonEmptyBlockIterator

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

func NewNonEmptyBlockIterator

func NewNonEmptyBlockIterator(store *BlockStore) *NonEmptyBlockIterator

func (*NonEmptyBlockIterator) HasMore

func (i *NonEmptyBlockIterator) HasMore() bool

func (*NonEmptyBlockIterator) Next

func (i *NonEmptyBlockIterator) Next() *agtypes.BlockCache

type StoreTool

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

func (*StoreTool) BackupLastBlock

func (st *StoreTool) BackupLastBlock(branchName string) error

func (*StoreTool) DelBackup

func (st *StoreTool) DelBackup(branchName string)

func (*StoreTool) Init

func (st *StoreTool) Init(config *cfg.Viper) error

func (*StoreTool) LastHeight

func (st *StoreTool) LastHeight() def.INT

func (*StoreTool) LoadBlock

func (st *StoreTool) LoadBlock(height def.INT) (*pbtypes.Block, *pbtypes.BlockMeta, *pbtypes.BlockID)

func (*StoreTool) RevertFromBackup

func (st *StoreTool) RevertFromBackup(branchName string) error

func (*StoreTool) SaveNewLastBlock

func (st *StoreTool) SaveNewLastBlock(toHeight def.INT) error

type ValidatorSetorFunc

type ValidatorSetorFunc func(*agtypes.BlockCache)

Directories

Path Synopsis
refuse_list