Skip to main content

Elasticity and Dynamic Weights

Every pool has one scale elasticity, e_s, with 0 <= e_s < 1. It determines how a Reserve Asset’s scale responds to a reserve change during an elastic swap.

For asset i, let a_i and s_i be its opening reserve and effective scale. Let da_i be the signed reserve change and define r_i = da_i / a_i. Positive changes pay the pool; negative changes withdraw from it. The reserve must stay positive, so r_i > -1.

a'_i = a_i * (1 + r_i)
s'_i = s_i * (1 + r_i)^e_s
P'_i / P_i = (1 + r_i)^(e_s - 1)

A prime denotes the ending state. P_i = s_i / a_i is the opening local price.

Read the response

ParameterReserve-only swap behavior
e_s = 0Asset scales stay fixed. Price responds inversely to reserve quantity; scale weights remain constant.
0 < e_s < 1Asset scales change with reserves, producing dynamic scale weights.
e_s closer to 1A given reserve-relative move has a smaller local price response. The endpoint 1 is unsupported.

Execution quality depends on the combined effect of price response, inventory, fees, and trade size.

Example at half elasticity

If an asset’s reserve grows by a factor of 1.21 and e_s = 1/2, its scale grows by 1.1 and its local price changes by 1.1 / 1.21. The new scale determines its weight relative to all other reserve scales.

Coefficients

The reserve-curve coefficient is derived as c_i = s_i / a_i^e_s. A reserve-only swap keeps it fixed. The coefficient is computed from reserve, scale, and elasticity. Liquidity actions and oracle-valued capitalization have their own scale-update rules.

These equations use reserve state and pool elasticity. Stake targets record staking allocations. See Post-Trade Execution for how the reserve changes are chosen.