SourceCred

A Mechanism for the Weekly Grain Sale

In On Floating Grain Prices, I discuss why we’d like to switch Grain from a fixed-price redemption to a floating, market-driven price. However, constructing a reasonably robust market with only a single buyer is challenging.

Before proposing a mechanism, it’s helpful to think about what constraints we are trying to satisfy, as well as what constraints we are not trying to satisfy.

Constraints

  • market driven price: the price should be set based on market dynamics (i.e. relative supply and demand)
  • simple Buyer policy: the Buyer should be able to set a relatively simple and consistent policy (e.g. buy $ worth of Grain every week), rather than requiring lots of ad-hoc decision making
  • simple Seller decision making: the Sellers should be able to make relatively simple decisions (e.g. offer to sell ¤ Grain at price p), not complicated price schedules
  • price stability: the price should be relatively stable (i.e. not spike wildly if there’s a week when no-one is selling)

Non-Constraints

  • market clearing: It’s OK if in a given sale, the Buyer isn’t able to buy as much as they want, or if the Sellers aren’t able to sell as much as they want.

Proposed Mechanism

Every sale period, the Buyer will have a “Buy Amount” D of dollars they wish to spend on Grain (e.g. $10,000). There will also be an anchor price A (e.g. $1) which is the price per Grain that parties are expecting for the sale.

During the sale period, contributors to SourceCred who wish to sell Grain can post (and update) offers to sell Grain; an offer is considered valid if the contributor has at least that much Grain to sell, and the Buyer can legally purchase Grain from them (e.g. the contributor is not from a country on which the US has imposed financial sanctions).

At the end of the sale period, we tally up the total Grain supplied S, and compute the implied clearing price D/S. However, there’s no guarantee that the clearing price will be anywhere near the anchor price. Using the numbers above, if there is only 1000 Grain supplied, the clearing price would be $10, but if there were 100,000 Grain supplied, the clearing price would be $0.1.

Therefore, we will also have a volatility cap parameter, v, which determines how much the price can vary from the clearing price. We effectively have three prices: the anchor price A, the minimum price A / (1 + v), and the maximum price A * (1 + v). Continuing the example, if v=0.2, then the minimum price would be $0.83, and the maximum price would be $1.20.

We then compute the sale price P using the following logic:

  • If the clearing price is less than the minimum price, then the market fails to clear due to an excess of supply. The buyer fill sellers’ orders pro-rata at the minimum price.
  • If the clearing price is between the minimum and maximum price, then the clearing price is the sale price, and all sell orders are filled at the clearing price.
  • If the clearing price is greater than the maximum price, then the market fails to clear due to a shortage of supply, and the buyer fills every sell order at the maximum price.

The volatility parameter and the buy amount will both be posted publicly at the start of each sale period, and contributors can then post orders throughout the period. For the time being, I intend to manually choose the volatility parameter. I intend for it to start relatively high (e.g. v=0.1) and then decrease as the market starts to clear consistently.

Every period, the anchor price will be the previous week’s sale price. Therefore, if there is a consistent mismatch between supply and demand, the price will adjust until it is resolved.

A Live Model

If you’d like to play with a live model of this system, consult this Observable notebook.

Analysis

This construction satisfies all of the constraints listed up top, and has the benefit of being very simple. Its main tradeoff is expressed in the volatility parameter. If volatility is too low, the price is predictable but the market may fail to clear. If volatility is too high, the market will always clear, but may do so at a surprising price.

By virtue of its simplicity, this mechanism seems relatively robust to gaming. There might be some “timing” style gaming where contributors put really big sell orders upfront (implying a low price, discouraging others from selling) and then retract most of their order at the last minute to get a higher price. I ask contributors not to engage in this style of gaming. If this (or other) styles of gaming start being an issue, we will update the sale mechanisms. (For example, we might remove the ability to update or remove sell orders after posting them.)

Alternatives Considered

Algorithmic volatility

I considered having an explicit mechanism for setting the volatility parameter (e.g. volatility increases if the market doesn’t clear, decreases if it does). However, doing so introduced new opportunities for gaming (e.g. contributors withholding sales to pump the volatility parameter and move the price faster, etc). I don’t think there’s any need to systematize the volatility right now, and having a trusted human choosing the parameter makes it harder to game.

Triple Price

Originally, I considered a construction where each Grain sale had three prices: a low price, an anchor price, and a high price. Sellers would decide how much Grain to offer at every price, and then the market would clear at the lowest satisfying price. I decided against this approach, both because it required much more decision making from sellers, and because it seemed more susceptible to gaming.

Request for comments

Please let me know what you think of this mechanism and (if you are expecting to sell Grain in the coming year) whether you think it will work for you. I’m also very interested in hearing potential attacks or exploits against this construction.

2 Likes

Makes sense. Just to clarify, as I had to google a couple financial terms…

By “fails to clear”, I assume you mean the buyer doesn’t buy all the coins. By “pro-rata”, I assume all parties have an equal % of their coins bought? E.g. if seller A is selling 1,000 Grain and seller B is selling 2,000 Grain, and the buyer is only buying 1,000 Grain, then they buy 333 Grain from seller A and 666 Grain from seller B?

I like this general mechanism. It’s like a market with really large tics (presumably sale period = 1 week? 1 month?). Assuming one week, let’s imagine contributors continue to only sell ~1k/mo. Then with a volatility of 0.1, in a month the price could rise %40. I’m curious to see how the very thin sell side (us contributors) would react to this. Personally, this will likely make a difference to me, as I will likely need to sell at least some Grain.

Spoofing. Could see this happening should the market mature and involve more money. But I would be surprised to see this behavior while we’re at this early a stage. We would SHAME THEM!

That is all correct.

Actually, the price would rise by 46% (yay exponential growth). I’m also curious to see what dynamics would emerge.

As far as I know a bonding curve would satisfy all the constraints listed. Has that option been explored?

Also, does this need to be a process that can be run through OpenCollective, or are any and all market based approaches fair game?

I spent some time thinking about using bonding curves; however it’s not clear how one would work and achieve my sets of constraints. Would the buyer be starting a new bonding curve every week? If so, how would we get price stability? Is the buyer operating a single bonding curve that they inject more $ into every week? Maybe that could work, but it’s not obvious to me what that would look like.

Note the typical way I see bonding curves being used is for the project itself to operate a bonding curve, and directly mint tokens in response to fund inflows. We don’t want to do that, because total grain issuance should be based on cred creation and the project’s progress, not on purely financial actions.

It’s not specifically tied to OpenCollective. Actually, since OpenCollective has very high transaction costs, I expect most of the sale to be handled through direct payments (either $ or crypto) instead. While we still have budget in OpenCollective, we’ll likely use that for smaller payouts.

This mechanism seems sufficiently robust to gaming, especially given the transparency of people’s grain offers and the multi-round nature of the system. I initially thought that the high inertia of grain prices in this system was a bug, but it’s probably a nice resistance to high volatility, though it could take a while to reach an equilibrium price.

If I understand the system correctly, I see one slight incentive misalignment: if everyone holds on to their grain, the belief that grain will accrue in value becomes a self-fulfilling prophecy, as the price hits the volatility bumper on the high end week after week. I’m not sure this counts as gaming, but I do fear that now that I’ve said it, it makes it slightly more likely to occur.

It’s a slightly weird model, but I imagine that auction theory might actually contain a lot of relevant economic/game-theoretic literature on a “market with a single buyer” rather than treating this as a market. I say it’s weird because in this case, people would be bidding some number of grain to buy a fraction of dollars up for auction. Plus, auction theory has a number of models, most of which don’t even satisfy your constraints, but I just wanted to highlight that direction.

3 Likes

Thanks for the review @miyazono! Glad to hear you think it checks out.

It’s true that if everyone thinks the grain price will go up, then the price will go up in a self-fulfilling prophecy, although we should note this is property is endemic to markets in general, and not to the specific mechanism I’ve proposed.

That said, having the price of grain increase doesn’t increase the short-term value that contributors can extract via the market. If PL is buying a fixed budget of $10k/week, then gaming the price higher doesn’t actually increase the number of dollars that the contributors get. This is contrast to having a monopoly supplier for a more traditional market, where, e.g. if OPEC can increase the spot price of oil, and the demand for oil is relatively inelastic, then OPEC’s total revenues go up.

However, a high price does benefit contributors by letting them keep a larger fraction of their grain. That’s appealing insofar as the contributors genuinely believe in the project. If the contributors don’t really believe that Grain will matter, they may as well try to get as much $ from the sales as possible, resulting in a falling price. If they believe in it a lot, and don’t sell, eventually the price goes up so much that contributors can get the full sum while selling only a small fraction of their Grain, which will start to be very tempting.

That said, if I do see evidence of active cartel-style collusion to manipulate the price, I will take steps to intervene.

Thanks, that’s a good suggestion for research which a few folks have brought up. I’m not going to dive into it, because I just need a satisficing solution (I view this sale mechanism as some temporary scaffolding rather than part of the long term design, famous last words I know). However, if anyone else wants to dive into auction theory and report back, I’ll be interested to hear any conclusions or insights!

1 Like

Very good point; consider my concern addressed. I was thinking that combined with the inertia, that this could be a problem where it slowly rises with few clearing orders, and then is equally slow to fall with every PL order clearing, but I think the hard cap on the $ side and the pro rata distribution fixes this problem. Seems like the ratcheting up that I was concerned with shouldn’t be a problem for a symmetric volatility parameter like you described.

And I’d love to see if anyone found anything particularly interesting on auctions. Most of the interesting auction styles I saw were sealed-bid, which ends up being pretty susceptible to collusion. Even if it doesn’t get used here, I’d expect other projects that adopt SC to have use for a long-term single-buyer solution. I also think it’d be interesting for someone to examine if there is literature on markets dealing with a small number of buyers.