vspd/helpers.go
2020-05-15 08:48:22 +01:00

43 lines
938 B
Go

package main
import (
"github.com/decred/dcrd/chaincfg/v3"
"github.com/decred/dcrd/dcrutil/v3"
)
func currentVoteVersion(params *chaincfg.Params) uint32 {
var latestVersion uint32
for version := range params.Deployments {
if latestVersion < version {
latestVersion = version
}
}
return latestVersion
}
// isValidVoteBits returns an error if voteBits are not valid for agendas
func isValidVoteBits(params *chaincfg.Params, voteVersion uint32, voteBits uint16) bool {
if !dcrutil.IsFlagSet16(voteBits, dcrutil.BlockValid) {
return false
}
voteBits &= ^uint16(dcrutil.BlockValid)
var availVoteBits uint16
for _, vote := range params.Deployments[voteVersion] {
availVoteBits |= vote.Vote.Mask
isValid := false
maskedBits := voteBits & vote.Vote.Mask
for _, c := range vote.Vote.Choices {
if c.Bits == maskedBits {
isValid = true
break
}
}
if !isValid {
return false
}
}
return true
}