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
| Parameter | Reserve-only swap behavior |
|---|---|
e_s = 0 | Asset scales stay fixed. Price responds inversely to reserve quantity; scale weights remain constant. |
0 < e_s < 1 | Asset scales change with reserves, producing dynamic scale weights. |
e_s closer to 1 | A 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.