blockchain

package
v0.0.0-...-7c12c5a Latest Latest
Warning

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

Go to latest
Published: Oct 21, 2015 License: GPL-2.0, GPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BlockchainChannel = byte(0x40)
)

Variables

This section is empty.

Functions

This section is empty.

Types

type BlockPool

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

func NewBlockPool

func NewBlockPool(start int, requestsCh chan<- BlockRequest, timeoutsCh chan<- string) *BlockPool

func (*BlockPool) AddBlock

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

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

func (*BlockPool) GetStatus

func (pool *BlockPool) GetStatus() (height int, numPending int32)

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 *types.Block, second *types.Block)

We need to see the second block's Validation to validate the first block. So we peek two blocks at a time.

func (*BlockPool) PopRequest

func (pool *BlockPool) PopRequest()

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

func (*BlockPool) RedoRequest

func (pool *BlockPool) RedoRequest(height 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 int)

Sets the peer's alleged blockchain height.

type BlockRequest

type BlockRequest struct {
	Height 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
  • Validation: The Validation part of each block, for gossiping precommit votes

Currently the precommit signatures are duplicated in the Block parts as well as the Validation. In the future this may change, perhaps by moving the Validation 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() int

Height() returns the last known contiguous block height.

func (*BlockStore) LoadBlock

func (bs *BlockStore) LoadBlock(height int) *types.Block

func (*BlockStore) LoadBlockMeta

func (bs *BlockStore) LoadBlockMeta(height int) *types.BlockMeta

func (*BlockStore) LoadBlockPart

func (bs *BlockStore) LoadBlockPart(height int, index int) *types.Part

func (*BlockStore) LoadBlockValidation

func (bs *BlockStore) LoadBlockValidation(height int) *types.Validation

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

func (*BlockStore) LoadSeenValidation

func (bs *BlockStore) LoadSeenValidation(height int) *types.Validation

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

func (*BlockStore) SaveBlock

func (bs *BlockStore) SaveBlock(block *types.Block, blockParts *types.PartSet, seenValidation *types.Validation)

blockParts: Must be parts of the block seenValidation: 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 int
}

func LoadBlockStoreStateJSON

func LoadBlockStoreStateJSON(db dbm.DB) BlockStoreStateJSON

func (BlockStoreStateJSON) Save

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

type BlockchainMessage

type BlockchainMessage interface{}

func DecodeMessage

func DecodeMessage(bz []byte) (msgType byte, msg BlockchainMessage, err error)

TODO: ensure that bz is completely read.

type BlockchainReactor

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

BlockchainReactor handles long-term catchup syncing.

func NewBlockchainReactor

func NewBlockchainReactor(state *sm.State, store *BlockStore, sync 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) SetFireable

func (bcR *BlockchainReactor) SetFireable(evsw events.Fireable)

implements events.Eventable

Jump to

Keyboard shortcuts

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