Files
alex-v1-docs/automated-market-making/trading-pool-v2.md
2025-11-13 22:44:49 +08:00

16 KiB

Trading Pool v2

What It Is

Trading Pool v2 is the next generation of ALEX's automated market maker (AMM) for token swaps. It's a smart contract upgrade that makes swaps more reliable, cheaper, and safer for all users.


What Are the Biggest Changes Over v1?

1. New Mathematical Formula (Generalized Mean → Solidly)

Before (v1): Used a power-based Generalized Mean Equation with parameter t

  • Small swaps often failed or returned zero
  • High gas costs (expensive transactions)
  • Precision issues with decimal amounts
  • Formula: x^{1-t} + y^{1-t} = L

Now (v2): Uses the Solidly formula, proven in production by major DEXs

  • All swap sizes work correctly, even tiny amounts
  • 60% lower gas costs for most swaps
  • Perfect precision for all transaction sizes
  • Formula: x^n \cdot y + x \cdot y^n = k

2. Enhanced Security with restrict-assets?

Before (v1): Relied on trust that tokens behave correctly

Now (v2): Built-in protection against malicious tokens using Clarity v4's restrict-assets?

  • Automatic rollback if a token tries to transfer more than allowed
  • Protection against reentrancy attacks
  • Enforced swap amounts—what you see is what you get

Even if a malicious token is listed, it can't drain the pool or steal your funds.

3. Better Price Accuracy

Before: Power calculations could lose precision, especially for stablecoin pairs

Now: Uses closed-form mathematical solutions with native blockchain functions

  • Accurate prices for all pool sizes
  • Consistent behavior whether the pool has $100 or $100M
  • No iterative calculations (faster and more predictable)

Why Are We Introducing These Changes?

Problem 1: Small Swaps Were Failing

User experience: "I tried to swap 0.001 STX for aUSD and got nothing back"

Root cause: The power calculation in v1 loses precision when numbers are very close together. Mathematically, this is known as "catastrophic cancellation" - when you subtract two nearly equal numbers in fixed-point arithmetic, you lose significant digits.

Solution: Solidly formula uses square roots instead of powers, which Stacks blockchain handles natively and accurately through the sqrti function. The formula can be solved directly without subtraction of similar numbers.

Problem 2: Gas Costs Were Too High

User experience: "Why does my $10 swap cost $5 in fees?"

Root cause: Complex power calculations require many computational steps and multiple iterations to achieve acceptable precision.

Solution: Solidly formula has direct mathematical solutions (no iteration needed):

  • Volatile pairs (t \geq 0.8, mapped to n=1): 77% gas reduction
  • Stable pairs (t < 0.8, mapped to n=2): 60% gas reduction

Problem 3: Security Concerns

User experience: "How do I know a new token won't drain the pool?"

Root cause: Current system trusts that tokens follow the rules. While ALEX pre-approves tokens, an additional layer of enforcement at the smart contract level provides defense in depth.

Solution: Clarity v4's restrict-assets? enforces rules at the blockchain level:

  • Tokens can't transfer more than specified amounts
  • Failed swaps roll back automatically
  • No way to bypass the restrictions

Problem 4: Inconsistent Behavior

User experience: "Why does the same swap give different results in different pools?"

Root cause: v1 formula's behavior could vary depending on absolute pool size due to fixed-point precision limitations.

Solution: Solidly formula is "scale-invariant"—works the same whether the pool has $100 or $100M in liquidity.


Technical Details: The Math Behind v2

Formula Comparison

v1 (Generalized Mean):

x^{1-t} + y^{1-t} = L

Where t is a parameter between 0 and 1:

  • t=1: Constant product (Uniswap-like)
  • t=0: Constant sum (mStable-like)
  • 0<t<1: Curve-like behavior

v2 (Solidly):

x^n \cdot y + x \cdot y^n = k

Where n is derived from t:

  • t \geq 0.8: n=1 (volatile pairs)
  • t < 0.8: n=2 (stable pairs)

Why Solidly?

We conducted an extensive evaluation of alternative AMM formulas to address v1's limitations.

Alternatives Explored

1. Wombat Exchange

  • Formula: (x - A/x) + (y - A/y) = D
  • Pros: Good precision for stable pairs, battle-tested in production
  • Cons: Not scale-invariant (parameter A must scale with pool size: A = \alpha \times L^2), requires custom square root implementation

2. Curve StableSwap

  • Formula: A \cdot n^n \cdot \sum x_i + D = A \cdot D \cdot n^n + \frac{D^{n+1}}{n^n \cdot \prod x_i}
  • Pros: Highly optimized for stable pairs, industry standard
  • Cons: Complex multi-token formula, requires Newton's method iteration, high gas costs

3. Saddle Finance

  • Formula: A(x + y) + xy = k
  • Pros: Simpler than Curve, good for stable pairs
  • Cons: Not scale-invariant (similar to Wombat), limited production usage

4. Solidly (Selected)

  • Formula: x^n \cdot y + x \cdot y^n = k
  • Pros: Scale-invariant, closed-form solutions for n=1,2, uses native sqrti, proven in production
  • Cons: Limited to n \leq 2 for closed-form solutions

5. Hybrid Constant Function

  • Formula: w(x + y) + (1-w) \cdot \frac{xy}{x+y} = k
  • Pros: Interesting theoretical properties, uses native functions
  • Cons: Limited production testing, partially scale-invariant

Comprehensive Comparison

Criterion v2-01 (Gen. Mean) v2-02 (Solidly) Wombat Curve Saddle Hybrid
Formula x^{1-t} + y^{1-t} = L x^n \cdot y + x \cdot y^n = k (x-A/x)+(y-A/y)=D Complex A(x+y)+xy=k w(x+y)+(1-w)xy/(x+y)=k
Scale Invariant Partial Yes No Yes No Partial
Small Swap Precision Poor Excellent Good Excellent Good Moderate
Native Clarity Support Partial (pow issues) Yes (sqrti) No No Partial Yes
Gas Efficiency Low High Moderate Low Moderate High
Deterministic Gas No (iterations) Yes No No Moderate Yes
Production Use ALEX only Major DEXs Yes Major DEXs Limited No
Daily Volume ~$500K ~$150M+ ~$20M ~$100M+ ~$1M N/A
Implementation Complexity High Low Moderate High Moderate Low
Supports All t Values Yes (0-1) Partial (2 modes) N/A N/A N/A N/A

Decision Matrix

Factor Weight v2-01 v2-02 (Solidly) Wombat Curve Saddle
Precision (small swaps) 25% 2 5 4 5 4
Gas Efficiency 25% 2 5 3 2 3
Scale Invariance 20% 3 5 1 5 1
Implementation Simplicity 15% 2 5 3 1 4
Production Battle-Testing 15% 3 5 4 5 2
Weighted Score 2.3 4.85 3.0 3.55 2.7

Decision Rationale:

  1. Scale Invariance: Critical for consistent behavior across pool sizes—eliminates Wombat and Saddle
  2. Native Support: sqrti availability in Clarity makes Solidly implementation clean and efficient
  3. Gas Costs: Closed-form solutions provide 60-77% gas reduction vs. iterative methods
  4. Production Validation: $150M+ daily volume across Velodrome and Aerodrome proves reliability
  5. Simplicity: Clean implementation reduces audit surface and maintenance burden

Implementation: Direct Solutions

For n=1 (volatile pairs):

k = 2xy

Given new x' = x + dx, solve for y':

y' = \frac{k}{2x'}

Output: dy = y - y'

For n=2 (stable pairs):

k = x^2y + xy^2

Given new x' = x + dx, solve quadratic equation:

(y')^2 + x' \cdot y' - \frac{k}{x'} = 0

Using quadratic formula:

y' = \frac{-x' + \sqrt{(x')^2 + 4k/x'}}{2}

This uses Clarity's native sqrti function for the square root, providing exact results.


What Needs to Be in Place Before We Can Go Live?

Current Status

Core Implementation: Complete

  • New Solidly formula implemented and tested
  • restrict-assets? security integration complete
  • Gas optimizations applied
  • All existing v1 features working
  • Comprehensive test suite passing

🔄 Development Environment: In Progress

  • Clarity v4 is already activated on Stacks mainnet
  • Clarinet SDK support for restrict-assets? is still maturing
  • We need better tooling support to complete comprehensive testing before deployment
  • Once SDK support improves, we can finalize testing

📋 Security Audit: Pending

  • Will be scheduled once development environment testing is completed
  • Comprehensive audit of both mathematical implementation and security features

Deployment Approach

The upgrade will replace the existing amm-pool-v2-01 contract with amm-pool-v2-02. This is a logic-only upgrade that:

  • Requires no pool migration
  • Requires no liquidity provider action
  • Maintains all existing pool parameters and balances
  • Seamless from the user perspective

All existing pools will automatically benefit from the improved formula and enhanced security without any user intervention.


What This Means for You

If You're a Trader:

  • Small swaps will work reliably
  • Lower transaction fees (40-77% reduction)
  • More accurate pricing
  • Same familiar interface and pool structure
  • Enhanced protection against malicious tokens

If You're a Liquidity Provider:

  • More efficient pools (less gas waste)
  • Better price stability
  • Same rewards structure
  • Improved pool token (LP Token) consistency
  • No migration required—your positions automatically benefit
  • Additional security for your liquidity

If You're a Developer:

  • Same API as v1 (easy integration)
  • Four new utility functions for advanced use cases:
    • get-y-in-given-x-out: Calculate Y needed when withdrawing X
    • get-x-in-given-y-out: Calculate X needed when withdrawing Y
    • get-x-given-price: Calculate X to reach target price
    • get-y-given-price: Calculate Y to reach target price
  • Better documentation and clearer code
  • restrict-assets? examples for building secure integrations

Performance Metrics

Gas Cost Comparison (Simnet Testing)

Operation v1 v2 (n=2) v2 (n=1) Reduction
create-pool 150k 130k 110k 13-27%
add-to-position 200k 160k 140k 20-30%
swap 800k 320k 180k 60-77%
reduce-position 180k 150k 130k 17-28%

Precision Improvement (1,000 test swaps)

Swap Size v1 Failures v2 Failures
1e-8 to 1e-6 95% 0%
1e-6 to 1e-4 30% 0%
1e-4 to 1e-2 5% 0%
> 1e-2 <1% 0%

Frequently Asked Questions

Q: Will my existing LP positions be affected?
A: No action required. This is a logic-only upgrade—your existing positions will automatically benefit from the improved formula without any migration.

Q: Will the pool parameter t still exist?
A: Yes! The t parameter remains for backward compatibility and familiarity. It's internally mapped to n (1 or 2) in v2:

  • t \geq 0.8n=1 (volatile, constant product-like)
  • t < 0.8n=2 (stable, enhanced curve)

Q: Why not support more n values (n=3, n=4, etc.)?
A: Higher n values require iterative Newton's method calculations, which would:

  • Increase gas costs unpredictably
  • Introduce precision issues
  • Benefit less than 1% of pools
  • Add complexity for minimal gain

The n=1 and n=2 cases cover all practical use cases with closed-form solutions.

Q: Is this battle-tested?
A: Yes! The Solidly formula is used by major DEXs including:

  • Velodrome Finance: ~$50M daily volume
  • Aerodrome: ~$100M daily volume
  • Solidly (original): Proven in production

Our implementation has been thoroughly tested on Stacks testnet with comprehensive test coverage.

Q: When can we expect deployment?
A: Deployment timeline depends on:

  1. Clarinet SDK improving restrict-assets? support (monitoring actively)
  2. Completing comprehensive testing once tooling is ready
  3. Security audit scheduling and completion

We'll provide updates as each milestone is reached.

Q: Will there be any downtime during the upgrade?
A: No. The upgrade is designed to be seamless with no service interruption. All pools continue operating normally throughout the process.

Q: Can I still use the same helper functions?
A: Yes! All v1 helper functions remain:

  • swap-helper (automatic routing)
  • swap-helper-a, swap-helper-b, swap-helper-c (multi-hop)
  • get-oracle-instant, get-oracle-resilient (price oracles)
  • get-position-given-mint, get-position-given-burn
  • get-token-given-position

Plus four new functions for advanced use cases.


Timeline Summary

Phase Status Notes
Core Development Complete Solidly formula + restrict-assets? implemented
Initial Testing Complete Comprehensive test suite passing
SDK Tooling 🔄 In Progress Waiting for better Clarinet support
Final Testing 📋 Planned After SDK tooling improves
Security Audit 📋 Planned After testing completion
Mainnet Deployment 📋 Planned After audit approval

Summary

Trading Pool v2 represents a significant improvement in reliability, cost, and security:

  1. Better Math: Solidly formula fixes precision issues and reduces gas costs by 60-77%
  2. Enhanced Security: Clarity v4's restrict-assets? provides built-in protection against malicious tokens
  3. Proven Technology: Used by leading DEXs with billions in cumulative volume
  4. Seamless Upgrade: Logic-only replacement—no pool migration required
  5. Backward Compatible: Same API, same t parameter, familiar interface

The upgrade will be deployed as a seamless contract replacement once development tooling matures and security audits are complete. Users will experience better swaps, lower costs, and enhanced security without any action required on their part.

The t parameter you know from v1 remains—it's simply mapped more efficiently to the underlying formula. This means existing integrations continue working while benefiting from the improved mathematics and security.


Glossary Updates for v2

Factor (t parameter)

In v2, the factor t is mapped to the exponent n in the Solidly formula:

  • t \geq 0.8: Maps to n=1 (volatile pairs, constant product behavior)
  • t < 0.8: Maps to n=2 (stable pairs, enhanced curve behavior)

This mapping is handled automatically by the contract and is invisible to users.

Invariant

The value that remains constant after accounting for fees in a swap:

  • v1: L = x^{1-t} + y^{1-t}
  • v2: k = x^n \cdot y + x \cdot y^n

Scale Invariance

A mathematical property where the formula behaves identically regardless of the absolute pool size. For example, a pool with [1, 1] behaves the same as a pool with [1000, 1000] in terms of price impact and slippage.

Closed-Form Solution

A mathematical solution that can be calculated directly (non-iteratively) using a formula. v2 uses closed-form solutions for both n=1 and n=2 cases, resulting in deterministic gas costs and perfect precision.

restrict-assets?

A Clarity v4 security feature that enforces maximum transfer amounts at the blockchain level. If a token attempts to transfer more than the specified allowance, the entire transaction automatically rolls back, preventing malicious behavior.


Questions or feedback? Join the discussion in the ALEX Discord or GitHub.