Skip to main content

LangChain tools for querying Uniswap V2 pools: swap quotes, liquidity previews, and LP balances across any EVM chain.

Project description

langchain-uniswap-v2

CI

Read-only LangChain tools for querying Uniswap V2 (and Uniswap-V2-shaped fork, e.g. PancakeSwap) pools: swap quotes, liquidity previews, and LP token balances — for any EVM chain, given just an RPC URL and contract addresses.

LangChain ships no blockchain-specific tools out of the box. This package fills that gap for the Uniswap V2 AMM shape specifically.

Scope

This package is read-only. It answers questions like "how much will I get" and "how much do I need" — it does not execute swaps or add/remove liquidity. Wiring up transaction signing/submission is left to the caller.

Install

pip install langchain-uniswap-v2

For local development (editable install + test dependencies):

pip install -e ".[dev]"

Quick start

from langchain_uniswap_v2 import UniswapV2Toolkit

# Any Uniswap-V2-shaped DEX, on any chain, via explicit addresses:
toolkit = UniswapV2Toolkit(
    rpc_url="https://eth.llamarpc.com",
    router_address="0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
    native_wrapped_address="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",  # WETH
)

# Or, for a chain already in the built-in registry, just pass a chain_id:
toolkit = UniswapV2Toolkit.for_chain(chain_id=1)  # mainnet
# toolkit = UniswapV2Toolkit.for_chain(chain_id=56)  # bsc (PancakeSwap)

tools = toolkit.get_tools()
# -> [get_quote_in, get_quote_out, get_pool_quote,
#     get_lp_amounts, get_liquidity_token_balance]

# Pass tools directly into an agent:
#   agent = create_agent(model, tools=tools)

# Or call a tool directly:
result = tools[1].invoke({  # get_quote_out
    "token_in": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",   # WETH
    "token_out": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",  # USDC
    "amount_in": 1,
})
# -> {"amount_in": 1.0, "amount_out": <live price>, "path": [...]}

UniswapV2Toolkit.for_chain(...) accepts an optional rpc_url= override — the registry's default is a free public endpoint, fine for prototyping but rate-limited. Pass your own (Alchemy, Infura, etc.) for production use.

Tools

All tools take plain contract addresses as arguments — no ticker→address registry is assumed.

Tool Purpose
get_quote_in(token_in, token_out, amount_out) How much token_in is needed to receive an exact amount_out of token_out.
get_quote_out(token_in, token_out, amount_in) How much token_out will be received for an exact amount_in of token_in.
get_pool_quote(token_a, token_b, amount_a) Proportional token_b deposit required to match a given token_a deposit, before adding liquidity.
get_lp_amounts(token_a, token_b, lp_amount) Expected token amounts redeemable for a given amount of LP tokens, before removing liquidity.
get_liquidity_token_balance(owner_address, token_a, token_b) An address's LP token balance for a given pair.

If native_wrapped_address is configured, quotes between two non-native tokens are routed through it (2-hop → 3-hop path), matching how Uniswap V2 pools are typically seeded. Without it, quotes always use a direct path.

Supported chains (built-in registry)

All addresses are Uniswap Labs' own official V2 redeployments, except BSC, which deliberately uses PancakeSwap — see the note below.

chain_id name native_token
1 mainnet ETH
11155111 sepolia ETH
130 unichain ETH
42161 arbitrum ETH
43114 avalanche AVAX
56 bsc (PancakeSwap V2) BNB
8453 base ETH
10 optimism ETH
137 polygon POL
7777777 zora ETH
480 worldchain ETH
143 monad MON
196 x-layer OKB

Why BSC uses PancakeSwap, not Uniswap Labs' own BSC redeployment: the official Uniswap Labs BSC contracts exist and respond to calls, but were live-tested and found to have near-zero liquidity (returning wildly incorrect quotes). PancakeSwap has the actual liquidity on BSC, so the registry points there instead.

For any chain not listed here, instantiate UniswapV2Toolkit(...) directly with explicit router_address / factory_address / native_wrapped_address.

Development

pip install -e ".[dev]"
pytest
ruff check .
ruff format --check .

The test suite mocks all contract calls (see tests/web3_mocks.py) — it makes no live network calls, so it runs fast and doesn't depend on any RPC endpoint being up.

langchain_uniswap_v2/abis.py is machine-generated from the original ABI JSON and verified byte-for-byte against it — it's excluded from Ruff so lint/format never churns it.

CI (.github/workflows/ci.yml) runs ruff check/ruff format --check and the test suite (Python 3.10–3.12) on every push and pull request.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_uniswap_v2-0.1.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langchain_uniswap_v2-0.1.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file langchain_uniswap_v2-0.1.0.tar.gz.

File metadata

  • Download URL: langchain_uniswap_v2-0.1.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for langchain_uniswap_v2-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1e01bd7e95486d95ddb0ca06cc57b724c7a3fe932252aad31312c9428cade53c
MD5 63083b698204fde753097fefcb6e2a99
BLAKE2b-256 12fc96f40c1b9687a6bca2491ccc124cea5d02ff285ee7b49222ffec03a9f60c

See more details on using hashes here.

File details

Details for the file langchain_uniswap_v2-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for langchain_uniswap_v2-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5e895d58a7212a20678f8bf6bbfbd60541a1da92088539eab7650b9b1e280cc
MD5 02e5f6861ca86353dfbe73abbf08b434
BLAKE2b-256 6677431c753ed51f483cc335bbf5838cf439052e3db83c62ee7c7f74b5f93617

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page