Skip to content
 
 

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CFMMRouter

Dev Build Status codecov

Overview

This package contains a fast solver for the CFMM Routing problem, as defined by Angeris et al. in Optimal Routing for Constant Function Market Makers. We partially decompose the problem to enable fast solutions when the number of CFMMs is large relative to the number of tokens.

For more information, check out the documentation.

Quick Start

First, add the package locally.

using Pkg; Pkg.add(url="https://github.com/bcc-research/CFMMRouter.jl")

Make some swap pools.

using LinearAlgebra
using CFMMRouter

equal_pool = ProductTwoCoin([1e6, 1e6], 1, [1, 2])
unequal_small_pool = ProductTwoCoin([1e3, 2e3], 1, [1, 2])
prices = ones(2)

Build a Router & route.

router = Router(
    LinearNonnegative(prices),
    [equal_pool, unequal_small_pool],
    2,
)
route!(router)

Check out the results.

Ψ = round.(Int, netflows(router))
println("Profit: $(dot(prices, Ψ))")

Performance

This routing algorithm scales approximately linearly in the number of swap pools for the arbitrage problem. These tests were run on a MacBook Pro with a 2.3GHz 8-Core Intel i9 processor. Several performance improvements are possible. alt text

References

G Angeris, T Chitra, A Evans, and S Boyd. Optimal Routing for Constant Function Market Makers

About

Convex optimization for fun and profit. (Now in Julia!)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages