Documentation
¶
Index ¶
- Variables
- func PickAction(gasLimit uint64, actionIterator actioniterator.ActionIterator) ([]action.SealedEnvelope, error)
- type BlockCreationSubscriber
- type Blockchain
- type IndexBuilder
- type Option
- func BoltDBDaoOption() Option
- func ClockOption(clk clock.Clock) Option
- func DefaultStateFactoryOption() Option
- func EnableExperimentalActions() Option
- func InMemDaoOption() Option
- func InMemStateFactoryOption() Option
- func PrecreatedDaoOption(dao *blockDAO) Option
- func PrecreatedStateFactoryOption(sf factory.Factory) Option
- func RegistryOption(registry *protocol.Registry) Option
- type Validator
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidTipHeight is the error returned when the block height is not valid ErrInvalidTipHeight = errors.New("invalid tip height") // ErrInvalidBlock is the error returned when the block is not valid ErrInvalidBlock = errors.New("failed to validate the block") // ErrActionNonce is the error when the nonce of the action is wrong ErrActionNonce = errors.New("invalid action nonce") // ErrInsufficientGas indicates the error of insufficient gas value for data storage ErrInsufficientGas = errors.New("insufficient intrinsic gas value") // ErrBalance indicates the error of balance ErrBalance = errors.New("invalid balance") )
var ( // ErrNotOpened indicates db is not opened ErrNotOpened = errors.New("DB is not opened") )
Functions ¶
func PickAction ¶ added in v0.4.4
func PickAction(gasLimit uint64, actionIterator actioniterator.ActionIterator) ([]action.SealedEnvelope, error)
PickAction returns picked action list
Types ¶
type BlockCreationSubscriber ¶ added in v0.4.4
BlockCreationSubscriber is an interface which will get notified when a block is created
type Blockchain ¶
type Blockchain interface {
lifecycle.StartStopper
// Balance returns balance of an account
Balance(addr string) (*big.Int, error)
// Nonce returns the nonce if the account exists
Nonce(addr string) (uint64, error)
// CreateState adds a new account with initial balance to the factory
CreateState(addr string, init *big.Int) (*state.Account, error)
// CandidatesByHeight returns the candidate list by a given height
CandidatesByHeight(height uint64) ([]*state.Candidate, error)
// ProductivityByEpoch returns the number of produced blocks per delegate in an epoch
ProductivityByEpoch(epochNum uint64) (uint64, map[string]uint64, error)
// For exposing blockchain states
// GetHeightByHash returns Block's height by hash
GetHeightByHash(h hash.Hash256) (uint64, error)
// GetHashByHeight returns Block's hash by height
GetHashByHeight(height uint64) (hash.Hash256, error)
// GetBlockByHeight returns Block by height
GetBlockByHeight(height uint64) (*block.Block, error)
// GetBlockByHash returns Block by hash
GetBlockByHash(h hash.Hash256) (*block.Block, error)
// BlockHeaderByHeight return block header by height
BlockHeaderByHeight(height uint64) (*block.Header, error)
// BlockHeaderByHash return block header by hash
BlockHeaderByHash(h hash.Hash256) (*block.Header, error)
BlockFooterByHeight(height uint64) (*block.Footer, error)
BlockFooterByHash(h hash.Hash256) (*block.Footer, error)
// GetTotalActions returns the total number of actions
GetTotalActions() (uint64, error)
// GetReceiptByActionHash returns the receipt by action hash
GetReceiptByActionHash(h hash.Hash256) (*action.Receipt, error)
// GetActionsFromAddress returns actions from address
GetActionsFromAddress(address string) ([]hash.Hash256, error)
// GetActionsToAddress returns actions to address
GetActionsToAddress(address string) ([]hash.Hash256, error)
// GetActionCountByAddress returns action count by address
GetActionCountByAddress(address string) (uint64, error)
// GetActionByActionHash returns action by action hash
GetActionByActionHash(h hash.Hash256) (action.SealedEnvelope, error)
// GetBlockHashByActionHash returns Block hash by action hash
GetBlockHashByActionHash(h hash.Hash256) (hash.Hash256, error)
// GetReceiptsByHeight returns action receipts by block height
GetReceiptsByHeight(height uint64) ([]*action.Receipt, error)
// GetFactory returns the state factory
GetFactory() factory.Factory
// GetChainID returns the chain ID
ChainID() uint32
// ChainAddress returns chain address on parent chain, the root chain return empty.
ChainAddress() string
// TipHash returns tip block's hash
TipHash() hash.Hash256
// TipHeight returns tip block's height
TipHeight() uint64
// StateByAddr returns account of a given address
StateByAddr(address string) (*state.Account, error)
// RecoverChainAndState recovers the chain to target height and refresh state db if necessary
RecoverChainAndState(targetHeight uint64) error
// GenesisTimestamp returns the timestamp of genesis
GenesisTimestamp() int64
// For block operations
// MintNewBlock creates a new block with given actions
// Note: the coinbase transfer will be added to the given transfers when minting a new block
MintNewBlock(
actionMap map[string][]action.SealedEnvelope,
timestamp time.Time,
) (*block.Block, error)
// CommitBlock validates and appends a block to the chain
CommitBlock(blk *block.Block) error
// ValidateBlock validates a new block before adding it to the blockchain
ValidateBlock(blk *block.Block) error
// For action operations
// Validator returns the current validator object
Validator() Validator
// SetValidator sets the current validator object
SetValidator(val Validator)
// For smart contract operations
// ExecuteContractRead runs a read-only smart contract operation, this is done off the network since it does not
// cause any state change
ExecuteContractRead(caller address.Address, ex *action.Execution) ([]byte, *action.Receipt, error)
// AddSubscriber make you listen to every single produced block
AddSubscriber(BlockCreationSubscriber) error
// RemoveSubscriber make you listen to every single produced block
RemoveSubscriber(BlockCreationSubscriber) error
// GetActionHashFromIndex returns action hash from index
GetActionHashFromIndex(index uint64) (hash.Hash256, error)
}
Blockchain represents the blockchain data structure and hosts the APIs to access it
func NewBlockchain ¶
func NewBlockchain(cfg config.Config, opts ...Option) Blockchain
NewBlockchain creates a new blockchain and DB instance
type IndexBuilder ¶ added in v0.4.4
type IndexBuilder struct {
// contains filtered or unexported fields
}
IndexBuilder defines the index builder
func NewIndexBuilder ¶ added in v0.4.4
func NewIndexBuilder(chain Blockchain, reindex bool) (*IndexBuilder, error)
NewIndexBuilder instantiates an index builder
func (*IndexBuilder) HandleBlock ¶ added in v0.4.4
func (ib *IndexBuilder) HandleBlock(blk *block.Block) error
HandleBlock handles the block and create the indices for the actions and receipts in it
type Option ¶ added in v0.3.0
Option sets blockchain construction parameter
func BoltDBDaoOption ¶ added in v0.3.0
func BoltDBDaoOption() Option
BoltDBDaoOption sets blockchain's dao with BoltDB from config.Chain.ChainDBPath
func ClockOption ¶ added in v0.3.0
ClockOption overrides the default clock
func DefaultStateFactoryOption ¶ added in v0.3.0
func DefaultStateFactoryOption() Option
DefaultStateFactoryOption sets blockchain's sf from config
func EnableExperimentalActions ¶ added in v0.5.0
func EnableExperimentalActions() Option
EnableExperimentalActions enables the blockchain to process experimental actions
func InMemDaoOption ¶ added in v0.3.0
func InMemDaoOption() Option
InMemDaoOption sets blockchain's dao with MemKVStore
func InMemStateFactoryOption ¶ added in v0.3.0
func InMemStateFactoryOption() Option
InMemStateFactoryOption sets blockchain's factory.Factory as in memory sf
func PrecreatedDaoOption ¶ added in v0.3.0
func PrecreatedDaoOption(dao *blockDAO) Option
PrecreatedDaoOption sets blockchain's dao
func PrecreatedStateFactoryOption ¶ added in v0.3.0
PrecreatedStateFactoryOption sets blockchain's state.Factory to sf
func RegistryOption ¶ added in v0.5.0
RegistryOption sets the blockchain with the protocol registry
type Validator ¶ added in v0.2.0
type Validator interface {
// Validate validates the given block's content
Validate(block *block.Block, tipHeight uint64, tipHash hash.Hash256) error
// AddActionValidators add validators
AddActionValidators(...protocol.ActionValidator)
AddActionEnvelopeValidators(...protocol.ActionEnvelopeValidator)
}
Validator is the interface of validator