Log In Sign Up

An analysis of Uniswap markets

by   Guillermo Angeris, et al.

Uniswap—and other constant product markets—appear to work well in practice despite their simplicity. In this paper, we give a simple formal analysis of constant product markets and their generalizations, showing that, under some common conditions, these markets must closely track the reference market price. We also show that Uniswap satisfies many other desirable properties and numerically demonstrate, via a large-scale agent-based simulation, that Uniswap is stable under a wide range of market conditions.


An Axiomatic Characterization of CFMMs and Equivalence to Prediction Markets

Constant-function market makers (CFMMs), such as Uniswap, are automated ...

Beating the House: Identifying Inefficiencies in Sports Betting Markets

Inefficient markets allow investors to consistently outperform the marke...

On firm specific characteristics of pharmaceutical generics and incentives to permanence under fuzzy conditions

The aim of this paper is to develop a methodology that is useful for ana...

Cross-Market Product Recommendation

We study the problem of recommending relevant products to users in relat...

Rental Housing Spot Markets: How Online Information Exchanges Can Supplement Transacted-Rents Data

Traditional US rental housing data sources such as the American Communit...

Measuring the Demand Effects of Formal and Informal Communication : Evidence from Online Markets for Illicit Drugs

I present evidence that communication between marketplace participants i...

Learning in Markets: Greed Leads to Chaos but Following the Price is Right

We study learning dynamics in distributed production economies such as b...

1 Introduction

While many different decentralized exchanges (DEXs) have been proposed using different market maker mechanisms, ranging from classic order-book mechanisms [WB17] to other, more complicated approaches with particular bonding curves [HBB17]. On the other hand, a simple but surprisingly effective market maker appears to be the constant product market maker used by Uniswap [ZCP18], likely the first and possibly the most popular implementation.

Additionally, other protocols have used the idea of a constant-product market as a price oracle (e.g., Celo [KOR17]). These protocols use the fact that, if the price indicated by the oracle differs from the true market price of the traded coins, arbitrageurs can always make a profit by trading with this oracle. Due to their simplicity, the behavior of constant product markets can be analyzed theoretically using elementary tools.

In this paper, we present optimal arbitrage actions and bounds under some simple reference market models for the Uniswap contract, showing that Uniswap must closely track the reference market price. We also show that a recent generalization of constant product markets, initially proposed in [MM19], has nearly identical theoretical properties and may be of future interest. Finally, we run a large-scale simulation of agents interacting with the Uniswap contract over a wide range of market parameters, suggesting that the system may be stable under a variety of market conditions.

2 Constant product markets

A constant product market [ZCP18] is a market for trading coins for coins (and vice versa). This market has reserves and , constant product , and percentage fee . A transaction in this market, trading coins for coins , must satisfy


After each transaction, the reserves are updated in the following way: , , and . We will always require that , such that any trade that results in a nonpositive reserve is never fulfilled (i.e., has infinite cost).

In this section, we derive bounds on the marginal price of the market relative to a reference market and show that this market has other desirable properties.

2.1 Optimal arbitrage in Uniswap

In the optimal arbitrage problem, we have two coins, and , which we can trade either with a reference market or a Uniswap contract. In this problem, we seek to maximize the profit made from trading, say, some amount of loaned coin, of coin to some amount of coin via the Uniswap market. We then trade back the received for and pay back the loan to receive profit .

If our profit is positive (that is, if ), then we say that there is an arbitrage opportunity, since we have made money ‘for free’ (i.e., by only trading coins within different markets), without taking on any risk. The optimal arbitrage problem then asks: what is the maximum profit that can be made by this scheme?

In the infinitely liquid market case, i.e., in the case that (where is the reference market price of coin ), we can phrase the optimal arbitrage problem as the following optimization problem.

maximize (2)
subject to

with optimization variables and . Here, is the Uniswap exchange fee.

When written in this form, problem (2) is not obviously convex, though we show in appendix A that it can easily be written in a convex form and then derive an analytical form for the optimal trade amounts and .

No-arbitrage conditions.

Assuming that the market satisfies a no-arbitrage condition (which often approximately holds in practice; see [BL07, §1.2]), we can show that the Uniswap market price deviates from the market price by at most a factor of .

The marginal price of coin in Uniswap is defined as the price of an infinitesimally small trade. This price can be found by differentiating the constant-product market formula:

where we have written for the Uniswap price of coin without the fee. Since the market is infinitely liquid, then we can always make a nonzero profit if the Uniswap marginal price of is larger than the market marginal price. Assuming there is no arbitrage, this means we must have

Similarly, by swapping for and combining the resulting statements we get the following bounds on the Uniswap market price, relative to the true market price, :


assuming no-arbitrage conditions.

This suggests that, in practice, the larger the trade fees are, the larger the gap between the true market price and the Uniswap market price may be. For example, in the case that the trade fee is small, bound (3) is approximately equivalent to

While we derived these conditions using a simple argument, we can also easily derive them by analyzing problem (2) and noting that its optimal value is nonzero if, and only if, there is an arbitrage opportunity. For more details, see appendix A.

2.2 Extensions of the optimal arbitrage problem

There are several natural extensions to the optimal problem (2), which retain most of its useful properties.

Risk models.

There are many factors which could potentially cause an agent to fail to close an arbitrage opportunity, including noisy information, front-running [DGK19], and delay in trades—the latter of which is quite common in distributed platforms. In particular, it may not be desirable for an agent to perform a trade with the exact solution of problem (2).

In this case, we can add an additional term penalizing large trades: in other words, we can assign some ‘cost of risk’ which can be any convex function which is nondecreasing in its second argument. This gives a problem of the form:

subject to

It should be noted that problem (4) is again convex and is the problem we use to simulate arbitrageurs in our agent simulation (see §4.2 for more details).

A risk function could be, for example, used to model the resulting changes in market price due to the arbitrage trade. One simple model for the marginal market price after a trade of size is

with any , . The resulting risk function, , is convex. See appendix A.1 for more details and extensions.

Additionally, in this model, unlike in problem (4), an arbitrageur is not guaranteed to reach the no-arbitrage condition in a single round if the penalty function does not reflect the true underlying market movement.

2.3 Other conditions

In this section, we show other basic and useful properties which Uniswap (and other constant-product markets) satisfy.

Increasing product constant.

For every trade, the product constant is nondecreasing (and strictly increasing if ). Let , , and be the reserve of , , and the constant product at trade . If trade sells coins for coins , we have (by definition, see (1)):

where inequality always holds strictly except when . So, if , we have that , always.

No-depletion property.

It turns out to be impossible to fully deplete Uniswap of all coins only by trading and

, even if the attacker has an unbounded amount of coins. We can easily show that the total reserve is always bounded from below. This follows immediately from applying the arithmetic-geometric mean inequality 

[BV04, §3.1.9]:

Since this is true and is nondecreasing (and usually strictly increasing) after each trade, then the total number of coins in Uniswap can never decrease below the twice the square root of the initial product by only trading between coins and .

Increasing liquidity with increasing reserves.

Intuitively, the larger the amount of reserves, the less any one trade will cost. The marginal cost change of Uniswap (the negative of the infinitesimal price change of the Uniswap market after an infinitesimal trade) can be computed by differentiating (1) twice and is given by


where is the Uniswap price without fees. Note that (5) is strictly decreasing as increases (assuming , the Uniswap price, stays constant).

We can similarly show this property directly by assuming that we have two markets, one with strictly larger reserves , and both with price

In this case, we can show that the markets will have a price gap of


This price gap is always positive in the case that and this construction gives essentially a more precise version of (5). The derivation can be found in appendix B.

2.4 Discussion

In any of the above cases, we analytically observe the effect that the Uniswap market fee has on the price of the market: the bounds guaranteed by the no-arbitrage assumption become looser. In other words, as the fee increases (or, equivalently, decreases), we expect the Uniswap market to deviate further from the price of a given reference market.

On the other hand, the properties shown of the Uniswap market suggest that, while simple, the market itself is likely to be robust in the the practical setting where the number of tokens in reserve is large and the number of trades is also large.

3 Constant mean markets

A constant mean market is a market which generalizes constant product markets. First introduced in [MM19], constant mean markets satisfy the following equation in the absence of fees:


where are the reserves of coin , are the weights associated with each coin, and is the constant product. In this case, the weights all satisfy with . In other words, in the absence of fees, constant product markets ensure that the product of its reserves stays constant, while constant mean markets ensure that the weighted geometric mean of the reserves, for , stays constant.

Similar to constant product markets, trading amount of coin for some amount of a distinct coin should always satisfy the equation,

where is the percentage fee associated with trading coin . The corresponding reserves, and are updated as in §2, as is the mean constant, .

Note that constant product markets are a special case of a constant mean market where and we have and , with the constant product of (1) replaced with its square root.

3.1 Optimal arbitrage problem

We can write the optimal arbitrage problem for constant mean markets in the following way:

maximize (8)
subject to

where we will assume that is constrained to be zero for notational convenience.444If , it is not hard to prove that any locally optimal point will have . The variables in this optimization problem are the amount whose entries state how much of each coin to purchase from the external market, while th entry of states how much of coin to trade for coin .

Since the weighted geometric mean is a concave function that is increasing in all of its arguments [BV04, §3.1.5], it turns out that the equality constraint in problem (8) can be relaxed to an inequality constraint to get an equivalent, but convex, optimal arbitrage problem [BV04, §3.2.4]. See appendix D for more details.

3.2 Extensions and properties

Surprisingly, almost all conditions and properties (except the no-arbitrage condition of (3)) that hold for constant product markets also hold for constant mean markets in a similar form. We describe a few cases below.


All of the same extensions given in section §2.2 hold for problem (8). More specifically, for any convex function , which is increasing in its first arguments and decreasing in the remaining arguments, the following convex relaxation of (8) is an equivalent (but convex) problem with the additional penalty term, :

maximize (9)
subject to

with the same variables, and , as problem (8).


Additionally, all of the same properties given in §2.3, except the asymptotic result (6), hold essentially in their exact form for constant mean markets: all instances will have an nondecreasing product constant and satisfy the corresponding no-depletion property. The notion of increasing liquidity with increasing reserves also holds and can be easily derived from [MM19, Out-Given-In].

No-arbitrage conditions.

It is, in general, not clear that there exists a closed-form solution for the no-arbitrage conditions specified in §2.1. It is possible to give simple necessary (but not sufficient) conditions on each pair of coins found in a given constant-product market via a similar argument to the one in §2.1, but we expect the general conditions are more complicated.

3.3 Discussion

We present these results for constant mean markets as they carry over nearly immediately from those given in §2. Though we suspect that markets which satisfy the constant mean property, such as Balancer [MM19]—where the idea originated—may become more important in the near future, we focus on the specific case of Uniswap (and, more generally, constant product markets) as other protocols such as Celo [KOR17] heavily depend on the robustness of this particular market maker mechanism.

4 Agent-based simulation of Uniswap markets

While the properties presented in §2 lead us to believe that the Uniswap market is likely well-behaved under most scenarios, it is hard to make stronger claims about the robustness of the Uniswap market mechanism without making assumptions that are unlikely to be realistic.

To verify this experimentally, we created an agent-based simulation by using the Gauntlet DSL to specify how several types of agents interact with the current Uniswap contract555As of this time, the tested contract was based on commit c10c08d in the Uniswap Github repository, on a simulated Ethereum blockchain. The simulation environment interacts with the Uniswap contract deployed on a simulated blockchain via Python bindings. The environment allows for configuration of the network’s initial conditions, including distributions of agent behaviors and agent-specific parameters.

The simulation is run for a pre-defined number of time steps. For each simulated time step, environment state variables are updated based on the state of the on-chain contracts. We additionally evaluate policies for adding new agents to the environment. We evaluate the utility of an action for a given agent, and execute agent actions that have positive utility by submitting the corresponding transaction to the blockchain.

4.1 Simulation markets

In the current simulation, we have two possible markets for agents to trade with: one is given by the Uniswap contract and the other is given by a simple market model with random noise.

Uniswap market.

When interacting with the Uniswap contract, an agent has a few possible actions they can perform: the agent can either (a) trade coins for (and vice versa) subject to the constant product market equation (1), or (b) add or remove liquidity.

In the latter case, an agent is able to add, say, amount of coin to reserve and is required to also add of coin to reserve . The agent is then awarded

where is the total amount of outstanding UNI coins given by the contract. The agent can also similarly remove liquidity by burning coins. The contract then gives the agent

and burns the given coins.

This market mechanism allows the agents who purchase these UNI coins, often called liquidity providers, to earn a profit given by the exchange fee, assuming the market price stays constant. Additionally, it provides a mechanism for adding and removing to reserves, thus making the Uniswap market more liquid, as shown in section §2.3.

For the remainder of this section, we will assume the price of a UNI token is exactly given by the market prices of the equivalent amount of coins and that would be received by burning the token. Additionally, the Uniswap contract defines , which is the value we use from here on out.

Reference market.

The reference market follows a simple power law model where the price of some coin , is updated in the following way:

where and are given in the problem data. While it is possible for an arbitrageur to solve the arbitrage problem exactly (as it is a special case of (4)), we choose a simpler risk model for the arbitrageur as the true market price model is not known in practice.

We additionally update the market price every time step (after all agents have completed their actions) in the following way:


is drawn from a normal distribution and

represent the mean returns and volatility of the market when no trades are performed.

4.2 Simulation agents

There are three broad classes of agents used in this simulation: arbitrageurs (who attempt to profit from deviations between Uniswap and the market), liquidity providers (who hold portfolios of UNI coins and currencies and ), and traders (who trade coins with the Uniswap market, subject to simple rules). We describe each type of agent in detail below.


Arbitrageurs seek to maximize their profit by trading between the Uniswap market and a reference market. An arbitrageur agent solves an instance of problem (4) with a simple quadratic cost of risk model:

and performs the necessary trades. Here, are parameters which control the penalty incurred for a trade.

We use this model instead of the riskless case of problem (2), as live systems have noise during trades (e.g., network delays) such that opportunities found by exact minimization of the riskless problem (2) may not be easily executed or may close during the time it takes to perform the trade.

Additionally, we are able to model a wide variety of risk-taking behavior by arbitrageurs by, for example, increasing the parameters and to have an arbitrageur who is less prone to perform risky (large) trades, even with large arbitrage opportunities available.

Liquidity providers.

There are two types of liquidity providers we model in this simulation.

The first are the initial liquidity providers, who begin the simulation by providing some amount of coins , and to the reserve and seek to gain profits by taking fees from Uniswap trades. We assume these liquidity providers will not withdraw their position until the end of the simulation.

The second are rational liquidity providers. These agents perform Markowitz portfolio optimization (see [BV04, §4.4.1]) on the three possible coins in the market: , , and the corresponding UNI coin minted from the Uniswap market. Each agent then solves the (convex) portfolio optimization problem,

subject to

and makes the appropriate trades to rebalance their portfolio. In this problem,

is the vector containing the portfolio positions of

, , and UNI respectively. The problem data is the vector of exponentially-weighted average returns for each of the three coins (with respect to the reference market), is the exponentially-weighted covariance of returns, and is the penalty incurred by the risk. Since (10) is not known to have a closed form solution, we set up and solve problem (10) using the CVXPY [AVDB18] modeling language and the ECOS solver [DCB13] in our simulation.

The rational liquidity providers simulate agents who seek to maximize profits by trading their positions in each coin and holding the respective coins to maximize their expected return on investment, based on observed historical averages.


The final agent we model is a trader. In this case, the trader seeks to trade some amount of coin for some second amount (or vice versa), so long as the price of trading coins on Uniswap differs no more than a constant percentage off from the same trade in the reference market.

In a way, traders embody the ‘demand for liquidity,’ or the fact that trades on Uniswap might happen due to exogenous influences. In our case, a trader will draw (or

) from some probability distribution and check if performing this trade in the Uniswap market is at most some percentage more expensive than performing it in the reference market. If not—

i.e., if the agent is able to trade with Uniswap for a reasonable price—then the agent makes the trade using the Uniswap contract. Otherwise, no trade is performed.

4.3 Results

The results of our simulations suggest that the theoretical results derived above hold in practice under a wide variety of market conditions.

Arbitrage bounds.

Figures 1 and 2 show that, even under the presence of outside noise—such as random noise, or changes in reserves due to rational liquidity providers—the marginal Uniswap price stays within the predicted no-arbitrage bounds. In particular, figure 1 shows when the market has a small amount of noise and little drift, while figure 2 shows this when there is large negative drift with moderate noise. We find that these bounds hold in our simulations, even under large amounts of market noise and large drift rates, so long as the trades performed are not large.

Due to the discrete nature of the simulation, if a trader is the last agent to run at each time step, the no-arbitrage bounds could be broken as an arbitrageur may not have yet been able to perform arbitrage. While this is true (and is due to the nature of the simulation), the final result still clearly tracks the market price, as shown in figure 3.

Initial liquidity provider returns.

In the simulation, we also record the utility of the initial liquidity providers, defined as the difference between the value of the respective UNI coin the agents hold, as defined in §4.1, and a portfolio composed of the coins and traded in for UNI at the start of the simulation.

As shown in figure 4, we find that in almost all of our simulations, initial liquidity providers end up having negative utility (using this definition), over most varying conditions. This is somewhat surprising and counterintuitive, so we explore this idea further in appendix C for a simple market model.

5 Conclusion

Though simple, constant product markets and their generalizations have very nice theoretical properties (such as fairly strict no-arbitrage bounds on the reference price) which appear to hold in practice. Our simulations confirm that this is the case under a wide range of different market parameters and conditions, implying that the use of constant product markets as price oracles is, at least at first glance, sound.

Additionally, we suspect that there is an even larger class of automated market maker mechanisms which satisfy the above properties, and it would be interesting to further explore its mathematical properties. We leave this possible generalization for future work.


The authors would like to thank Tony Salvatore for the initial implementation of the market model used in the simulation and Jonathan Tuck for helpful comments and edits on the paper.

Figure 1: Market price () vs. Uniswap price () in no-drift condition with small noise and no traders. The plotted bounds are .
Figure 2: Market price () vs. Uniswap price () in negative-drift condition with moderate noise and no traders. The plotted bounds are
Figure 3: Market price () vs. Uniswap price () in large negative-drift condition with small noise, in the presence of traders. No bounds are plotted as they are nearly indistinguishable from the market ETH price, at this scale.
Figure 4: Varying utilities for initial liquidity providers over varying market conditions. As before, is the mean market return and is the volatility.

Appendix A The Uniswap arbitrage problem is convex

Since the problem is one-dimensional, the fact that problem (2) is convex is not immediately useful, but it can lead to several simple generalizations. For example, the optimal -stage trading strategy with several interacting constant product markets can be efficiently evaluated in this case.

We can easily show that this problem is convex by using (1) to solve for ,

Note that is then a convex function of as is convex for positive, and a convex function composed with an affine function is convex [BV04, §3.2.2]. The resulting (equivalent) problem,

maximize (11)
subject to

with variable is then convex.

Optimality conditions.

Note that a maximum of a concave function over an interval happens either at (a) the interior of an interval or (b) at its boundary. In the latter case, it is not hard to show that a maximum is attained at the point on the boundary closest to the unconstrained maximum.666The proof follows from the fact that a concave function over R is monotonically nondecreasing (nonincreasing) to the left (right) of its maximum. Because of this, we only have to consider the unconstrained version of problem (11), over the interval .

In this case, the optimality conditions are the point for which the objective of (11) has zero derivative, which happens when

By the statement above, then the optimal solution to (11) is

where for . The optimal can be easily derived using the derived above and the constant product formula (1).

Now, note that is zero if, and only if

where is the marginal Uniswap market price of without fees.

Since the objective of (11) is zero whenever there is no arbitrage opportunity (and the objective is only zero at , by strict convexity), then the above implies there is no arbitrage in the presence of an infinitely liquid market. Swapping for yields the same result derived via no-arbitrage in the general case:

a.1 Extensions to Uniswap arbitrage problem

In a similar vein to (11), we can add any penalty given by a convex function which is nondecreasing in its second argument to the objective. This yields yet another convex optimization problem:

maximize (12)
subject to

with variables and . This problem is equivalent to problem (4) as the objective function is decreasing with respect to , implying that the first inequality constraint is always tight at an optimal point. Additionally, problem (12) is also convex as it is maximizing a concave function, subject to convex constraints [BV04, §4.2.1]

Market models.

One particularly useful example of such a function is for modeling the market response of trading coin for coin . In particular, if the marginal market price is some decreasing function of the total amount of coin traded, satisfying , then the slippage cost of trading coin for is given by,

with convex (as its derivative, , is increasing by definition). While several simple market models exist, the one we use in this paper is a special case of

with and . This results in

Appendix B Derivation of price gap

By definition (1), the price of can be written as

Dividing the numerator and denominator by and using the fact that we get the (nearly final) result:

Subtracting from and using the fact that then yields the statement given in (6).

Appendix C Arbitrage-free portfolio value

We can compute the expected portfolio value for a liquidity provider under some simple market conditions, assuming the no-arbitrage assumption holds.

Define to be the price at time of coin with respect to coin , whose trajectory is a geometric Brownian motion process [Øks13, §5.1]

where is the drift, is the volatility, and is a standard Brownian motion process [Øks13, §3].

As the price changes, the period returns of liquidity providers in this market are the ratio of portfolio values from time to time . Additionally, we can exploit our knowledge of problem (11)’s optimal solutions, and , to put in terms of only the change in price777For , this holds when . An extension over all would exploit the symmetric recurrence when , and zero for .:

The portfolio value at time T is then given by:

Suppose (i.e., there are no fees) and the initial price is . As the final portfolio value depends only on the terminal price (since the reserve values are immediately given by no-arbitrage), the expectation is then:

This shows one could replicate the time payoff of a no-fee liquidity provider with less initial capital than that required in the constant product market itself, which, in turn, implies that, the portfolio value at time must grow at a rate of under the no-arbitrage hypothesis. The choice of that gives this growth rate is the no-arbitrage fee. A simple replication of a volatility harvesting strategy with can be used to show that some such exists under mild conditions on and  [MTZ11, §11].

Appendix D The arbitrage problem in constant mean markets

The problem

maximize (13)
subject to

with variables and and with weights and , is equivalent to problem (8) in that any optimal solution for problem (13) is optimal for problem (8).

Clearly, if any optimal point of (13) has the first inequality constraint holding at equality, then this point is optimal for (8). Because the objective is decreasing in for each and increasing in for each , while the geometric mean function in the inequality constraint is decreasing in and increasing in , then the inequality constraint is always tight at equality at any optimal point.

Since the weighted geometric mean function is concave [BV04, §3.1.5], then problem (13) is a convex problem.

We also note that problem (8) is log-log convex [ADB19] with the obvious change of variables. While we do not explore this connection here, we suspect that this approach might provide a simple way of stating what class of functions can be used as an automated market maker mechanism such that the resulting no-arbitrage bounds are useful.


  • [ADB19] Akshay Agrawal, Steven Diamond, and Stephen Boyd. Disciplined Geometric Programming. arXiv:1812.04074 [cs, math], March 2019.
  • [AVDB18] Akshay Agrawal, Robin Verschueren, Steven Diamond, and Stephen Boyd. A rewriting system for convex optimization problems. Journal of Control and Decision, 5(1):42–60, 2018.
  • [BL07] John R. Birge and Vadim Linetsky. Handbooks in Operations Research and Management Science: Financial Engineering, volume 15. Elsevier, 2007.
  • [BV04] Stephen P. Boyd and Lieven Vandenberghe. Convex Optimization. Cambridge University Press, Cambridge, UK ; New York, 2004.
  • [DCB13] Alexander Domahidi, Eric Chu, and Stephen Boyd. ECOS: An SOCP solver for embedded systems. In 2013 European Control Conference (ECC), pages 3071–3076, Zurich, July 2013. IEEE.
  • [DGK19] Philip Daian, Steven Goldfeder, Tyler Kell, Yunqi Li, Xueyuan Zhao, Iddo Bentov, Lorenz Breidenbach, and Ari Juels. Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges. arXiv:1904.05234 [cs], April 2019.
  • [HBB17] Eyal Hertzog, Guy Benartzi, and Galia Benartzi. Bancor protocol. 2017.
  • [KOR17] Sep Kamvar, Marek Olszewski, and Rene Reinsberg. Celo: A multi-asset cryptographic protocol for decentralized social payments. 2017.
  • [MM19] Fernando Martinelli and Nikolai Mushegian. Balancer: A non-custodial portfolio manager, liquidity provider, and price sensor. 2019.
  • [MTZ11] L. C. MacLean, Edward O. Thorp, and W. T. Ziemba, editors. The Kelly Capital Growth Investment Criterion: Theory and Practice. Number 3 in World Scientific Handbook in Financial Economic Series, 2010-1732. World Scientific, Singapore ; Hackensack, NJ, 2011.
  • [Øks13] Bernt K. Øksendal. Stochastic Differential Equations: An Introduction with Applications. Universitext. Springer, Berlin Heidelberg New York Dordrecht London, sixth edition, sixth corrected printing edition, 2013. OCLC: 935584333.
  • [WB17] Will Warren and Amir Bandeali. 0x: An open protocol for decentralized exchange on the Ethereum blockchain. 2017.
  • [ZCP18] Yi Zhang, Xiaohong Chen, and Daejun Park. Formal specification of constant product (xy=k) market maker model and implementation. 2018.