first draft of consent system

This commit is contained in:
Luke Miller 2021-10-11 09:58:56 -04:00
parent a28c313982
commit 2386c0e929

View File

@ -42,6 +42,90 @@ new_process_format = {
}
-- initialize values
function init_consent(policy) {
self.start_time = os.time()
self.member_count = modpol.orgs.get_org(self.org_id):get_member_count()
if policy.duration then
register_callback(self.start_time + policy.duration)
end
if (duration and (consent_ratio or yes_threshold or no_threshold)) or (yes_threshold) or (consent_ratio) then
-- well formed policy
else
-- invalid
end
}
-- update vote count
function update_consent(user, approve) {
if approve then
table.insert(yes_votes, user)
else
table.insert(no_votes, user)
if not duration then
eval_consent()
end
}
-- evaluate state of vote
function eval_consent() {
consent_ratio = #yes_votes / (#yes_votes + #no_votes)
quorum = (#yes_votes + #no_votes) / member_count
if policy.duration then
if policy.consent_ratio then
if policy.quorum then
if quorum < policy.quorum then
fail()
end
end
if consent_ratio >= policy.consent_ratio then
pass()
else
fail()
end
elseif policy.yes_threshold then
if #yes_votes >= policy.yes_threshold then
pass()
else
fail()
end
elseif policy.no_threshold then
if #no_votes <= policy.no_threshold then
fail()
else
pass()
end
end
elseif policy.yes_threshold then
if policy.no_threshold then
if #no_votes >= policy.no_threshold then
fail()
end
if #yes_votes >= policy.yes_threshold then
pass()
end
elseif policy.consent_ratio and policy.quorum then
if quorum >= policy.quorum then
if consent_ratio >= policy.consent_ratio then
pass()
else
fail()
end
end
end
}
policy_table_format = {