Skip to content

Releases: Badger-Finance/on-chain-pricer

V0.4 Release Candidate 2 - With SwapExecutor

20 Oct 22:34
Compare
Choose a tag to compare

Adds SwapExecutor

SwapExecutor

Executes Quotes based on the PricerV4, leveraging all possible pools (and more technically)

SwapExecutor enables projects to deploy one contract, which is robust enough to offer most features for most mainnet AMMs (over 80% of TVL is in top 5 AMMs on ETH).

At the same time it's flexibile enough to enable handling pools currently not covered by the pricer.

This is the first step towards maintainable swaps, that don't require upgrades.

Supports all protocols and pools from PricerV4

It's meant to be used as a router contract, it will use the tokens you sent and send the tokens back to the caller

doOptimalSwap

    function doOptimalSwap(address tokenIn, address tokenOut, uint256 amountIn) external returns(uint256){

Retrieves a Chainlink Price Feed Protected Quote from PricerV4 and executes it

doOptimalSwapWithQuote

    function doOptimalSwapWithQuote(address tokenIn, address tokenOut, uint256 amountIn, Quote memory optimalQuote) public returns(uint256){		

Uses any Quote (even unprotected ones) and executes it

V0.4 Release Candidate

14 Sep 22:34
b280f3e
Compare
Choose a tag to compare

Release Candidate for V4

Adds Price Feeds, see Readme

OnChainPricingMainnet

Given a tokenIn, tokenOut and AmountIn, returns a Quote from the most popular dexes

  • OnChainPricingMainnet -> Fully onChain math to find best, single source swap (no fragmented swaps yet)
  • OnChainPricingMainnetLenient -> Slippage tollerant version of the Pricer

Dexes Support

  • Curve
  • UniV2
  • UniV3
  • Balancer
  • Sushi

Covering >80% TVL on Mainnet. (Prob even more)

New with V4

V4 adds support for Chainlink Price Feeds, all feeds are supported via the Feeds Registry

Because V4 marks the separation between "executable prices" and "ideal prices" we added new functions.

Read below for full details

Example Usage

V4 functions are view

!!! V4 functions do not revert on error, they return 0 !!!

isPairSupported

Returns true if the pricer will return a non-zero quote
NOTE: This is not proof of optimality

    /// @dev Given tokenIn, out and amountIn, returns true if a quote will be non-zero
    /// @notice Doesn't guarantee optimality, just non-zero
    function isPairSupported(address tokenIn, address tokenOut, uint256 amountIn) external returns (bool)

In Brownie

quote = pricer.isPairSupported(t_in, t_out, amt_in)

findOptimalSwap

Finds the best quote available between the sources
Prioritizes price feeds

    function findOptimalSwap(address tokenIn, address tokenOut, uint256 amountIn) external virtual returns (Quote memory)

In Brownie

quote = pricer.findOptimalSwap(t_in, t_out, amt_in)

findExecutableSwap

Finds the best executable quote
Uses PriceFeeds (if available) to verify the quote is better than the feed

    function findExecutableSwap(address tokenIn, address tokenOut, uint256 amountIn) external virtual returns (Quote memory)

In Brownie

quote = pricer.findExecutableSwap(t_in, t_out, amt_in)

unsafeFindExecutableSwap

Finds the best executable quote
Doesn't check price feeds, use at your own risk

    function unsafeFindExecutableSwap(address tokenIn, address tokenOut, uint256 amountIn) external virtual returns (Quote memory)

In Brownie

quote = pricer.unsafeFindExecutableSwap(t_in, t_out, amt_in)