
Security News
AGENTS.md Gains Traction as an Open Format for AI Coding Agents
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
Ape-based SDK for working with deployments of Uniswap protocol
pip
You can install the latest release via pip
:
pip install uniswap_sdk
setuptools
You can clone the repository and use setuptools
for the most up-to-date version:
git clone https://github.com/SilverBackLtd/uniswap-sdk.git
cd uniswap-sdk
python3 setup.py install
The SDK can be used for any scripting task very easily:
>>> from ape_tokens import tokens
>>> from uniswap_sdk import Uniswap
>>> uni = Uniswap(use_v3=False) # Can skip versions and only index certain tokens
>>> list(uni.index(tokens=tokens)) # Takes time, but makes planning faster (recommended for scripting)
>>> uni.price("UNI", "USDC") # Get liquidity-weighted prices of entire index in real-time
Decimal("4.75")
>>> usdc = tokens["USDC"]
>>> tx = uni.swap(
... "UNI",
... usdc, # Can use any ContractInstance type
... amount_in="12 UNI", # Uses Ape's conversion system
... slippage=0.3,
... deadline=timedelta(minutes=2),
... sender=trader,
... )
To swap directly with Ether (native token, NOT ERC20):
>>> uni.swap(want="UNI", sender=trader, value="1 ether")
# OR
>>> uni.swap(want="UNI", amount_out="10 UNI", sender=trader, value="1 ether")
# OR
>>> uni.swap(have="UNI", amount_in="10 UNI", native_out=True, ...)
If have=
is not present but value=
is, then have=
will be set to WETH (if available on your network) for solving.
If amount_in=
, max_amount_in=
, and amount_out=
are not present (1st example), then value=
will work like amount_in=
.
If amount_out
is present (2nd example), then value=
will act like setting max_amount_in=
.
If native_out=True
is present (3rd example), then the amount received will be native ether and not an ERC20.
This SDK installs a special CLI command uni
.
You can use this command to do common tasks with the SDK such as finding prices or performing swaps.
Try uni --help
after installing the SDK to learn more about what the CLI can do.
The SDK has special support for use within Silverback bots, which takes advantage of real-time processing to drastically reduce the overhead of certain search and solver functions of the SDK:
from ape_tokens import tokens
from silverback import SilverbackBot
from uniswap_sdk import Uniswap
bot = SilverbackBot()
uni = Uniswap()
uni.install(bot) # This replaces having to do `uni.index()`
# NOTE: The bot will now process all swaps in the background to keep it's indexes up-to-date!
@bot.cron("* * * * *")
async def weth_price(t):
# So now when you use top-level functions, it takes advantage of cached data in the index
return uni.price("WETH", "USDC") # This executes faster w/ Silverback!
The SDK comes with a default Solver that should be performant enough for most situations.
However, it is likely that you will want to design a custom solver function or class in order
to obtain better results when performing actions like uni.swap
which leverage the solver.
You can override the default solver by providing a function or object which matches the following interface:
from uniswap_sdk import Order
Route = tuple[PairType, ...] # 1 (or more) `PairType`s (e.g. `UniswapV2Pair`, etc.)
Solution = dict[Route, Decimal] # mapping of Route -> amount to swap via Route
SolverType = Callable[[Order, Iterable[Route]], Solution]
# Given `amount` of `token` and `*routes`, find `solution`
This can be a class, allowing more flexibility in how you design your solver:
class Solver:
def __call__(self, order: Order, routes: Iterable[Route]) -> Solution:
# This function must match `SolverType` to work
my_solver = Solver(...)
uni = Uniswap(use_solver=my_solver)
uni.solve(...) # Will now use `my_solver` to find solutions (also `uni.swap`)
This project is in development and should be considered a beta. Things might not be in their final state and breaking changes may occur. Comments, questions, criticisms and pull requests are welcomed.
Support for various Uniswap-related protocols:
This project is licensed under the Apache 2.0.
FAQs
uniswap-sdk: SDK for Uniswap smart contracts
We found that uniswap-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.