added some notes to the modules, some not currently functional. rewriting process.lua to work with new modules, support pending actions
This commit is contained in:
@@ -18,7 +18,7 @@ function temp_org()
|
||||
remove_member={process_type='consent', must_be_member=false}
|
||||
},
|
||||
processes = {},
|
||||
requests = {},
|
||||
-- requests = {},
|
||||
pending = {},
|
||||
members = {},
|
||||
parent = nil,
|
||||
|
||||
+20
-140
@@ -1,153 +1,33 @@
|
||||
old_request_format = {
|
||||
user=user, -- requesting user
|
||||
type="add_member", -- action
|
||||
params={user} -- action params
|
||||
}
|
||||
|
||||
old_process_format = {
|
||||
type = "consent", -- delete
|
||||
id = nil,
|
||||
org_id = nil,
|
||||
request_id = nil, -- delete
|
||||
|
||||
-- consent config
|
||||
majority_to_pass = 0.51, -- voting threshold
|
||||
votes_needed = nil,
|
||||
|
||||
-- consent data
|
||||
total_votes = 0,
|
||||
votes_yes = {},
|
||||
votes_no = {}
|
||||
}
|
||||
|
||||
new_process_format = {
|
||||
initiator = "user",
|
||||
status = "request",
|
||||
org_id = 12314,
|
||||
module = "create_child_org", -- policy table lookup
|
||||
process_id = 8347,
|
||||
timestamp = 1632850133, -- look into supporting other formats, overrides (turn based, etc.)
|
||||
|
||||
data = {
|
||||
child_org_name = "oligarchy"
|
||||
},
|
||||
|
||||
consent = {
|
||||
-- voter eligibilty frozen by action table invites
|
||||
start_time = 384179234,
|
||||
member_count = 14,
|
||||
votes_yes = {},
|
||||
votes_no = {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-- 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
|
||||
-- mintest.after(time, func, ...args)
|
||||
-- should override modpol callback function
|
||||
register_callback(self.start_time + policy.duration)
|
||||
function modpol.orgs:call_module(module_name, initiator)
|
||||
if not modpol.modules[module_name] then
|
||||
modpol.ocutil.log('Error in ' .. self.name .. ':call_module -> module "' .. name .. '" not found')
|
||||
return
|
||||
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
|
||||
local module = modpol.modules[module_name]
|
||||
local new_process = module.create(initiator, self)
|
||||
|
||||
}
|
||||
table.insert(self.processes, new_process)
|
||||
|
||||
return new_process
|
||||
end
|
||||
|
||||
-- update vote count
|
||||
function update_consent(user, approve) {
|
||||
if approve then
|
||||
table.insert(yes_votes, user)
|
||||
else
|
||||
table.insert(no_votes, user)
|
||||
function modpol.orgs:create_process()
|
||||
|
||||
if not duration then
|
||||
eval_consent()
|
||||
end
|
||||
end
|
||||
|
||||
}
|
||||
function modpol.orgs:add_pending_action()
|
||||
|
||||
-- evaluate state of vote
|
||||
function eval_consent() {
|
||||
consent_ratio = #yes_votes / (#yes_votes + #no_votes)
|
||||
quorum = (#yes_votes + #no_votes) / member_count
|
||||
end
|
||||
|
||||
if policy.duration then
|
||||
function mopdol.orgs:remove_pending_action()
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
elseif policy.yes_threshold then
|
||||
if #yes_votes >= policy.yes_threshold then
|
||||
pass()
|
||||
else
|
||||
fail()
|
||||
end
|
||||
function modpol.orgs:wipe_pending_actions()
|
||||
|
||||
elseif policy.no_threshold then
|
||||
if #no_votes <= policy.no_threshold then
|
||||
fail()
|
||||
else
|
||||
pass()
|
||||
end
|
||||
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
|
||||
function modpol.orgs:has_pending_actions()
|
||||
|
||||
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 = {
|
||||
"create_child_org": {
|
||||
defer_to = nil,
|
||||
|
||||
-- duration
|
||||
duration = nil, -- evaluates end conditions when reached
|
||||
|
||||
-- thesholds
|
||||
no_threshold = nil, -- fails if reached
|
||||
yes_threshold = nil, -- succeeds if reached
|
||||
|
||||
--ratios
|
||||
consent_ratio = nil, -- % of voters
|
||||
quorum = nil, -- % of members that vote
|
||||
}
|
||||
"create_child_org": {
|
||||
consent_threshold = 0.51,
|
||||
max_duration = 89324, -- seconds until vote closes if threshold not reached, or nil for no limit
|
||||
defer = nil, -- org id to defer to, or nil
|
||||
}
|
||||
}
|
||||
end
|
||||
@@ -0,0 +1,153 @@
|
||||
old_request_format = {
|
||||
user=user, -- requesting user
|
||||
type="add_member", -- action
|
||||
params={user} -- action params
|
||||
}
|
||||
|
||||
old_process_format = {
|
||||
type = "consent", -- delete
|
||||
id = nil,
|
||||
org_id = nil,
|
||||
request_id = nil, -- delete
|
||||
|
||||
-- consent config
|
||||
majority_to_pass = 0.51, -- voting threshold
|
||||
votes_needed = nil,
|
||||
|
||||
-- consent data
|
||||
total_votes = 0,
|
||||
votes_yes = {},
|
||||
votes_no = {}
|
||||
}
|
||||
|
||||
new_process_format = {
|
||||
initiator = "user",
|
||||
status = "request",
|
||||
org_id = 12314,
|
||||
module = "create_child_org", -- policy table lookup
|
||||
process_id = 8347,
|
||||
timestamp = 1632850133, -- look into supporting other formats, overrides (turn based, etc.)
|
||||
|
||||
data = {
|
||||
child_org_name = "oligarchy"
|
||||
},
|
||||
|
||||
consent = {
|
||||
-- voter eligibilty frozen by action table invites
|
||||
start_time = 384179234,
|
||||
member_count = 14,
|
||||
votes_yes = {},
|
||||
votes_no = {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-- 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
|
||||
-- mintest.after(time, func, ...args)
|
||||
-- should override modpol callback function
|
||||
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 = {
|
||||
"create_child_org": {
|
||||
defer_to = nil,
|
||||
|
||||
-- duration
|
||||
duration = nil, -- evaluates end conditions when reached
|
||||
|
||||
-- thesholds
|
||||
no_threshold = nil, -- fails if reached
|
||||
yes_threshold = nil, -- succeeds if reached
|
||||
|
||||
--ratios
|
||||
consent_ratio = nil, -- % of voters
|
||||
quorum = nil, -- % of members that vote
|
||||
}
|
||||
"create_child_org": {
|
||||
consent_threshold = 0.51,
|
||||
max_duration = 89324, -- seconds until vote closes if threshold not reached, or nil for no limit
|
||||
defer = nil, -- org id to defer to, or nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user