66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
import numpy as np
|
|
|
|
default_kappa= 2
|
|
default_exit_tax = .02
|
|
|
|
#value function for a given state (R,S)
|
|
def invariant(R,S,kappa=default_kappa):
|
|
|
|
return (S**kappa)/R
|
|
|
|
#given a value function (parameterized by kappa)
|
|
#and an invariant coeficient V0
|
|
#return Supply S as a function of reserve R
|
|
def reserve(S, V0, kappa=default_kappa):
|
|
|
|
return (S**kappa)/V0
|
|
|
|
#given a value function (parameterized by kappa)
|
|
#and an invariant coeficient V0
|
|
#return Supply S as a function of reserve R
|
|
def supply(R, V0, kappa=default_kappa):
|
|
return (V0*R)**(1/kappa)
|
|
|
|
#given a value function (parameterized by kappa)
|
|
#and an invariant coeficient V0
|
|
#return a spot price P as a function of reserve R
|
|
def spot_price(R, V0, kappa=default_kappa):
|
|
return kappa*R**((kappa-1)/kappa)/V0**(1/kappa)
|
|
|
|
#for a given state (R,S)
|
|
#given a value function (parameterized by kappa)
|
|
#and an invariant coeficient V0
|
|
#deposit deltaR to Mint deltaS
|
|
#with realized price deltaR/deltaS
|
|
def mint(deltaR, R,S, V0, kappa=default_kappa):
|
|
deltaS = (V0*(R+deltaR))**(1/kappa)-S
|
|
if deltaS ==0:
|
|
realized_price = spot_price(R+deltaR, V0, kappa)
|
|
else:
|
|
realized_price = deltaR/deltaS
|
|
return deltaS, realized_price
|
|
|
|
#for a given state (R,S)
|
|
#given a value function (parameterized by kappa)
|
|
#and an invariant coeficient V0
|
|
#burn deltaS to Withdraw deltaR
|
|
#with realized price deltaR/deltaS
|
|
def withdraw(deltaS, R,S, V0, kappa=default_kappa):
|
|
deltaR = R-((S-deltaS)**kappa)/V0
|
|
if deltaS ==0:
|
|
realized_price = spot_price(R+deltaR, V0, kappa)
|
|
else:
|
|
realized_price = deltaR/deltaS
|
|
return deltaR, realized_price
|
|
|
|
def withdraw_with_tax(deltaS, R,S, V0, exit_tax = default_exit_tax, kappa=default_kappa):
|
|
deltaR = R-((S-deltaS)**kappa)/V0
|
|
#print(deltaR)
|
|
quantity_taxed = exit_tax*deltaR
|
|
quantity_recieved = (1-exit_tax)*deltaR
|
|
|
|
realized_price = quantity_recieved/deltaS
|
|
|
|
return quantity_recieved, quantity_taxed, realized_price
|
|
|