Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

voting_info.gno

4.24 Kb · 144 lines
  1package governance
  2
  3// VotingInfo tracks voting-related information for a specific user on a specific proposal.
  4// This structure maintains the user's voting eligibility, voting history, and voting power.
  5type VotingInfo struct {
  6	availableVoteWeight int64 // Total voting weight available to this user for this proposal
  7	votedWeight         int64 // Actual weight used when voting (0 if not voted)
  8	votedHeight         int64 // Block height when vote was cast
  9	votedAt             int64 // Timestamp when vote was cast
 10	votedYes            bool  // True if voted "yes", false if voted "no"
 11	voted               bool  // True if user has already voted
 12}
 13
 14// NewVotingInfo creates a new voting information structure for a user.
 15// This constructor initializes the voting eligibility based on delegation snapshots.
 16//
 17// Parameters:
 18//   - availableVoteWeight: total voting weight available to this user
 19//
 20// Returns:
 21//   - VotingInfo: newly created voting information value
 22func NewVotingInfo(availableVoteWeight int64) VotingInfo {
 23	return VotingInfo{
 24		availableVoteWeight: availableVoteWeight,
 25		// Other fields are initialized to zero values (false, 0)
 26		// voted starts as false, indicating no vote has been cast
 27	}
 28}
 29
 30// DefaultVotingInfo creates an empty voting information value.
 31//
 32// Returns:
 33//   - VotingInfo: zero-valued voting record with no available weight and no vote recorded
 34func DefaultVotingInfo() VotingInfo {
 35	return VotingInfo{}
 36}
 37
 38// NewVotedVotingInfo creates a voting information value with a recorded vote.
 39//
 40// Parameters:
 41//   - availableVoteWeight: total voting weight available to the user for this proposal
 42//   - votedYes: true when the recorded vote is yes, false when it is no
 43//   - votedWeight: voting weight applied to the recorded vote
 44//   - votedHeight: block height at which the vote was recorded
 45//   - votedAt: Unix timestamp at which the vote was recorded
 46//
 47// Returns:
 48//   - VotingInfo: voting record populated with the supplied weight, choice, height, and timestamp and marked as voted
 49func NewVotedVotingInfo(availableVoteWeight int64, votedYes bool, votedWeight, votedHeight, votedAt int64) VotingInfo {
 50	return VotingInfo{
 51		availableVoteWeight: availableVoteWeight,
 52		votedWeight:         votedWeight,
 53		votedHeight:         votedHeight,
 54		votedAt:             votedAt,
 55		votedYes:            votedYes,
 56		voted:               true,
 57	}
 58}
 59
 60// VotingType returns a human-readable string representation of the vote choice.
 61//
 62// Returns:
 63//   - string: "yes" or "no" based on voting choice
 64func (v VotingInfo) VotingType() string {
 65	if v.votedYes {
 66		return "yes"
 67	}
 68
 69	return "no"
 70}
 71
 72// IsVoted checks if the user has already cast their vote.
 73//
 74// Returns:
 75//   - bool: true if user has voted on this proposal
 76func (v VotingInfo) IsVoted() bool {
 77	return v.voted
 78}
 79
 80// VotedYes checks if the user voted "yes" on the proposal.
 81// Only meaningful if IsVoted() returns true.
 82//
 83// Returns:
 84//   - bool: true if user voted "yes"
 85func (v VotingInfo) VotedYes() bool {
 86	return v.votedYes
 87}
 88
 89// VotedNo checks if the user voted "no" on the proposal.
 90// Only meaningful if IsVoted() returns true.
 91//
 92// Returns:
 93//   - bool: true if user voted "no"
 94func (v VotingInfo) VotedNo() bool {
 95	return !v.votedYes
 96}
 97
 98// AvailableVoteWeight returns the total voting weight available to this user.
 99// This weight is determined at proposal creation time based on delegation snapshots.
100//
101// Returns:
102//   - int64: available voting weight
103func (v VotingInfo) AvailableVoteWeight() int64 {
104	return v.availableVoteWeight
105}
106
107// VotedWeight returns the weight actually used when voting.
108// Returns 0 if the user hasn't voted yet.
109//
110// Returns:
111//   - int64: weight used for voting, or 0 if not voted
112func (v VotingInfo) VotedWeight() int64 {
113	if !v.voted {
114		return 0
115	}
116
117	return v.votedWeight
118}
119
120// VotedHeight returns the block height when the vote was cast.
121// Returns 0 if the user hasn't voted yet.
122//
123// Returns:
124//   - int64: block height when vote was cast
125func (v VotingInfo) VotedHeight() int64 {
126	if !v.voted {
127		return 0
128	}
129
130	return v.votedHeight
131}
132
133// VotedAt returns the timestamp when the vote was cast.
134// Returns 0 if the user hasn't voted yet.
135//
136// Returns:
137//   - int64: timestamp when vote was cast
138func (v VotingInfo) VotedAt() int64 {
139	if !v.voted {
140		return 0
141	}
142
143	return v.votedAt
144}