aquarius-sdk
The Python SDK for Aquarius — swaps, liquidity, and rewards on Stellar.
Status: 0.3.x — swaps and the liquidity lifecycle are complete and verified with real testnet transactions. Concentrated liquidity position management is available as a beta surface (the contracts are under an ongoing external audit). The API may still change before 1.0.
Concentrated liquidity positions (beta)
A position is the key (owner, tick_lower, tick_upper) on the pool contract — no
NFTs, merged on re-deposit, at most 20 ranges per account. Quotes come from the
contract's own estimators; execute/withdraw_position derive real slippage
guards from them:
pool = next(p for p in aqua.pools_for_pair(XLM, AQUA) if p.type == "concentrated")
est = pool.estimate_position_deposit(
{XLM: 10_0000000, AQUA: 100_0000000},
price_range=("0.9", "1.1"), # snaps to tick spacing; or tick_range=(lower, upper)
)
opened = est.execute(slippage=0.01) # min-liquidity guard from the estimate
pool.position_ranges() # all of the signer's ranges
pool.position_range_status(est.tick_lower, est.tick_upper) # in_range / below / above
pool.position_value(est.tick_lower, est.tick_upper) # principal / fees / total, split
pool.claim_position_fees(est.tick_lower, est.tick_upper)
pool.withdraw_position(est.tick_lower, est.tick_upper) # full close, auto-claims fees
tick_from_price, price_at_tick, and snap_tick are exported for range math —
integer-exact and identical across both language packages.
pip install aquarius-sdk
from stellar_sdk import Keypair
from aquarius import AquariusClient, Asset, XLM, SlippageError
AQUA = Asset.classic("AQUA", "GBNZ...AQUA")
aqua = AquariusClient(network="mainnet", signer=Keypair.from_secret(secret))
# exact input: quote, inspect, execute
quote = aqua.quote(XLM, AQUA, amount_in=100_0000000, slippage=0.01)
receipt = quote.execute()
# exact output: pass amount_out instead — strict-receive throughout
quote = aqua.quote(XLM, AQUA, amount_out=500_0000000)
Liquidity
pools = aqua.pools_for_pair(XLM, AQUA) # discovered on-chain, sorted by type and fee
pool = pools[0] # Pool(type="volatile", fee_bps=10, ...)
result = pool.deposit({XLM: 50_0000000, AQUA: 2500_0000000}, slippage=0.01)
print(result.shares) # pool share tokens minted
pool.pending_rewards() # accrued AQUA, in stroops
pool.claim_rewards()
pool.withdraw(result.shares, slippage=0.01)
aqua.positions() # every pool where the signer holds shares
Deposit and withdrawal guards come from a simulation of the exact call, reduced by slippage — quoted-versus-executed drift is bounded the same way as for swaps. Reads (reserves(), pending_rewards(), pools_for_pair()) need no signer.
What the SDK handles for you
- Routing — quotes come from the find-path API; the swap chain XDR is passed through untouched.
- Transaction lifecycle — simulation, assembly, submission with congestion retries (same-hash resubmission with backoff), and confirmation polling.
- Archived state — if simulation reports expired ledger entries, the SDK restores them (one extra signed transaction) and retries automatically.
- Typed errors —
SlippageError(withrequote()),PausedError(kill switches — not your bug),NoRouteError,UserRejectedError,TxTimeoutError.
Signers
A stellar-sdk Keypair works as-is. Custom signers provide public_key plus sign(tx_xdr) -> str returning the signed envelope XDR. Reads — quote() — need no signer at all.
Escape hatches
quote.build_transaction() returns the simulated, unsigned envelope XDR for external signing flows. client.contract_call(fn, *scvals) invokes the router raw. client.api is the typed REST client.
Infrastructure
Defaults point at the protocol's own endpoints: the mainnet RPC is
https://soroban-rpc.aqua.network — the same node the Aquarius web app and
backend use. Running your own infrastructure? Every endpoint is overridable:
aqua = AquariusClient(
network="mainnet",
rpc_url="https://your-rpc.example.com",
horizon_url="https://your-horizon.example.com",
)
Amounts
All amounts are integers in token base units (stroops for classic assets: 1 token = 10^7).
Questions and integration help: Discord.
Release files for aquarius-sdk 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aquarius_sdk-0.3.0.tar.gz | 36.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aquarius_sdk-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.9 kB
Release files / aquarius_sdk-0.3.0.tar.gz
| Download URL | aquarius_sdk-0.3.0.tar.gz |
|---|---|
| Size | 36.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6c92bb1890b8159eb1555545b9d62ee18851942f5f72f0dadd5ca41fe6cd078a
|
|
BLAKE2b-256 checksum How to use checksums |
48f71457266eb216e5b73891aa97f1615d3219a5fedcdeefd6adcba05baf052e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.
Transparency logRelease files / aquarius_sdk-0.3.0-py3-none-any.whl
| Download URL | aquarius_sdk-0.3.0-py3-none-any.whl |
|---|---|
| Size | 31.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2329f506a941a89d43a9eeafb14628af99964e4f669a074bdda0093db1f2ef68
|
|
BLAKE2b-256 checksum How to use checksums |
c7ba98f7caa0682c067c89f430c5db241219f36ba81fc858adbebcab142337cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.
Transparency log