Documentation ¶
Index ¶
- Constants
- Variables
- type BlockStoreState
- type Chain
- func (c *Chain) BestBlockHash() *bc.Hash
- func (c *Chain) BestBlockHeader() *types.BlockHeader
- func (c *Chain) BestBlockHeight() uint64
- func (c *Chain) BlockExist(hash *bc.Hash) bool
- func (c *Chain) BlockWaiter(height uint64) <-chan struct{}
- func (c *Chain) GetBlockByHash(hash *bc.Hash) (*types.Block, error)
- func (c *Chain) GetBlockByHeight(height uint64) (*types.Block, error)
- func (c *Chain) GetBlocker(prevBlockHash *bc.Hash, timeStamp uint64) (string, error)
- func (c *Chain) GetConsensusResultByHash(blockHash *bc.Hash) (*state.ConsensusResult, error)
- func (c *Chain) GetHeaderByHash(hash *bc.Hash) (*types.BlockHeader, error)
- func (c *Chain) GetHeaderByHeight(height uint64) (*types.BlockHeader, error)
- func (c *Chain) GetTransactionStatus(hash *bc.Hash) (*bc.TransactionStatus, error)
- func (c *Chain) GetTransactionsUtxo(view *state.UtxoViewpoint, txs []*bc.Tx) error
- func (c *Chain) GetTxPool() *TxPool
- func (c *Chain) InMainChain(hash bc.Hash) bool
- func (c *Chain) LastIrreversibleHeader() *types.BlockHeader
- func (c *Chain) ProcessBlock(block *types.Block) (bool, error)
- func (c *Chain) ProcessBlockSignature(signature, xPub []byte, blockHash *bc.Hash) error
- func (c *Chain) SignBlockHeader(blockHeader *types.BlockHeader) error
- func (c *Chain) SubProtocols() []Protocoler
- func (c *Chain) ValidateTx(tx *types.Tx) (bool, error)
- type DustFilterer
- type OrphanManage
- type Protocoler
- type Store
- type TxDesc
- type TxMsgEvent
- type TxPool
- func (tp *TxPool) AddErrCache(txHash *bc.Hash, err error)
- func (tp *TxPool) GetErrCache(txHash *bc.Hash) error
- func (tp *TxPool) GetTransaction(txHash *bc.Hash) (*TxDesc, error)
- func (tp *TxPool) GetTransactions() []*TxDesc
- func (tp *TxPool) HaveTransaction(txHash *bc.Hash) bool
- func (tp *TxPool) IsDust(tx *types.Tx) bool
- func (tp *TxPool) IsTransactionInErrCache(txHash *bc.Hash) bool
- func (tp *TxPool) IsTransactionInPool(txHash *bc.Hash) bool
- func (tp *TxPool) ProcessTransaction(tx *types.Tx, statusFail bool, height, fee uint64) (bool, error)
- func (tp *TxPool) RemoveTransaction(txHash *bc.Hash)
- type TxPoolMsg
Constants ¶
const ( MsgNewTx = iota MsgRemoveTx )
msg type
Variables ¶
var ( // ErrBadBlock is returned when a block is invalid. ErrBadBlock = errors.New("invalid block") // ErrBadStateRoot is returned when the computed assets merkle root // disagrees with the one declared in a block header. ErrBadStateRoot = errors.New("invalid state merkle root") )
var ( // ErrTransactionNotExist is the pre-defined error message ErrTransactionNotExist = errors.New("transaction are not existed in the mempool") // ErrPoolIsFull indicates the pool is full ErrPoolIsFull = errors.New("transaction pool reach the max number") // ErrDustTx indicates transaction is dust tx ErrDustTx = errors.New("transaction is dust tx") )
var (
ErrNotFoundConsensusResult = errors.New("can't find the vote result by given sequence")
)
Functions ¶
This section is empty.
Types ¶
type BlockStoreState ¶
type BlockStoreState struct { Height uint64 Hash *bc.Hash IrreversibleHeight uint64 IrreversibleHash *bc.Hash }
BlockStoreState represents the core's db status
type Chain ¶
type Chain struct {
// contains filtered or unexported fields
}
Chain provides functions for working with the Bytom block chain.
func NewChain ¶
func NewChain(store Store, txPool *TxPool, subProtocols []Protocoler, eventDispatcher *event.Dispatcher) (*Chain, error)
NewChain returns a new Chain using store as the underlying storage.
func (*Chain) BestBlockHash ¶
BestBlockHash return the hash of the main chain tail block
func (*Chain) BestBlockHeader ¶
func (c *Chain) BestBlockHeader() *types.BlockHeader
BestBlockHeader returns the chain best block header
func (*Chain) BestBlockHeight ¶
BestBlockHeight returns the current height of the blockchain.
func (*Chain) BlockExist ¶
BlockExist check is a block in chain or orphan
func (*Chain) BlockWaiter ¶
BlockWaiter returns a channel that waits for the block at the given height.
func (*Chain) GetBlockByHash ¶
GetBlockByHash return a block by given hash
func (*Chain) GetBlockByHeight ¶
GetBlockByHeight return a block by given height
func (*Chain) GetBlocker ¶
GetBlocker return blocker by specified timestamp
func (*Chain) GetConsensusResultByHash ¶ added in v0.3.0
GetConsensusResultByHash return vote result by block hash
func (*Chain) GetHeaderByHash ¶
GetHeaderByHash return a block header by given hash
func (*Chain) GetHeaderByHeight ¶
func (c *Chain) GetHeaderByHeight(height uint64) (*types.BlockHeader, error)
GetHeaderByHeight return a block header by given height
func (*Chain) GetTransactionStatus ¶
GetTransactionStatus return the transaction status of give block
func (*Chain) GetTransactionsUtxo ¶
GetTransactionsUtxo return all the utxos that related to the txs' inputs
func (*Chain) InMainChain ¶
InMainChain checks wheather a block is in the main chain
func (*Chain) LastIrreversibleHeader ¶ added in v0.3.0
func (c *Chain) LastIrreversibleHeader() *types.BlockHeader
LastIrreversibleHeader returns the chain last irreversible block header
func (*Chain) ProcessBlock ¶
ProcessBlock is the entry for chain update
func (*Chain) ProcessBlockSignature ¶
ProcessBlockSignature process the received block signature messages return whether a block become irreversible, if so, the chain module must update status
func (*Chain) SignBlockHeader ¶ added in v1.0.5
func (c *Chain) SignBlockHeader(blockHeader *types.BlockHeader) error
SignBlockHeader signing the block if current node is consensus node
func (*Chain) SubProtocols ¶ added in v1.0.5
func (c *Chain) SubProtocols() []Protocoler
type DustFilterer ¶ added in v1.0.5
type OrphanManage ¶
type OrphanManage struct {
// contains filtered or unexported fields
}
OrphanManage is use to handle all the orphan block
func NewOrphanManage ¶
func NewOrphanManage() *OrphanManage
NewOrphanManage return a new orphan block
func (*OrphanManage) Add ¶
func (o *OrphanManage) Add(block *types.Block)
Add will add the block to OrphanManage
func (*OrphanManage) BlockExist ¶
func (o *OrphanManage) BlockExist(hash *bc.Hash) bool
BlockExist check is the block in OrphanManage
func (*OrphanManage) Delete ¶
func (o *OrphanManage) Delete(hash *bc.Hash)
Delete will delete the block from OrphanManage
func (*OrphanManage) GetPrevOrphans ¶
GetPrevOrphans return the list of child orphans
type Protocoler ¶ added in v1.0.5
type Protocoler interface { Name() string StartHeight() uint64 BeforeProposalBlock(txs []*types.Tx, nodeProgram []byte, blockHeight uint64, gasLeft int64, isTimeout func() bool) ([]*types.Tx, error) ChainStatus() (uint64, *bc.Hash, error) ValidateBlock(block *types.Block, verifyResults []*bc.TxVerifyResult) error ValidateTxs(txs []*types.Tx, verifyResults []*bc.TxVerifyResult) error ValidateTx(tx *types.Tx, verifyResult *bc.TxVerifyResult) error ApplyBlock(block *types.Block) error DetachBlock(block *types.Block) error }
type Store ¶
type Store interface { BlockExist(*bc.Hash) bool GetBlock(*bc.Hash) (*types.Block, error) GetBlockHeader(*bc.Hash) (*types.BlockHeader, error) GetStoreStatus() *BlockStoreState GetTransactionStatus(*bc.Hash) (*bc.TransactionStatus, error) GetTransactionsUtxo(*state.UtxoViewpoint, []*bc.Tx) error GetUtxo(*bc.Hash) (*storage.UtxoEntry, error) GetConsensusResult(uint64) (*state.ConsensusResult, error) GetMainChainHash(uint64) (*bc.Hash, error) GetBlockHashesByHeight(uint64) ([]*bc.Hash, error) SaveBlock(*types.Block, *bc.TransactionStatus) error SaveBlockHeader(*types.BlockHeader) error SaveChainStatus(*types.BlockHeader, *types.BlockHeader, []*types.BlockHeader, *state.UtxoViewpoint, []*state.ConsensusResult) error }
Store provides storage interface for blockchain data
type TxDesc ¶
type TxDesc struct { Tx *types.Tx `json:"transaction"` Added time.Time `json:"-"` StatusFail bool `json:"status_fail"` Height uint64 `json:"-"` Weight uint64 `json:"-"` Fee uint64 `json:"-"` }
TxDesc store tx and related info for mining strategy
type TxMsgEvent ¶
type TxMsgEvent struct{ TxMsg *TxPoolMsg }
type TxPool ¶
type TxPool struct {
// contains filtered or unexported fields
}
TxPool is use for store the unconfirmed transaction
func NewTxPool ¶
func NewTxPool(store Store, filters []DustFilterer, dispatcher *event.Dispatcher) *TxPool
NewTxPool init a new TxPool
func (*TxPool) AddErrCache ¶
AddErrCache add a failed transaction record to lru cache
func (*TxPool) GetErrCache ¶
GetErrCache return the error of the transaction
func (*TxPool) GetTransaction ¶
GetTransaction return the TxDesc by hash
func (*TxPool) GetTransactions ¶
GetTransactions return all the transactions in the pool
func (*TxPool) HaveTransaction ¶
HaveTransaction IsTransactionInErrCache check is transaction in errCache or pool
func (*TxPool) IsTransactionInErrCache ¶
IsTransactionInErrCache check wheather a transaction in errCache or not
func (*TxPool) IsTransactionInPool ¶
IsTransactionInPool check wheather a transaction in pool or not
func (*TxPool) ProcessTransaction ¶
func (tp *TxPool) ProcessTransaction(tx *types.Tx, statusFail bool, height, fee uint64) (bool, error)
ProcessTransaction is the main entry for txpool handle new tx, ignore dust tx.
func (*TxPool) RemoveTransaction ¶
RemoveTransaction remove a transaction from the pool