An Economic Analysis of the Computable Protocol - Gauntlet

An Economic Analysis of the Computable Protocol

Key Takeaways

Building decentralized systems presents new challenges that are not often seen in traditional software development. In particular, the adage of “move fast and break things” is no longer a viable strategy as we’ve seen time and time again how even a single critical security vulnerability can be very difficult for a project to recover from. Also, the success of these protocols depends on the design of economic incentives that encourage balanced participation and growth between different types of users in order to create a multi-sided market that will ultimately accrue value. These incentive structures can be difficult to modify once deployed since there is no centralized, governing authority.

Gauntlet is building an agent-based simulation platform to help developers validate their protocol designs, understand tradeoffs between different parameterizations, and ensure that applications are resilient to attacks by bad actors. We recently released another blog post that provides a more comprehensive overview of our system here.

This post will highlight some of the learnings by the Gauntlet and Computable teams from early 2019 as we worked together to design a custom scenario to optimize parameters for their Reserve contract on the Gauntlet platform. By leveraging our tools and simulation results, the Computable team was then able to rapidly iterate and verify a more robust design for a couple of the incentive mechanisms in the initial implementation of the contract. Simulation analysis was always a part of Computable’s plan to test and refine their protocol economics, and they chose to use the Gauntlet platform to achieve that goal.

Note: Computable has just released a new whitepaper, which contains a number of mechanism and terminology changes. The simulation model described here was built on the original version. We will call out some of the differences below to avoid confusion. The updated contracts can be found here.

The Computable Protocol

Computable aims to create a decentralized data market that will incentivize the curation of high-quality datasets at scale, while providing trust and transparency around data privacy and usage. The protocol aims to be flexible enough to accommodate data markets for different industry applications. For example, certain markets may have the property that a handful of large players own the majority of the relevant data, while the success of other data markets may depend on many individual users making contributions over time. Each dataset has a unique token associated with it to incentivize curation and growth, and the participants, or “agents” in the network are grouped into the following roles:

The mechanism for determining whether a listing is valid is similar to a Token-Curated Registry. The dynamics of TCR voting can resemble other blockchain systems such as Proof-of-Stake consensus and decentralized oracles. However, for the rest of this post we will focus on macro features that are more specific to the Computable Protocol.

Bonding Curve

There is a bootstrapping problem since each dataset has its own token, as these tokens will have limited liquidity and be hard to value initially. A Bonding Curve is a contract that determines token price when buying/selling and acts as an automated market-maker for the token to encourage early participation. The diagram below illustrates how one might use a bonding curve to issue tokens. Note that there are separate buy/sell curves, where the sell price is lower than the buy price, to discourage short-term price manipulation while allowing for organic price discovery and liquidity since market participants can agree to trade tokens at any price between two curves.

Computable uses a bonding curve for issuing tokens when patrons deposit cryptocurrencies to the reserve, and when tokens are issued to makers for providing data. For the rest of this post, we will use the term “Network token” to denote the tokens deposited to the reserve. In practice, Network tokens could be either be a token that is native to the Computable protocol and shared across multiple data markets, or it could be a token that is native to the underlying blockchain (e.g. ETH). We will show that the shape and parameterization of the bonding curves has a significant impact on network growth.

For this analysis we use a linear bonding curve defined as follows:

support_price = conversion_rate + conversion_slope * reserve
withdraw_price = reserve / total_supply,

where support_price is the price to buy, withdraw_price is the price to sell, reserve is the total value of currency locked in the bonding curve, and total_supply is the total number of Market tokens issued by the bonding curve.

Agent Model

Buyer — We model demand to query data in aggregate, rather than as individual agents. This demand is realized in the form of payment for queries during each simulation time step. The demand is a function of the number of listings in the dataset, with a predefined upper bound (market size) and bounded growth rate per time step. The fee to query data (in Network tokens) is split as follows:

Datatrust — These agents will process queries if fee that they receive is greater than their marginal cost of doing the computation.

Maker — We assume an upper bound on the number of makers (i.e. there are only so many participants that have high quality data to contribute to the dataset), and that the number of makers that will want to list their data is a function of the expected utility of being listed. Each maker can have at most one listing. Makers can take the following actions:

(maker_fee_network + maker_fee_market * demand_t) / num_listings_t * DF + listed_reward * divest_price_t - listing_cost,

where demand is query revenue at time t, num_listings_t is the number of listings at time t, DF is the discount factor that the agent applies to future earnings, listed_reward is number of market tokens received for getting listed, divest_price_t is the sell price given by the bonding curve, and listing_cost is the overhead or anti-sybil cost associated with creating a listing.

Patron — Can buy or sell Market tokens via the bonding curve:

Simulation Environment

Our simulation platform is built around an agent-based model where users can specify the initial conditions of the network, including distributions of agent behaviors and agent-specific parameters. We generally follow the Byzantine-Altruistic-Rational (BAR) model for describing agent behavior, though this is not a requirement. Each time step of the simulation involves the following:

For the analysis below, we make the following assumptions:

Findings

Maker Compensation

We ran the simulation over different values of maker_fee_network and maker_fee_market to explore the impact of different fee structures on Maker behavior. The reserve_fee is held constant, and the remainder of the query revenue is paid to datatrust agents. Recall that maker_fee_market is the share of query revenue that are paid in Market tokens and locked up to encourage long-term participation. In the heat-map below, each square represents an independent run of the simulation and the color represents the percentage of the total query revenue that is captured by the rational makers.

A few observations:

The result that increasing maker_fee_market generally does not benefit makers much in the long-run is definitely a bit counter-intuitive. Upon closer inspection, we realized that it could make sense for the following reasons:

Out of these three factors, we suspected that the shape of the bonding curve was likely to have the largest impact, so we decided to dig a bit further.

In the original formulation of the bonding curve, the support_price did not track the withdraw_price very closely so we decided to update the definition of support_price. We now define the curve as:

support_price = conversion_rate + support_multiplier * reserve / max(1, total_supply)
withdraw_price = reserve / total_supply

We re-ran the above analysis and got the following results:

Now it appears that the maker_fee_market parameter is actually useful! Increasing maker_fee_market generally increases the utility of the rational makers, and we see that for a given maker fee allocation ( maker_fee_network + maker_fee_market), it is better to split the fee between network and market components rather than paying purely in either Network or Market tokens. Note that there is still a tradeoff between makers and patrons when paying in Market tokens since maker_fee_market dilutes initial patrons.

Bonding Curve Analysis

The success of the protocol depends on initial patrons contributing a large amount of capital to the reserve to incentivize makers to list data. Patrons ultimately profit if the withdraw_price exceeds the initial invest_price. We ran the simulation over the new bonding curve’s parameters conversion_rate and support_multiplier. In the heat-map below, each square represents an independent run of the simulation and the color represents the percentage of total query revenue that is captured by the initial patrons.

A few observations:

Conclusion

The simulation work with Computable prompted many updates to the initial protocol design, including an improved bonding curve and simplification of the Maker payment and convert_listing interface. Along the way, we have also identified key parameters to optimize, tradeoffs associated with different parameterizations, and areas where a different mechanism altogether may achieve the desired result more efficiently. Hopefully this was a convincing example of how simulations can guide the protocol design process!

Within the context of a single data market, simulation allows us to analyze mechanism design as a distributed constrained optimization problem. More broadly, the framework can generate a reference set of parameters and initial conditions that are catered to serving data markets with all sorts of different properties and industry applications. The goal is to design a system that maximizes buyer demand, while maintaining equitable incentives between datatrust providers, makers, and patrons in a way that is statistically verifiable.

Economic incentives are of paramount importance for the long-term security and success of blockchain applications. Trying to reason about incentive mechanism design without simulation is tricky as the emergent properties of a network can be difficult to predict from local changes, and people often resort to making overly simplistic assumption about user behavior in order to get tractable results or closed-form solutions. Agent-based simulation can be a valuable tool for helping developers to validate security assumptions, and understand how value is created for network participants over time.