A Price Discovering Treasury Proposal

At the Polkadot Decoded event, we had the chance to participate in a governance roundtable discussion with folks like @joepetrowski, @jonas, @giotto, @ChrawnnaCorp, @Overkillus, @alice_und_bob, and more!

A video will hopefully be live soon.

One idea we collectively brainstormed before the cameras were ready was a price discovery treasury proposal system.

Background

This idea began when @giotto started talking about the wisdom of the crowd. Specifically, he discussed how engaging large groups of people can lead to better outcomes.

We agreed that groups of people (like the Polkadot DAO) are often bad at making decisions. Issues such as groupthink or herd behavior can lead to suboptimal decisions when large groups lack centralized direction.

However, it was pointed out that large groups of people are quite good at price discovery.

For example, there is a common game where a large crowd guesses how many jellybeans are in a jar. The individual guesses are usually quite bad, but the average guess is surprisingly accurate.

This same behavior is essentially the basis of price discovery of goods in free markets.

The Treasury Today

Today, teams come to the treasury with a proposal of work they want to do AND the price they want to do it for. If you have been following the treasury at all, these prices are often controversial as there is a disconnect between what the Polkadot DAO wants to spend and what the team wants.

It also makes it hard for teams to be “profitable” from the treasury. Some teams come to the treasury super humble and take on projects that have high value at an undervalued price. Others try to squeeze as much profit as they can from their proposal, and some projects do not get approved due to inflated costs.

We are also unable to signal to teams “yes we want this… but not at the price you want” or “yes we want this… but at a smaller/larger scale.”

There can also be issues today with retroactive funding using the current treasury proposal mechanics. Let’s take a look at the Retroactive Funding for ORML, Chopsticks, and Subway.

@xlc: I expect people to use this to help them to come up their own number of the fair value of this proposal, and then compare with the request amount, vote aye if request amount is lower, nay if request amount is higher. It will be helpful if people can post their independently accessed value as additional data point for collective value assessment. Note: this methodology should apply to all treasury spending proposals.

So, let’s show how we can do better.

Using the Wisdom of the Crowd

What if we reinvented the treasury proposal process to take advantage of the wisdom of the crowd to get better outcomes from our treasury system?

Teams can come to the treasury with a proposal for work to be done, just as before, but instead of making a direct request to the treasury for funds, they will commit a ZK price (which is never revealed) for the minimum amount of funds they need to complete the work.

Then, voters will submit what value/price they believe the proposal is worth to the community and should be spent from the treasury. If we believe in the wisdom of the crowd, we should be able to find the “right” price by looking at the median value across voters.

After a voting period, the final price the treasury is willing to pay is locked in, and the team can submit a ZK proof showing their minimum price is less than the approved price (without revealing their minimum price), which will then execute the proposal and transfer the amount to the team.

The team is able to execute their project at an “ideal” price for the treasury, and the Polkadot DAO is able to influence the scale and cost of projects being executed.

Example

Let’s say there was a marketing proposal to put the Polkadot logo on the side of private jet planes.

A dealer would know the exact cost of this project, let’s say $100,000. They submit the proposal on-chain with details on what they want to execute, and with the hidden value of $100,000 as their actual cost of business.

The community might say this is super valuable and important, and worth a median $150,000 for the execution of the project. In this case, the team submits the proof, gets the payout, and makes a healthy $50,000 profit for their work and identifying an issue important to the community.

Example Votes:

 ---------------------------------- Median ------------------------------------
[10_000, 140_000, 142_000, 148_000, 150_000, 165_000, 190_000, 260_000, 330_000]

However, the majority of the community might not think this is a very valuable proposal. Some individuals may say that we should give them more than $300,000, but most people in this scenario would say a project like this is only worth $30,000. Or they may even submit $0 as a signal that they would not like this project to execute at all. In either case, the median value calculated will be below the minimum price, and the proposal will not be executed as there is no agreement between the cost of the project and the value it brings to Polkadot.

Example Votes:

 ----------- Median ----------------------------------
[0, 0, 0, 0, 30_000, 35_000, 365_000, 460_000, 550_000]

Expected Behaviors

If the proposing team went to the treasury and asked for exactly $100,000, they would be making no margin or profit. This would obviously be their highest chance of success (besides taking a loss on the project), but this does not lead to a healthy business relationship.

If they want to make a profit, they may go and ask for $200,000. But then it is easy for nay voters to point out that their prices are inflated, and that things can be done for cheaper. This can often lead to net negative outcomes because we shut down a team that wants to do some work for Polkadot simply because there is no agreement on price. Also, while it is common to say “someone can do it cheaper,” often those people are not actually offering someone else who will actually do it cheaper.

With this system, teams are able to keep their cost of business private (which is pretty normal), and instead let the Polkadot DAO evaluate the value.

In this case, teams are actually incentivized to research the kinds of projects that Polkadot wants most. Teams will be most profitable when they can arbitrage the cost of doing something with the value it brings to the community. For example, we have been in desperate need of certain kinds of UI/UX in Polkadot. For teams that will actually execute these projects, they could get paid much more than the underlying cost of building that product. On the flip side, yet another of the same project (let’s say a DEX pallet) will be seen as less valuable to the ecosystem, even though the cost of executing this project well will truthfully be high.

I believe this system will work exceptionally well for retroactive funding (which I also think should happen more often than it does). In this case, the community can really evaluate the value of a completed project and the impact it had on the ecosystem. In this scenario, a team could set their minimum price at $0, and then it is really letting the Polkadot DAO determine how much they should receive. If the amount they receive is lower than they expect, perhaps that is a signal from the DAO that the project is not that valuable or was not executed well.

Direct Use Cases

Here are some direct use cases where I think this system will benefit Polkadot and lead to better alignment with price and results of treasury spending:

  • Funding / Top Ups of Bounties
  • Polkadot Events
  • Polkadot Marketing
  • Creation of “redundant” products (balancing the value of resilience with redundancy)
  • Evaluating “experimental” ideas
17 Likes

Hi Shawn, sounds like an interesting idea. Would the price submissions be weighted with the voting power, or how would you avoid people making a lot of small votes with an unreasonable price to move the median in their favor?

1 Like

Yes. We would find the median value weighted by token vote.

So imagine 3 voters Alice, Bob, and Charlie.

Who Weight of Vote Suggested Treasury Spend
Alice 100 DOT 0 DOT
Bob 450 DOT 40 DOT
Charlie 1000 DOT 100 DOT

In this case, we can consider this same as:

  • 100 votes for 0 DOT
  • 450 votes for 40 DOT
  • 1000 votes for 100 DOT

Thus, the median value here is 100 DOT. This could also take into account the existing conviction voting system we have where users could gain additional “weight” by locking their tokens for longer.

In a real world scenario, there would be many more votes, so it wouldn’t be that a whale could control the price, but perhaps there are some additional safeguards we would need to introduce.

One of the original ideas was to make the proposal a two phase process:

  • Discover a price, lock in price without enactment.
  • If the price is higher than the minimum price of the team, then a second public vote to execute the proposal.

I think in terms of ideal behavior of voters, this second step would be a waste as those who were interested to vote on the proposal and affect the price would have done so already.

Open to ideas, and really anything is possible / codable.

EDIT:

That being said, I could see how users could manipulate their vote last minute to adjust the median price up or down. For this we could take price snapshots, use the two phase approach, or have a delay from the proposal passing to the funds being delivered so that governance could jump in against malicious behavior.

1 Like

I don’t know if using the median will produce a representative result. In your example, 55% of the voting power agreed on a spend of <= 40 DOT, and the median would still be 100 DOT.

What about using a weighted average? It will be more expensive to compute, but still possible.

Using this method with your example, you would first have the voting round, and after it ends, you would calculate the weighted average as follows:

  • First calculate the total amount of DOT locked for voting:
    Total DOT = 100 + 450 + 1000 = 1550

  • Then calculate each voter’s weight in relation to the total DOT locked:
    Alice = 100 / 1550 = 0.064516129032258
    Bob = 450 / 1550 = 0.290322580645161
    Charlie = 1000 / 1550 = 0.645161290322581

  • Then calculate each voters weighted spend
    Alice = 0.0645... * 0 = 0
    Bob = 0.2903... * 40 = 11.613
    Charlie = 0.6451... * 100 = 64.516

  • Finally the Weighted Average is the sum of all these weighted spends:
    Agreed Spend = 0 + 11.613 + 64.516 = 76.129

As you can see, a weighted average would have quite a different final amount, which IMO represents a better tradeoff from all the different voter’s preferences.

The only problem is the computation, as we would need to go through every single vote in storage and calculate it’s weight as part of the whole.

A possible solution could be to reduce the participants in the calculation to only the ones above a certain weight. Otherwise it would be open to attack by spamming multiple low votes.

Maybe the extrinsic which calculates it needs a proof that the votes submitted constitute 99% of the DOT voting power.

1 Like

Median value is usually better for these kinds of things because we can expect there to be wildly skewed values in both extremes since it is permissionless to vote. And people should be able choose whatever value they think is right.

I can understand with my example that you might not feel it is the right result, but in larger samples, the median value will be much harder to influence than the mean value.

Some of your ideas I don’t resonate with because we should be certain to keep voting in governance and in the Treasury as non-exlusionary as possible.

As for complexity of algorithms to do this well, I think we can bound complexity by creating quantization around the values we allow users propose to vote. For example imagine rather than allowing all possible numbers, we only allow 1024 values from 0 to some max value established by the proposer.

So you wouldn’t be able to vote $12,345.67 dollars, but you could vote $12,300, which is probably good enough.

3 Likes

I think the idea is interesting but the risk of manipulation is high (but should not be considered a blocker IMO)

Another issue I see is that the wisdom of the crowd needs enough people to work. In your scenario, the powers goes to the DOT holders to decide the price. The wisdom of the crowds works well when it spreads across the crowd, not when it rotates around a central group of people (the richest) and even more when that group is not the experts.
(However I don’t see a better solution with the current technology :confused:)

2 Likes

Perhaps we could limit risk and test this on the small and medium spender track to start.

1 Like

Good concept!
Here is an alternative suggestion:

Rather than having a price discovery proposal system what about transforming it into a price discovery and bidding competition proposal system.

Structure

Phase 1: Proposal Submission
-Polkadot DAO, basically anyone, submits a proposal, could be any development or initiative.

Phase 2: Wisdom of The Crowd
-Leveraging the wisdom of the crowd to determine a fair value at a max cap as a starting point.

Phase 3: Define Eligibility
-Candidates that willing to take on the work needs to be approved by the DOT community, counter mechanism that partially ensures bidders reliability.

Phase 4: Bidding Wars
-The proposal enters the next stage with eligible teams or individuals bidding to take on the work.

Phase 5: Winner and Execution
-Lowest offer wins. Team receives the funds and begins developments.

Benefits

Clearly this approach is very beneficial for both Polkadot network and the holders.
Also it completely reverses the last minute snipe situation and prevents any whales to redirect the final outcome as they don’t participate at Phase 4.

Very efficient way for new teams to introduce themselves and show what they are capable of.
Also creates healthy competition for teams who are already established and have a proven successful track record.
‘Battle of the Gov’

Main Concern

None of the above addresses the elephant in the room.
This system(s) does not guarantee that the teams will deliver or evaluates the quality/effectiveness/impact of the work which are some of the main pain points we are facing at the moment and will continue to inevitably resurface.

Overall, the price discovering proposal its a nice idea especially for retroactive funding and even if it might overcomplicate the current structure could worth to be tested.
Maybe a new track following any new system, as it feels more practical and reasonable approach rather than reinventing the whole process.
Implementing it first on Kusama would be interesting.

@Cris_Pap your suggestion is basically what a Bounty is used for.

A bounty allows the community to allocate funds for a specific kind of project, which doesn’t have an owner, and allows curators to find the best candidate to execute that project in whatever ways they want to evaluate.

The problem with your suggestion being an open bidding system, is that there is no way to know when a bid is actually from a qualified candidate, or just a random person. If the lowest bid wins, some troll will just place a bid for 1 DOT, with no intention to do the project, and take the project away from people who would actually get something done.

Also, I would argue the cheapest solution is often NOT the best solution for the treasury. We often want to balance budget with quality, so you can see how a bounty system with qualified curators who can make that judgement will be better for this kind of thing.

For this, we simply need to be more conservative with the kind of spending we do with unknown actors. People coming to the treasury for the first time should only get small proposals passed, whereas those with a history of high quality contributions can actually start to receive bigger or more speculative projects.

1 Like

This is super interesting, and it is pretty well established that the “wisdom of the crowd” is pretty good at quantitative stuff like this.

But there’s another (smaller) elephant in the room. Since Polkadot governance is token-voting without KYC or reliable alternative, there’s no reaaaal way to know the size of the crowd (or even if there is one). Could one account be 1000 people? sure. Could 1000 accounts be one person? also sure.

1 Like

Very happy to see finally someone is working on this very much needed solution. I would like to add a few more points:

Budgeting: We absolutely need a budgeting solution. I don’t think I need to state why it is important. We shouldn’t 100% following how it is done traditionally because the circumstance are very different but we need to at least have some form of it.

Incentives: A work with exceptional outcome should get big rewards. A work with no impact should get a something like minimum wages. And obviously no one can predict the future, so we need some mechanism to make the bonus payment after the work outcome is carefully evaluated.

Prioritization: Not all tasks are equal important. Some tasks are more important than other tasks and we should try to get the important tasks done first before funding teams doing the less important tasks. IF we have unlimited budgets, then we can just fund all sort of works but we don’t. This means we need to be able to evaluate the priority of a proposal and deny the ones are low priority so we don’t run out of budget. This is also necessary for RFP. A new team should be able to easily identify what the community wants and start working on it and have reasonable confidence that the community will support such proposal because there was already a soft commitment to indicate such proposal will be funded with some kind of priority bonus.

A potential solution

Define spending categories. e.g core development, marketing, research, user support, tooling, etc.
Define a min and max spending amount for each category for a period. e.g. 200k - 500k DOT for core development per 3 months. We should use whatever mechanism we figured out to define those values collectively.
At the beginning of a period, teams or individuals can submit put themselves to the category pools.
At the end of a period, the community evaluate the outcome of the work and determine an impact score for each entry for each category. Then we can distribute the payment based on the score. We should always distribute at least minimal amount. e.g. if only one team is doing core development, then this team will get the minimal spending amount for core development category as long as some real work is done.

7 Likes

I had a similar suggestion regarding strategy of the DAO to @alice_und_bob I didn’t suggest incentives and am not thrilled with this idea over all as I see many issues with your definition and the task of maintaining such a suggestion.

I would like to add though I think milestones and flexibility is required with structures to treasury spend. Roadmaps for large project builds are needed, but we need follow-ups and understanding of life events. Sometimes people quit and you need to replace them, sometimes you need bug fixes. Goals should be to get delivery with a reasonable timeframe and realistic expectations.

In this particular example, it is quite straightforward to figure out how to present the marketing proposal.

First, people who want to submit this proposal have to gather quotes from several established companies. Think about it like a call for tender, you know, like we do in real life with real projects in real companies with real goals.

Second, the proposal have to include these quotes and details about companies able to accomplish the stated goal: put Polkadot logo on the side of PJs.

Third, people who submitted the proposal should include their preferences in terms of companies and motivate their choices.

Finally, the community vote for a goal, a budget and a company to do the work.

I think the median price approach is reasonable, however as @crystalin pointed out, it would be very easy to manipulate the median valuation if it’s public. By knowing the submitted votes then anybody could influence the median, potentially maliciously (e.g. trying to get it below the minimum amount defined by the proposer or attempting to make it as large as possible).

We can consider some ideas from auction theory that can help us out. A main goal of this system, imo, should be to encourage voters to submit honest valuations of a proposal. Sealed-bid auctions are proven to encourage truthful bidding, particularly the second-price sealed bid auction (see page 59 here). In this system, participants lock their bids for a future deadline, so nobody can predict what the median is going to be (unless they collude offchain). We can accomplish the ‘sealing’ of bids with timelock encryption quite easily (ex: tlock auction).

I added some more thoughts and details here: Tlock Pay-What-You-Want - HackMD. In it I provide an informal discussion of why honest bidding is an optimal strategy in the sealed-bid median price auction. I also introduce a reward function to incentivize bidders to submit honest bids, though I’m not sure if this is a desired feature of the system (i.e. rewards for participating in the protocol). It would also be interesting to do a similar analysis with the weighted vote scheme proposed by @JuaniRios to see how it could promote truthful bidding.