def test_curve(): curve = PriceSupplyCurve(factor=0.0001, base_price=5) assert curve.supply(0) == 0 assert curve.price(0) == curve.b assert curve.supply_at_price(curve.b) == 0, curve.supply_at_price(curve.b) assert curve.reserve_at_price(curve.b) == 0 assert curve.reserve(0) == 0 supply = 1000000 price = curve.price(supply) assert curve.supply_at_price(price) == supply reserve = curve.reserve(supply) assert curve.reserve_at_price(price) == reserve num = 1000 value = curve.cost(supply, num) assert value > 0 xassert(num, curve.issued(supply, value)) num = -1000 value = curve.cost(supply, num) assert value < 0 assert num == curve.issued(supply, value) assert -curve.cost(supply, -1) < curve.cost(supply, 1) # bid < ask mktcap = supply * price supply2 = curve.supply_at_mktcap(mktcap) assert supply == supply2 # test mktcap p = 100 s = curve.supply_at_price(p) assert curve.price(s) == p m = p * s assert m == curve.mktcap(s) assert curve.supply_at_mktcap(m) == s
from math import sqrt bf = 0.3 M = 1000**2 c = PriceSupplyCurve(factor=0.0001, base_price=0) reserve = 50 * M # the total proceeds s = c.supply(reserve) xassert(c.reserve(s), reserve) p = c.price(s) # all bought at this price issued = reserve / p skipped = s - issued print 'issued', issued, s, skipped mktcap = issued * p fmt = 'ceil:{:,.0f}\tprice:{:,.0f}\tfloor:{:,.0f}\tmktcap:{:,.0f}\treserve:{:,.0f}' fmt += '\tpval:{:,.0f}\tsupply:{:,.0f}\tbval:{:,.0f}' mktcap /= 2 for i in range(7): mktcap *= 2 s = c.supply_at_mktcap(mktcap, skipped) price = c.price(s + skipped) xassert(mktcap, s * price) r = c.reserve_at_price(price) f = r / s ceil = price / (1 - bf) bval = bf * mktcap pval = mktcap - r print fmt.format(ceil, price, f, mktcap, r, pval, s, bval)