-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathaccounting.py
93 lines (79 loc) · 3.92 KB
/
accounting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""# Accounting Module
Assorted protocol accounting of FEI supply and Protocol-Controlled Value
"""
from model.types import PCVDeposit, UserDeposit, Percentage
from model.system_parameters import Parameters
def policy_fei_accounting(params: Parameters, substep, state_history, previous_state):
"""## FEI Accounting Policy
Accounting of the total FEI supply composed of Protocol-owned and User-circulating FEI
"""
# PCV Deposit State Variables
fei_idle_pcv_deposit: PCVDeposit = previous_state["fei_idle_pcv_deposit"]
fei_liquidity_pool_pcv_deposit: PCVDeposit = previous_state["fei_liquidity_pool_pcv_deposit"]
fei_money_market_pcv_deposit: PCVDeposit = previous_state["fei_money_market_pcv_deposit"]
fei_money_market_utilization: Percentage = previous_state["fei_money_market_utilization"]
# User Deposit State Variables
fei_liquidity_pool_user_deposit: UserDeposit = previous_state["fei_liquidity_pool_user_deposit"]
fei_money_market_user_deposit: UserDeposit = previous_state["fei_money_market_user_deposit"]
fei_savings_user_deposit: UserDeposit = previous_state["fei_savings_user_deposit"]
fei_idle_user_deposit: UserDeposit = previous_state["fei_idle_user_deposit"]
# State Update
total_protocol_owned_fei = (
fei_idle_pcv_deposit.balance
+ fei_liquidity_pool_pcv_deposit.balance
+ fei_money_market_pcv_deposit.balance * (1 - fei_money_market_utilization)
)
total_user_circulating_fei = (
fei_idle_user_deposit.balance
+ fei_savings_user_deposit.balance
+ fei_liquidity_pool_user_deposit.balance
# Money market user supplied
+ fei_money_market_user_deposit.balance * (1 - fei_money_market_utilization)
# Money market user borrowed
+ fei_money_market_pcv_deposit.balance * fei_money_market_utilization
)
total_fei_supply = total_protocol_owned_fei + total_user_circulating_fei
return {
"total_protocol_owned_fei": total_protocol_owned_fei,
"total_user_circulating_fei": total_user_circulating_fei,
"total_fei_supply": total_fei_supply,
}
def policy_pcv_accounting(params, substep, state_history, previous_state):
"""## PCV Accounting Policy
Accounting of total Protocol-Controlled Value composed of Stable and Volatile Assets
"""
# State Variables: Stable PCV
stable_idle_pcv_deposit: PCVDeposit = previous_state["stable_idle_pcv_deposit"]
stable_yield_bearing_pcv_deposit: PCVDeposit = previous_state[
"stable_yield_bearing_pcv_deposit"
]
# State Variables: Volatile PCV
volatile_idle_pcv_deposit: PCVDeposit = previous_state["volatile_idle_pcv_deposit"]
volatile_yield_bearing_pcv_deposit: PCVDeposit = previous_state[
"volatile_yield_bearing_pcv_deposit"
]
volatile_liquidity_pool_pcv_deposit: PCVDeposit = previous_state[
"volatile_liquidity_pool_pcv_deposit"
]
# State Variables: Price Processes
stable_asset_price = previous_state["stable_asset_price"]
volatile_asset_price = previous_state["volatile_asset_price"]
# State Update
total_stable_asset_pcv_balance = (
stable_idle_pcv_deposit.balance + stable_yield_bearing_pcv_deposit.balance
)
total_volatile_asset_pcv_balance = (
volatile_idle_pcv_deposit.balance
+ volatile_yield_bearing_pcv_deposit.balance
+ volatile_liquidity_pool_pcv_deposit.balance
)
total_stable_asset_pcv = total_stable_asset_pcv_balance * stable_asset_price
total_volatile_asset_pcv = total_volatile_asset_pcv_balance * volatile_asset_price
total_pcv = total_stable_asset_pcv + total_volatile_asset_pcv
return {
"total_stable_asset_pcv_balance": total_stable_asset_pcv_balance,
"total_volatile_asset_pcv_balance": total_volatile_asset_pcv_balance,
"total_stable_asset_pcv": total_stable_asset_pcv,
"total_volatile_asset_pcv": total_volatile_asset_pcv,
"total_pcv": total_pcv,
}