-
Luca Moser authoredLuca Moser authored
voter.go 1.28 KiB
package vote
import (
"errors"
"github.com/iotaledger/hive.go/events"
)
var (
// ErrVotingNotFound is returned when a voting for a given id wasn't found.
ErrVotingNotFound = errors.New("no voting found")
)
// Voter votes on hashes.
type Voter interface {
// Vote submits the given ID for voting with its initial Opinion.
Vote(id string, initOpn Opinion) error
// IntermediateOpinion gets intermediate Opinion about the given ID.
IntermediateOpinion(id string) (Opinion, error)
// Events returns the Events instance of the given Voter.
Events() Events
}
// DRNGRoundBasedVoter is a Voter which votes in rounds and uses random numbers which
// were generated in a decentralized fashion.
type DRNGRoundBasedVoter interface {
Voter
// Round starts a new round.
Round(rand float64) error
}
// Events defines events which happen on a Voter.
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 internal errors occur.
Error *events.Event
}
// OpinionCaller calls the given handler with an Opinion and its associated Id.
func OpinionCaller(handler interface{}, params ...interface{}) {
handler.(func(id string, opinion Opinion))(params[0].(string), params[1].(Opinion))
}