chain

package
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: May 22, 2019 License: MIT Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxAnchors = 32
	//MaxAnchors = 1000000
	Skip = 16
)
View Source
const MaxEventSize = 4 * 1024 * 1024
View Source
const (
	TxBatchMax = 10000
)

Variables

View Source
var (
	ErrorBlockVerifySign           = errors.New("Block verify failed")
	ErrorBlockVerifyTxRoot         = errors.New("Block verify failed, because Tx root hash is invaild")
	ErrorBlockVerifyExistStateRoot = errors.New("Block verify failed, because state root hash is already exist")
	ErrorBlockVerifyStateRoot      = errors.New("Block verify failed, because state root hash is not equal")
	ErrorBlockVerifyReceiptRoot    = errors.New("Block verify failed, because receipt root hash is not equal")
)
View Source
var (
	// ErrNoChainDB reports chaindb is not prepared.
	ErrNoChainDB         = fmt.Errorf("chaindb not prepared")
	ErrorLoadBestBlock   = errors.New("failed to load latest block from DB")
	ErrCantDropGenesis   = errors.New("can't drop genesis block")
	ErrTooBigResetHeight = errors.New("reset height is too big")
)
View Source
var (
	ErrorNoAncestor          = errors.New("not found ancestor")
	ErrBlockOrphan           = errors.New("block is ohphan, so not connected in chain")
	ErrBlockCachedErrLRU     = errors.New("block is in errored blocks cache")
	ErrBlockTooHighSideChain = errors.New("block no is higher than best block, it should have been reorganized")

	InAddBlock = make(chan struct{}, 1)
)
View Source
var (
	CoinbaseAccount []byte
	MaxAnchorCount  int
	VerifierCount   int
)
View Source
var (
	// ErrInvalidCoinbaseAccount is returned by Init when the coinbase account
	// address is invalid.
	ErrInvalidCoinbaseAccount = errors.New("invalid coinbase account in config")
	ErrInvalidConsensus       = errors.New("invalid consensus name from genesis")
)
View Source
var (
	ErrInvalidBranchRoot  = errors.New("best block can't be branch root block")
	ErrGatherChain        = errors.New("new/old blocks must exist")
	ErrNotExistBranchRoot = errors.New("branch root block doesn't exist")
	ErrInvalidSwapChain   = errors.New("New chain is not longer than old chain")
)
View Source
var (
	ErrNotExistHash  = errors.New("not exist hash")
	ErrNotExistBlock = errors.New("not exist block of the hash")
)
View Source
var (
	ErrNotSupportedConsensus = errors.New("not supported by this consensus")
)
View Source
var (
	ErrTxFormatInvalid = errors.New("tx invalid format")
)

Functions

func ConsensusName added in v1.0.0

func ConsensusName() string

func Init

func Init(maxBlkBodySize uint32, coinbaseAccountStr string, isBp bool, maxAnchorCount int, verifierCount int) error

Init initializes the blockchain-related parameters.

func InitGenesisBPs

func InitGenesisBPs(states *state.StateDB, genesis *types.Genesis) error

InitGenesisBPs opens system contract and put initial voting result it also set *State in Genesis to use statedb

func IsPublic added in v0.9.4

func IsPublic() bool

IsPublic reports whether the block chain is public or not.

func MaxBlockBodySize added in v1.0.0

func MaxBlockBodySize() uint32

MaxBlockBodySize returns the max block body size.

func MaxBlockSize

func MaxBlockSize() uint32

MaxBlockSize returns the max block size.

func SendRewardCoinbase

func SendRewardCoinbase(bState *state.BlockState, coinbaseAccount []byte) error

Types

type BlockValidator

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

func (*BlockValidator) Stop

func (bv *BlockValidator) Stop()

func (*BlockValidator) ValidateBlock

func (bv *BlockValidator) ValidateBlock(block *types.Block) error

func (*BlockValidator) ValidateBody

func (bv *BlockValidator) ValidateBody(block *types.Block) error

func (*BlockValidator) ValidateHeader

func (bv *BlockValidator) ValidateHeader(header *types.BlockHeader) error

func (*BlockValidator) ValidatePost

func (bv *BlockValidator) ValidatePost(sdbRoot []byte, receipts *types.Receipts, block *types.Block) error

func (*BlockValidator) WaitVerifyDone added in v0.8.3

func (bv *BlockValidator) WaitVerifyDone() error

type ChainAnchor

type ChainAnchor []([]byte)

type ChainDB

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

func NewChainDB

func NewChainDB() *ChainDB

func (*ChainDB) Close

func (cdb *ChainDB) Close()

func (*ChainDB) Get

func (cdb *ChainDB) Get(key []byte) []byte

Get returns the value corresponding to key from the chain DB.

func (*ChainDB) GetBestBlock

func (cdb *ChainDB) GetBestBlock() (*types.Block, error)

func (*ChainDB) GetBlockByNo

func (cdb *ChainDB) GetBlockByNo(blockNo types.BlockNo) (*types.Block, error)

GetBlockByNo returns the block with its block number as blockNo.

func (*ChainDB) GetChainTree

func (cdb *ChainDB) GetChainTree() ([]byte, error)

func (*ChainDB) GetGenesisInfo added in v0.8.2

func (cdb *ChainDB) GetGenesisInfo() *types.Genesis

GetGenesisInfo returns Genesis info, which is read from cdb.

func (*ChainDB) Init

func (cdb *ChainDB) Init(dbType string, dataDir string) error

func (*ChainDB) NewTx added in v0.9.4

func (cdb *ChainDB) NewTx() db.Transaction

NewTx returns a new chain DB Transaction.

func (*ChainDB) ResetBest added in v0.11.0

func (cdb *ChainDB) ResetBest(resetNo types.BlockNo) error

ResetBest reset best block of chain db manually remove blocks from original best to resetNo.

*Caution*: This API is dangerous. It must be used for test blockchain only.

type ChainInfo

type ChainInfo struct {
	Height types.BlockNo
	Hash   string
}

type ChainManager added in v0.8.2

type ChainManager struct {
	*SubComponent
	IChainHandler //to use chain APIs
	*Core         // TODO remove after moving GetQuery to ChainWorker
}

func (*ChainManager) Receive added in v0.8.2

func (cm *ChainManager) Receive(context actor.Context)

type ChainService

type ChainService struct {
	*component.BaseComponent
	consensus.ChainConsensus
	*Core
	// contains filtered or unexported fields
}

ChainService manage connectivity of blocks

func NewChainService

func NewChainService(cfg *cfg.Config) *ChainService

NewChainService creates an instance of ChainService.

func (*ChainService) AfterStart

func (cs *ChainService) AfterStart()

AfterStart ... do nothing

func (*ChainService) BeforeStart

func (cs *ChainService) BeforeStart()

BeforeStart initialize chain database and generate empty genesis block if necessary

func (*ChainService) BeforeStop

func (cs *ChainService) BeforeStop()

BeforeStop close chain database and stop BlockValidator

func (*ChainService) CDB added in v0.9.4

func (cs *ChainService) CDB() consensus.ChainDB

CDB returns cs.sdb as a consensus.ChainDbReader.

func (*ChainService) CountTxsInChain

func (cs *ChainService) CountTxsInChain() int

func (*ChainService) GetBestBlock

func (cs *ChainService) GetBestBlock() (*types.Block, error)

func (*ChainService) GetBlock

func (cs *ChainService) GetBlock(blockHash []byte) (*types.Block, error)

func (*ChainService) GetChainTree

func (cs *ChainService) GetChainTree() ([]byte, error)

func (*ChainService) GetConsensusInfo added in v1.0.0

func (cs *ChainService) GetConsensusInfo() string

GetConsensusInfo returns consensus-related information, which is different from consensus to consensus.

func (*ChainService) GetGenesisInfo added in v0.11.0

func (cs *ChainService) GetGenesisInfo() *types.Genesis

GetGenesisInfo returns the information on the genesis block.

func (*ChainService) GetHashByNo added in v0.8.1

func (cs *ChainService) GetHashByNo(blockNo types.BlockNo) ([]byte, error)

func (*ChainService) Receive

func (cs *ChainService) Receive(context actor.Context)

Receive actor message

func (*ChainService) SDB added in v0.8.2

func (cs *ChainService) SDB() *state.ChainStateDB

SDB returns cs.sdb.

func (*ChainService) SetChainConsensus added in v0.8.2

func (cs *ChainService) SetChainConsensus(cc consensus.ChainConsensus)

SetChainConsensus sets cs.cc to cc.

func (*ChainService) Statistics

func (cs *ChainService) Statistics() *map[string]interface{}

type ChainTree

type ChainTree struct {
	Tree []ChainInfo
}

type ChainWorker added in v0.8.2

type ChainWorker struct {
	*SubComponent
	IChainHandler //to use chain APIs
	*Core
}

func (*ChainWorker) Receive added in v0.8.2

func (cw *ChainWorker) Receive(context actor.Context)

type Core added in v0.8.2

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

Core represents a storage layer of a blockchain (chain & state DB).

func NewCore added in v0.8.2

func NewCore(dbType string, dataDir string, testModeOn bool, forceResetHeight types.BlockNo) (*Core, error)

NewCore returns an instance of Core.

func (*Core) Close added in v0.8.2

func (core *Core) Close()

Close closes chain & state DB.

func (*Core) GetGenesisInfo added in v0.12.0

func (core *Core) GetGenesisInfo() *types.Genesis

func (*Core) InitGenesisBlock added in v0.8.2

func (core *Core) InitGenesisBlock(gb *types.Genesis, useTestnet bool) error

InitGenesisBlock initialize chain database and generate specified genesis block if necessary

type ErrBlock added in v0.8.1

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

func (*ErrBlock) Error added in v0.8.1

func (ec *ErrBlock) Error() string

type ErrDropBlock added in v0.11.0

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

func (*ErrDropBlock) Error added in v0.11.0

func (err *ErrDropBlock) Error() string

type ErrNoBlock

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

ErrNoBlock reports there is no such a block with id (hash or block number).

func (ErrNoBlock) Error

func (e ErrNoBlock) Error() string

type ErrReorg added in v0.9.4

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

func (*ErrReorg) Error added in v0.9.4

func (ec *ErrReorg) Error() string

type ErrReorgBlock

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

func (*ErrReorgBlock) Error

func (ec *ErrReorgBlock) Error() string

type ErrTx

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

func (*ErrTx) Error

func (ec *ErrTx) Error() string

type IChainHandler added in v0.8.2

type IChainHandler interface {
	// contains filtered or unexported methods
}

type OrphanBlock

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

type OrphanPool

type OrphanPool struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewOrphanPool

func NewOrphanPool() *OrphanPool

type SignVerifier

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

func NewSignVerifier

func NewSignVerifier(comm component.IComponentRequester, sdb *state.ChainStateDB, workerCnt int, useMempool bool) *SignVerifier

func (*SignVerifier) RequestVerifyTxs added in v0.8.3

func (sv *SignVerifier) RequestVerifyTxs(txlist *types.TxList)

func (*SignVerifier) SetSkipMempool added in v0.10.0

func (sv *SignVerifier) SetSkipMempool(val bool)

func (*SignVerifier) Stop

func (sv *SignVerifier) Stop()

func (*SignVerifier) WaitDone added in v0.8.3

func (sv *SignVerifier) WaitDone() (bool, []error)

type StubBlockChain added in v0.9.4

type StubBlockChain struct {
	Best   int
	Hashes []([]byte)
	Blocks []*types.Block

	BestBlock *types.Block
}

StubSyncer receive Syncer, P2P, Chain Service actor message

func InitStubBlockChain added in v0.9.4

func InitStubBlockChain(prefixChain []*types.Block, genCount int) *StubBlockChain

func NewStubBlockChain added in v0.9.4

func NewStubBlockChain() *StubBlockChain

func (*StubBlockChain) AddBlock added in v0.9.4

func (tchain *StubBlockChain) AddBlock(newBlock *types.Block) error

func (*StubBlockChain) GenAddBlock added in v0.9.4

func (tchain *StubBlockChain) GenAddBlock()

func (*StubBlockChain) GetAncestorWithHashes added in v0.9.4

func (tchain *StubBlockChain) GetAncestorWithHashes(hashes [][]byte) *types.BlockInfo

func (*StubBlockChain) GetAnchors added in v0.9.4

func (tchain *StubBlockChain) GetAnchors() (ChainAnchor, types.BlockNo, error)

TODO refactoring with getAnchorsNew()

func (*StubBlockChain) GetBestBlock added in v0.9.4

func (tchain *StubBlockChain) GetBestBlock() (*types.Block, error)

func (*StubBlockChain) GetBlock added in v0.9.4

func (tchain *StubBlockChain) GetBlock(blockHash []byte) (*types.Block, error)

func (*StubBlockChain) GetBlockByNo added in v0.9.4

func (tchain *StubBlockChain) GetBlockByNo(no uint64) *types.Block

func (*StubBlockChain) GetBlockInfo added in v0.9.4

func (tchain *StubBlockChain) GetBlockInfo(no uint64) *types.BlockInfo

func (*StubBlockChain) GetBlocks added in v0.9.4

func (tchain *StubBlockChain) GetBlocks(hashes []message.BlockHash) ([]*types.Block, error)

func (*StubBlockChain) GetConsensusInfo added in v1.0.0

func (tchain *StubBlockChain) GetConsensusInfo() string

func (*StubBlockChain) GetGenesisInfo added in v0.11.0

func (tchain *StubBlockChain) GetGenesisInfo() *types.Genesis

func (*StubBlockChain) GetHashByNo added in v0.9.4

func (tchain *StubBlockChain) GetHashByNo(blockNo types.BlockNo) ([]byte, error)

func (*StubBlockChain) GetHashes added in v0.9.4

func (tchain *StubBlockChain) GetHashes(prevInfo *types.BlockInfo, count uint64) ([]message.BlockHash, error)

func (*StubBlockChain) Rollback added in v0.9.4

func (tchain *StubBlockChain) Rollback(ancestor *types.BlockInfo)

type SubComponent added in v0.8.2

type SubComponent struct {
	actor.Actor
	component.IComponentRequester // use basecomponent to request to other actors
	// contains filtered or unexported fields
}

SubComponent handles message with Receive(), and requests to other actor services with IComponentRequester To use SubComponent, only need to implement Actor interface

func NewSubComponent added in v0.8.2

func NewSubComponent(subactor actor.Actor, requester *component.BaseComponent, name string, cntWorker int) *SubComponent

func (*SubComponent) Request added in v0.8.2

func (sub *SubComponent) Request(message interface{}, respondTo *actor.PID)

send message to this subcomponent and reply to actor with pid respondTo

func (*SubComponent) Start added in v0.8.2

func (sub *SubComponent) Start()

spawn new subactor

func (*SubComponent) Stop added in v0.8.2

func (sub *SubComponent) Stop()

stop subactor

type TxExecFn

type TxExecFn func(bState *state.BlockState, tx types.Transaction) error

func NewTxExecutor

func NewTxExecutor(blockNo types.BlockNo, ts int64, prevBlockHash []byte, preLoadService int, chainID []byte) TxExecFn

NewTxExecutor returns a new TxExecFn.

type ValidatePostFn

type ValidatePostFn func() error

type ValidateSignWaitFn added in v0.8.3

type ValidateSignWaitFn func() error

type VerifyResult

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

Jump to

Keyboard shortcuts

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