Documentation
¶
Index ¶
- Constants
- Variables
- func OpinionCaller(handler interface{}, params ...interface{})
- func RoundStatsCaller(handler interface{}, params ...interface{})
- type Context
- func (vc *Context) AddOpinion(opn opinion.Opinion)
- func (vc *Context) HadFirstRound() bool
- func (vc *Context) HadFixedRound(coolingOffPeriod, totalRoundsFinalization, totalRoundsFixedThreshold int) bool
- func (vc *Context) IsFinalized(coolingOffPeriod, totalRoundsFinalization int) bool
- func (vc *Context) IsNew() bool
- func (vc *Context) LastOpinion() opinion.Opinion
- type DRNGRoundBasedVoter
- type Events
- type ObjectType
- type OpinionEvent
- type RoundStats
- type Voter
- type VotingWeights
Constants ¶
const ( // ConflictType defines an object type conflict. ConflictType = iota // TimestampType defines an object type timestamp. TimestampType )
Variables ¶
var ErrVotingNotFound = errors.New("no voting found")
ErrVotingNotFound is returned when a voting for a given id wasn't found.
Functions ¶
func OpinionCaller ¶
func OpinionCaller(handler interface{}, params ...interface{})
OpinionCaller calls the given handler with an OpinionEvent (containing its opinions, its associated ID and context).
func RoundStatsCaller ¶
func RoundStatsCaller(handler interface{}, params ...interface{})
RoundStatsCaller calls the given handler with a RoundStats.
Types ¶
type Context ¶
type Context struct {
ID string
Type ObjectType
// The percentage of OpinionGivers who liked this item on the last query.
ProportionLiked float64
// The number of voting rounds performed.
Rounds int
// Append-only list of opinions formed after each round.
// the first opinion is the initial opinion when this vote context was created.
Opinions []opinion.Opinion
// Weights used for voting
Weights VotingWeights
// ConflictCreationTime points to time when the context has been created
ConflictCreationTime time.Time
}
Context is the context of votes from multiple rounds about a given item.
func NewContext ¶
func NewContext(id string, objectType ObjectType, initOpn opinion.Opinion) *Context
NewContext creates a new vote context.
func (*Context) AddOpinion ¶
AddOpinion adds the given opinion to this vote context.
func (*Context) HadFirstRound ¶
HadFirstRound tells whether the vote context just had its first round.
func (*Context) HadFixedRound ¶ added in v0.5.5
func (vc *Context) HadFixedRound(coolingOffPeriod, totalRoundsFinalization, totalRoundsFixedThreshold int) bool
HadFixedRound tells whether the vote context is in the last l2 rounds of fixed threshold
func (*Context) IsFinalized ¶
IsFinalized tells whether this vote context is finalized by checking whether the opinion was held for totalRoundsFinalization number of rounds.
func (*Context) LastOpinion ¶
LastOpinion returns the last formed opinion.
type DRNGRoundBasedVoter ¶
type DRNGRoundBasedVoter interface {
Voter
// Round starts a new round.
Round(rand float64, delayedRoundStart ...time.Duration) error
}
DRNGRoundBasedVoter is a Voter which votes in rounds and uses random numbers which were generated in a decentralized fashion.
type Events ¶
type Events struct {
// Fired when an Opinion has been finalized.
Finalized *events.Event
// Fired when an Opinion couldn't be finalized.
Failed *events.Event
// Fired when a DRNGRoundBasedVoter has executed a round.
RoundExecuted *events.Event
// Fired when internal errors occur.
Error *events.Event
}
Events defines events which happen on a Voter.
type ObjectType ¶ added in v0.3.2
type ObjectType uint8
ObjectType is the object type of a voting (e.g., conflict or timestamp)
type OpinionEvent ¶
type OpinionEvent struct {
// ID is the of the conflict.
ID string
// Opinion is an opinion about a conflict.
Opinion opinion.Opinion
// Ctx contains all relevant infos regarding the conflict.
Ctx Context
}
OpinionEvent is the struct containing data to be passed around with Finalized and Failed events.
type RoundStats ¶
type RoundStats struct {
// The time it took to complete a round.
Duration time.Duration `json:"duration"`
// The rand number used during the round.
RandUsed float64 `json:"rand_used"`
// The vote contexts on which opinions were formed and queried.
// This list does not include the vote contexts which were finalized/aborted
// during the execution of the round.
// Create a copy of this map if you need to modify any of its elements.
ActiveVoteContexts map[string]*Context `json:"active_vote_contexts"`
// The opinions which were queried during the round per opinion giver.
QueriedOpinions []opinion.QueriedOpinions `json:"queried_opinions"`
}
RoundStats encapsulates data about an executed round.
type Voter ¶
type Voter interface {
// Vote submits the given ID for voting with its initial Opinion.
Vote(id string, objectType ObjectType, initOpn opinion.Opinion) error
// IntermediateOpinion gets intermediate Opinion about the given ID.
IntermediateOpinion(id string) (opinion.Opinion, error)
// Events returns the Events instance of the given Voter.
Events() Events
}
Voter votes on hashes.
type VotingWeights ¶ added in v0.5.5
type VotingWeights struct {
// Total base mana of opinion givers from the last query
TotalWeights float64
// Own mana from the last query
OwnWeight float64
}
VotingWeights stores parameters used for weighted voting calculation