Documentation ¶
Index ¶
- Constants
- Variables
- func NewGenesisActions(chainCfg config.Chain, ws factory.WorkingSet) []action.SealedEnvelope
- func PickAction(gasLimit uint64, actionIterator actioniterator.ActionIterator) ([]action.SealedEnvelope, error)
- type BlockCreationSubscriber
- type Blockchain
- type Creator
- type Genesis
- type GenesisAction
- type IndexBuilder
- type Nominator
- type Option
- func BoltDBDaoOption() Option
- func ClockOption(clk clock.Clock) Option
- func DefaultStateFactoryOption() 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 SubChain
- type Transfer
- type Validator
Constants ¶
const ( // GenesisProducerPublicKey is only used for test GenesisProducerPublicKey = "" /* 130-byte string literal not displayed */ // GenesisProducerPrivateKey is only used for test GenesisProducerPrivateKey = "bace9b2435db45b119e1570b4ea9c57993b2311e0c408d743d87cd22838ae892" )
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") // ErrGasHigherThanLimit indicates the error of gas value ErrGasHigherThanLimit = errors.New("invalid gas for action") // 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 Gen = &Genesis{ TotalSupply: unit.ConvertIotxToRau(10000000000), Timestamp: 1546329600, ParentHash: hash.Hash256{}, GenesisCoinbaseData: "Connecting the physical world, block by block", }
Gen hardcodes genesis default settings
Functions ¶
func NewGenesisActions ¶
func NewGenesisActions(chainCfg config.Chain, ws factory.WorkingSet) []action.SealedEnvelope
NewGenesisActions creates a new genesis block
func PickAction ¶
func PickAction(gasLimit uint64, actionIterator actioniterator.ActionIterator) ([]action.SealedEnvelope, error)
PickAction returns picked action list
Types ¶
type BlockCreationSubscriber ¶
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) // 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) // GetTotalTransfers returns the total number of transfers GetTotalTransfers() (uint64, error) // GetTotalVotes returns the total number of votes GetTotalVotes() (uint64, error) // GetTotalExecutions returns the total number of executions GetTotalExecutions() (uint64, error) // GetTotalActions returns the total number of actions GetTotalActions() (uint64, error) // GetTransfersFromAddress returns transaction from address GetTransfersFromAddress(address string) ([]hash.Hash256, error) // GetTransfersToAddress returns transaction to address GetTransfersToAddress(address string) ([]hash.Hash256, error) // GetTransfersByTransferHash returns transfer by transfer hash GetTransferByTransferHash(h hash.Hash256) (*action.Transfer, error) // GetBlockHashByTransferHash returns Block hash by transfer hash GetBlockHashByTransferHash(h hash.Hash256) (hash.Hash256, error) // GetVoteFromAddress returns vote from address GetVotesFromAddress(address string) ([]hash.Hash256, error) // GetVoteToAddress returns vote to address GetVotesToAddress(address string) ([]hash.Hash256, error) // GetVotesByVoteHash returns vote by vote hash GetVoteByVoteHash(h hash.Hash256) (*action.Vote, error) // GetBlockHashByVoteHash returns Block hash by vote hash GetBlockHashByVoteHash(h hash.Hash256) (hash.Hash256, error) // GetExecutionsFromAddress returns executions from address GetExecutionsFromAddress(address string) ([]hash.Hash256, error) // GetExecutionsToAddress returns executions to address GetExecutionsToAddress(address string) ([]hash.Hash256, error) // GetExecutionByExecutionHash returns execution by execution hash GetExecutionByExecutionHash(h hash.Hash256) (*action.Execution, error) // GetBlockHashByExecutionHash returns Block hash by execution hash GetBlockHashByExecutionHash(h hash.Hash256) (hash.Hash256, 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) // 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) // 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 // 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 int64, ) (*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) (*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 }
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 Genesis ¶
type Genesis struct { TotalSupply *big.Int Timestamp int64 ParentHash hash.Hash256 GenesisCoinbaseData string CreatorPubKey string CreatorPrivKey string }
Genesis defines the Genesis default settings
func (*Genesis) CreatorAddr ¶
CreatorAddr returns the creator address on a particular chain
func (*Genesis) CreatorPKHash ¶
CreatorPKHash returns the creator public key hash
type GenesisAction ¶
type GenesisAction struct { Creation Creator `yaml:"creator"` SelfNominators []Nominator `yaml:"selfNominators"` Transfers []Transfer `yaml:"transfers"` SubChains []SubChain `yaml:"subChains"` }
GenesisAction is the root action struct, each package's action should be put as its sub struct
type IndexBuilder ¶
type IndexBuilder struct {
// contains filtered or unexported fields
}
IndexBuilder defines the index builder
func NewIndexBuilder ¶
func NewIndexBuilder(chain Blockchain) (*IndexBuilder, error)
NewIndexBuilder instantiates an index builder
func (*IndexBuilder) HandleBlock ¶
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 ¶
Option sets blockchain construction parameter
func BoltDBDaoOption ¶
func BoltDBDaoOption() Option
BoltDBDaoOption sets blockchain's dao with BoltDB from config.Chain.ChainDBPath
func DefaultStateFactoryOption ¶
func DefaultStateFactoryOption() Option
DefaultStateFactoryOption sets blockchain's sf from config
func InMemDaoOption ¶
func InMemDaoOption() Option
InMemDaoOption sets blockchain's dao with MemKVStore
func InMemStateFactoryOption ¶
func InMemStateFactoryOption() Option
InMemStateFactoryOption sets blockchain's factory.Factory as in memory sf
func PrecreatedDaoOption ¶
func PrecreatedDaoOption(dao *blockDAO) Option
PrecreatedDaoOption sets blockchain's dao
func PrecreatedStateFactoryOption ¶
PrecreatedStateFactoryOption sets blockchain's state.Factory to sf
func RegistryOption ¶
RegistryOption sets the blockchain with the protocol registry
type SubChain ¶
type SubChain struct { ChainID uint32 `yaml:"chainID"` SecurityDeposit int64 `yaml:"securityDeposit"` OperationDeposit int64 `yaml:"operationDeposit"` StartHeight uint64 `yaml:"startHeight"` ParentHeightOffset uint64 `yaml:"parentHeightOffset"` }
SubChain is the SubChain struct
type Validator ¶
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