48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package native
|
|
|
|
import (
|
|
"github.com/tutus-one/tutus-chain/pkg/core/dao"
|
|
"github.com/tutus-one/tutus-chain/pkg/util"
|
|
)
|
|
|
|
// CRIT-002: Domain-specific committee roles for reduced single point of failure.
|
|
const (
|
|
RoleCommitteeLegal uint64 = 100
|
|
RoleCommitteeHealth uint64 = 101
|
|
RoleCommitteeEducation uint64 = 102
|
|
RoleCommitteeEconomy uint64 = 103
|
|
RoleCommitteeIdentity uint64 = 104
|
|
RoleCommitteeGovernance uint64 = 105
|
|
)
|
|
|
|
// CommitteeDomain represents a domain for committee authority.
|
|
type CommitteeDomain uint8
|
|
|
|
const (
|
|
DomainLegal CommitteeDomain = iota
|
|
DomainHealth
|
|
DomainEducation
|
|
DomainEconomy
|
|
DomainIdentity
|
|
DomainGovernance
|
|
)
|
|
|
|
// DomainCommitteeRole maps domains to their committee role IDs.
|
|
var DomainCommitteeRole = map[CommitteeDomain]uint64{
|
|
DomainLegal: RoleCommitteeLegal,
|
|
DomainHealth: RoleCommitteeHealth,
|
|
DomainEducation: RoleCommitteeEducation,
|
|
DomainEconomy: RoleCommitteeEconomy,
|
|
DomainIdentity: RoleCommitteeIdentity,
|
|
DomainGovernance: RoleCommitteeGovernance,
|
|
}
|
|
|
|
// HasDomainCommitteeAuthority checks if an address has committee authority for a specific domain.
|
|
func (r *RoleRegistry) HasDomainCommitteeAuthority(d *dao.Simple, address util.Uint160, domain CommitteeDomain, blockHeight uint32) bool {
|
|
roleID, ok := DomainCommitteeRole[domain]
|
|
if !ok {
|
|
return false
|
|
}
|
|
return r.HasRoleInternal(d, address, roleID, blockHeight)
|
|
}
|