# ~~Smart~~ Order Routing **Definition.** (Fill function) A *fill function* $f$ specifies how much of a desired asset we can maximally get for a given amount of the provided asset. **Lemma.** (Monotonicity) *Fill functions are monotonic*. If a fill function provided more of the desired asset for fewer of the provided, we can simply provide it fewer. **Problem.** Given a maker asset amount $x$ and a set of fill functions $f_i$, we want to partition $x$ into $x_i$ to maximize. $$ g(x) = \max_{\vec x} \, \sum_i f_i(x_i) \text{ subject to } \sum_i x_i \le x \text{ and } x_i \ge 0 $$ Dynamic programming: The resulting function $g$ is also a fill function. Given two fill functions, we can compute their combined function. So we only need to solve the case for two functions, and can then use this recursively. ### Solving If the fillable function is concave, the optimization problem is a [Convex Programming](https://en.wikipedia.org/wiki/Convex_optimization) problem. In particular this means any local minimum is a global minimum and we can use any way to minimize (for example grandient descent). Usually fillable functions are concave, with the notable exception of Kyber. **Question.** If two fillable functions are concave, is their combination also concave? If the fillable functions are note concave, the problem is ## 1-hop routing Now we have more than two assets and multiple fill functions between two assets. First, for each pair of tokens $(i,j)$ we compute the optimal fill function $f_{ij}$ using the above two-asset solution. Define $f_{ii}$ to be the identity function. Now the optimal $\{0,1\}$-hop routes are $$ f'_{ij}(x) = \max_{\vec x} \, \sum_k f_{kj}(f_{ik}(x_k)) \,\,\text{ subject to }\,\, \sum_k x_k \le x $$ Similarly, we can define 3-hop routes $f''_{ij}$ by itterating this procedure on $f'$, and 7-hop, 15-hop and so on, doubling the number of hops each time. ## ∞-hop routing The optimal unlimited hop solutions $f^∞_{ij}$ should be invariant under adding one more hop, so it should satisfy $$ f^∞_{ij}(x) = \max_{\vec x} \, \sum_k f^∞_{ik}(f^∞_{kj}(x_k)) \,\,\text{ subject to }\,\, \sum_k x_k \le x $$