Documentation
¶
Index ¶
Constants ¶
const ( // CurrentHeightKey indicates the key of current factory height in underlying database CurrentHeightKey = "currentHeight" // AccountTrieRootKey indicates the key of accountTrie root hash in underlying database AccountTrieRootKey = "accountTrieRoot" )
Variables ¶
var ( // ErrCandidate indicates the error of candidate ErrCandidate = errors.New("invalid candidate") // ErrCandidatePb indicates the error of protobuf's candidate message ErrCandidatePb = errors.New("invalid protobuf's candidate message") // ErrCandidateMap indicates the error of candidate map ErrCandidateMap = errors.New("invalid candidate map") // ErrCandidateList indicates the error of candidate list ErrCandidateList = errors.New("invalid candidate list") )
var ( // ErrNotEnoughBalance is the error that the balance is not enough ErrNotEnoughBalance = errors.New("not enough balance") // ErrAccountNotExist is the error that the account does not exist ErrAccountNotExist = errors.New("account does not exist") // ErrAccountCollision is the error that the account already exists ErrAccountCollision = errors.New("account already exists") // ErrFailedToMarshalState is the error that the state marshaling is failed ErrFailedToMarshalState = errors.New("failed to marshal state") // ErrFailedToUnmarshalState is the error that the state un-marshaling is failed ErrFailedToUnmarshalState = errors.New("failed to unmarshal state") )
Functions ¶
func CandidatesToMap ¶ added in v0.3.0
func CandidatesToMap(candidates CandidateList) (map[hash.AddrHash]*Candidate, error)
CandidatesToMap converts a candidate list to map of cachedCandidates
func Serialize ¶ added in v0.3.0
func Serialize(candidates CandidateList) ([]byte, error)
Serialize serializes a list of candidates to bytes
Types ¶
type Candidate ¶
type Candidate struct {
Address string
Votes *big.Int
PubKey []byte
CreationHeight uint64
LastUpdateHeight uint64
}
Candidate indicates the structure of a candidate
type CandidateList ¶ added in v0.3.0
type CandidateList []*Candidate
CandidateList indicates the list of candidates which is sortable
func Deserialize ¶ added in v0.3.0
func Deserialize(buf []byte) (CandidateList, error)
Deserialize deserializes bytes to list of candidates
func MapToCandidates ¶ added in v0.3.0
func MapToCandidates(candidateMap map[hash.AddrHash]*Candidate) (CandidateList, error)
MapToCandidates converts a map of cachedCandidates to candidate list
func (CandidateList) Len ¶ added in v0.3.0
func (l CandidateList) Len() int
func (CandidateList) Less ¶ added in v0.3.0
func (l CandidateList) Less(i, j int) bool
func (CandidateList) Swap ¶ added in v0.3.0
func (l CandidateList) Swap(i, j int)
type Contract ¶ added in v0.3.0
type Contract interface {
GetState(hash.Hash32B) ([]byte, error)
SetState(hash.Hash32B, []byte) error
GetCode() ([]byte, error)
SetCode(hash.Hash32B, []byte)
SelfState() *State
Commit() error
RootHash() hash.Hash32B
}
Contract is a special type of account with code and storage trie.
type Factory ¶
type Factory interface {
lifecycle.StartStopper
// Accounts
LoadOrCreateState(string, uint64) (*State, error)
Balance(string) (*big.Int, error)
Nonce(string) (uint64, error) // Note that nonce starts with 1.
State(string) (*State, error)
CachedState(string) (*State, error)
RootHash() hash.Hash32B
Height() (uint64, error)
CommitStateChanges(uint64, []*action.Transfer, []*action.Vote, []*action.Execution) error
// Contracts
GetCodeHash(hash.AddrHash) (hash.Hash32B, error)
GetCode(hash.AddrHash) ([]byte, error)
SetCode(hash.AddrHash, []byte) error
GetContractState(hash.AddrHash, hash.Hash32B) (hash.Hash32B, error)
SetContractState(hash.AddrHash, hash.Hash32B, hash.Hash32B) error
// Candidate pool
Candidates() (uint64, []*Candidate)
CandidatesByHeight(uint64) ([]*Candidate, error)
}
Factory defines an interface for managing states
func NewFactory ¶
func NewFactory(cfg *config.Config, opts ...FactoryOption) (Factory, error)
NewFactory creates a new state factory
type FactoryOption ¶ added in v0.3.0
FactoryOption sets Factory construction parameter
func DefaultTrieOption ¶ added in v0.3.0
func DefaultTrieOption() FactoryOption
DefaultTrieOption creates trie from config for state factory
func InMemTrieOption ¶ added in v0.3.0
func InMemTrieOption() FactoryOption
InMemTrieOption creates in memory trie for state factory
func PrecreatedTrieOption ¶ added in v0.3.0
func PrecreatedTrieOption(accountTrie trie.Trie) FactoryOption
PrecreatedTrieOption uses pre-created tries for state factory
type State ¶
type State struct {
// 0 is reserved from actions in genesis block and coinbase transfers nonces
// other actions' nonces start from 1
Nonce uint64
Balance *big.Int
Root hash.Hash32B // storage trie root for contract account
CodeHash []byte // hash of the smart contract byte-code for contract account
IsCandidate bool
VotingWeight *big.Int
Votee string
Voters map[string]*big.Int
}
State is the canonical representation of an account.
func (*State) AddBalance ¶
AddBalance adds balance for state