def initialize_bonding_curve(initial_supply,
                             initial_price=default_initial_price,
                             kappa=default_kappa,
                             theta=default_theta):

    S = initial_supply
    total_raise = initial_price * S
    R = (1 - theta) * total_raise
    V0 = invariant(R, S, kappa)
    initial_reserve = R
    hatch_price = spot_price(R, V0, kappa)

    return initial_reserve, V0, hatch_price
def update_price(params, step, sL, s, _input):

    supply = s['supply']
    delta_holdings = _input['delta_holdings']
    delta_supply = np.sum([v for v in delta_holdings.values()])
    supply = supply + delta_supply

    kappa = params['kappa']
    V0 = params['invariant']

    R = reserve(supply, V0, kappa)
    price = spot_price(R, V0, kappa)

    key = 'spot_price'
    value = price

    return (key, value)