98 lines
3.2 KiB
Python
98 lines
3.2 KiB
Python
|
|
import numpy as np
|
|
import pandas as pd
|
|
import networkx as nx
|
|
from .utils import *
|
|
|
|
# Behaviors
|
|
def kpi_calculations(params, step, sL, s):
|
|
'''
|
|
Behavior for assessing the health of the system
|
|
'''
|
|
|
|
# read in state variables
|
|
network = s['network']
|
|
effective_supply = s['effective_supply']
|
|
total_supply = s['total_supply']
|
|
funds = s['funds']
|
|
|
|
|
|
# calculate percentages
|
|
fractionOfSupplyForVoting = effective_supply/total_supply
|
|
fractionOfSupplyInPool = total_supply/funds
|
|
|
|
|
|
proposals = get_nodes_by_type(network, 'proposal')
|
|
|
|
# fraction of proposals in different stages
|
|
total_proposals = len(proposals)
|
|
active_proposals = len([j for j in proposals if network.nodes[j]['status']=='active'])
|
|
completed_proposals = len([j for j in proposals if network.nodes[j]['status']=='completed'])
|
|
killed_proposals = len([j for j in proposals if network.nodes[j]['status']=='killed'])
|
|
proposal_stages = {'percentageOfActive': active_proposals/total_proposals,
|
|
'percentageOfCompleted':completed_proposals/total_proposals,
|
|
'percentageOfKilled':killed_proposals/total_proposals}
|
|
|
|
#fraction of money in the different states
|
|
total_funds_requested = []
|
|
active_funds_requested = []
|
|
completed_funds_requested = []
|
|
killed_funds_requested = []
|
|
|
|
for i in proposals:
|
|
total_funds_requested.append(network.nodes[i]['funds_requested'])
|
|
if network.nodes[i]['status'] == 'active':
|
|
active_funds_requested.append(network.nodes[i]['funds_requested'])
|
|
if network.nodes[i]['status'] == 'completed':
|
|
completed_funds_requested.append(network.nodes[i]['funds_requested'])
|
|
if network.nodes[i]['status'] == 'killed':
|
|
killed_funds_requested.append(network.nodes[i]['funds_requested'])
|
|
|
|
money_stages = {'percentageOfActiveFundsRequested': sum(active_funds_requested)/sum(total_funds_requested),
|
|
'percentageOfCompletedFundsRequested':sum(completed_funds_requested)/sum(total_funds_requested),
|
|
'percentageOfKilledFundsRequested':sum(killed_funds_requested)/sum(total_funds_requested)}
|
|
|
|
return({'fractionOfSupplyForVoting':fractionOfSupplyForVoting,
|
|
'fractionOfSupplyInPool':fractionOfSupplyInPool,
|
|
'fractionOfProposalStages':proposal_stages,
|
|
'fractionOfFundStages':money_stages
|
|
})
|
|
|
|
# Mechanisms
|
|
def kpi_fractionOfSupplyForVoting(params, step, sL, s, _input):
|
|
'''
|
|
'''
|
|
|
|
key = 'fractionOfSupplyForVoting'
|
|
value = _input['fractionOfSupplyForVoting']
|
|
|
|
return (key, value)
|
|
|
|
|
|
def kpi_fractionOfSupplyInPool(params, step, sL, s, _input):
|
|
'''
|
|
'''
|
|
|
|
key = 'fractionOfSupplyInPool'
|
|
value = _input['fractionOfSupplyInPool']
|
|
|
|
return (key, value)
|
|
|
|
def kpi_proposal_stages(params, step, sL, s, _input):
|
|
'''
|
|
'''
|
|
|
|
key = 'fractionOfProposalStages'
|
|
value = _input['fractionOfProposalStages']
|
|
|
|
return (key, value)
|
|
|
|
|
|
def kpi_fractionOfFundStages(params, step, sL, s, _input):
|
|
'''
|
|
'''
|
|
|
|
key = 'fractionOfFundStages'
|
|
value = _input['fractionOfFundStages']
|
|
|
|
return (key, value) |