Implement Balancer math on Uv3
This commit is contained in:
parent
6ac29106f2
commit
989fa1306b
|
@ -162,7 +162,7 @@ export function addPosition(
|
||||||
maxTick,
|
maxTick,
|
||||||
deltaL
|
deltaL
|
||||||
)
|
)
|
||||||
console.log(`Deducting required N: ${requiredN} and required Y: ${requiredY}`)
|
// console.log(`Deducting required N: ${requiredN} and required Y: ${requiredY}`)
|
||||||
|
|
||||||
// Add liquidity as we pass through the smaller tick
|
// Add liquidity as we pass through the smaller tick
|
||||||
const minTickState = pool.tickStates[minTick] || {
|
const minTickState = pool.tickStates[minTick] || {
|
||||||
|
@ -187,6 +187,41 @@ export function addPosition(
|
||||||
return pool
|
return pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function addBalancer(pool: Swap3Pool, p: number, deltaL: number) {
|
||||||
|
// TODO: math is borked, shouldn't be returning infinity
|
||||||
|
function tickL(tick: number) {
|
||||||
|
const q = 1 - p
|
||||||
|
return deltaL * 2 * p ** q * q ** p * 1.0001 ** ((p - 0.5) * tick)
|
||||||
|
}
|
||||||
|
|
||||||
|
// See how much liquidity is provided at +/- 5pp around p
|
||||||
|
// const minTick = fromProb(p - 0.1)
|
||||||
|
// const maxTick = fromProb(p + 0.05)
|
||||||
|
const minTick = fromProb(0.000001)
|
||||||
|
const maxTick = fromProb(0.999999)
|
||||||
|
let totalN = 0
|
||||||
|
let totalY = 0
|
||||||
|
const stride = 300
|
||||||
|
for (let t = minTick; t <= maxTick; t += stride) {
|
||||||
|
// console.log('liquidity at tick ', t, toProb(t), tickL(t))
|
||||||
|
const { requiredN, requiredY } = calculateLPCost(
|
||||||
|
fromProb(p),
|
||||||
|
t,
|
||||||
|
t + stride,
|
||||||
|
tickL(t)
|
||||||
|
)
|
||||||
|
totalN += requiredN
|
||||||
|
totalY += requiredY
|
||||||
|
// Add liquidity
|
||||||
|
addPosition(pool, t, t + stride, tickL(t))
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('rough number of ticks', (maxTick - minTick) / stride)
|
||||||
|
console.log(`Total N: ${totalN} and total Y: ${totalY}`)
|
||||||
|
grossLiquidity(pool)
|
||||||
|
return pool
|
||||||
|
}
|
||||||
|
|
||||||
// This also mutates the pool directly
|
// This also mutates the pool directly
|
||||||
export function grossLiquidity(pool: Swap3Pool) {
|
export function grossLiquidity(pool: Swap3Pool) {
|
||||||
let liquidityGross = 0
|
let liquidityGross = 0
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import {
|
import {
|
||||||
|
addBalancer,
|
||||||
addPosition,
|
addPosition,
|
||||||
buyYes,
|
buyYes,
|
||||||
calculateLPCost,
|
calculateLPCost,
|
||||||
|
@ -203,8 +204,9 @@ export default function Swap() {
|
||||||
tick: fromProb(0.3),
|
tick: fromProb(0.3),
|
||||||
tickStates: [],
|
tickStates: [],
|
||||||
}
|
}
|
||||||
INIT_POOL = addPosition(INIT_POOL, -(2 ** 23), 2 ** 20, 100)
|
INIT_POOL = addPosition(INIT_POOL, -(2 ** 23), 2 ** 20, 1)
|
||||||
INIT_POOL = addPosition(INIT_POOL, fromProb(0.32), fromProb(0.35), 100)
|
// INIT_POOL = addPosition(INIT_POOL, fromProb(0.32), fromProb(0.35), 100)
|
||||||
|
INIT_POOL = addBalancer(INIT_POOL, 0.3, 100)
|
||||||
INIT_POOL = grossLiquidity(INIT_POOL)
|
INIT_POOL = grossLiquidity(INIT_POOL)
|
||||||
|
|
||||||
const [pool, setPool] = useState(INIT_POOL)
|
const [pool, setPool] = useState(INIT_POOL)
|
||||||
|
@ -215,7 +217,7 @@ export default function Swap() {
|
||||||
return (
|
return (
|
||||||
<Col className="mx-auto max-w-2xl gap-10 p-4">
|
<Col className="mx-auto max-w-2xl gap-10 p-4">
|
||||||
{/* <BalanceTable /> */}
|
{/* <BalanceTable /> */}
|
||||||
<PoolTable pool={pool} />
|
{/* <PoolTable pool={pool} /> */}
|
||||||
<Graph
|
<Graph
|
||||||
pool={pool}
|
pool={pool}
|
||||||
previewMarker={
|
previewMarker={
|
||||||
|
|
Loading…
Reference in New Issue
Block a user