def walk_buy_book(orderbook, dollars_to_spend):
"""Walk asks lowest-first, spend up to dollars_to_spend.
Returns (tokens_acquired, avg_fill_price, fully_filled)."""
asks = orderbook.get("asks") or []
remaining = dollars_to_spend
tokens = 0.0
for level in asks:
price = float(level["price"])
size = float(level["size"])
cost_full = price * size
if remaining >= cost_full:
tokens += size
remaining -= cost_full
else:
tokens += remaining / price
remaining = 0.0
break
spent = dollars_to_spend - remaining
avg = spent / tokens if tokens > 0 else 0.0
return tokens, avg, remaining < 1e-4