StableMath.py
calculate_invariant
def calculate_invariant(amplificationParameter: Decimal, balances: list) -> Decimal:
bal_sum = 0
for bal in balances:
bal_sum += bal
num_tokens = len(balances)
if(bal_sum==0):
return 0
prevInvariant = 0
invariant = bal_sum
ampTimesTotal = amplificationParameter*num_tokens
for i in range(255):
P_D = num_tokens*balances[0]
for j in range(1, num_tokens):
P_D = ceil(((P_D*balances[j])*num_tokens)/invariant)
prevInvariant = invariant
invariant = ceil(((num_tokens*invariant)*invariant + (ampTimesTotal*bal_sum)*P_D) / ((num_tokens + 1)*invariant + (ampTimesTotal - 1)*P_D))
if(invariant > prevInvariant):
if(invariant - prevInvariant <= 1):
break
elif(prevInvariant - invariant <= 1):
break
return Decimal(invariant)calc_out_given_in
calc_in_given_out
calc_bpt_in_given_exact_tokens_out
calc_bpt_out_given_exact_tokens_in
calc_tokens_in_given_exact_bpt_out
calc_tokens_out_given_exact_bpt_in
get_token_balance_given_invariant_and_all_other_balances
Last updated
Was this helpful?