No project description provided
Project description
Charli3 Dendrite
Python SDK for interacting with Cardano DEXs
Overview
Charli3 Dendrite is a powerful Python SDK designed for seamless interaction with multiple Decentralized Exchanges (DEXs) on the Cardano blockchain. It provides a unified interface for developers to access various DEX functionalities, simplifying the process of building applications in the Cardano ecosystem.
Key Features
- 🔄 Multi-DEX Support: Integrate with CSwap, Minswap, MuesliSwap, Spectrum, SundaeSwap, VyFi, GeniusYield, Splash, and WingRiders
- 💧 Liquidity Pool Data: Fetch and analyze pool information across different DEXs
- 💱 Swap Operations: Execute token swaps with ease
- 🧩 Flexible Asset Handling: Manage various asset types and pool states efficiently
- 🔗 On-chain Data Integration: Connect with DB-sync, BlockFrost, and Ogmios/Kupo
- 🛠 Extensible Architecture: Easily add support for new DEXs and features
Installation
# Using pip
pip install charli3_dendrite
# Using Poetry
poetry add charli3_dendrite
Supported DEXs
Charli3 Dendrite currently supports the following Cardano DEXs:
- Minswap
- MuesliSwap
- Spectrum
- SundaeSwap
- VyFi
- WingRiders
- GeniusYield
- Splash
- CSwap
Deprecated DEXs
- Axo ⚠️ - Left Cardano ecosystem. Implementation maintained for reference only and will be removed in future version.
Not Yet Implemented
- CardanoSwaps
- Cerra
- SaturnSwap
Each DEX is implemented as a separate module within the charli3_dendrite.dexs.amm package.
Configuration
Charli3 Dendrite can be configured using environment variables or a .env file. See sample.env for an example of the configuration options.
Backend Configuration
Charli3 Dendrite supports multiple backend options for interacting with the Cardano blockchain:
DBSync Configuration
To use a DBSync instance as the blockchain connection, set the following environment variables:
DBSYNC_HOST="your-dbsync-host"
DBSYNC_PORT="your-dbsync-port"
DBSYNC_DB_NAME="your-dbsync-database-name"
DBSYNC_USER="your-dbsync-username"
DBSYNC_PASS="your-dbsync-password"
BlockFrost Configuration
To use BlockFrost as the backend, set the following environment variables:
BLOCKFROST_PROJECT_ID="your-blockfrost-project-id"
CARDANO_NETWORK="mainnet" # or "testnet" for the Cardano testnet
Ogmios/Kupo Configuration
To use Ogmios and Kupo as the backend, set the following environment variables:
OGMIOS_URL="ws://your-ogmios-url:port"
KUPO_URL="http://your-kupo-url:port"
CARDANO_NETWORK="mainnet" # or "testnet" for the Cardano testnet
The backend will be automatically selected based on the available environment variables. If multiple backend configurations are present, the priority order is: DBSync, BlockFrost, Ogmios/Kupo.
Backend Limitations
While Charli3 Dendrite supports multiple backends, it's important to note that the BlockFrost and Ogmios/Kupo backends have some limitations compared to the DBSync backend:
-
BlockFrost Backend: Due to limitations in the BlockFrost API, the following methods are not implemented:
get_historical_order_utxosget_order_utxos_by_block_or_txget_cancel_utxosget_axo_target
-
Ogmios/Kupo Backend: The Ogmios/Kupo backend also has limitations due to the nature of these services:
get_historical_order_utxosget_order_utxos_by_block_or_txget_cancel_utxos
These methods will raise a NotImplementedError when called using the BlockFrost or Ogmios/Kupo backends. If your application requires these functionalities, consider using the DBSync backend.
Usage
Retrieving Orders and Pool Data
To retrieve orders and pool data, first configure the global backend:
from charli3_dendrite.backend import set_backend, get_backend
from charli3_dendrite.backend.dbsync import DbsyncBackend
from charli3_dendrite.backend.blockfrost import BlockFrostBackend
from charli3_dendrite.backend.ogmios_kupo import OgmiosKupoBackend
from pycardano import Network
# Choose one of the following backends:
# set_backend(DbsyncBackend())
# set_backend(BlockFrostBackend("your-project-id"))
set_backend(OgmiosKupoBackend("ws://ogmios-url:port", "http://kupo-url:port", Network.MAINNET))
backend = get_backend()
The AbstractBackend interface offers methods for interacting with the Cardano blockchain, regardless of the underlying data source. This abstraction allows seamless switching between different backends without changing your application code.
To retrieve pool information, use the pool_selector method provided by each DEX's state class:
from charli3_dendrite import VyFiCPPState
selector = VyFiCPPState.pool_selector()
result = backend.get_pool_utxos(
limit=100000,
historical=False,
**selector.model_dump(),
)
To process and parse the retrieved results (list[PoolStateInfo]), the following approach can be utilized:
pool_data = {}
total_tvl = 0
for pool in result:
d = dex.model_validate(pool.model_dump())
try:
logger.info("Get TVL %s", d.tvl)
logger.info("Price %s", d.price)
logger.info("Token name of asset A: %s", d.unit_a)
logger.info("Token name of asset B: %s", d.unit_b)
except NoAssetsError:
pass
except InvalidLPError:
pass
except InvalidPoolError:
pass
except Exception as e:
logger.debug(f"{dex.__name__}: {e}")
This approach is applicable across all supported DEXs. For example, the following list of AbstractPoolState subclasses can be defined to support various DEX states:
DEXS: list[AbstractPoolState] = [
GeniusYieldOrderState,
MinswapCPPState,
MinswapV2CPPState,
MinswapDJEDiUSDStableState,
MinswapDJEDUSDCStableState,
MinswapDJEDUSDMStableState,
MuesliSwapCPPState,
SpectrumCPPState,
SundaeSwapCPPState,
SundaeSwapV3CPPState,
VyFiCPPState,
WingRidersCPPState,
WingRidersSSPState,
]
Development
To set up the development environment:
- Clone the repository
- Install dependencies:
poetry install - Set up pre-commit hooks:
pre-commit install
Running Tests
poetry run pytest --benchmark-disable -v --slow -n auto
Contributing
Contributions to Charli3 Dendrite are welcome! Please refer to the CONTRIBUTING.md file for guidelines on how to contribute to the project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file charli3_dendrite-1.4.3.tar.gz.
File metadata
- Download URL: charli3_dendrite-1.4.3.tar.gz
- Upload date:
- Size: 80.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bbe3acd7d53a20cad01664ed187d3537b38caeed899f3493d20c10d829f710f
|
|
| MD5 |
55f48518aadd843862bdbab05971e92f
|
|
| BLAKE2b-256 |
4c87ddba354a1e872e448372b8925838940ffb0923385b2cdc6943a7f9090fd2
|
File details
Details for the file charli3_dendrite-1.4.3-py3-none-any.whl.
File metadata
- Download URL: charli3_dendrite-1.4.3-py3-none-any.whl
- Upload date:
- Size: 100.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75c02c56f8e2706fed8f3a72679323e869c6f1c54686cefa8e63c479c3b0f6a4
|
|
| MD5 |
c9f333ede118f9b702f0aad91ad94fb2
|
|
| BLAKE2b-256 |
e2305d77e246fe0d4b22474aa337945b2ae304be81a190060f6df25a49649583
|