Documentation ¶
Index ¶
- Constants
- Variables
- func CoinbaseFee() *big.Int
- func Init(maxBlkSize uint32, coinbaseAccountStr string, isBp bool, maxAnchorCount int, ...) error
- func InitGenesisBPs(states *state.StateDB, genesis *types.Genesis) error
- func IsPublic() bool
- func MaxBlockSize() uint32
- func SendRewardCoinbase(bState *state.BlockState, coinbaseAccount []byte) error
- type BlockValidator
- func (bv *BlockValidator) Stop()
- func (bv *BlockValidator) ValidateBlock(block *types.Block) error
- func (bv *BlockValidator) ValidateBody(block *types.Block) error
- func (bv *BlockValidator) ValidateHeader(header *types.BlockHeader) error
- func (bv *BlockValidator) ValidatePost(sdbRoot []byte, receipts types.Receipts, block *types.Block) error
- func (bv *BlockValidator) WaitVerifyDone() error
- type ChainAnchor
- type ChainDB
- func (cdb *ChainDB) Close()
- func (cdb *ChainDB) Get(key []byte) []byte
- func (cdb *ChainDB) GetBestBlock() (*types.Block, error)
- func (cdb *ChainDB) GetBlockByNo(blockNo types.BlockNo) (*types.Block, error)
- func (cdb *ChainDB) GetChainTree() ([]byte, error)
- func (cdb *ChainDB) GetGenesisInfo() *types.Genesis
- func (cdb *ChainDB) Init(dbType string, dataDir string) error
- func (cdb *ChainDB) NewTx() db.Transaction
- func (cdb *ChainDB) ResetBest(resetNo types.BlockNo) error
- type ChainInfo
- type ChainManager
- type ChainService
- func (cs *ChainService) AfterStart()
- func (cs *ChainService) BeforeStart()
- func (cs *ChainService) BeforeStop()
- func (cs *ChainService) CDB() consensus.ChainDB
- func (cs *ChainService) CountTxsInChain() int
- func (cs *ChainService) GetBestBlock() (*types.Block, error)
- func (cs *ChainService) GetBlock(blockHash []byte) (*types.Block, error)
- func (cs *ChainService) GetChainTree() ([]byte, error)
- func (cs *ChainService) GetGenesisInfo() *types.Genesis
- func (cs *ChainService) GetHashByNo(blockNo types.BlockNo) ([]byte, error)
- func (cs *ChainService) Receive(context actor.Context)
- func (cs *ChainService) SDB() *state.ChainStateDB
- func (cs *ChainService) SetChainConsensus(cc consensus.ChainConsensus)
- func (cs *ChainService) Statistics() *map[string]interface{}
- type ChainTree
- type ChainWorker
- type Core
- type ErrBlock
- type ErrDropBlock
- type ErrNoBlock
- type ErrReorg
- type ErrReorgBlock
- type ErrTx
- type IChainHandler
- type OrphanBlock
- type OrphanPool
- type SignVerifier
- type StubBlockChain
- func (tchain *StubBlockChain) AddBlock(newBlock *types.Block) error
- func (tchain *StubBlockChain) GenAddBlock()
- func (tchain *StubBlockChain) GetAncestorWithHashes(hashes [][]byte) *types.BlockInfo
- func (tchain *StubBlockChain) GetAnchors() (ChainAnchor, types.BlockNo, error)
- func (tchain *StubBlockChain) GetBestBlock() (*types.Block, error)
- func (tchain *StubBlockChain) GetBlock(blockHash []byte) (*types.Block, error)
- func (tchain *StubBlockChain) GetBlockByNo(no uint64) *types.Block
- func (tchain *StubBlockChain) GetBlockInfo(no uint64) *types.BlockInfo
- func (tchain *StubBlockChain) GetBlocks(hashes []message.BlockHash) ([]*types.Block, error)
- func (tchain *StubBlockChain) GetGenesisInfo() *types.Genesis
- func (tchain *StubBlockChain) GetHashByNo(blockNo types.BlockNo) ([]byte, error)
- func (tchain *StubBlockChain) GetHashes(prevInfo *types.BlockInfo, count uint64) ([]message.BlockHash, error)
- func (tchain *StubBlockChain) Rollback(ancestor *types.BlockInfo)
- type SubComponent
- type TxExecFn
- type ValidatePostFn
- type ValidateSignWaitFn
- type VerifyResult
Constants ¶
const ( MaxAnchors = 32 //MaxAnchors = 1000000 Skip = 16 )
const (
TxBatchMax = 10000
)
Variables ¶
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") )
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") )
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) )
var ( CoinbaseAccount []byte MaxAnchorCount int VerifierCount int )
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") )
var ( ErrNotExistHash = errors.New("not exist hash") ErrNotExistBlock = errors.New("not exist block of the hash") )
var (
ErrBlockExist = errors.New("block already exist")
)
var (
ErrInvalidCoinbaseAccount = errors.New("invalid coinbase account in config")
)
var (
ErrTxFormatInvalid = errors.New("tx invalid format")
)
Functions ¶
func CoinbaseFee ¶
func Init ¶
func Init(maxBlkSize uint32, coinbaseAccountStr string, isBp bool, maxAnchorCount int, verifierCount int) error
Init initializes the blockchain-related parameters.
func InitGenesisBPs ¶
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 MaxBlockSize ¶
func MaxBlockSize() uint32
MaxBlockSize returns (kind of) the upper limit of block size.
func SendRewardCoinbase ¶
func SendRewardCoinbase(bState *state.BlockState, coinbaseAccount []byte) error
Types ¶
type BlockValidator ¶
type BlockValidator struct {
// contains filtered or unexported fields
}
func NewBlockValidator ¶
func NewBlockValidator(comm component.IComponentRequester, sdb *state.ChainStateDB) *BlockValidator
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 (*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) GetBlockByNo ¶
GetBlockByNo returns the block with its block number as blockNo.
func (*ChainDB) GetChainTree ¶
func (*ChainDB) GetGenesisInfo ¶ added in v0.8.2
GetGenesisInfo returns Genesis info, which is read from cdb.
func (*ChainDB) NewTx ¶ added in v0.9.4
func (cdb *ChainDB) NewTx() db.Transaction
NewTx returns a new chain DB Transaction.
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) 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) 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 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).
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 ErrReorgBlock ¶
type ErrReorgBlock struct {
// contains filtered or unexported fields
}
func (*ErrReorgBlock) Error ¶
func (ec *ErrReorgBlock) 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 ¶
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) 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) 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
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
}